package itn.com.cmm.util; import javax.annotation.Resource; import org.springframework.stereotype.Component; import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; import itn.com.cmm.LoginVO; import itn.com.utl.fcc.service.EgovStringUtil; import itn.let.mjo.event.service.MjonEventVO; import itn.let.mjo.event.service.impl.MjonEventDAO; import itn.let.mjo.pay.service.MjonPayVO; import itn.let.mjo.pay.service.impl.MjonPayDAO; import itn.let.mjo.tax.service.TaxVO; import itn.let.mjo.tax.service.impl.TaxDAO; import itn.let.sym.grd.service.MberGrdService; import itn.let.sym.grd.service.MberGrdVO; import itn.let.uat.uia.service.impl.MberManageDAO; import itn.let.uss.umt.service.MberManageVO; @Component("mjonPayUtil") public class MjonPayUtil { @Resource(name="MjonEventDAO") private MjonEventDAO mjonEventDAO; @Resource(name="mberManageDAO") private MberManageDAO mberManageDAO; @Resource(name="mjonPayDAO") private MjonPayDAO mjonPayDAO; @Resource(name="taxDAO") private TaxDAO taxDAO; /* 등급제 */ @Resource(name = "mberGrdService") MberGrdService mberGrdService; /** * @param mjonPayVO * @throws Exception */ public void insertPayUtil(MjonPayVO mjonPayVO) throws Exception { if("anonymousUser".equals(EgovUserDetailsHelper.getAuthenticatedUser() )) { }else { // 기존 mjonPayVO의 userId 값에 moid 값이 들어가게 되어서 세션에서 아이디를 받아와서 다시 입력하도록 수정함 20220330 우영두 LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); String buyerName = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getName()); String email = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getEmail()); String mobile = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getMoblphonNo()); mjonPayVO.setUserId(userId); mjonPayVO.setFrstRegisterId(userId); mjonPayVO.setBuyerName(buyerName); mjonPayVO.setEmail(email); mjonPayVO.setPhone(mobile); mjonPayVO.setMobile(mobile); } //PG, PGTXT, CASH , 포인트 insert / 회원정보 캐시,포인트 update mjonPayDAO.insertMjPg(mjonPayVO); //세금계산서,현금영수증 자동발행 체크 / 자동발행 'N'이며 10만원 이상 결제시 현금영수증 의무발행 MberManageVO mberManageVO = mberManageDAO.selectMber(mjonPayVO.getUserId()); //멤버ID에서 유니크ID로 수정 필요 // 세금계산서 자동발행이고,카드결제가 아닐경우에만 자동발행 if(("B".equals(mberManageVO.getTaxbillAuto()) || "C".equals(mberManageVO.getTaxbillAuto())) && !"CARD".equals(mjonPayVO.getPayMethod())) { TaxVO taxVO = new TaxVO(); /*발행타입 1:소득공제 현금영수증 2:지출증빙 현금영수증 9:세금계산서*/ String rcptType; String regNo=""; if("B".equals(mberManageVO.getTaxbillAuto())) { //세금계산서 기업 자동발행 rcptType = "9"; taxVO.setTaxTrgt("B"); regNo = mberManageVO.getTaxBizNo(); //사업자등록번호 taxVO.setCompanyName(mberManageVO.getTaxBzNm());//회사명 taxVO.setRepName(mberManageVO.getTaxChrmNm());//대표자명 taxVO.setAddr(mberManageVO.getTaxAddr());//세금계산서 주소 }else if("C".equals(mberManageVO.getTaxbillAuto())) { //세금계산서 개인 자동발행 rcptType = "9"; taxVO.setTaxTrgt("C"); regNo = mberManageVO.getTaxCIhidNum(); // 세금계산서 개인 주민등록번호 taxVO.setRepName(mberManageVO.getTaxCNm()); //세금계산서 개인 성명 taxVO.setAddr(mberManageVO.getTaxCAddr()); //세금계산서 개인 주소 } else { //현금영수증 자동발행 rcptType = mberManageVO.getCashbillType(); } taxVO.setMoid(mjonPayVO.getMoid()); //주문ID taxVO.setRcptType(rcptType);//발행타입 /*발행번호 개인세금계산서:주민등록번호 / 기업세금계산서:사업자번호 / 소득공제현금영수증:휴대폰번호 / 지출증빙현금영수증:사업자번호*/ taxVO.setRegNo(regNo); taxVO.setEmail(mberManageVO.getTaxMngEmail());//담당자이메일 taxVO.setPhone(mberManageVO.getTaxMngPhoneNum());//담당자 휴대폰번호 taxVO.setConfirmYn("N"); //완료여부 taxVO.setFrstRegisterId(mberManageVO.getMberId()); // JSPark 2022.07.01 => 휴대폰결제는 MJ_TAX 테이블에 인서트 안함 if(!"CELLPHONE".equals(mjonPayVO.getPayMethod())) { taxDAO.insertCashBill(taxVO); } } //세금계산서 자동발행 설정이 아니면서, 결제금액이 10만원 이상인 경우 현금영수증 의무발행 데이터 등록 필요 if("N".equals(mberManageVO.getTaxbillAuto()) && Integer.parseInt(mjonPayVO.getAmt()) >= 100000 && !"CARD".equals(mjonPayVO.getPayMethod())) { //결제금액이 10만원 넘는 경우 : 현금영수증 의무발행 요청 등록 TaxVO taxVO = new TaxVO(); taxVO.setRcptType("3");//발행타입 : 3, 의무발행 taxVO.setMoid(mjonPayVO.getMoid()); taxVO.setRegNo("0100001234"); //의무발행번호 taxVO.setEmail(mberManageVO.getTaxMngEmail());//담당자이메일 taxVO.setPhone(mberManageVO.getTaxMngPhoneNum());//담당자 휴대폰번호 taxVO.setConfirmYn("N"); //완료여부 taxVO.setFrstRegisterId(mberManageVO.getMberId()); // JSPark 2022.07.01 => 휴대폰결제는 MJ_TAX 테이블에 인서트 안함 if(!"CELLPHONE".equals(mjonPayVO.getPayMethod())) { taxDAO.insertCashBill(taxVO); } } //CASH 테이블 mjonPayDAO.insertCash(mjonPayVO); //회원정보 CASH 업데이트 mjonPayDAO.updateMemberCash(mjonPayVO); // 회원별 등급 적용 MberGrdVO mberGrdVO = new MberGrdVO(); mberGrdVO.setMberId(mjonPayVO.getUserId()); mberGrdVO.setAmt(mjonPayVO.getAmt()); mberGrdVO.setMoid(mjonPayVO.getMoid()); mberGrdService.mberGrdSaveByUser(mberGrdVO); } /** * 일반 포인트 등록 Utile * @param mjonPayVO * @throws Exception */ public void updatePointUtile(MjonPayVO mjonPayVO) throws Exception { mjonPayDAO.insertPoint(mjonPayVO); //POINT 테이블 mjonPayDAO.updateMemberPoint(mjonPayVO); //회원정보 업데이트 } /** * 첫 결제 이벤트 포인트 등록 Utile * @param mjonPayVO * @throws Exception */ public void updateFirstEventPointUtile(MjonPayVO mjonPayVO) throws Exception { /** * 이벤트 페이지에서 넘어온 경우에만 이벤트 결제로 취급 * 이벤트 대상자인 경우 이벤트 회원 정보에 결제 금액 및 이벤트 시작일/종료일, 상태값 변경 * * */ int payCash = (int) mjonPayVO.getCash(); int limitCash = 500000; //이벤트 참여 최대 금액 50만원으로 설정 //이벤트 대상자인 경우에는 포인트를 무조건 지급하지 않는다. //차후에 민원이 제가되면 해당 민원인만 관리자가 포인트를 별도 지급하도록 하기로 함. mjonPayVO.setPoint(0); mjonPayVO.setPointMemo("첫 결제 이벤트로 인한 포인트 미지급 0원으로 지급처리함."); mjonPayDAO.insertPoint(mjonPayVO); //POINT 테이블 mjonPayDAO.updateMemberPoint(mjonPayVO); //회원정보 업데이트 if(payCash >= limitCash) { //결제금액이 50만원을 넘었기 때문에 50만원만 이벤트 캐시로 충전한다. //포인트는 미지급 한다. payCash = 500000; } //이벤트 회원 테이블 정보 업데이트 int resultCnt = updateEventMberInfo(mjonPayVO, payCash); System.out.println(resultCnt); } /** * 첫 결제 이벤트 회원 테이블 정보 업데이트 * 이벤트 시작일, 종료일, 상태정보, 결제 금액, 잔여금액 등 정보 업데이트 * * */ public int updateEventMberInfo(MjonPayVO mjonPayVO, int payCash) throws Exception { int resultCnt = 0; try { //이벤트 회원 정보 업데이트 MjonEventVO updtEventVO = new MjonEventVO(); updtEventVO.setMberId(mjonPayVO.getUserId()); updtEventVO.setEventFrstCash(payCash); //결제 Cash(부가세 뺀 금액) updtEventVO.setEventRemainCash(payCash); //초기 금액을 결제 Cash(부가세 뺀 금액)로 설정 updtEventVO.setEventPgMoid(mjonPayVO.getMoid()); //결제 Moid 번호 /** * 이벤트 시작일 및 종료일 셋팅 * 현재일로 부터 2개월 설정 * DB -> datetime * * */ String nowDate = MJUtil.getRealTime(); String eventEndDate = MJUtil.getAfterTimerMonth(2); updtEventVO.setEventStartDate(nowDate);//이벤트 시작일자 설정 updtEventVO.setEventEndDate(eventEndDate);//이벤트 종료일자 설정 updtEventVO.setEventStatus("Y");//이벤트 상태를 진행 중으로 변경 resultCnt = mjonEventDAO.updateEventMberStatusInfo(updtEventVO); } catch (Exception e) { System.out.println("+++++++++++++ updateEventMberInfo ServiceImple Error !!! "+e); } return resultCnt; } }