팀프로젝트가 끝나고 되돌아보는 시간 (2)
LOCAL DATA API를 이용하여 일반 회원이 사업자 회원으로 이용하기 위한 판매허가번호 인증 구현
프로젝트 삼삼하개는 타사이트와 다르게 제도적인 부분을 보완한 분양중개사이트입니다.
그 핵심으로 LOCAL DATA에서 제공하는 판매허가인증을 받은 사업자 목록 데이터를 이용하여 삼삼하개에 가입하여 상업적 분양활동을 하는 모든 이들은 판매허가번호를 인증하여야 되도록 설계하였습니다
( PROCESS : 판매허가번호 인증 > 사업자 회원으로 전환 > 분양게시글 작성 가능)
로컬데이터에서는 api로는 전체 자료를 다운로드 받을수가 없어 다운로드일 기준 전체자료를 다운받고,
open api를 이용하여 변동분을 적용하려하였으나,
프로젝트 진행당시에 윈도우 스케줄러의 존재를 몰라 open api 코드는 작성하지 않았습니다만,
다중 ajax를 이용하여 변동분 데이터를 호출받고, 데이터값을 DB에 저장하는 방법을 이용하면 될 것 같습니다.
데이터 다운로드 후 SQL*Loader 를 사용하여 Oracle에 대량 업로드했습니다.
그래서 CSV만 다운 받으면 되지만 테스트용 값을 추출하기 위해 excel도 다운받아서 사용했습니다.
SQL*Loader 사용법은 아래 두 블로그를 참고하였습니다.
feeva.github.io/posts/db%EB%B3%84-csv-%ED%8C%8C%EC%9D%BC-%EB%A1%9C%EB%94%A9-%EB%B0%A9%EB%B2%95
myinfo_auth.jsp (판매허가번호 인증)
<form class="content" name="content" action="pre_auth.me" method="post" enctype="multipart/form-data">
<div class="textbox">
<label>사업장명</label><input id="biz_com" name="biz_com" type="text">
</div>
<div class="textbox" name="button_1">
<label>관리번호</label> <input id="biz_no" name="biz_no" type="text">
<input type="button" class="check" value="확인">
</div>
<div class="error"></div>
<div class="textbox preview-image" name="button_1">
<label>허가증</label>
<input class="upload-name" name="biz_img" value="파일선택" disabled="disabled">
<label for="ex_filename">첨부</label> <input type="file" id="ex_filename" name="file" accept="image/*" class="upload-hidden">
</div>
<br>
<input class="auth" type="button" value="인증하기" onclick="javascript : formsubmit()" >
<h6>* 인증완료까지 최대 3영업일이 소요될수 있습니다.</h6>
</form>
myinfo_auth.js
$(document).ready(function() {
$(".check").click(function(event) { //정적데이터는 이벤트 처리를 바로 가능하나 동적이면 on을 사용하여 처리
var biz_no = $('#biz_no').val();
var biz_com= $('#biz_com').val();
console.log($('#biz_no').val());
jQuery.ajax({ // $.ajax 와 동일한 표현
url : '/samsam/biz_check.do',
type : 'POST',
data : {"biz_no" : biz_no,
"biz_com" : biz_com }, //서버로 보낼 데이터
/* (참고) 파일 첨부시 필요함
- cache : false 로 선언시 ajax로통신 중 cache가 남아서 갱신된 데이터를 받아오지 못할 경우를 대비
- contentType : false 로 선언시 content-Type 헤더가 multipart/form-data로 전송되게 함
- processData : false로 선언시 formData를 string으로 변환하지 않음
*/
dataType : 'json', //서버에서 보내줄 데이터 타입
contentType : 'application/x-www-form-urlencoded;charset=utf-8',
success : function(result) {
$('.error').text("")
if(result.res == "OK"){
$('.error').html("허가증을 업로드하고 인증하기를 클릭하세요")
}
else if (result.res == "dont") {
swal("","이미 등록된 판매허가번호입니다. 다시 확인해주세요.","error");
} else {
console.log(result.res);
console.log("업데이트 실패!!");
$('.error').text("관리번호를 다시 확인해주세요")
}
},
error : function() {
alert("ajax 통신 실패!!!");
}
});
//기본 이벤트 제거
event.preventDefault();
});
});
function formsubmit(){
if($("#biz_com").val() != "" && $("#biz_no").val() != "" && $("#ex_filename").val() !=""){
if($(".error").text() =="허가증을 업로드하고 인증하기를 클릭하세요"){
content.submit();
}
else{
console.log($("#biz_com").val() + "biz_no :" + $("#biz_no").val() + "file : "+ $("#ex_filename").val())
console.log($(".error").text())
swal("","모든 항목을 입력해주세요.","info");
}
}else{
swal("","모든 항목을 입력해주세요.","info");
}
}
사업자명과 판매허가번호가 일치할 경우, 불일치할 경우, 이미 사업자회원인 판매허가번호를 입력했을 경우
경우의 수에 맞게 에러메시지가 출력되거나 sweet aleart이 팝업됩니다.
인증하기 버튼을 클릭하고도 모든항목을 입력하지 않았을 경우에도 aleart이 팝업됩니다.
Controller ( /biz_check.do : 사업장명과 사업자번호가 일치하는지 확인, /pre_auth.me : 전달된 데이터값 DB에 저장 )
@RequestMapping(value = "/biz_check.do", produces="application/json; charset=UTF-8")
@ResponseBody
public Map<String, String> biz_check(Biz_memberVO bo) {
Map<String, String> result = new HashMap<String, String>();
System.out.println("biz no : "+ bo.getBiz_no());
int res = 0;
try {
Biz_memberVO biz_com1 = memberSV.check_auth(bo);
String biz_com = bo.getBiz_com();
if(biz_com1.getBiz_name().equals(biz_com)) {
System.out.println("biz_com : "+ biz_com1 + "입력한사업장 :"+bo.getBiz_com());
res = memberSV.selectBiz_no(bo.getBiz_no());
if(res == 0) {
result.put("res", "OK");
}else {
result.put("res", "dont");
}
}
else {
result.put("res", "dont");
}
}catch(Exception e) {
System.out.println("biz_check error : " + e.getMessage());
result.put("res", "FAIL");
result.put("message", "Failure");
}
return result;
}
@RequestMapping("/pre_auth.me")
public String pre_auth(Biz_memberVO bo, HttpSession session) throws Exception {
try {
MultipartFile mf = bo.getFile();
Biz_memberVO biz = new Biz_memberVO();
biz.setBiz_com(bo.getBiz_com());
biz.setBiz_no(bo.getBiz_no());
biz.setBiz_email((String)session.getAttribute("email"));
MemberVO vo = memberSV.selectMember(biz.getBiz_email());
String uploadPath = "C:\\Project\\upload\\";
if(mf.getSize() != 0) {
String originalFileExtension = mf.getOriginalFilename().substring(mf.getOriginalFilename().lastIndexOf("."));
String storedFileName = UUID.randomUUID().toString().replaceAll("-", "") + originalFileExtension;
//mf.transferTo(new File(uploadPath+"/"+mf.getOriginalFilename()));
mf.transferTo(new File(uploadPath + mf.getOriginalFilename())); // transferTo
biz.setBiz_img(mf.getOriginalFilename());
biz.setBiz_add(vo.getLocal());
biz.setBiz_name(vo.getName());
biz.setStatus(1);
int result = memberSV.pre_insertBiz(biz);
int res = memberSV.pre_updateBiz(biz.getBiz_email());
if(result == 1) {
return "YM/myinfo_already";
}else {
return "YM/myinfo_auth";
}
}else {
System.out.println("pre_auth error");
return "YM/myinfo_auth";
}
}catch(Exception e) {
System.out.println("pre_auth error:" + e.getMessage());
return "YM/myinfo_auth";
}
}
Mapper (Mybatis)
<!-- 판매허가인증 확인 -->
<select id ="check_auth" parameterType="Biz_memberVO" resultType="Biz_memberVO">
select biz_name from fulldata_animal where auth_no=#{biz_no} and status_no = '01'
</select>
<!-- 사업자회원 등록확인(관리번호) -->
<select id="selectBiz_no" parameterType="String" resultType="int">
select count(*) from biz_member where biz_no = #{biz_no}
</select>
<!-- 회원정보조회 -->
<select id="selectMember" parameterType="String" resultType="MemberVO">
select * from member_list where email = #{email}
</select>
<!-- 사업자회원 추가(상태대기) -->
<insert id ="pre_insertBiz" parameterType="Biz_memberVO">
insert into biz_member(biz_email, biz_no, biz_com, biz_name, biz_add, biz_img)
values(#{biz_email},#{biz_no}, #{biz_com}, #{biz_name}, #{biz_add}, #{biz_img})
</insert>
<update id ="pre_updateBiz" parameterType="String">
update member_list set grade = '대기' where email = #{email}
</update>
'Devme > Project' 카테고리의 다른 글
JAVA / SPRING 프로젝트 삼삼하개(5) CHART.JS를 통해 데이터정보 시각화 (2) | 2021.03.02 |
---|---|
JAVA / SPRING 프로젝트 삼삼하개(4) 간편결제 API를 이용하여 결제/환불 기능 구현 (4) | 2021.03.02 |
JAVA / SPRING 프로젝트 삼삼하개(3) 마이페이지(개인/업체) 내 작성글, 작성댓글 조회 구현 (0) | 2021.03.02 |
JAVA / SPRING 프로젝트 삼삼하개(1) 이메일 인증으로 비밀번호찾기 (2) | 2021.02.26 |