728x90
public String signInsertToXml(@ModelAttribute("searchVO") UserVO vo,Model model, HttpServletRequest request) throws Exception {
logger.info("CALL /signInsertToXml.do");
//xml생성
String base64Code = "";
// 현재 시간
String currentTime = DateUtil.getCurrentDateTime();
String signKeyNm="";
String xmlNm = "_sign_".concat(currentTime);
//XML 파일 경로
String SRC = "";
//firstPdf + 이미지 합쳐진 최종 pdf파일
UserMembershipVO resultList = new UserMembershipVO();
String message = "";
String returnUrl = "/sign.do";
String storePathString = "";
try {
//계약서에 입력될 회원정보 select
UserMembershipVO mVO = new UserMembershipVO();
mVO.setSignKey(vo.getSignKey());
mVO.setSign(vo.getSign());
mVO.setMembershipNo(vo.getMembershipNo());
resultList = signService.selectPdfSignInfo(mVO); //membershipNo , signKey
if(null != resultList && "S3".equals(resultList.getStep())) {
message = "이미 서명한 계약서입니다.";
model.addAttribute("message", message);
return "reservation/sign/result";
}
vo.setStep("S3"); // 서명완료
// 사인 이미지 base64 insert (USER_INFO_MEMBERSHIP_SIGN)
int resultCnt = signService.signInsert(vo);
logger.info("resultCnt={}",resultCnt);
if (resultCnt == 1) {
message = "서명 완료되었습니다.";
// 사인 완료된 계약서 xml로 저장
String signType = resultList.getSignType();
logger.info("signType={}", signType);
String signYear = resultList.getSignYear();
String signMonth = resultList.getSignMonth();
String signDay = resultList.getSignDay();
String payYear = "";
String payMonth = "";
String payDay= "";
if(signType.equals("TYPE2")) {
vo.setOrderId(resultList.getOrderId());
UserVO orderMasterResult = signService.orderMasterResult(vo); //orderId
// 회원권정보
List<UserVO> orderDetailList = signService.orderDetailList(vo);
String memberTicket = "";
for (UserVO orderDetail : orderDetailList) {
memberTicket += orderDetail.getCategoryNm() + " ";
memberTicket += orderDetail.getTicketNm() + " ";
memberTicket += orderDetail.getStartDate() + " ~ ";
memberTicket += orderDetail.getEndDate() + "";
}
logger.info("memberTicket={}", memberTicket);
String payMentDay = orderMasterResult.getPaymentDate(); // "1999-01-01"과 같은 형식의 문자열
payMentDay = payMentDay.replace("-", ""); // "19990101"
payYear = payMentDay.substring(0, 4); // 연도 추출 (0부터 4까지의 문자열)
payMonth = payMentDay.substring(4, 6); // 월 추출 (4부터 6까지의 문자열)
payDay = payMentDay.substring(6); // 일 추출 (6부터 끝까지의 문자열)
}
// groupId 로 Code조회
GroupVO gvo = new GroupVO();
gvo.setGroupId(vo.getGroupId());
GroupVO groupInfo = groupService.selectInfo(gvo);
String groupNm = groupInfo.getGroupNm();
logger.info("groupNm={}",groupNm);
// 회원권정보
Map reservationMap = signService.selectOrderInfo(vo);
List<Map> itemList = (List) reservationMap.get("select_item_info_list");
logger.info("itemList={}", itemList);
//파일저장경로 fileStorePath = file.upload-dir =/home/reservation/uploads/
signKeyNm = vo.getSignKey();
logger.info("signKeyNm={}", signKeyNm);
// XML 파일 이름
// 파일이 저장될 폴더경로
storePathString = groupInfo.getGroupCode() + "/" +signType;
logger.info("storePathString={}",storePathString);
SRC = fileStorePath + storePathString+"/"+xmlNm+".xml";
logger.info("SRC = {}",SRC);
File saveFolder = new File(WebUtil.filePathBlackList(fileStorePath + storePathString));
if (!saveFolder.exists() || saveFolder.isFile()) {
logger.info("saveFolder create");
saveFolder.mkdirs();
}
File signFile = new File(WebUtil.filePathBlackList(SRC));
if (signFile.exists()) {
logger.info("################## SLEEP #################");
Thread.sleep(3);
}
String gender = "";
if(resultList.getMemberGender().equals("W")) {
gender = "여";
}else if(resultList.getMemberGender().equals("M")) {
gender = "남";
}
logger.info("MemberGender={}", resultList.getMemberGender());
logger.info("gender={}", gender);
base64Code = vo.getSign();
logger.info("base64Code={}", base64Code);
String memberBirthday = resultList.getMemberBirthday(); // "19990101"과 같은 형식의 문자열
String birthYear = memberBirthday.substring(0, 4); // 연도 추출 (0부터 4까지의 문자열)
String birthMonth = memberBirthday.substring(4, 6); // 월 추출 (4부터 6까지의 문자열)
String birthDay = memberBirthday.substring(6); // 일 추출 (6부터 끝까지의 문자열)
// XML 파일 작성
StringBuilder xmlBuilder = new StringBuilder();
xmlBuilder.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
xmlBuilder.append("<?xml-stylesheet type=\"text/xsl\" href=\"./employeesfo.xsl\"?>\n");
xmlBuilder.append("<root xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:dcterms=\"http://purl.org/dc/terms/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"bx_Dublin.xsd\" >\n");
xmlBuilder.append("<contents>\n");
xmlBuilder.append("<userInfo>\n");
xmlBuilder.append("<userName>").append(resultList.getMemberName()).append("</userName>\n");
xmlBuilder.append("<phoneNumber>").append(resultList.getMemberTel()).append("</phoneNumber>\n");
xmlBuilder.append("<sex>").append(gender).append("</sex>\n");
xmlBuilder.append("<birth>\n");
xmlBuilder.append("<year>").append(birthYear).append("</year>\n");
xmlBuilder.append("<month>").append(birthMonth).append("</month>\n");
xmlBuilder.append("<day>").append(birthDay).append("</day>\n");
xmlBuilder.append("</birth>\n");
xmlBuilder.append("</userInfo>\n");
if(signType.equals("TYPE1")) { //TYPE1 : 회원가입 신청서
for (Map item : itemList) {
xmlBuilder.append("<sign>\n");
xmlBuilder.append("<signDate>\n");
xmlBuilder.append("<year>").append(signYear).append("</year>\n");
xmlBuilder.append("<month>").append(signMonth).append("</month>\n");
xmlBuilder.append("<day>").append(signDay).append("</day>\n");
xmlBuilder.append("</signDate>\n");
xmlBuilder.append("<userSign>").append(base64Code).append("</userSign>\n");
// 회원 서명 이미지 (base64 인코딩된 서명 이미지 포함하지 않음)
xmlBuilder.append("</sign>\n");
xmlBuilder.append("</contents>\n");
xmlBuilder.append("</root>\n");
}
}else if(signType.equals("TYPE2")) {//TYPE2 : 회원권 구매 후 서명받는 서류
xmlBuilder.append("<membershipInfo>\n");
xmlBuilder.append("<payDate>\n");
xmlBuilder.append("<year>").append(payYear).append("</year>\n");
xmlBuilder.append("<month>").append(payMonth).append("</month>\n");
xmlBuilder.append("<day>").append(payDay).append("</day>\n");
xmlBuilder.append("</payDate>\n");
xmlBuilder.append("<payType>").append("신규/재등록").append("</payType>\n");
for (Map item : itemList) {
Map map = (Map) item.get("item_ticket_info");
String pageNm = SF_StringUtil.isNullToString(item.get("page_nm"));
String categoryNm = SF_StringUtil.isNullToString(item.get("category_nm"));
String itemNm = SF_StringUtil.isNullToString(item.get("item_nm"));
String ticketNm = SF_StringUtil.isNullToString(map.get("ticket_nm"));
String startDate = "";
String endDate = "";
String lessonYn = SF_StringUtil.isNullToString(map.get("lesson_yn"));
if (lessonYn.equals("Y")) {
Map lessonMap = (Map) item.get("lesson_info");
startDate = SF_StringUtil.isNullToString(lessonMap.get("lesson_start_date"));
endDate = SF_StringUtil.isNullToString(lessonMap.get("lesson_end_date"));
} else {
startDate = SF_StringUtil.isNullToString(item.get("start_date"));
endDate = SF_StringUtil.isNullToString(item.get("end_date"));
}
xmlBuilder.append("<membership>").append(ticketNm).append("</membership>\n");
xmlBuilder.append("<locker>").append("").append("</locker>\n");
xmlBuilder.append("<memo>").append(reservationMap.get("memo")).append("</memo>\n");
xmlBuilder.append("</membershipInfo>\n");
xmlBuilder.append("<priceInfo>\n");
DecimalFormat formatter = new DecimalFormat("###,###,###,###");
String totalPrice = formatter.format(SF_Utils.convertInteger(resultList.getTotalPrice()));
xmlBuilder.append("<total>").append(totalPrice).append("</total>\n");
xmlBuilder.append("</priceInfo>\n");
xmlBuilder.append("<sign>\n");
xmlBuilder.append("<signDate>\n");
xmlBuilder.append("<year>").append(signYear).append("</year>\n");
xmlBuilder.append("<month>").append(signMonth).append("</month>\n");
xmlBuilder.append("<day>").append(signDay).append("</day>\n");
xmlBuilder.append("</signDate>\n");
xmlBuilder.append("<userSign>").append(base64Code).append("</userSign>\n");
// 회원 서명 이미지 (base64 인코딩된 서명 이미지 포함하지 않음)
xmlBuilder.append("</sign>\n");
xmlBuilder.append("</contents>\n");
xmlBuilder.append("</root>\n");
}
}
try (BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(SRC), "UTF-8"))) {
writer.write(xmlBuilder.toString());
}
System.out.printf("XML 파일이 성공적으로 생성되었습니다.");
} else {
message = "서명 실패하였습니다.";
}
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
model.addAttribute("message", message);
model.addAttribute("returnUrl", returnUrl);
return "reservation/sign/result";
}
728x90
'Java' 카테고리의 다른 글
[java] java로 xml 다운로드 (0) | 2024.07.01 |
---|---|
[java] pdf 생성 (0) | 2024.06.19 |
[java] xsl+xml 을 pdf파일로 변환하기 (0) | 2024.06.19 |
Java 타입 (0) | 2023.09.22 |
[Java] 객체지향언어 / 클래스, 객체, 인스턴스, 참조변수, 메서드 (0) | 2023.06.11 |