초기소스

This commit is contained in:
jazz
2025-10-29 17:08:05 +09:00
parent e531aa9540
commit 439a379a02
7551 changed files with 1234427 additions and 3 deletions

View File

@@ -0,0 +1,616 @@
package com.wb.domainserver.domain.admin.instcSle.mtng.controller;
import com.wb.domainserver.common.mvc.tags.ui.pagination.PaginationInfo;
import com.wb.domainserver.common.prop.PaginationProperties;
import com.wb.domainserver.domain.admin.instcSle.mtng.service.BOMaMtngService;
import com.wb.domainserver.domain.admin.instcSle.mtng.vo.BOInstcSleVO;
import com.wb.domainserver.domain.admin.instcSle.mtng.vo.BOMaMtngSrchVO;
import com.wb.domainserver.domain.admin.instcSle.mtng.vo.BOMaMtngVO;
import com.wb.domainserver.domain.admin.instcSle.mtng.vo.BOPreOrderValidVO;
import com.wb.domainserver.domain.admin.store.sopmal.service.BOMaSopmalService;
import com.wb.domainserver.domain.admin.sys.comncd.service.BOMaComncdService;
import com.wb.domainserver.domain.admin.sys.comncd.vo.BOMaComncdVO;
import com.wb.domainserver.domain.gcone.common.service.BOCommonService;
import com.wb.domainserver.domain.gcone.mbr.mbr.service.BOMbrService;
import com.wb.domainserver.domain.gcone.mbr.mbr.vo.BOMbrAppnVO;
import com.wb.domainserver.domain.gcone.mbr.mbr.vo.BOMbrVO;
import com.wb.domainserver.domain.gcone.ordr.ordr.service.BOOrdrService;
import com.wb.domainserver.exception.WnbtRestException;
import com.wb.domainserver.exception.code.PurchsValidCode;
import com.wb.domainserver.response.ApiResponse;
import com.wb.domainserver.security.authentication.AnonymousUser;
import com.wb.domainserver.security.authentication.MemberJwtContextHolder;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.communicate.SendToResrc;
import com.wb.domainserver.util.dataaccess.DataMap;
import com.wb.domainserver.util.string.StringUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.*;
import java.util.stream.Collectors;
/**
*
* 부정판매자 관리 BO controller
* @author 김혜인
* @since 2024-01-29
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2023-01-29 김혜인 최초 생성
*
* </pre>
*/
@Slf4j
@RestController
@RequestMapping("/admin/instcSle/mtng")
public class BOMaMtngController {
@Autowired
private BOMaMtngService service;
@Autowired
private BOMbrService bombrService;
@Autowired
private BOMaSopmalService maSopmalService;
@Autowired
private BOMaComncdService bOMaComncdService;
@Autowired
private BOCommonService boCommonService;
@Autowired
private SendToResrc sendToResrc;
@Autowired
private PaginationProperties paginationProperties;
@Autowired
private BOOrdrService boOrdrService;
/**
* 부정 판매 대상자 검색 폼 코드 조회
* @return ResponseEntity<?>
*/
@Policy(AuthPolicy.PUBLIC)
@PostMapping("/selectBOItcSleMtngListInqireForm")
public ResponseEntity<?> selectBOItcSleMtngListInqireForm(@RequestBody BOMaMtngSrchVO boMaMtngSrchVO) {
/*쇼핑몰*/
List<DataMap> brand = new ArrayList<>();
brand = maSopmalService.selectBOSopmalCdNm();
/*리셀러지정구분*/
BOMaComncdVO bOMaComncdVO = new BOMaComncdVO();
bOMaComncdVO.setGroupCd("RSLR_APPN_DV");
List<?> appen = bOMaComncdService.selectBOCommcdDetailList(bOMaComncdVO);
/*식별기준*/
bOMaComncdVO.setGroupCd("IDNTFC_STDR");
List<?> idntfcStdr = bOMaComncdService.selectBOCommcdDetailList(bOMaComncdVO);
Map<String, Object> resultMap = new HashMap<>();
//브랜드
resultMap.put("brand",brand);
/*리셀러지정구분*/
resultMap.put("appen",appen);
/*식별기준*/
resultMap.put("idntfcStdr",idntfcStdr);
resultMap.put("boMaMtngSrchVO",boMaMtngSrchVO);
return ApiResponse.of(resultMap).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 부정 판매 대상자 목록 조회
* @param boMaMtngSrchVO
* @return ResponseEntity<?>
*/
@Policy(AuthPolicy.PUBLIC)
@PostMapping(value = "/selectBOItcSleMtngListInqire")
public ResponseEntity<?> selectBOItcSleMtngListInqire(@RequestBody BOMaMtngSrchVO boMaMtngSrchVO) {
//페이징 처리를 위한 pagination 객체 생성
PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(boMaMtngSrchVO.getPageIndex());
paginationInfo.setRecordCountPerPage(boMaMtngSrchVO.getPageUnit());
paginationInfo.setPageSize(paginationProperties.getPageSize());
boMaMtngSrchVO.setPaginationInfo(paginationInfo);
//페이징 처리를 위한 값 설정
boMaMtngSrchVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
boMaMtngSrchVO.setLastIndex(paginationInfo.getLastRecordIndex());
boMaMtngSrchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
//시크릿키 set
boMaMtngSrchVO.setSecretKey(boCommonService.selectSecretkey());
//부정 판매 대상자 목록 조회 결과 및 페이징정보 넣기
Map<String, Object> content = new HashMap<>();
content.put("paginationInfo", boMaMtngSrchVO.getPaginationInfo());
content.put("boMaMtngSrchVO",boMaMtngSrchVO);
content.put("resultMap", service.selectBOItcSleMtngListInqire(boMaMtngSrchVO));
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 부정 판매 대상자 상세 조회 (회원 정보)
* @param boMaMtngVO
* @return ResponseEntity<?>
*/
@Policy(AuthPolicy.PUBLIC)
@PostMapping(value = "/selectBOItcSleMtngDtlInqire")
public ResponseEntity<?> selectBOItcSleMtngDtlInqire(@RequestBody BOMaMtngVO boMaMtngVO) {
BOMbrVO mbrVO = new BOMbrVO();
DataMap resultData = new DataMap();
/*회원고유번호*/
mbrVO.setMbrInnb(boMaMtngVO.getIdntfcInfo());
/*회원구분코드*/
mbrVO.setMbrDvCd(boMaMtngVO.getMbrDvCd());
/*쇼핑몰코드*/
mbrVO.setSopmalCd(boMaMtngVO.getSopmalCd());
resultData = bombrService.selectBOMbrInfoUpdtInqire(mbrVO);
Map<String, Object> content = new HashMap<>();
content.put("mbrInfo", resultData);
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 부정 판매 대상자 상세 조회(주문 정보)
* @param BOMaMtngVO
* @return ResponseEntity<?>
*/
@Policy(AuthPolicy.PUBLIC)
@PostMapping(value = "/selectBOItcSleOrdrInfoInqire")
public ResponseEntity<?> selectBOItcSleOrdrInfoInqire(@RequestBody BOMaMtngVO boMaMtngVO) {
log.info("부정 판매 대상 param{} 주문 정보",boMaMtngVO.getIdntfcInfo());
log.info("부정 판매 대상 param{} 주문 정보",boMaMtngVO.getMbrDvCd());
Map<String, Object> content = new HashMap<>();
//페이징 처리를 위한 pagination 객체 생성
PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(boMaMtngVO.getPageIndex());
paginationInfo.setRecordCountPerPage(boMaMtngVO.getPageUnit());
paginationInfo.setPageSize(paginationProperties.getPageSize());
boMaMtngVO.setPaginationInfo(paginationInfo);
//페이징 처리를 위한 값 설정
boMaMtngVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
boMaMtngVO.setLastIndex(paginationInfo.getLastRecordIndex());
boMaMtngVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
List<DataMap> ordrInfo = new ArrayList<>();
ordrInfo = service.selectBOItcSleOrdrInfoInqire(boMaMtngVO);
//부정 판매 대상자 목록 조회 결과 및 페이징정보 넣기
content.put("paginationInfo", boMaMtngVO.getPaginationInfo());
content.put("boMaMtngVO", boMaMtngVO);
content.put("ordrInfo", ordrInfo);
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 부정 판매 대상자 상세 조회 (지정 이력 정보)
* @param BOMaMtngVO
* @return ResponseEntity<?>
*/
@Policy(AuthPolicy.PUBLIC)
@PostMapping(value = "/selectBOItcSleHistInfoInqire")
public ResponseEntity<?> selectBOItcSleHistInfoInqire(@RequestBody BOMaMtngVO boMaMtngVO) {
log.debug("부정 판매 대상 지정 이력 정보 param{}",boMaMtngVO.getAppnInnb());
Map<String, Object> content = new HashMap<>();
//페이징 처리를 위한 pagination 객체 생성
PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(boMaMtngVO.getPageIndex());
paginationInfo.setRecordCountPerPage(boMaMtngVO.getPageUnit());
paginationInfo.setPageSize(paginationProperties.getPageSize());
boMaMtngVO.setPaginationInfo(paginationInfo);
//페이징 처리를 위한 값 설정
boMaMtngVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
boMaMtngVO.setLastIndex(paginationInfo.getLastRecordIndex());
boMaMtngVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
//부정 판매 대상자 목록 조회 결과 및 페이징정보 넣기
content.put("paginationInfo", boMaMtngVO.getPaginationInfo());
content.put("histInfo", service.selectBOItcSleHistInfoInqire(boMaMtngVO));
content.put("boMaMtngVO", boMaMtngVO);
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 블랙리스트체크 + 구매 전 요청된 구매정보에 따른 구매가능여부 재확인
* @param param
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectBOBlclist")
public ResponseEntity<?> selectBlclist(@RequestBody DataMap param) {
Map<String, Object> content = new HashMap<>();
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
String temp = user.getSopmalCd();
param.put("sopmalCd", temp);
LinkedHashMap purchsr = (LinkedHashMap) param.get("purchsr"); // 구매자 정보
LinkedHashMap<String, Object> shipping = (LinkedHashMap) param.get("shipping"); // 배송지 정보
LinkedHashMap<String, Object> multiOrdrDlvylc = (LinkedHashMap) param.get("multiOrdrDlvylc"); // 주문배송정보 (여러곳 배송)
// 결제 예정 금액 계산시 배송정보를 'dlvylc' 객체를 사용
param.put("dlvylc", shipping);
List<LinkedHashMap> goodsList = (List<LinkedHashMap>) param.get("goodsList"); // 상품정보
LinkedHashMap enuri = null;
LinkedHashMap setle = null;
//회원일 경우에만 enuri정보 존재
if(user.getUserInnb() > 0){
enuri = (LinkedHashMap) param.get("enuri"); //할인정보
setle = (LinkedHashMap) param.get("setle"); //결제정보
}else{
//비회원일 경우 enuri 없고 setle만 존재
enuri = (LinkedHashMap) param.get("setle"); //결제정보
setle = (LinkedHashMap) param.get("setle"); //결제정보
}
if (CollectionUtils.isEmpty(purchsr)) {
log.info("구매자 정보를 찾을 수 없습니다.");
content.put("result","Y");
content.put("message", "구매자 정보를 찾을 수 없습니다.");
// throw new WnbtRestException("구매자 정보를 찾을 수 없습니다.");
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
if ("05".equals(param.get("ordrTyCd"))) {
if (CollectionUtils.isEmpty(multiOrdrDlvylc)) {
log.info("배송지 정보를 찾을 수 없습니다.");
content.put("result","Y");
content.put("message", "배송지 정보를 찾을 수 없습니다.");
// throw new WnbtRestException("주문유형 정보를 찾을 수 없습니다.");
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
} else {
if (CollectionUtils.isEmpty(shipping)) {
log.info("배송지 정보를 찾을 수 없습니다.");
content.put("result","Y");
content.put("message", "배송지 정보를 찾을 수 없습니다.");
// throw new WnbtRestException("주문유형 정보를 찾을 수 없습니다.");
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
}
if (CollectionUtils.isEmpty(goodsList)) {
log.info("상품 정보를 찾을 수 없습니다.");
content.put("result","Y");
content.put("message", "상품 정보를 찾을 수 없습니다.");
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
if (CollectionUtils.isEmpty(enuri)) {
log.info("할인 또는 결제 정보를 찾을 수 없습니다.");
content.put("result","Y");
content.put("message", "할인 또는 결제 정보를 찾을 수 없습니다.");
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
String sopmalCd = (String) param.get("sopmalCd");
String ordrTyCd = (String) param.get("ordrTyCd");
String mbrInnb = (String) goodsList.get(0).get("mbrInnb");
String mbrDvCd = (String) goodsList.get(0).get("mbrDvCd");
String ordrrMbtlnb = (String) purchsr.get("mbtlnb");
String adres = "";
String[] adresArray = null; // 배송지별 배송지 주소
String[] receptMbtlnbArray = null; // 배송지 받는이 휴대폰번호
if ("01".equals(ordrTyCd) || "03".equals(ordrTyCd) || "06".equals(ordrTyCd)) { // 일반주문, 회원개인결제, 정기배송
if (
StringUtil.isEmpty((String) shipping.get("dlvylcZip")) ||
StringUtil.isEmpty((String) shipping.get("dlvylcAdresDvCd")) ||
( "01".equals(shipping.get("dlvylcAdresDvCd")) && StringUtil.isEmpty((String) shipping.get("dlvylcRnmAdres")) ) ||
( "02".equals(shipping.get("dlvylcAdresDvCd")) && StringUtil.isEmpty((String) shipping.get("dlvylcLnbAdres")) ) ||
StringUtil.isEmpty((String) shipping.get("dlvylcAdresDtl"))
) {
content.put("result","Y");
content.put("message", "배송지 정보를 찾을 수 없습니다. 다시 시도해 주세요.");
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
String dlvylcAdresDvCd = (String) shipping.get("dlvylcAdresDvCd");
String dlvylcLnbAdres = (String) shipping.get("dlvylcLnbAdres");
String dlvylcRnmAdres = (String) shipping.get("dlvylcRnmAdres");
String dlvylcAdresDtl = (String) shipping.get("dlvylcAdresDtl");
adres = "01".equals(dlvylcAdresDvCd) ? dlvylcRnmAdres + " " + dlvylcAdresDtl : dlvylcLnbAdres + " " + dlvylcAdresDtl;
String recpntMbtlnb = StringUtil.isNullToString(shipping.get("recpntMbtlnb"));
receptMbtlnbArray = new String[]{recpntMbtlnb};
} else if ("05".equals(ordrTyCd)) { // 여러곳 배송
if (!CollectionUtils.isEmpty(multiOrdrDlvylc)) {
// 배송지 리스트
List<LinkedHashMap<String, Object>> dlvylcListMulti = (List<LinkedHashMap<String, Object>>) multiOrdrDlvylc.get("dlvylc");
/** ----------------------------------------------- 배송지별 주문 상품 수량 검사 START ----------------------------------------------- */
content = checkDistributedQyMatchesOrder(goodsList, dlvylcListMulti);
if (!"0".equals(content.get("status"))) {
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/** ----------------------------------------------- 배송지별 주문 상품 수량 검사 END ----------------------------------------------- */
// 부정판매 체크를 위한 배송지 정렬
if (!CollectionUtils.isEmpty(dlvylcListMulti)) {
boolean hasInvalidAddress = dlvylcListMulti.stream().anyMatch(map -> {
String dlvylcZip = StringUtil.isNullToString(map.get("dlvylcZip"));
String adresDvCd = StringUtil.isNullToString(map.get("dlvylcAdresDvCd"));
String dlvylcLnbAdres = StringUtil.isNullToString(map.get("dlvylcLnbAdres"));
String dlvylcRnmAdres = StringUtil.isNullToString(map.get("dlvylcRnmAdres"));
String adresDtl = StringUtil.isNullToString(map.get("dlvylcAdresDtl"));
return StringUtil.isEmpty(dlvylcZip)
|| StringUtil.isEmpty(adresDvCd)
|| ("01".equals(adresDvCd) && StringUtil.isEmpty(dlvylcRnmAdres))
|| ("02".equals(adresDvCd) && StringUtil.isEmpty(dlvylcLnbAdres))
|| StringUtil.isEmpty(adresDtl);
});
if (hasInvalidAddress) {
content.put("result","Y");
content.put("message", "배송지 정보를 찾을 수 없습니다. 다시 시도해 주세요.");
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
List<String> adresList = dlvylcListMulti.stream()
.map(map -> {
String adresDvCd = StringUtil.isNullToString(map.get("dlvylcAdresDvCd"));
String adresDtl = StringUtil.isNullToString(map.get("dlvylcAdresDtl"));
String dlvylcLnbAdres = StringUtil.isNullToString(map.get("dlvylcLnbAdres"));
String dlvylcRnmAdres = StringUtil.isNullToString(map.get("dlvylcRnmAdres"));
String adresMulti;
if ("01".equals(adresDvCd)) {
adresMulti = dlvylcRnmAdres + " " + adresDtl;
} else {
adresMulti = dlvylcLnbAdres + " " + adresDtl;
}
return adresMulti;
})
.collect(Collectors.toList());
adresArray = adresList.toArray(new String[0]);
List<String> receptMbtlnbList = dlvylcListMulti.stream()
.map(map -> {
return StringUtil.isNullToString(map.get("recpntMbtlnb"));
})
.collect(Collectors.toList());
receptMbtlnbArray = receptMbtlnbList.toArray(new String[0]);
}
}
} else if ("04".equals(ordrTyCd)) { // 선물하기
if (
!StringUtil.isEmpty((String) shipping.get("dlvylcZip")) ||
!StringUtil.isEmpty((String) shipping.get("dlvylcAdresDvCd")) ||
!StringUtil.isEmpty((String) shipping.get("dlvylcLnbAdres")) ||
!StringUtil.isEmpty((String) shipping.get("dlvylcRnmAdres")) ||
!StringUtil.isEmpty((String) shipping.get("dlvylcAdresDtl"))
) {
content.put("result","Y");
content.put("message", "구매정보가 변경 되었습니다. 다시 시도해 주세요.");
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
}
BOInstcSleVO instcSleVO = new BOInstcSleVO();
String agentId = StringUtil.isNullToString(param.get("agentId"));
instcSleVO.setOrdrTyCd(ordrTyCd);
instcSleVO.setSopmalCd(sopmalCd);
instcSleVO.setMbrInnb(mbrInnb);
instcSleVO.setMbrDvCd(mbrDvCd);
instcSleVO.setOrdrrMbtlnb(ordrrMbtlnb);
instcSleVO.setOrdrrMbtlnb(ordrrMbtlnb);
instcSleVO.setAdres(adres);
instcSleVO.setAdresMulti(adresArray);
instcSleVO.setRecpntMbtlnbArr(receptMbtlnbArray);
instcSleVO.setAgentId(agentId);
instcSleVO.setAppnDvCd("02"); //02:블랙리스트
//블랙리스트 여부
content = service.checkInstcSle(instcSleVO);
//구매금액재계산 사용여부
String useAt = service.selectPurchsValidUseAt(sopmalCd);
if("Y".equals(useAt)){
//총금액 계산
try {
//계산결과 총결제금액
String resultSetleAmt = "";
//주문요청 총결제금액
//회원/비회원 총결제금액
String reqSetleAmt = StringUtil.isNullToString(setle.get("rlSetleAmt"));
//재계산된 총결제금액관련정보
Map<String, Object> resultAmt = boOrdrService.selectSetleExpectAmt(param);
if(resultAmt.containsKey("setleExpectAmt")){
LinkedHashMap setleExpectAmt = (LinkedHashMap) resultAmt.get("setleExpectAmt");
if(setleExpectAmt.containsKey("setleAmt")){
resultSetleAmt = StringUtil.isNullToString(setleExpectAmt.get("setleAmt"));
}
//주문요청의 총결제금액과 계산된 총결제금액이 서로 다를 경우
if(!resultSetleAmt.equals(reqSetleAmt)
&& StringUtils.hasText(reqSetleAmt)
&& StringUtils.hasText(resultSetleAmt)){
content.put("result", "Y");
content.put("message", PurchsValidCode.purchsValidMsg("setleAmt"));
}
}
} catch (WnbtRestException wre) {
log.error(wre.getMessage());
Map<String, String> wreExetption = new HashMap<>();
wreExetption.put("result", "Y");
wreExetption.put("message", wre.getMessage());
return ApiResponse.of(wreExetption).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
catch (Exception e) {
log.error(e.getMessage());
Map<String, String> exception = new HashMap<>();
exception.put("result", "Y");
exception.put("message", "예기치 못한 오류가 발생하였습니다.\n관리자에게 문의하시기 바랍니다.");
return ApiResponse.of(exception).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
//블랙리스트 여부 및 총금액 계산 통과시 주문정보 재확인
if("N".equals(content.get("result"))){
//주문 전 요청 주문 정보에 따른 현재 컨디션 재확인관련 데이터(vo) 전처리
List<BOPreOrderValidVO> validVOList = service.selectBOPreOrderValidationList(param);
//주문 전 사용 쿠폰 컨디션 재확인
content = service.selectBOPreOrderValidationCouponList(validVOList);
//사용 쿠폰 컨디션 통과시
if("N".equals(content.get("result"))) {
//주문 전 요청 주문 정보에 따른 현재 컨디션 재확인
content = service.selectBOPreOrderValidation(validVOList);
}
}
}
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 여러곳 배송 > 배송지별 상품 분배 수량 검증
* @param goodsList
* @param dlvylcListMulti
* @return
*/
public Map<String, Object> checkDistributedQyMatchesOrder(List<LinkedHashMap> goodsList, List<LinkedHashMap<String, Object>> dlvylcListMulti) {
Map<String, Object> content = new HashMap<>();
// (1) 주문 상품 기준: goodsOptnInnb별 총 주문 수량 계산
Map<Integer, Integer> requiredQuantityMap = goodsList.stream()
.collect(Collectors.groupingBy(
goods -> (Integer) goods.get("goodsOptnInnb"),
Collectors.summingInt(goods -> (Integer) goods.get("qy"))
));
log.debug("requiredQuantityMap : {}", requiredQuantityMap);
// (2) 배송지별 분배 수량 집계
Map<Integer, Integer> distributedQuantityMap = new HashMap<>();
if (!CollectionUtils.isEmpty(dlvylcListMulti)) {
for (LinkedHashMap<String, Object> dlvylcMapMulti : dlvylcListMulti) {
log.debug("dlvylcMapMulti : {}", dlvylcMapMulti);
// 배송지별 상품 목록
List<LinkedHashMap> goodsListMulti = (List<LinkedHashMap>) dlvylcMapMulti.get("goodsList");
for (LinkedHashMap goods : goodsListMulti) {
Integer goodsOptnInnb = (Integer) goods.get("goodsOptnInnb");
Integer ordrQy = (Integer) goods.get("qy");
distributedQuantityMap.merge(goodsOptnInnb, ordrQy, Integer::sum);
}
}
// (3) 상품별 분배 수량 검증
for (Map.Entry<Integer, Integer> entry : requiredQuantityMap.entrySet()) {
Integer goodsOptnInnb = entry.getKey();
int requiredQty = entry.getValue();
int distributedQty = distributedQuantityMap.getOrDefault(goodsOptnInnb, 0);
if (requiredQty != distributedQty) {
log.info("상품 [{}] 주문 수량: {}, 배송지 분배 수량: {} → 불일치", goodsOptnInnb, requiredQty, distributedQty);
content.put("status","1");
content.put("result","Y");
content.put("message", "배송지별 분배 수량이 맞지 않습니다.");
break;
} else {
content.put("status","0");
log.info("상품 [{}] 수량 검증 통과: {}", goodsOptnInnb, requiredQty);
}
}
}
return content;
};
/**
* 일반, 블랙리스트, 화이트리스트 변경.
* @param BOMbrAppnVO
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/updateBOMbrRslrList")
public ResponseEntity<?> updateBOMbrRslrList(@RequestBody BOMbrAppnVO boMbrAppnVO) {
log.info("updateBOMbrRslrList(boMbrAppnVO = {})", boMbrAppnVO.getAppnDvCd());
Map<String, Object> content = new HashMap<>();
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
// boMbrAppnVO.setRegusr(user.getUserInnb());
boMbrAppnVO.setUpdusr(user.getUserInnb());
log.info("getId = {}", user.getId());
log.info("getUserInnb = {}", user.getUserInnb());
log.info("getMbrId = {}", user.getMbrId());
// if(StringUtil.isEmpty(boMbrAppnVO.getSopmalCd())){
// boMbrAppnVO.setSopmalCd(user.getSopmalCd());
// }
String secretKey = boCommonService.selectSecretkey();
boMbrAppnVO.setSecretKey(secretKey);
content = service.updateBOMbrRslrList(boMbrAppnVO);
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
}

View File

@@ -0,0 +1,225 @@
package com.wb.domainserver.domain.admin.instcSle.mtng.controller;
import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.domain.admin.instcSle.mtng.vo.MaMtngSrchVO;
import com.wb.domainserver.domain.admin.instcSle.mtng.vo.MaMtngVO;
import com.wb.domainserver.exception.WnbtRestException;
import com.wb.domainserver.response.WnbtResponse;
import com.wb.domainserver.response.WnbtWebClientResponseHandler;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.communicate.RESRC;
import com.wb.domainserver.util.communicate.ReplyFromResrc;
import com.wb.domainserver.util.communicate.SendToResrc;
import com.wb.domainserver.util.excel.ExcelDownloadUtil;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import java.io.IOException;
import java.math.BigInteger;
import java.text.SimpleDateFormat;
import java.util.*;
/**
*
* 부정판매자 관리 controller
* @author 김혜인
* @since 2024-01-29
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2023-01-29 김혜인 최초 생성
*
* </pre>
*/
@Slf4j
@Controller
@RequestMapping("/admin/instcSle/mtng")
public class MaMtngController {
/** WebClient 호출을 위한 wrapper */
@Autowired
private WnbtWebClientResponseHandler responseHandler;
@Autowired
private SendToResrc sendToResrc;
/** 공통 메시지 처리를 위한 메시지 객체 */
@Autowired
private GconeMessageSource gconeMessageSource;
/**
* 부정판매 대상자 목록 조회
* @param maMtngSrchVO
* @param model
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping("/selectItcSleMtngListInqireForm")
public String selectItcSleMtngListInqireForm(ModelMap model,MaMtngSrchVO maMtngSrchVO) {
//BO에서 API 호출(부정 판매 대상자 검색 폼 코드 조회)
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/instcSle/mtng/selectBOItcSleMtngListInqireForm", maMtngSrchVO),
model,
"resultSrchMap"
);
return "admin/instcSle/mtng/MaItcSleMtngListInqireRForm";
}
/**
* 부정판매 대상자 목록 조회
* @param maMtngSrchVO
* @param model
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectItcSleMtngListInqire", method = RequestMethod.POST)
public String selectItcSleMtngListInqire(ModelMap model,MaMtngSrchVO maMtngSrchVO) {
//BO 회원 목록조회 API 호출
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/instcSle/mtng/selectBOItcSleMtngListInqire", maMtngSrchVO),
model,
"resultListMap"
);
model.addAttribute("mbrSrchVO", maMtngSrchVO);
return "admin/instcSle/mtng/MaItcSleMtngListInqireR";
}
/**
* 엑셀 다운로드
* @param MaMtngSrchVO
* @param response
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/selectItcSleMtngListExcelDwld" , method = RequestMethod.POST)
public void selectExcelList(MaMtngSrchVO maMtngSrchVO,HttpServletResponse response) {
maMtngSrchVO.setPageIndex(1); //10000건까지 엑셀 출력
maMtngSrchVO.setPageUnit(10000); //10000건까지 엑셀 출력
Map<String,Object> resultMap = responseHandler.handleResponseAsMap(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/instcSle/mtng/selectBOItcSleMtngListInqire",maMtngSrchVO)
);
List<Map<String, Object>> resultMapList = (List<Map<String, Object>>) resultMap.get("resultMap");
List<Map<String, Object>> dataList = new ArrayList<>();
//엑셀 다운로드 다운로드 시간
Date date = new Date();
SimpleDateFormat excelFormat = new SimpleDateFormat("yyyyMMddHHmmss");
String str = excelFormat.format(date);
try {
//엑셀 항목에 출력될 내용 설정
if (resultMapList != null) {
BigInteger num = BigInteger.valueOf(resultMapList.size());
for (int i = 0; i < resultMapList.size(); i++) {
Map<String, Object> row = resultMapList.get(i);
HashMap<String, Object> dataMap = new HashMap<>();
dataMap.put("rnum", num.subtract(BigInteger.valueOf(i))); //번호 역순 출력
dataMap.put("mbrId", row.get("mbrId"));
dataMap.put("mbrNm", row.get("mbrNm"));
dataMap.put("email", row.get("email"));
dataMap.put("mbtlnb", row.get("mbtlnb"));
dataMap.put("sopmalNm", row.get("sopmalNm"));
dataMap.put("appnDvCdNm", row.get("appnDvCdNm"));
dataMap.put("mbrGradNm", row.get("mbrGradNm"));
dataMap.put("mileage", row.get("mileage"));
dataMap.put("registDt", row.get("registDt"));
dataList.add(dataMap);
}
}
//엑셀 항목별 제목에 출력될 내용 설정
LinkedHashMap<String, String> headerMap = new LinkedHashMap<String, String>();
headerMap.put("rnum", "번호");
headerMap.put("mbrId", "아이디");
headerMap.put("mbrNm", "이름");
headerMap.put("email", "이메일");
headerMap.put("mbtlnb", "휴대폰번호");
headerMap.put("sopmalNm", "쇼핑몰");
headerMap.put("appnDvCdNm", "구분");
headerMap.put("mbrGradNm", "등급");
headerMap.put("mileage", "마일리지");
headerMap.put("registDt", "지정일");
ExcelDownloadUtil.createExcel("injustice_seller_list_" + str, headerMap, dataList, response);
} catch (IOException ioe) {
throw new WnbtRestException("엑셀다운로드 중 오류가 발생하였습니다.");
} catch (Exception e) {
log.error("엑셀다운로드 중 오류가 발생하였습니다.", e);
throw new WnbtRestException("엑셀다운로드 중 오류가 발생하였습니다.");
}
}
/**
* 부정판매 대상자 상세 조회
* @param MaMtngSrchVO
* @param model
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping("/selectItcSleMtngDtlInqire")
public String selectItcSleMtngDtlInqire(ModelMap model, MaMtngVO maMtngVO) {
log.info("부정판매 대상자 고유번호 확인 : {}", maMtngVO.getAppnInnb());
//BO 회원 목록조회 API 호출
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/instcSle/mtng/selectBOItcSleMtngDtlInqire", maMtngVO),
model,
"resultFO1"
);
model.addAttribute("maMtngSrchVO",maMtngVO);
return "admin/instcSle/mtng/MaItcSleMtngDtlInqireR";
}
/**
* 부정판매 대상자 상세 조회(주문 정보)
* @parmam maMtngVO
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping("/selectItcSleOrdrInfoInqire")
public String selectItcSleOrdrInfoInqire(ModelMap model, MaMtngVO maMtngVO) {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/instcSle/mtng/selectBOItcSleOrdrInfoInqire", maMtngVO),
model,
"resultFO2"
);
return "admin/instcSle/mtng/MaItcSleOrdrInfoInqireR";
}
/**
* 부정판매 대상자 상세 조회(이력 정보)
* @parmam maMtngVO
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping("/selectItcSleHistInfoInqire")
public String selectItcSleHistInfoInqire(ModelMap model, MaMtngVO maMtngVO) {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/instcSle/mtng/selectBOItcSleHistInfoInqire", maMtngVO),
model,
"resultFO3"
);
return "admin/instcSle/mtng/MaItcSleHistInfoInqireR";
}
/**
* 일반, 블랙리스트, 화이트리스트 변경.
* @parmam maMtngVO
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping("/updateMbrRslrList")
public ResponseEntity<WnbtResponse> updateMbrRslrList(ModelMap model, MaMtngVO maMtngVO) {
log.info("appnInnb is {}", maMtngVO.getAppnInnb());
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/instcSle/mtng/updateBOMbrRslrList", maMtngVO),
ReplyFromResrc::getReply
);
}
}

View File

@@ -0,0 +1,57 @@
package com.wb.domainserver.domain.admin.instcSle.mtng.mapper;
import com.wb.domainserver.domain.admin.instcSle.mtng.vo.BOInstcSleVO;
import com.wb.domainserver.domain.admin.instcSle.mtng.vo.BOMaMtngSrchVO;
import com.wb.domainserver.domain.admin.instcSle.mtng.vo.BOMaMtngVO;
import com.wb.domainserver.domain.admin.instcSle.mtng.vo.BOPreOrderValidVO;
import com.wb.domainserver.util.dataaccess.DataMap;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import java.util.LinkedHashMap;
import java.util.List;
/**
*
* 부정판매자 관리 BO mapper
* @author 김혜인
* @since 2024-01-29
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2023-01-29 김혜인 최초 생성
*
* </pre>
*/
@Mapper
@Repository
public interface BOMaMtngMapper {
/** 부정 판매 대상자 목록 조회 */
public List<DataMap> selectItcSleMtngList(BOMaMtngSrchVO vo);
/** 부정 판매 대상자 목록 건수 조회 */
public Integer selectItcSleMtngTotCnt(BOMaMtngSrchVO vo);
/** 부정 판매 대상자 지정 이력 건수*/
public Integer selectBOItcSleMtngDtlTotCnt(BOMaMtngVO vo);
/** 부정 판매 대상자 지정 이력 */
public List<DataMap> selectBOItcSleMtngDtlInqire(BOMaMtngVO vo);
/** 부정 판매 대상자 주문 내역 건수 */
Integer selectBOItcSleOrdrInfoTotCnt(BOMaMtngVO boMaMtngVO);
/** 부정 판매 대상자 주문 내역 목록 */
List<DataMap> selectBOItcSleOrdrInfoInqire(BOMaMtngVO boMaMtngVO);
/** 주문시 부정 판매 대상 조회*/
BOInstcSleVO checkInstcSle(BOInstcSleVO boInstcSleVO);
/** 주문 전 주문정보 재확인*/
public List<DataMap> selectBOPreOrderValidation(BOPreOrderValidVO goods);
/** 주문 전 쿠폰정보 재확인*/
public List<String> selectBOPreOrderValidationCouponList(BOPreOrderValidVO goods);
/*쇼핑몰 구매요청 재검증 확인 여부*/
public String selectPurchsValidUseAt(String sopmalCd);
}

View File

@@ -0,0 +1,554 @@
package com.wb.domainserver.domain.admin.instcSle.mtng.service;
import com.wb.domainserver.domain.admin.instcSle.mtng.mapper.BOMaMtngMapper;
import com.wb.domainserver.domain.admin.instcSle.mtng.vo.BOInstcSleVO;
import com.wb.domainserver.domain.admin.instcSle.mtng.vo.BOMaMtngSrchVO;
import com.wb.domainserver.domain.admin.instcSle.mtng.vo.BOMaMtngVO;
import com.wb.domainserver.domain.admin.instcSle.mtng.vo.BOPreOrderValidVO;
import com.wb.domainserver.domain.gcone.common.service.BOCommonService;
import com.wb.domainserver.domain.gcone.goods.goods.service.BOGoodsService;
import com.wb.domainserver.domain.gcone.mbr.mbr.mapper.BOMbrMapper;
import com.wb.domainserver.domain.gcone.mbr.mbr.vo.BOMbrAppnVO;
import com.wb.domainserver.domain.gcone.mbr.mlg.service.BOMlgService;
import com.wb.domainserver.domain.gcone.mbr.mlg.vo.BOCashVO;
import com.wb.domainserver.domain.gcone.mbr.mlg.vo.BOMlgSrchVO;
import com.wb.domainserver.domain.gcone.ordr.ordr.mapper.BOOrdrMapper;
import com.wb.domainserver.domain.gcone.ordr.ordr.service.BOOrdrService;
import com.wb.domainserver.domain.gcone.ordr.pay.vo.BOPayVO;
import com.wb.domainserver.exception.WnbtRestException;
import com.wb.domainserver.exception.code.PurchsValidCode;
import com.wb.domainserver.util.dataaccess.DataMap;
import com.wb.domainserver.util.string.StringUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import java.math.BigInteger;
import java.util.*;
import java.util.stream.Collectors;
/**
*
* 부정판매자 관리 BO service
* @author 김혜인
* @since 2024-01-29
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2023-01-29 김혜인 최초 생성
*
* </pre>
*/
@Service
@Slf4j
public class BOMaMtngService {
@Autowired
private BOMaMtngMapper mapper;
@Autowired
private BOCommonService boCommonService;
@Autowired
private BOOrdrMapper boOrdrMapper;
@Autowired
private BOMbrMapper boMbrMapper;
@Autowired
private BOMlgService boMlgService;
@Autowired
private BOGoodsService boGoodsService;
/**
* 부정 판매 대상자 목록 조회
* @param boMaMtngSrchVO
* @return Map<String, Object>
*/
public List<DataMap> selectBOItcSleMtngListInqire(BOMaMtngSrchVO boMaMtngSrchVO){
List<DataMap> resultList = new ArrayList<>();
// 건수 조회
Integer totCnt = 0;
totCnt = mapper.selectItcSleMtngTotCnt(boMaMtngSrchVO);
// 건수 갯수 페이징 vo에 set
boMaMtngSrchVO.getPaginationInfo().setTotalRecordCount(totCnt);
// 건수 > 0 일시 부정 판매 대상자 목록 조회
if(totCnt > 0) {
resultList = mapper.selectItcSleMtngList(boMaMtngSrchVO);
}
return resultList;
}
/**
* 부정 판매 대상자 상세 조회 (지정 이력 정보)
* @param boMaMtngVO
* @return List<DataMap>
*/
public List<DataMap> selectBOItcSleHistInfoInqire(BOMaMtngVO boMaMtngVO){
List<DataMap> resultList = null;
/**************************************
부정 판매 설정 이력 목록 조회
* **************************************/
// 건수 조회
Integer itcSleTotCnt = mapper.selectBOItcSleMtngDtlTotCnt(boMaMtngVO);
// 건수 갯수 페이징 vo에 set
boMaMtngVO.getPaginationInfo().setTotalRecordCount(itcSleTotCnt);
// 건수 > 0 일시 부정 판매 대상자 목록 조회
if(itcSleTotCnt > 0) {
resultList = mapper.selectBOItcSleMtngDtlInqire(boMaMtngVO);
}
return resultList;
}
/**
* 부정 판매 대상자 상세 조회 (지정 이력 정보)
* @param boMaMtngVO
* @return List<DataMap>
*/
public List<DataMap> selectBOItcSleOrdrInfoInqire(BOMaMtngVO boMaMtngVO) {
List<DataMap> resultList = null;
/**************************************
부정 판매 주문 이력 목록 조회
* **************************************/
// 건수 조회
Integer itcSleTotCnt = mapper.selectBOItcSleOrdrInfoTotCnt(boMaMtngVO);
boMaMtngVO.getPaginationInfo().setTotalRecordCount(itcSleTotCnt);
// 건수 > 0 일시 주문 이력 목록 조회
if(itcSleTotCnt > 0) {
resultList = mapper.selectBOItcSleOrdrInfoInqire(boMaMtngVO);
}
return resultList;
}
/**
* 부정 판매 대상자 및 주문 제한 여부 체크
* @param instcSleVO
* @return
*/
// public void checkInstcSle(BOInstcSleVO instcSleVO) throws Exception {
// log.debug("checkInstcSle(instcSleVO = {})", instcSleVO);
//
// /*주문 제한 여부 체크*/
// BOInstcSleVO chkVO = new BOInstcSleVO();
// instcSleVO.setSecretKey(boCommonService.selectSecretkey());
// chkVO = mapper.checkInstcSle(instcSleVO);
// log.debug("chkVO = {}", chkVO);
//
// //주문 제한 일 시 throw
// if ("Y".equals(chkVO.getIsInstcSle())) {
// throw new WnbtRestException("고객님께서는 구매 제한 대상자에 해당하므로 상품을 구매하실 수 없습니다.");
// }
// }
/**
* 부정 판매 대상자 및 주문 제한 여부 체크
* @param instcSleVO
* @return
*/
public Map<String, Object> checkInstcSle(BOInstcSleVO instcSleVO) {
Map<String, Object> result = new HashMap<>();
result.put("result", "N");
String useAt = "N";
BOPayVO payVO = new BOPayVO();
payVO.setSopmalCd(instcSleVO.getSopmalCd());
/** (2025-06-02 CJH) : 부정판매 회의
* 부정판매 모티러링 여부는 주문 이후 세팅된 조건에 맞을 경우 부정판매 등록하는 과정에서만 여부에 따라 움직임
* 주문 등록시 배송지별 받는자 휴대폰번호, 배송지 모두 체크후 구매대상자 여부 체크
*/
/*주문 제한 여부 체크*/
BOInstcSleVO chkVO = new BOInstcSleVO();
instcSleVO.setSecretKey(boCommonService.selectSecretkey());
chkVO = mapper.checkInstcSle(instcSleVO);
//주문 제한 일 시 throw
if ("Y".equals(chkVO.getIsInstcSle())) {
result.put("result", "Y");
result.put("message", "고객님께서는 구매 대상자가 아닙니다.");
}
return result;
}
/**
* 일반, 블랙리스트, 화이트리스트 변경.
* @param instcSleVO
* @return
*/
@Transactional
public Map<String, Object> updateBOMbrRslrList(BOMbrAppnVO boMbrAppnVO) {
Map<String, Object> content = new HashMap<>();
try {
boMbrAppnVO.setOriginDvCd("02"); // 출처구분코드 "02" 수동
boMbrMapper.updateBORslrAppn(boMbrAppnVO);
List<BOMbrAppnVO> list = boMbrMapper.selectBORslrAppn(boMbrAppnVO);
log.debug("list = {}", list);
for(int i=0 ; i<list.size(); i++) {
list.get(i).setLogChngDvCd("U");
boMbrMapper.insertBOAppnLog(list.get(i));
}
content.put("result", "success");
} catch (WnbtRestException wre) {
throw new WnbtRestException(wre.getMessage());
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return content;
}
/**
* 주문 전 요청 주문 정보에 따른 쿠폰리스트 확인
* 재확인 대상 -> 상품 상태, 구매수량제한, 구매대상자제한, 상품옵션, 쿠폰 ,이벤트, 마일리지, 배송그룹
* @param goodsList
* @return String
*/
@Transactional(readOnly = true)
public Map<String, Object> selectBOPreOrderValidationCouponList(List<BOPreOrderValidVO> goodsList){
Map<String, Object> result = new HashMap<>();
result.put("result", "N");
String sopmalCd = goodsList.get(0).getSopmalCd();
String mbrInnb = goodsList.get(0).getMbrInnb();
String mbrDvCd = goodsList.get(0).getMbrDvCd();
BOPreOrderValidVO vo = new BOPreOrderValidVO();
vo.setSopmalCd(sopmalCd);
vo.setMbrInnb(mbrInnb);
vo.setMbrDvCd(mbrDvCd);
//구매자 보유 쿠폰리스트 조회
List<String> userCouponList = mapper.selectBOPreOrderValidationCouponList(vo);
//구매자 보유 쿠폰리스트와 요청들어온 쿠폰리스트 비교
if(!CollectionUtils.isEmpty(userCouponList)){
goodsList.forEach(goods -> {
if(!CollectionUtils.isEmpty(goods.getUsedDwladCouponInnbList())
&& !"0".equals(goods.getUsedDwladCouponInnbList().get(0))){// 쿼리 Foreach때문에 아무것도 없을 경우 리스트에 0들어있음
List<String> notExistCouponList = goods.getUsedDwladCouponInnbList().stream()
.filter(couponInnb -> !userCouponList.contains(couponInnb)).toList();
if(!CollectionUtils.isEmpty(notExistCouponList)){
result.put("notExistCouponList", notExistCouponList);
}
}
});
}
//존재하지 않는 쿠폰이 있을 경우
if(result.containsKey("notExistCouponList")){
log.error("보유하지 않은 쿠폰번호 존재로 구매 불가, 보유하지 않은 쿠폰번호 = {} , 요청 대상 = sopmalCd : {} mbrInnb : {} mbrDvCd : {}", result.get("notExistCouponList"), sopmalCd, mbrInnb, mbrDvCd);
String resultMsg = PurchsValidCode.DO_NOT_HAVE_COUPON.getMsg();
result.put("result", "Y");
result.put("message", resultMsg);
}
return result;
}
/**
* 주문 전 요청 주문 정보에 따른 현재 컨디션 재확인
* 재확인 대상 -> 상품 상태, 구매수량제한, 구매대상자제한, 상품옵션, 쿠폰 ,이벤트, 마일리지, 배송그룹
* @param goodsList
* @return String
*/
@Transactional(readOnly = true)
public Map<String, Object> selectBOPreOrderValidation(List<BOPreOrderValidVO> goodsList) throws WnbtRestException {
Map<String, Object> result = new HashMap<>();
result.put("result", "N");
String mbrInnb = goodsList.get(0).getMbrInnb();
String mbrDvCd = goodsList.get(0).getMbrDvCd();
int useMlgAmt = Integer.parseInt(goodsList.get(0).getUseMlgAmt());
int useCashMlgAmt = Integer.parseInt(goodsList.get(0).getUseCashMlgAmt());
Set<String> validKeys = new HashSet<>(); // 변경 구매정보 리스트
//마일리지 잔액 확인
BOMlgSrchVO mlgVo = new BOMlgSrchVO();
mlgVo.setMbrInnb(Integer.parseInt(mbrInnb));
mlgVo.setMbrDvCd(mbrDvCd);
int restMlgAmt = boMlgService.selectBOMlgBlceSum(mlgVo).intValue();
//마일리지 잔액보다 사용금액이 더 많으면 메시지 출력
if(restMlgAmt < useMlgAmt ){
validKeys.add("useMlgAt");
}
//GC 머니 잔액 확인
BOCashVO cashVO = new BOCashVO();
cashVO.setMbrInnb(mbrInnb);
cashVO.setMbrDvCd(mbrDvCd);
int restCashAmt = boMlgService.selectBOCashBlce(cashVO).intValue();
//GC 머니 잔액보다 사용금액이 더 많으면 메시지 출력
if(restCashAmt < useCashMlgAmt ){
validKeys.add("useCashMlgAt");
}
for(BOPreOrderValidVO goods : goodsList) {
List<DataMap> resultValid = mapper.selectBOPreOrderValidation(goods);
//구매정보 변경대상 필터링
// 값이 1인 항목 == 변경항목
List<String> rs = resultValid.stream()
.flatMap(map -> map.entrySet().stream())
.filter(entry -> "1".equals(StringUtil.isNullToString(entry.getValue())))
.map(entry -> StringUtil.isNullToString(entry.getKey()))
.toList();
//구매정보 변경유형 저장
validKeys.addAll(rs);
}
//구매정보가 변경되었을 경우
if(!CollectionUtils.isEmpty(validKeys)){
String sopmalCd = goodsList.get(0).getSopmalCd();
log.error("구매정보변경에 따른 재구매 요청 = {}", validKeys);
log.error("구매정보변경에 따른 재구매 요청 대상 = sopmalCd : {} mbrInnb : {} mbrDvCd : {}", sopmalCd, mbrInnb, mbrDvCd);
StringBuilder returnMsg = new StringBuilder();
//상품구매수량제한걸렸을 경우
if(validKeys.contains("purchsQyLmtt")){
returnMsg.append("구매수량 제한 상품입니다.");
returnMsg.append(System.lineSeparator()); //줄바꿈
//상품목록중 해당 구매수량제한이 걸린 상품 조회
List<DataMap> purchsLimitGoodsList = boGoodsService.selectBOPreOrderValidPurchsQyLmtt(goodsList);
log.debug("구매 수량 제한 상품 목록 : {}", purchsLimitGoodsList);
// 상품 기준으로 병합
List<DataMap> mergedList = purchsLimitGoodsList.stream()
.collect(Collectors.toMap(
dm -> (BigInteger) dm.get("goodsInnb"),
dm -> dm,
(existing, duplicate) -> existing
))
.values()
.stream()
.collect(Collectors.toList());
log.debug("구매 수량 제한 상품 목록 mergedList : {}", mergedList);
for(DataMap purchsLimitGoods : mergedList){
returnMsg.append(purchsLimitGoods.get("goodsNm"))
.append(" (")
.append(purchsLimitGoods.get("mummPurchsQy"))
.append("개 이상 ")
.append(purchsLimitGoods.get("mxmmPurchsQy"))
.append("개 이하 까지 구매 가능")
.append(")")
.append(System.lineSeparator()); //줄바꿈
}
}else{
//valudKeys에 첫번째 키 값을 사용자 메세지로 리턴
for(String key : validKeys){
if(StringUtils.hasText(key)){
returnMsg.append(PurchsValidCode.purchsValidMsg(key));
break;
}
}
}
result.put("result", "Y");
result.put("message", returnMsg.toString());
}
return result;
}
/**
* 주문 전 요청 주문 정보에 따른 현재 컨디션 재확인관련 데이터(vo) 전처리
* @param param 주문요청 데이터
* @return List<BOPreOrderValidVO>
*/
public List<BOPreOrderValidVO> selectBOPreOrderValidationList(DataMap param){
List<BOPreOrderValidVO> result = new ArrayList<>();
LinkedHashMap shipping = (LinkedHashMap) param.get("shipping"); // 주문유형
List<LinkedHashMap> goodsList = (List<LinkedHashMap>) param.get("goodsList"); // 상품정보
LinkedHashMap enuri = (LinkedHashMap) param.get("enuri"); // 할인정보
//사용한 장바구니 쿠폰
//비회원의 경우 enuri 자체가 없어서 isEmpty 확인
List<LinkedHashMap> usedCartCouponList = new ArrayList<>();
if(!CollectionUtils.isEmpty(enuri)){
usedCartCouponList = (List<LinkedHashMap>) enuri.get("usedCartCouponList");
}
//상품별 총 구매갯수 합계
Map<String, Integer> qySums = goodsList.stream()
.collect(Collectors.groupingBy(
// goodsInnb기준 키로 묶음
goods -> goods.get("goodsInnb").toString(),
// qy 값을 합산
Collectors.summingInt(goods -> Integer.parseInt(goods.getOrDefault("qy", "0").toString()))
));
//사용한 상품금액할인쿠폰
// 중복 제거를 위해 Set
Set<LinkedHashMap> usedGoodsCouponListSet = goodsList.stream()
.map(goods -> (List<LinkedHashMap>) goods.getOrDefault("usedGoodsCouponList", new ArrayList<LinkedHashMap>()))
.flatMap(Collection::stream)
.collect(Collectors.toSet());
//사용한 배송비 쿠폰
List<LinkedHashMap> shippingCoupon = (List<LinkedHashMap>) shipping.getOrDefault("usedDlvylcCouponList", new ArrayList<LinkedHashMap>());
//사용하는 다운로드 쿠폰 고유번호 list 생성
List<String> usedDwladCouponInnbList = new ArrayList<>();
//각 쿠폰리스트에서 다운로드쿠폰번호 추출
getDwldCouponInnbList(usedCartCouponList, usedDwladCouponInnbList);
getDwldCouponInnbList(usedGoodsCouponListSet, usedDwladCouponInnbList);
getDwldCouponInnbList(shippingCoupon, usedDwladCouponInnbList);
//이벤트 정보
//goodsList안에 goodsDscntDtlsList리스트에 evtInnb가 존재할 경우 이벤트 List 생성
List<LinkedHashMap> evtList = goodsList.stream()
.filter(goods -> goods.get("goodsDscntDtlsList") != null && !CollectionUtils.isEmpty((List<LinkedHashMap>) goods.get("goodsDscntDtlsList")))
.map(dataMap -> {
List<LinkedHashMap> goodsDscntDtlsList = (List<LinkedHashMap>) dataMap.get("goodsDscntDtlsList");
return goodsDscntDtlsList.stream()
.filter(goodsDscntDtls -> goodsDscntDtls.containsKey("evtInnb"))
.toList();
}).flatMap(Collection::stream).toList();
//데이터 구성
goodsList.forEach(goods -> {
String goodsInnb = StringUtil.isNullToString(goods.get("goodsInnb"));
//상품별 수량합계
int goodsTotalQy = 0;
if(qySums.containsKey(goodsInnb)){
goodsTotalQy = qySums.getOrDefault(goodsInnb, 0);
}
//해당 상품이 이벤트에 해당할 경우 이벤트 고유번호 넣기
String evtInnb = "0";
for(LinkedHashMap evt : evtList){
if(goods.get("goodsOptnInnb").equals(evt.get("goodsOptnInnb"))){
evtInnb = evt.get("evtInnb").toString();
break;
}
}
//사용한 다운로드 쿠폰 목록 빈배열 처리
if(CollectionUtils.isEmpty(usedDwladCouponInnbList)){
usedDwladCouponInnbList.add("0");
}
String useMlgAmt = "0";
if(!CollectionUtils.isEmpty(enuri) && enuri.containsKey("useMlgAmt")){
useMlgAmt = ObjectUtils.isEmpty(enuri.get("useMlgAmt"))? "0" : String.valueOf(enuri.get("useMlgAmt"));
}
String useCashMlgAmt = "0";
if(!CollectionUtils.isEmpty(enuri) && enuri.containsKey("useCashMlgAmt")){
useCashMlgAmt = ObjectUtils.isEmpty(enuri.get("useCashMlgAmt"))? "0" : String.valueOf(enuri.get("useCashMlgAmt"));
}
result.add(
BOPreOrderValidVO.builder()
.sopmalCd(StringUtil.isNullToString(goods.get("sopmalCd")))
.goodsInnb(StringUtil.isNullToString(goods.get("goodsInnb")))
.goodsOptnInnb(StringUtil.isNullToString(goods.get("goodsOptnInnb")))
.mbrInnb(StringUtil.isNullToString(goods.get("mbrInnb")))
.mbrDvCd(StringUtil.isNullToString(goods.get("mbrDvCd")))
.qy(StringUtil.isNullToString(goods.get("qy")))
.goodsTotalQy(goodsTotalQy)
.slepric(StringUtil.isNullToString(goods.get("slepric")))
.compnbDscntAt(StringUtil.isNullToString(goods.get("compnbDscntAt")))
.sctnDscntAt(StringUtil.isNullToString(goods.get("sctnDscntAt")))
.dlvyGroupInnb(StringUtil.isNullToString(goods.get("dlvyGroupInnb")))
.useMlgAmt(StringUtil.isNullToString(useMlgAmt))
.useCashMlgAmt(StringUtil.isNullToString(useCashMlgAmt))
.evtInnb(evtInnb)
.usedDwladCouponInnbList(usedDwladCouponInnbList)
.usedDwladCouponInnbListSize(usedDwladCouponInnbList.size())
.build()
);
});
return result;
}
/** 쇼핑몰 구매요청 재검증 확인 여부
* @parma sopmalCd 쇼핑몰 구분코드
* @return Y or N
* */
public String selectPurchsValidUseAt(String sopmalCd){
return mapper.selectPurchsValidUseAt(sopmalCd);
}
/** 사용한 쿠폰리스트에 고유번호 추출하여 리스트에 담는 함수
* @param usedCouponList 사용한 쿠폰리스트
* @param usedDwladCouponInnbList 사용한 쿠폰 리스트에서 고유번호를 담는 리스트
*
* */
private void getDwldCouponInnbList(Collection<LinkedHashMap> usedCouponList, List<String> usedDwladCouponInnbList) {
if(!CollectionUtils.isEmpty(usedCouponList)){
usedCouponList.forEach(usedCoupon -> {
if(usedCoupon.containsKey("dwldCouponInnb")){
usedDwladCouponInnbList.add(String.valueOf(usedCoupon.get("dwldCouponInnb")));
}
});
}
}
}

View File

@@ -0,0 +1,48 @@
package com.wb.domainserver.domain.admin.instcSle.mtng.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class BOInstcSleVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/* 쇼핑몰코드(FK) */
private String sopmalCd;
/* 주문 유형 */
private String ordrTyCd;
/* 제한대상자여부 */
private String isInstcSle;
/*대상자 조회 정보*/
/*회원고유번호*/
private String mbrInnb;
/*회원구분코드*/
private String mbrDvCd;
/*에이전트id*/
private String agentId;
/*주문자핸드폰번호*/
private String ordrrMbtlnb;
/*주문자핸드폰번호*/
private String[] recpntMbtlnbArr;
/*주소*/
private String adres;
/*주소 배열*/
private String[] adresMulti;
/*부정판매자구분*/
private String appnDvCd;
/*시크릿키*/
private String secretKey;
}

View File

@@ -0,0 +1,31 @@
package com.wb.domainserver.domain.admin.instcSle.mtng.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
@Data
@EqualsAndHashCode(callSuper = false)
public class BOMaMtngSrchVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/**검색어타입*/
private String srchType;
/**검색어*/
private String srchStr;
/**브랜드명*/
private String srchShop;
/**식별기준검색*/
private List<String> srchIdntfcDvCd;
/**리셀러구분*/
private String srchAppn;
/**지정일 검색 시작*/
private String srchStrtRegDt;
/**지정일 검색 끝*/
private String srchEndRegDt;
/*시크릿키*/
private String secretKey;
}

View File

@@ -0,0 +1,34 @@
package com.wb.domainserver.domain.admin.instcSle.mtng.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class BOMaMtngVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/**이메일 발송 고유번호*/
private String emailSndngInnb ;
/*지정이력고유번호(PK)*/
private String appnLogInnb;
/*지정고유번호(FK)*/
private String appnInnb;
/*쇼핑몰코드(FK)*/
private String sopmalCd;
/*지정구분코드*/
private String appnDvCd;
/*식별기준코드*/
private String idntfcStdrCd;
/*식별정보*/
private String idntfcInfo;
/*회원구분코드*/
private String mbrDvCd;
/*주문고유번호*/
private String ordrInnb;
/*메모*/
private String appnMemo;
}

View File

@@ -0,0 +1,66 @@
package com.wb.domainserver.domain.admin.instcSle.mtng.vo;
import lombok.*;
import java.util.ArrayList;
import java.util.List;
@Data
@EqualsAndHashCode(callSuper = false)
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class BOPreOrderValidVO {
private static final long serialVersionUID = 1L;
/*쇼핑몰코드*/
private String sopmalCd;
/*상품고유번호*/
private String goodsInnb;
/*상품옵션고유번호*/
private String goodsOptnInnb;
/*회원고유번호*/
private String mbrInnb;
/*회원구분코드 */
private String mbrDvCd;
/*구매상품옵션 갯수 */
private String qy;
/*상품별 총 구매갯수 합계*/
private int goodsTotalQy;
/*상품옵션 원 판매가*/
private String slepric;
/*복수할인여부*/
private String compnbDscntAt;
/*구간할인여부*/
private String sctnDscntAt;
/*배송그룹고유번호*/
private String dlvyGroupInnb;
/*사용 마일리지 합계*/
private String useMlgAmt;
/*사용 GC 머니 합계*/
private String useCashMlgAmt;
/*이벤트 고유번호*/
private String evtInnb;
/*사용하는 다운로드쿠폰 고유번호 리스트*/
private List<String> usedDwladCouponInnbList;
/*사용하는 다운로드쿠폰 고유번호 리스트 갯수*/
private int usedDwladCouponInnbListSize;
}

View File

@@ -0,0 +1,34 @@
package com.wb.domainserver.domain.admin.instcSle.mtng.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
@Data
@EqualsAndHashCode(callSuper = false)
public class MaMtngSrchVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/**검색어타입*/
public String srchType;
/**검색어*/
public String srchStr;
/**쇼핑몰코드*/
private String srchShop;
/**검색 시작 주문 금액 날짜 */
private String srchStrtRegDt;
/**검색 종료 주문 금액 날짜 */
private String srchEndRegDt ;
/**리셀러구분*/
private String srchAppn;
/**이메일 발송 고유번호*/
private String emailSndngInnb ;
/**식별기준검색*/
public List<String> srchIdntfcDvCd;
}

View File

@@ -0,0 +1,55 @@
package com.wb.domainserver.domain.admin.instcSle.mtng.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
@Data
@EqualsAndHashCode(callSuper = false)
public class MaMtngVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/**회원식별정보*/
public String mbrIdntfcInfo;
/*페이징 유지*/
/**검색어타입*/
public String srchType;
/**검색어*/
public String srchStr;
/**쇼핑몰코드*/
private String srchShop;
/**검색 시작 주문 금액 날짜 */
private String srchStrtRegDt;
/**검색 종료 주문 금액 날짜 */
private String srchEndRegDt ;
/**검색 종료 주문 금액 날짜 */
private List<String> srchIdntfcDvCd ;
/**리셀러구분*/
private String srchAppn;
/**이메일 발송 고유번호*/
private String emailSndngInnb ;
/*지정이력고유번호(PK)*/
private String appnLogInnb;
/*지정고유번호(FK)*/
private String appnInnb;
/*쇼핑몰코드(FK)*/
private String sopmalCd;
/*지정구분코드*/
private String appnDvCd;
/*식별기준코드*/
private String idntfcStdrCd;
/*식별정보*/
private String idntfcInfo;
/*회원구분코드*/
private String mbrDvCd;
/*주문고유번호*/
private String ordrInnb;
/*메모*/
private String appnMemo;
}

View File

@@ -0,0 +1,291 @@
package com.wb.domainserver.domain.admin.login;
import com.wb.domainserver.domain.admin.store.sopmal.service.BOMaSopmalService;
import com.wb.domainserver.domain.admin.store.sopmal.vo.Shop;
import com.wb.domainserver.domain.admin.user.mngr.vo.BOJobUserVO;
import com.wb.domainserver.domain.gcone.common.service.BOCommonService;
import com.wb.domainserver.domain.gcone.login.service.LoginService;
import com.wb.domainserver.domain.gcone.login.vo.LoginRequest;
import com.wb.domainserver.domain.gcone.login.vo.LoginUser;
import com.wb.domainserver.realm.RealmContextHolder;
import com.wb.domainserver.realm.util.UrlExtractor;
import com.wb.domainserver.response.ApiResponse;
import com.wb.domainserver.response.WnbtResponse;
import com.wb.domainserver.response.WnbtResponseBody;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.security.jwt.service.TokenService;
import com.wb.domainserver.security.jwt.vo.TokenInfo;
import com.wb.domainserver.util.CookieUtils;
import com.wb.domainserver.util.dataaccess.DataMap;
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.*;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.util.UriUtils;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
@Slf4j
@Controller
@RequiredArgsConstructor
@RequestMapping("/admin")
public class AdminLoginController {
private final LoginService service;
private final TokenService tokenService;
private final BOMaSopmalService bomaSopmalService;
private final BOCommonService commonService;
@Value("${jwt.refresh.max-age}")
private int refreshTokenMaxAge;
/**
* 사용자 로그인 페이지 진입시 이전 경로 저장 및 로그인 페이지 이동 처리
* @return
*/
@Policy(value = AuthPolicy.PUBLIC)
@GetMapping("/login")
@ResponseBody
public void login(HttpServletRequest request, HttpServletResponse response) throws IOException {
String realm = RealmContextHolder.getRealm();
String redirectUri = request.getParameter("redirect_uri");
String sopmalCd = RealmContextHolder.getSopmalCdRealm();
response.sendRedirect("/"+realm+"/login/page/"+realm+"?redirect_uri=%s&sopmalCd=%s".formatted(UriUtils.encode(redirectUri, StandardCharsets.UTF_8), UriUtils.encode(sopmalCd, StandardCharsets.UTF_8)));
}
/**
* 로그인 처리
* @return
*/
@Policy(value = AuthPolicy.PUBLIC)
@PostMapping(value = "/login/admin", produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public ResponseEntity<WnbtResponse> loginProcess(@RequestBody LoginRequest loginRequest,
HttpServletRequest request,
HttpServletResponse response
) {
log.debug("admin loginRequest :: {}", loginRequest);
//로그인 진행
LoginUser loginUser = null;
String realm = RealmContextHolder.getRealm().toLowerCase();
loginRequest.setSopmalCd(RealmContextHolder.getSopmalCdRealm());
loginUser = service.adminLogin(loginRequest);
loginUser.setSysDvCd("03");
log.debug("loginUser :: {}", loginUser);
//토큰 발급
service.createLoginToken(loginUser, request, response);
Map<String, Object> message = new HashMap<>();
message.put("result", "success");
message.put("redirectUri", loginRequest.getRedirectUri());
message.put("env", request.getAttribute("env"));
return ResponseEntity.ok(WnbtResponse.builder()
.resBody(new WnbtResponseBody(message))
.build());
}
/**
* 로그인 페이지 이동
* @return
*/
@GetMapping(value = "/login/page/admin")
@Policy(value = AuthPolicy.PUBLIC)
public String loginPage(HttpServletRequest request, ModelMap model) {
String redirectUri = request.getParameter("redirect_uri");
String accessUrl = StringUtils.hasText(request.getParameter("access_url"))? request.getParameter("access_url") : RealmContextHolder.getOriginalHostRealm();
String sopmalCd = request.getParameter("sopmalCd");
//쇼핑몰 테마 등 정보 조회
Shop shopInfo = bomaSopmalService.selectSopmalInfo(sopmalCd);
model.addAttribute("redirectUri", redirectUri);
model.addAttribute("accessUrl", accessUrl);
model.addAttribute("sopmalCd", sopmalCd);
model.addAttribute("realm", RealmContextHolder.getRealm().toLowerCase());
model.addAttribute("shopInfo", shopInfo);
return "login/login-ADMIN";
}
@RequestMapping("/tokens/refresh")
public void refreshToken(HttpServletRequest request, HttpServletResponse response) throws IOException {
String realm = RealmContextHolder.getRealm().toLowerCase();
String refreshToken = CookieUtils.getCookieValue("RFT", request);
//리프레쉬 토큰이 없으면 메인으로 이동 처리
if(!StringUtils.hasText(refreshToken)){
//엑세스토큰 삭제
CookieUtils.deleteCookie("ACT","/"+realm, request, response);
CookieUtils.deleteCookie("token_expire","/"+realm, request, response);
response.sendRedirect("/"+realm);
}
//리프레쉬 토큰 있을 경우(존재한다는 자체가 refresh토큰이 만료된 상태가 아님)
service.createRenewLoginToken(request, response);
String redirectUri = "/"+realm+"/main";
//리다이렉트 url 있을 경우 해당 url로 이동
if(StringUtils.hasText(request.getParameter("redirect_uri"))){
redirectUri = request.getParameter("redirect_uri");
}
response.sendRedirect(redirectUri);
if(request.getCookies() != null){
for(Cookie cookie: request.getCookies()){
if("RFT".equals(cookie.getName())){
refreshToken = cookie.getValue();
}
}
}
//리프레쉬 토큰이 없으면 메인으로 이동 처리
if(!StringUtils.hasText(refreshToken)){
//엑세스토큰 삭제
if(request.getCookies() != null){
for(Cookie cookie: request.getCookies()){
if("ACT".equals(cookie.getName())){
cookie.setMaxAge(0);
response.addCookie(cookie);
}
}
}
response.sendRedirect("/"+realm.toLowerCase());
}
//리프레쉬 토큰 있을 경우(존재한다는 자체가 refresh토큰이 만료된 상태가 아님)
service.createRenewLoginToken( request, response);
//리다이렉트 url 있을 경우 해당 url로 이동
if(StringUtils.hasText(request.getParameter("redirectUrl"))){
response.sendRedirect(request.getParameter("redirectUrl"));
}else{
response.sendRedirect(UrlExtractor.getOriginalHost(request)+realm.toLowerCase());
}
}
/**
* 로그인 2차 인증
* @return
*/
@ResponseBody
@Policy(value = AuthPolicy.PUBLIC)
@PostMapping(value = "/login/loginCheck", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<?> loginCheck(@RequestBody LoginRequest loginRequest, HttpServletRequest request, HttpServletResponse response) {
BOJobUserVO vo = new BOJobUserVO();
vo.setMngrId(loginRequest.getUsername());
vo.setPassword(loginRequest.getPassword());
String secretKey = commonService.selectSecretkey();
vo.setSecretKey(secretKey);
//회원정보 조회
DataMap result = service.selectBOJobUserCrtfcInfo(loginRequest, vo);
Map<String, Object> content = new HashMap<>();
content.put("result", result);
if(result != null){
String lmttIp = (String) result.get("lmttIp");
String mblphonCrtfcAt = (String) result.get("mblphonCrtfcAt");
String mngrNm = (String) result.get("mngrNm");
String mbtlnb = (String) result.get("mbtlnb");
String lmttIpAt = "N";
// String clientIp = String.valueOf(request.getAttribute("LoggingClientIp"));
String clientIp = request.getHeader("X-Forwarded-For");
log.debug("clientIp X-Forwarded-For {}", clientIp);
if (clientIp != null && clientIp.contains(",")) {
clientIp = clientIp.split(",")[0].trim();
log.debug("clientIp split {}", clientIp);
}
if (clientIp == null || clientIp.isEmpty()) {
clientIp = request.getRemoteAddr();
log.debug("clientIp getRemoteAddr: {}", clientIp);
}
log.debug("whitelist Ips {}", lmttIp);
if (lmttIp != null && !lmttIp.isEmpty()) {
for (String lmttIpOne : lmttIp.split("\\|")) {
if(lmttIpOne.trim().equals(clientIp)) {
lmttIpAt = "Y";
}
log.debug("whitelist Ip {}", lmttIpOne);
}
} else {
lmttIpAt = "Y";
}
content.put("lmttIpAt", lmttIpAt);
// 2차인증 여부
if (mblphonCrtfcAt.equals("Y")) {
content.put("mngrNm", mngrNm);
content.put("mbtlnb", mbtlnb);
}
content.put("mblphonCrtfcAt", mblphonCrtfcAt);
} else{
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
}
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
}

View File

@@ -0,0 +1,40 @@
package com.wb.domainserver.domain.admin.main.controller;
import com.wb.domainserver.domain.admin.main.service.BOMaMainService;
import com.wb.domainserver.domain.admin.main.vo.BOMaMainVO;
import com.wb.domainserver.domain.admin.store.sopmal.service.BOMaSopmalService;
import com.wb.domainserver.response.ApiResponse;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Map;
@RestController
@RequestMapping("/admin/main")
@Slf4j
public class BOMaMainController {
@Autowired
private BOMaMainService service;
@Autowired
private BOMaSopmalService maSopmalService;
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectBOMaMainAccessInqire")
public ResponseEntity<?> selectBOMaMainAccessInqire(@RequestBody BOMaMainVO boMaMainVO) {
Map<String, Object> resultMap = new HashMap<>();
//쇼핑몰 조회
resultMap.put("access",service.selectBOMaMainAccessInqire(boMaMainVO));
return ApiResponse.of(resultMap).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
}

View File

@@ -0,0 +1,108 @@
package com.wb.domainserver.domain.admin.main.controller;
import com.wb.domainserver.domain.admin.main.service.BOMaMainService;
import com.wb.domainserver.domain.admin.main.vo.BOMaMainVO;
import com.wb.domainserver.domain.admin.main.vo.MaMainVO;
import com.wb.domainserver.realm.RealmContextHolder;
import com.wb.domainserver.realm.util.UrlExtractor;
import com.wb.domainserver.response.WnbtWebClientResponseHandler;
import com.wb.domainserver.security.authentication.AnonymousUser;
import com.wb.domainserver.security.authentication.MemberJwtContextHolder;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.communicate.RESRC;
import com.wb.domainserver.util.communicate.SendToResrc;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.util.UriUtils;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Map;
@Controller
@RequestMapping(value = "/admin")
@Slf4j
public class MaMainController {
// @Value("${spring.security.oauth2.resourceserver.jwt.issuer-uri}")
String issuerUri;
@Autowired
private BOMaMainService service;
@Autowired
private WnbtWebClientResponseHandler responseHandler;
@Autowired
private SendToResrc sendToResrc;
/**
* 통합관리자 index 화면
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/main")
public String selectAdminMainInqire(MaMainVO maMainVO, ModelMap model) {
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
maMainVO.setMngrInnb(String.valueOf(user.getUserInnb()));
BOMaMainVO boMaMainVO = new BOMaMainVO();
boMaMainVO.setMngrInnb(maMainVO.getMngrInnb());
//쇼핑몰 조회
Map<String, Object> resultMap = service.selectBOMaMainAccessInqire(boMaMainVO);
model.addAttribute("resultMap",resultMap);
return "admin/index";
}
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "")
public void selectAdminRootInqire(HttpServletRequest request, HttpServletResponse response) throws IOException {
String realm = RealmContextHolder.getRealm().toLowerCase();
String redirectUri = request.getParameter("redirect_uri");
String sopmalCd = RealmContextHolder.getSopmalCdRealm();
response.sendRedirect("/"+realm+"/login/page/"+realm+"?redirect_uri=%s&sopmalCd=%s".formatted(UriUtils.encode(redirectUri, StandardCharsets.UTF_8), UriUtils.encode(sopmalCd, StandardCharsets.UTF_8)));
}
@Policy(AuthPolicy.PUBLIC)
@GetMapping("/")
public String root(HttpServletRequest request) {
return UrlExtractor.redirect(request, "/"+RealmContextHolder.getRealm().toLowerCase());
}
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/main/selectSopmal")
public String selectSopmalInqire(HttpServletRequest request) {
return UrlExtractor.redirect(request, "/main");
}
// /**
// * 통합관리자 로그아웃
// * @return
// */
// @Policy(AuthPolicy.PUBLIC)
// @RequestMapping(value="/admin/logout")
// public String adminLogout(HttpServletRequest request, HttpSession session) {
// session.invalidate();
// request.getSession().invalidate();
// request.getSession(true);
// String returnUrl = issuerUri+"/login";
// return "redirect:"+returnUrl;
// }
}

View File

@@ -0,0 +1,15 @@
package com.wb.domainserver.domain.admin.main.mapper;
import com.wb.domainserver.domain.admin.main.vo.BOMaMainVO;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import java.util.Map;
@Mapper
@Repository
public interface BOMaMainMapper {
public Map<String, Object> selectBOMaMainAccessInqire(BOMaMainVO boMaMainVO);
}

View File

@@ -0,0 +1,25 @@
package com.wb.domainserver.domain.admin.main.service;
import com.wb.domainserver.domain.admin.main.mapper.BOMaMainMapper;
import com.wb.domainserver.domain.admin.main.vo.BOMaMainVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.Map;
@Service
@Slf4j
public class BOMaMainService {
@Autowired
private BOMaMainMapper mapper;
public Map<String, Object> selectBOMaMainAccessInqire(BOMaMainVO boMaMainVO) {
Map<String, Object> result = mapper.selectBOMaMainAccessInqire(boMaMainVO);
return result;
}
}

View File

@@ -0,0 +1,26 @@
package com.wb.domainserver.domain.admin.main.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class BOMaMainVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/** 통합관리자 이름 */
String mngrNm;
/** 관리자 id */
String mngrId;
/** 등록일 */
String registDe;
/** 등록시간 */
String registHms;
/** 관리자 식별번호 */
String mngrInnb;
}

View File

@@ -0,0 +1,26 @@
package com.wb.domainserver.domain.admin.main.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class MaMainVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/** 통합관리자 이름 */
String mngrNm;
/** 관리자 id */
String mngrId;
/** 등록일 */
String registDe;
/** 등록시간 */
String registHms;
/** 관리자 식별번호 */
String mngrInnb;
}

View File

@@ -0,0 +1,104 @@
package com.wb.domainserver.domain.admin.ntcn.atmcsndng.controller;
import com.wb.domainserver.common.mvc.tags.ui.pagination.PaginationInfo;
import com.wb.domainserver.domain.admin.ntcn.atmcsndng.service.BOMaAtmcSndngService;
import com.wb.domainserver.domain.admin.ntcn.atmcsndng.vo.BOMaAtmcSndngVO;
import com.wb.domainserver.domain.admin.store.sopmal.service.BOMaSopmalService;
import com.wb.domainserver.domain.admin.sys.comncd.service.BOMaComncdService;
import com.wb.domainserver.domain.gcone.ntcn.atmcsndng.service.BOAtmcSndngService;
import com.wb.domainserver.domain.gcone.ntcn.atmcsndng.vo.BOAtmcSndngVO;
import com.wb.domainserver.domain.gcone.ntcn.mssage.vo.BOMssageSrchVO;
import com.wb.domainserver.response.ApiResponse;
import com.wb.domainserver.security.authentication.AnonymousUser;
import com.wb.domainserver.security.authentication.MemberJwtContextHolder;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.communicate.SendToResrc;
import com.wb.domainserver.util.dataaccess.DataMap;
import com.wb.domainserver.util.string.StringUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Slf4j
@RestController
@RequestMapping("/admin/ntcn/atmcsndng")
public class BOMaAtmcSndngController {
@Autowired
private BOMaAtmcSndngService service;
@Autowired
private BOMaComncdService bOMaComncdService;
@Autowired
private BOMaSopmalService maSopmalService;
@Autowired
private SendToResrc sendToResrc;
/**
* 자동 발송 관리 조회
*
* @param vo
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectBOAtmcSndngManageListInqire")
public ResponseEntity<?> selectBOAtmcSndngManageListInqire(@RequestBody BOMaAtmcSndngVO vo) {
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
if("01".equals(user.getSysDvCd())){
vo.setSopmalCd(user.getSopmalCd());
}
vo.setFormDvCd("FORM_DV_");
//시스템 02
vo.setMngrDv("02");
Map<String, Object> content = new HashMap<>();
//검색 폼 code
List<DataMap> sopmal = service.selectBOSopmalAtmcSndng();
content.put("sopmal",sopmal);
//초기 쇼핑몰 코드 없을 경우 목록의 첫번째 입력
if("".equals(StringUtil.isNullToString(vo.getSopmalCd()))) {
vo.setSopmalCd(StringUtil.isNullToString(sopmal.get(0).get("sopmalCd")));
}
content.put("bOAtmcSndngVO", vo);
content.put("boCtrlMap", service.selectBOAtmcSndngManageListInqire(vo));
content.put("shopAtmcSndntTme", service.selectBOShopAtmcSndngTme(vo));
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 자동 발송 관리 수정
*
* @param vo
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/updateBOAtmcSndngManageUpdt")
public ResponseEntity<?> updateBOAtmcSndngManageUpdt(@RequestBody BOMaAtmcSndngVO boAtmcSndngVO) {
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
if("01".equals(user.getSysDvCd())){
boAtmcSndngVO.setSopmalCd(user.getSopmalCd());
}
Map<String, Object> message = new HashMap<>();
message = service.updateBOAtmcSndngManageUpdt(boAtmcSndngVO);
return ApiResponse.of(message).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
}

View File

@@ -0,0 +1,124 @@
package com.wb.domainserver.domain.admin.ntcn.atmcsndng.controller;
import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.domain.admin.ntcn.atmcsndng.vo.MaAtmcSndngVO;
import com.wb.domainserver.domain.mngr.ntcn.atmcsndng.vo.AtmcSndngVO;
import com.wb.domainserver.exception.WnbtRestException;
import com.wb.domainserver.response.WnbtResponse;
import com.wb.domainserver.response.WnbtWebClientResponseHandler;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.communicate.RESRC;
import com.wb.domainserver.util.communicate.ReplyFromResrc;
import com.wb.domainserver.util.communicate.SendToResrc;
import com.wb.domainserver.util.communicate.ValidateResultConverter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import java.util.Map;
/**
* 자동 발송 관리 Controller
*
* @author rvg
* @version 1.0
* @see <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-03-04 리브가 최초 생성
* 2024-05-01 이대환 내용 수정
*
* </pre>
* @since 2024-03-04
*/
@Slf4j
@Controller
@RequestMapping("/admin/ntcn/atmcsndng")
public class MaAtmcSndngController {
/** WebClient 호출을 위한 wrapper */
@Autowired
private WnbtWebClientResponseHandler responseHandler;
/** WebClient 호출을 위한 wrapper */
@Autowired
private SendToResrc sendToResrc;
/** 공통 메시지 처리를 위한 메시지 객체 */
@Autowired
private GconeMessageSource gconeMessageSource;
/**
* 자동 발송 관리 페이지
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectAtmcSndngManage")
public String selectAtmcSndngManage() {
log.debug("자동 발송 관리 페이지 진입");
return "admin/ntcn/atmcsndng/MaAtmcSndngManage";
}
/**
* 자동 발송 관리 > 자동 발송 관리 폼
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectAtmcSndngManageListInqire")
public String selectAtmcSndngManageListInqire(MaAtmcSndngVO vo, ModelMap model) {
log.debug("자동 발송 관리 진입 =>{}", vo);
try {
Map<String,Object> resultMap = responseHandler.handleResponseAsMap(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/ntcn/atmcsndng/selectBOAtmcSndngManageListInqire", vo)
);
model.addAttribute("resultListMap", resultMap.get("boCtrlMap"));
model.addAttribute("bOAtmcSndngVO",resultMap.get("bOAtmcSndngVO"));
model.addAttribute("sopmal", resultMap.get("sopmal"));
model.addAttribute("shopAtmcSndntTme", resultMap.get("shopAtmcSndntTme"));
} catch (WnbtRestException wre){
throw new WnbtRestException(wre.getMessage());
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return "admin/ntcn/atmcsndng/MaAtmcSndngListR";
}
/**
* 자동 발송 관리 페이지 > 자동 발송 관리 - 자동 발송 관리 수정
* @param vo
* @param bindingResult 바인딩 및 정합성 점검결과 객체
* @return ResponseEntity<WnbtResponse>
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/updateAtmcSndngManage", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updateAtmcSndngManage(@Validated AtmcSndngVO atmcSndngVO, BindingResult bindingResult){
log.debug("자동 발송 관리 수정 FO 파라미터 vo =>{}", atmcSndngVO);
if(bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/ntcn/atmcsndng/updateBOAtmcSndngManageUpdt", atmcSndngVO),
ReplyFromResrc::getReply
);
}
}

View File

@@ -0,0 +1,50 @@
package com.wb.domainserver.domain.admin.ntcn.atmcsndng.mapper;
import com.wb.domainserver.domain.admin.ntcn.atmcsndng.vo.BOMaAtmcSndngVO;
import com.wb.domainserver.domain.gcone.ntcn.atmcsndng.vo.BOAtmcSndngVO;
import com.wb.domainserver.domain.gcone.ntcn.mssage.vo.BOMssageSrchVO;
import com.wb.domainserver.util.dataaccess.DataMap;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import java.util.List;
@Mapper
@Repository
public interface BOMaAtmcSndngMapper {
/**
* 자동 발송 관리 조회
* @param param
* @return
*/
public List<DataMap> selectBOAtmcSndngManageListInqire(BOMaAtmcSndngVO vo);
/**
* 자동 발송 관리 수정
* @param voList
* @return
*/
public void updateBOAtmcSndngManageUpdt(List<BOMaAtmcSndngVO> voList);
/* 이메일 템플릿 사용여부 수정 */
public void updateBOEmailTmplatUseAt(List<BOMaAtmcSndngVO> voList);
/* 메시지 템플릿 사용여부 수정 */
public void updateBOMssageTmplatUseAt(List<BOMaAtmcSndngVO> voList);
/* 알림톡 템플릿 사용여부 수정 */
public void updateBOKakaoTmplatUseAt(List<BOMaAtmcSndngVO> voList);
/**
* 자동발송 가능 시간 조회
* @param vo
* @return
*/
DataMap selectBOShopAtmcSndngTme(BOMaAtmcSndngVO vo);
/**
* 통합관리자 자동발송관리 쇼핑몰 조회
* @return
*/
List<DataMap> selectBOSopmalAtmcSndng();
}

View File

@@ -0,0 +1,105 @@
package com.wb.domainserver.domain.admin.ntcn.atmcsndng.service;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.wb.domainserver.domain.admin.ntcn.atmcsndng.mapper.BOMaAtmcSndngMapper;
import com.wb.domainserver.domain.admin.ntcn.atmcsndng.vo.BOMaAtmcSndngVO;
import com.wb.domainserver.domain.admin.ntcn.email.mapper.BOMaEmailMapper;
import com.wb.domainserver.domain.gcone.ntcn.atmcsndng.mapper.BOAtmcSndngMapper;
import com.wb.domainserver.domain.gcone.ntcn.atmcsndng.vo.BOAtmcSndngVO;
import com.wb.domainserver.domain.gcone.ntcn.mssage.vo.BOMssageSrchVO;
import com.wb.domainserver.util.dataaccess.DataMap;
import com.wb.domainserver.util.string.StringUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@Service
@Slf4j
public class BOMaAtmcSndngService {
@Autowired
private BOMaAtmcSndngMapper mapper;
/**
* 자동 발송 관리 조회
* @param vo
* @return
*/
public List<DataMap> selectBOAtmcSndngManageListInqire(BOMaAtmcSndngVO vo) {
List<DataMap> resultList = null;
resultList = mapper.selectBOAtmcSndngManageListInqire(vo);
return resultList;
}
/**
* 자동 발송 관리 수정
* @param vo
* @return
*/
public Map<String, Object> updateBOAtmcSndngManageUpdt(BOMaAtmcSndngVO boAtmcSndngVO) {
Map<String, Object> message = new HashMap<>();
message.put("status", "0");
message.put("message", "");
ObjectMapper objectMapper = new ObjectMapper();
List<BOMaAtmcSndngVO> atmcSndngList = new ArrayList<>();
String atmcSndngStr = StringUtil.isNullToString(boAtmcSndngVO.getAtmcSndngList());
//전달된 데이터가 있을 경우
if(!"".equals(atmcSndngStr)) {
try {
atmcSndngList = objectMapper.readValue(boAtmcSndngVO.getAtmcSndngList(),
new TypeReference<List<BOMaAtmcSndngVO>>() {});
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
}
//쇼핑몰 코드 세팅
atmcSndngList = atmcSndngList.stream()
.map(vo -> {
vo.setSopmalCd(boAtmcSndngVO.getSopmalCd());
return vo;
}).toList();
mapper.updateBOAtmcSndngManageUpdt(atmcSndngList);
return message;
}
/**
* 자동발송 가능 시간 조회
* @param vo
* @return
*/
public DataMap selectBOShopAtmcSndngTme(BOMaAtmcSndngVO vo) {
DataMap resultMap = new DataMap();
resultMap = mapper.selectBOShopAtmcSndngTme(vo);
return resultMap;
}
/**
* 통합관리자 자동발송관리 쇼핑몰 조회
* @return
*/
public List<DataMap> selectBOSopmalAtmcSndng() {
List<DataMap> resultList = null;
resultList = mapper.selectBOSopmalAtmcSndng();
return resultList;
}
}

View File

@@ -0,0 +1,77 @@
package com.wb.domainserver.domain.admin.ntcn.atmcsndng.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class BOMaAtmcSndngVO extends AbstractVO {
/** 메시지 고유번호 */
private String messageInnb;
/** 이메일 발송양식 고유번호 */
private String emailSndngFormInnb;
/** SMS발송양식 고유번호 */
private String smsSndngFormInnb;
/** 알림톡 발송양식 고유번호 */
private String ntcntalkSndngFormInnb;
/** 쇼핑몰코드 */
private String sopmalCd;
/** 양식구분 */
private String formDvCd;
/** 양식상세구분 */
private String formDtlDvCd;
/** 이메일 사용여부 */
private String emailUseAt;
/** SMS 사용여부 */
private String smsUseAt;
/** 알림톡 사용여부 */
private String ntcntalkUseAt;
/** 마케팅 여부 */
private String marktAt;
/** 관리자 구분 */
private String mngrDv;
/** 노출여부 */
private String expsrAt;
/** 발송기준일자 */
private String sndngStdrDe;
/** 발송기준시간 */
private String sndngStdrTme;
/** 수집기간 */
private String colctPd;
/** 충족기준 */
private String suffcnStdr;
/** 중복발송가능여부 */
private String dplctSndngAt;
/** 발송일 설명 */
private String sndngDc;
/** 자동발송 목록 */
private String atmcSndngList;
public BOMaAtmcSndngVO(String sopmalCd, String formDvCd, String formDtlDvCd, String emailUseAt, String smsUseAt,
String ntcntalkUseAt,
String marktAt,
String sndngStdrDe, String sndngStdrTme) {
this.sopmalCd = sopmalCd;
this.formDvCd = formDvCd;
this.formDtlDvCd = formDtlDvCd;
this.emailUseAt = emailUseAt;
this.smsUseAt = smsUseAt;
this.ntcntalkUseAt = ntcntalkUseAt;
this.marktAt = marktAt;
this.sndngStdrDe = sndngStdrDe;
this.sndngStdrTme = sndngStdrTme;
}
public BOMaAtmcSndngVO() {
super();
// TODO Auto-generated constructor stub
}
}

View File

@@ -0,0 +1,58 @@
package com.wb.domainserver.domain.admin.ntcn.atmcsndng.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class MaAtmcSndngVO extends AbstractVO {
/** 메시지 고유번호 */
private String messageInnb;
/** 이메일 발송양식 고유번호 */
private String emailSndngFormInnb;
/** SMS발송양식 고유번호 */
private String smsSndngFormInnb;
/** 알림톡 발송양식 고유번호 */
private String ntcntalkSndngFormInnb;
/** 쇼핑몰코드 */
private String sopmalCd;
/** 양식구분 */
private String formDvCd;
/** 양식상세구분 */
private String formDtlDvCd;
/** 이메일 사용여부 */
private String emailUseAt;
/** SMS 사용여부 */
private String smsUseAt;
/** 알림톡 사용여부 */
private String ntcntalkUseAt;
/** 마케팅 여부 */
private String marktAt;
/** 관리자 구분 */
private String mngrDv;
/** 노출여부 */
private String expsrAt;
/** 발송기준일자 */
private String sndngStdrDe;
/** 발송기준시간 */
private String sndngStdrTme;
/** 수집기간 */
private String colctPd;
/** 충족기준 */
private String suffcnStdr;
/** 중복발송가능여부 */
private String dplctSndngAt;
/** 발송일 설명 */
private String sndngDc;
/** 자동발송 정보 목록 */
private String atmcSndngList;
}

View File

@@ -0,0 +1,160 @@
package com.wb.domainserver.domain.admin.ntcn.email.controller;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.wb.domainserver.common.mvc.tags.ui.pagination.PaginationInfo;
import com.wb.domainserver.common.prop.PaginationProperties;
import com.wb.domainserver.domain.admin.ntcn.email.service.BOMaEmailService;
import com.wb.domainserver.domain.admin.ntcn.email.vo.BOMaEmailSrchVO;
import com.wb.domainserver.domain.admin.store.sopmal.service.BOMaSopmalService;
import com.wb.domainserver.domain.gcone.common.service.BOCommonService;
import com.wb.domainserver.response.ApiResponse;
import com.wb.domainserver.security.authentication.MemberJwtContextHolder;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.dataaccess.DataMap;
import lombok.extern.slf4j.Slf4j;
/*
* 통합관리자 이메일 발송 내역 BO con
* @author
* @since 2024-04-05
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-04-05 이대환 내용 추가(최초생성)
*
* </pre>
*/
@Slf4j
@RestController
@RequestMapping("/admin/ntcn/email")
public class BOMaEmailController {
@Autowired
private BOMaEmailService service;
@Autowired
private BOMaSopmalService maSopmalService;
@Autowired
private PaginationProperties paginationProperties;
@Autowired
private BOCommonService boCommonService;
/**
* 이메일 발송 내역 검색 코드 조회
* @param bOMaEmailSrchVO
* @return ResponseEntity<?>
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectBOMaEmailSndngListInqireForm")
public ResponseEntity<?> selectBOMaEmailSndngListInqireForm(@RequestBody BOMaEmailSrchVO bOMaEmailSrchVO) {
Map<String, Object> resultMap = new HashMap<>();
List<DataMap> code = null;
//검색 폼 paramVO
code = maSopmalService.selectBOSopmalCdNm();
//검색 폼 code
resultMap.put("bOMaEmailSrchVO",bOMaEmailSrchVO);
resultMap.put("code", code);
return ApiResponse.of(resultMap).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 이메일 발송 내역 목록 조회
* @param bOMaEmailSrchVO
* @return ResponseEntity<?>
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectBOMaEmailSndngListInqire")
public ResponseEntity<?> selectBOMaEmailSndngListInqire(@RequestBody BOMaEmailSrchVO bOMaEmailSrchVO) {
String srchShop = bOMaEmailSrchVO.getSrchShop();
if (srchShop == null) {
bOMaEmailSrchVO.setSrchShop(MemberJwtContextHolder.getMemberInfo().getSopmalCd());
} else if (srchShop.equals("ALL")) {
bOMaEmailSrchVO.setSrchShop(null);
}
Map<String, Object> content = new HashMap<>();
//페이징 처리를 위한 pagination 객체 생성
PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(bOMaEmailSrchVO.getPageIndex());
paginationInfo.setRecordCountPerPage(bOMaEmailSrchVO.getPageUnit());
paginationInfo.setPageSize(paginationProperties.getPageSize());
bOMaEmailSrchVO.setPaginationInfo(paginationInfo);
//페이징 처리를 위한 값 설정
bOMaEmailSrchVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
bOMaEmailSrchVO.setLastIndex(paginationInfo.getLastRecordIndex());
bOMaEmailSrchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
//시크릿 키 설정
String secretKey = boCommonService.selectSecretkey();
bOMaEmailSrchVO.setSecretKey(secretKey);
//이메일 발송 내역 조회 결과 및 페이징정보 넣기
content.put("paginationInfo", bOMaEmailSrchVO.getPaginationInfo());
content.put("boCtrlMap", service.selectBOMaEmailSndngListInqire(bOMaEmailSrchVO));
content.put("BOMaEmailSrchVO", bOMaEmailSrchVO);
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 이메일 발송 내역 상세 조회(수신 정보)
* @param bOMaEmailSrchVO
* @return ResponseEntity<?>
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectBOMaEmailSndngDtlInfo")
public ResponseEntity<?> selectBOMaEmailSndngDtlInfo(@RequestBody BOMaEmailSrchVO bOMaEmailSrchVO) {
Map<String, Object> content = new HashMap<>();
//시크릿 키 설정
String secretKey = boCommonService.selectSecretkey();
bOMaEmailSrchVO.setSecretKey(secretKey);
content.put("boCtrlMap", service.selectBOMaEmailSndngDtlInfo(bOMaEmailSrchVO));
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 이메일 발송 내역 상세 조회(발신자 정보)
* @param bOMaEmailSrchVO
* @return ResponseEntity<?>
*/
// @Policy(AuthPolicy.PUBLIC)
// @RequestMapping(value = "/selectBOMaEmailSndngMbrInfo")
// public ResponseEntity<?> selectBOMaEmailSndngMbrInfo(@RequestBody BOMaEmailSrchVO bOMaEmailSrchVO) {
// Map<String, Object> content = new HashMap<>();
// //페이징 처리를 위한 pagination 객체 생성
// PaginationInfo paginationInfo = new PaginationInfo();
// paginationInfo.setCurrentPageNo(bOMaEmailSrchVO.getPageIndex());
// paginationInfo.setRecordCountPerPage(bOMaEmailSrchVO.getPageUnit());
// paginationInfo.setPageSize(paginationProperties.getPageSize());
// bOMaEmailSrchVO.setPaginationInfo(paginationInfo);
//
// //페이징 처리를 위한 값 설정
// bOMaEmailSrchVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
// bOMaEmailSrchVO.setLastIndex(paginationInfo.getLastRecordIndex());
// bOMaEmailSrchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
//
// //회원 목록 조회 결과 및 페이징정보 넣기
// content.put("paginationInfo", bOMaEmailSrchVO.getPaginationInfo());
// content.put("boCtrlMap", service.selectBOMaEmailSndngMbrInfo(bOMaEmailSrchVO));
// content.put("bOMaEmailSrchVO", bOMaEmailSrchVO);
// log.debug("이메일 발송 내역 상세 조회(발신자 정보) 조회 내용 => {}", content);
// return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
// }
}

View File

@@ -0,0 +1,202 @@
package com.wb.domainserver.domain.admin.ntcn.email.controller;
import com.wb.domainserver.domain.admin.ntcn.email.vo.MaEmailSrchVO;
import com.wb.domainserver.exception.WnbtRestException;
import com.wb.domainserver.response.WnbtWebClientResponseHandler;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.communicate.RESRC;
import com.wb.domainserver.util.communicate.SendToResrc;
import com.wb.domainserver.util.excel.ExcelDownloadUtil;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.*;
/*
* 이메일 발송 목록 FO Controller
* @author 김혜인
* @since 2024-02-01
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-02-01 김혜인. 최초 생성
* 2024-04-04 이대환 내용 수정
*
* </pre>
*/
@Controller
@RequestMapping("/admin/ntcn/email")
@Slf4j
public class MaEmailController {
/** WebClient 호출을 위한 wrapper */
@Autowired
private WnbtWebClientResponseHandler responseHandler;
@Autowired
private SendToResrc sendToResrc;
/** 공통 메시지 처리를 위한 메시지 객체 */
/**
* 이메일 발송 내역 페이지(폼)
* @param model
* @param maEmailSrchVO
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping("/selectEmailSndngDtlsListInqireForm")
public String selectEmailSndngDtlsListInqireForm(ModelMap model, MaEmailSrchVO maEmailSrchVO) {
//BO에서 API 호출(이메일 발송내 목록 조회)
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/ntcn/email/selectBOMaEmailSndngListInqireForm", maEmailSrchVO),
model,
"resultSrchMap"
);
return "admin/ntcn/email/MaEmailSndngDtlsListInqireRForm";
}
/**
* 이메일 발송 내역 - 리스트 조회
* @param model
* @param maEmailSrchVO
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping("/selectEmailSndngDtlsListInqire")
public String selectEmailSndngDtlsListInqire(ModelMap model, MaEmailSrchVO maEmailSrchVO) {
//BO 이메일 발송내 목록 조회 API 호출
try {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/ntcn/email/selectBOMaEmailSndngListInqire", maEmailSrchVO),
model,
"resultListMap"
);
model.addAttribute("emailSrchVO",maEmailSrchVO);
} catch (WnbtRestException wre){
throw new WnbtRestException(wre.getMessage());
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return "admin/ntcn/email/MaEmailSndngDtlsListInqireR";
}
/**
* 이메일 발송 내역 - 엑셀 다운로드
* @param maEmailSrchVO
* @param response
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectEmailSndngDtlsListExcelDwld" , method = RequestMethod.POST)
public void selectEmailSndngDtlsListExcelDwld(MaEmailSrchVO maEmailSrchVO, HttpServletResponse response) {
maEmailSrchVO.setPageIndex(1); //10000건까지 엑셀 출력
maEmailSrchVO.setPageUnit(10000); //10000건까지 엑셀 출력
Map<String,Object> resultMap = responseHandler.handleResponseAsMap(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/ntcn/email/selectBOMaEmailSndngListInqire",maEmailSrchVO)
);
List<Map<String, Object>> resultMapList = new ArrayList<>();
if(resultMap != null) {
resultMapList = (List<Map<String, Object>>) resultMap.get("boCtrlMap");
}
List<Map<String, Object>> dataList = new ArrayList<>();
//엑셀 다운로드 다운로드 시간
Date date = new Date();
SimpleDateFormat excelFormat = new SimpleDateFormat("yyyyMMddHHmmss");
String str = excelFormat.format(date);
//엑셀 항목에 출력될 내용 설정
if(resultMapList != null && !resultMapList.isEmpty()) {
for (int i = 0; i < resultMapList.size(); i++) {
Map<String, Object> row = resultMapList.get(i);
HashMap<String, Object> dataMap = new HashMap<>();
int caculateSize = calculateSize(resultMapList.size(), i);
dataMap.put("rnum", caculateSize); //번호 역순 출력
dataMap.put("sj", row.get("sj"));
dataMap.put("email", row.get("email"));
dataMap.put("sndngEmail", row.get("sndngEmail"));
dataMap.put("sopmalNm", row.get("sopmalNm"));
dataMap.put("registDt", row.get("registDt"));
dataList.add(dataMap);
}
}
//엑셀 항목별 제목에 출력될 내용 설정
LinkedHashMap<String, String> headerMap = new LinkedHashMap<String, String>();
headerMap.put("rnum", "번호");
headerMap.put("sj", "이메일 제목");
headerMap.put("email", "발송주소");
headerMap.put("sndngEmail", "수신주소");
headerMap.put("sopmalNm", "쇼핑몰");
headerMap.put("registDt", "발송일시");
try {
ExcelDownloadUtil.createExcel("email_Sndng_list_" + str, headerMap, dataList, response);
}catch(IOException ioe) {
throw new WnbtRestException("엑셀다운로드 중 오류가 발생하였습니다.");
}
}
/**
* 안전하게 계산 처리 메소드
* @param size
* @param index
* @return
*/
private int calculateSize(int size, int index) {
return size - index;
}
/**
* 이메일 발송 내역 - 리스트 조회 > 이메일 상세 조회 팝업 (발신 정보)
* @param model
* @param maEmailSrchVO
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping("/selectEmailSndngDtlPopup")
public String selectEmailSndngDtlPopup(ModelMap model, MaEmailSrchVO maEmailSrchVO) {
//BO에서 API 호출(이메일 발송내 목록 조회)
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/ntcn/email/selectBOMaEmailSndngDtlInfo", maEmailSrchVO),
model,
"resultMapDtl"
);
return "admin/ntcn/email/MaEmailSndngDtlPopupR";
}
/**
* 이메일 발송 내역 - 리스트 조회 > 이메일 상세 조회 팝업 - 수신자 정보
* @param model
* @param maEmailSrchVO
* @return String
*/
// @Policy(AuthPolicy.RESTRICTED)
// @RequestMapping("/selectEmailSndngDtlPopupMbrTb")
// public String selectEmailSndngDtlPopupMbrTb(ModelMap model, MaEmailSrchVO maEmailSrchVO) {
// log.debug("이메일 상세 조회 팝업 (수신자 정보) param =>{}", maEmailSrchVO);
// //BO 이메일 발송내 목록 조회 API 호출
// try {
// ReplyFromResrc reply = sendToResrc.ofPost(RESRC.GCONEBO, "/admin/ntcn/email/selectBOMaEmailSndngMbrInfo", maEmailSrchVO);
// log.debug("이메일 상세 조회 팝업 > 수신자 정보 BO 호출 결과 =>{} ",reply.getReply());
// //BO 이메일 발송내 목록 조회 API 결과를 Map으로 변환하여 설정
// model.addAttribute("resultListMapMbr", BoResultMapConverter.convert(new ObjectMapper(), reply.getReply()));
// } catch(Exception e) {
// log.error(e.getMessage(), e);
// }
// return "admin/ntcn/email/MaEmailSndngDtlPopupMbrTb";
// }
}

View File

@@ -0,0 +1,87 @@
package com.wb.domainserver.domain.admin.ntcn.email.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import com.wb.domainserver.domain.admin.ntcn.email.vo.BOMaEmailSrchVO;
import com.wb.domainserver.domain.admin.ntcn.email.vo.BOMaEmailVO;
import com.wb.domainserver.domain.gcone.ntcn.email.vo.BOEmailLogVO;
import com.wb.domainserver.domain.gcone.ntcn.email.vo.BOEmailVO;
import com.wb.domainserver.util.dataaccess.DataMap;
/**
*
* 통합관리자 이메일 발송 내역 BO mapper
* @author
* @since 2024-04-05
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-04-05 이대환 내용 추가(최초생성)
*
* </pre>
*/
@Mapper
@Repository
public interface BOMaEmailMapper {
/* ####################################
이메일 발송 서비스 시작
#################################### */
/** 이메일 발송 관리 목록 조회 */
public List<DataMap> selectBOMaEmailSndngDtlsListInqire(BOMaEmailSrchVO vo);
/** 이메일 발송 관리 건수 조회 */
public Integer selectBOMaEmailSndngDtlsListTotCnt(BOMaEmailSrchVO vo);
/** 이메일 발송대상 순번 조회 */
// public List<Integer> selectBOMaEmailSndngTrgetSnb(int emailSndngInnb);
/** 이메일 발송 관리 수신 정보 조회 */
public DataMap selectBOMaEmailSndngDtlInfo(BOMaEmailSrchVO vo);
/** 이메일 발송 관리 발신 목록 조회 */
// public List<DataMap> selectBOMaEmailSndngMbrInfo(BOMaEmailSrchVO vo);
/** 이메일 발송 관리 발신 목록 건수 */
// public Integer selectBOMaEmailSndngMbrInfoTotCnt(BOMaEmailSrchVO vo);
/* ####################################
이메일 발송 서비스 끝
#################################### */
/**
* 이메일 발송내역 등록
* @param vo
* @return
*/
// public void insertBOMaEmailSndngDtls(BOMaEmailVO vo);
/**
* 이메일 발송대상 등록
* @param vo
* @return
*/
// public void insertBOMaEmailSndngTo(BOMaEmailVO vo);
/**
* 이메일 발송여부 업데이트
* @param vo
* @return
*/
// public void updateBOMaEmailSndng(List<BOEmailVO> voList);
/**
* 이메일 발송로그 등록
* @param vo
* @return
*/
public void insertBOMaEmailSndngLog(List<BOEmailLogVO> voList);
/**
* 이메일 로그 상태 수정
* @param logList
*/
void updateEmailLog(List<BOEmailLogVO> logList);
}

View File

@@ -0,0 +1,101 @@
package com.wb.domainserver.domain.admin.ntcn.email.service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.wb.domainserver.domain.admin.ntcn.email.mapper.BOMaEmailMapper;
import com.wb.domainserver.domain.admin.ntcn.email.vo.BOMaEmailSrchVO;
import com.wb.domainserver.domain.admin.sys.comncd.service.BOMaComncdService;
import com.wb.domainserver.domain.admin.sys.comncd.vo.BOMaComncdVO;
import com.wb.domainserver.util.dataaccess.DataMap;
import lombok.extern.slf4j.Slf4j;
/**
* 통합관리자 이메일 발송 내역 BO service
* @author
* @since 2024-04-05
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-04-05 이대환 내용 추가(최초생성)
*
* </pre>
*/
@Service
@Slf4j
public class BOMaEmailService {
@Autowired
private BOMaEmailMapper mapper;
@Autowired
private BOMaComncdService bOMaComncdService;
/**
* 이메일 발송 내역 검색 코드 조회
* @return List<DataMap>
*/
// public List<DataMap> selectBOMaEmailSndngDtlsListInqireForm() {
// //브랜드코드
// BOMaComncdVO bOMaComncdVO = new BOMaComncdVO();
// bOMaComncdVO.setGroupCd("BRAND");
// List<DataMap> brand = bOMaComncdService.selectBOCommcdDetailList(bOMaComncdVO);
// log.debug("brand", brand);
// return brand;
// }
/**
* 이메일 발송 내역 목록 조회
* @param bOMaEmailSrchVO
* @return List<DataMap>
*/
public List<DataMap> selectBOMaEmailSndngListInqire(BOMaEmailSrchVO bOMaEmailSrchVO){
List<DataMap> servList = null;
Map<String, Object> resultMap = new HashMap<>();
// 건수 조회
Integer totCnt = mapper.selectBOMaEmailSndngDtlsListTotCnt(bOMaEmailSrchVO);
// 건수 갯수 페이징 vo 에 set
bOMaEmailSrchVO.getPaginationInfo().setTotalRecordCount(totCnt);
// 건수 > 0 일시 목록 조회
if(totCnt > 0) {
servList = mapper.selectBOMaEmailSndngDtlsListInqire(bOMaEmailSrchVO);
}
return servList;
}
/**
* 이메일 발송 내역 상세 조회(수신 정보)
* @param bOMaEmailSrchVO
* @return List<DataMap>
*/
public DataMap selectBOMaEmailSndngDtlInfo(BOMaEmailSrchVO bOMaEmailSrchVO){
DataMap SndngDtlInfo = null;
//수신 정보 조회
SndngDtlInfo = mapper.selectBOMaEmailSndngDtlInfo(bOMaEmailSrchVO);
return SndngDtlInfo;
}
/**
* 이메일 발송 내역 상세 조회(발신자 정보)
* @param bOMaEmailSrchVO
* @return Map<String, Object>
*/
// public List<DataMap> selectBOMaEmailSndngMbrInfo(BOMaEmailSrchVO bOMaEmailSrchVO){
// log.debug("회원 목록 조회 param확인 (발신자 정보) => {}",bOMaEmailSrchVO);
// List<DataMap> SndngMbrInfo = null;
// // 건수 조회
// Integer totCnt = mapper.selectBOMaEmailSndngMbrInfoTotCnt(bOMaEmailSrchVO);
// // 건수 갯수 페이징 vo 에 set
// bOMaEmailSrchVO.getPaginationInfo().setTotalRecordCount(totCnt);
// // 건수 > 0 일시 이메일 발송 내역 발신자 정보 조회
// if(totCnt > 0) {
// SndngMbrInfo = mapper.selectBOMaEmailSndngMbrInfo(bOMaEmailSrchVO);
// }
// return SndngMbrInfo;
// }
}

View File

@@ -0,0 +1,31 @@
package com.wb.domainserver.domain.admin.ntcn.email.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class BOMaEmailSrchVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/**검색어타입*/
public String srchType;
/**검색어*/
public String srchStr;
/**쇼핑몰코드*/
private String srchShop;
/**자동발송여부*/
private String atmcAt;
/**검색 시작 발송 날짜 */
private String srchStrtSndngDt;
/**검색 종료 발송 날짜 */
private String srchEndSndngDt ;
/**이메일 발송로그 고유번호*/
private String emailLogInnb ;
/*secretkey*/
private String secretKey;
}

View File

@@ -0,0 +1,86 @@
package com.wb.domainserver.domain.admin.ntcn.email.vo;
import java.sql.Date;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class BOMaEmailVO extends AbstractVO {
/** 이메일 발송 고유번호 */
private Integer emailSndngInnb;
/**
* FM_EMAIL 이메일 발송내역
*/
/** 쇼핑몰 코드 */
private String sopmalCd;
/** 발송위치 */
private String sndngLc;
/** 제목 */
private String sj;
/** 내용 */
private String cn;
/** 보내는사람 EMAIL */
private String sndrEmail;
/** 수신거부URL */
private String recptnRjctUrl;
/** 등록자구분 (01:회원, 02:관리자, 03:시스템, 04:기타) */
private String regusrDv;
/** 이메일 발송양식 고유번호 */
private Integer emailSndngFormInnb;
/**
* FM_EMAIL_TO 이메일 대상
*/
/** 대상순번 */
private Integer trgetSnb;
/** 회원고유번호 */
private Integer mbrInnb;
/** 받는사람 EMAIL */
private String recpntEmail;
/** 받는사람명 */
private String recpntNm;
/** 상태(REG:등록, BAD:불량, WAIT:대기, SEND:전송, FAIL:실패, OK:성공) */
private String sttus;
/** 발송일시 */
private Date sndngDt;
/** 결과코드(1000 또는 101 : 성공, 그 외 API 참조) */
private String rsltCd;
/**
* 회원 검색 팝업
*/
/** 검색 회원 정보 JSON */
private String mbrInfo;
/** 검색 회원 명 수 */
// private String sndngCnt;
public BOMaEmailVO(BOMaEmailVO oldVo) {
this.emailSndngInnb = oldVo.emailSndngInnb;
this.sopmalCd = oldVo.sopmalCd;
this.sndngLc = oldVo.sndngLc;
this.sj = oldVo.sj;
this.cn = oldVo.cn;
this.sndrEmail = oldVo.sndrEmail;
this.recptnRjctUrl = oldVo.recptnRjctUrl;
this.regusrDv = oldVo.regusrDv;
this.trgetSnb = oldVo.trgetSnb;
this.mbrInnb = oldVo.mbrInnb;
this.recpntEmail = oldVo.recpntEmail;
this.recpntNm = oldVo.recpntNm;
this.sttus = oldVo.sttus;
this.sndngDt = oldVo.sndngDt;
this.rsltCd = oldVo.rsltCd;
// this.mbrInfo = oldVo.mbrInfo;
// this.sndngCnt = oldVo.sndngCnt;
}
public BOMaEmailVO() {
super();
// TODO Auto-generated constructor stub
}
}

View File

@@ -0,0 +1,28 @@
package com.wb.domainserver.domain.admin.ntcn.email.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class MaEmailSrchVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/**검색어타입*/
public String srchType;
/**검색어*/
public String srchStr;
/**쇼핑몰코드*/
private String srchShop;
/**자동발송여부*/
private String atmcAt;
/**검색 시작 발송 날짜 */
private String srchStrtSndngDt;
/**검색 종료 발송 날짜 */
private String srchEndSndngDt ;
/**이메일 발송로그 고유번호*/
private String emailLogInnb ;
}

View File

@@ -0,0 +1,65 @@
package com.wb.domainserver.domain.admin.ntcn.email.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import jakarta.validation.constraints.NotEmpty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.sql.Date;
@Data
@EqualsAndHashCode(callSuper = false)
public class MaEmailVO extends AbstractVO {
/** 이메일 발송 고유번호 */
private Integer emailSndngInnb;
/**
* FM_EMAIL 이메일 발송내역
*/
/** 쇼핑몰 코드 */
private String sopmalCd;
/** 발송위치 */
private String sndngLc;
/** 제목 */
@NotEmpty(message = "이메일제목")
private String sj;
/** 내용 */
@NotEmpty(message = "이메일내용")
private String cn;
/** 보내는사람 EMAIL */
@NotEmpty(message = "발신자")
private String sndrEmail;
/** 수신거부URL */
private String recptnRjctUrl;
/** 등록자구분 (01:회원, 02:관리자, 03:시스템, 04:기타) */
private String regusrDv;
/** 이메일 발송양식 고유번호 */
private Integer emailSndngFormInnb;
/**
* FM_EMAIL_TO 이메일 대상
*/
/** 대상순번 */
private Integer trgetSnb;
/** 회원고유번호 */
private Integer mbrInnb;
/** 받는사람 EMAIL */
private String recpntEmail;
/** 받는사람명 */
private String recpntNm;
/** 상태(REG:등록, BAD:불량, WAIT:대기, SEND:전송, FAIL:실패, OK:성공) */
private String sttus;
/** 발송일시 */
private Date sndngDt;
/** 결과코드(1000 또는 101 : 성공, 그 외 API 참조) */
private String rsltCd;
/**
* 회원 검색 팝업
*/
/** 검색 회원 정보 JSON */
private String mbrInfo;
/** 검색 회원 명 수 */
// private String sndngCnt;
}

View File

@@ -0,0 +1,143 @@
package com.wb.domainserver.domain.admin.ntcn.mssage.controller;
import com.wb.domainserver.common.mvc.tags.ui.pagination.PaginationInfo;
import com.wb.domainserver.common.prop.PaginationProperties;
import com.wb.domainserver.domain.admin.ntcn.mssage.service.BOMaMssageService;
import com.wb.domainserver.domain.admin.ntcn.mssage.vo.BOMaMssageSrchVO;
import com.wb.domainserver.domain.admin.store.sopmal.service.BOMaSopmalService;
import com.wb.domainserver.domain.admin.sys.comncd.service.BOMaComncdService;
import com.wb.domainserver.domain.admin.sys.comncd.vo.BOMaComncdVO;
import com.wb.domainserver.domain.gcone.common.service.BOCommonService;
import com.wb.domainserver.response.ApiResponse;
import com.wb.domainserver.security.authentication.AnonymousUser;
import com.wb.domainserver.security.authentication.MemberJwtContextHolder;
import com.wb.domainserver.security.authentication.MemberJwtToken;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.communicate.SendToResrc;
import com.wb.domainserver.util.dataaccess.DataMap;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Slf4j
@RestController
@RequestMapping("/admin/ntcn/mssage")
public class BOMaMssageController {
@Autowired
private BOMaMssageService service;
@Autowired
private SendToResrc sendToResrc;
@Autowired
private PaginationProperties paginationProperties;
@Autowired
private BOMaComncdService bOMaComncdService;
@Autowired
private BOMaSopmalService maSopmalService;
@Autowired
private BOCommonService boCommonService;
@Autowired
private ProjectInfoAutoConfiguration projectInfoAutoConfiguration;
/**
* 메시지 발송 내역 검색 코드 조회
* @param bOSmsSrchVO
* @return ResponseEntity<?>
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectBOSmsSndngDtlsListInqireForm")
public ResponseEntity<?> selectBOSmsSndngDtlsListInqireForm(@RequestBody BOMaMssageSrchVO boMaMssageSrchVO) {
Map<String, Object> resultMap = new HashMap<>();
//브랜드코드
BOMaComncdVO bOMaComncdVO = new BOMaComncdVO();
//메시지 종류
bOMaComncdVO.setGroupCd("SMS_SNDNG_KND");
List<DataMap> sms = bOMaComncdService.selectBOCommcdDetailList(bOMaComncdVO);
//발송상태
bOMaComncdVO.setGroupCd("SMS_SNDNG_STTUS");
List<DataMap> smsTy = bOMaComncdService.selectBOCommcdDetailList(bOMaComncdVO);
//검색 폼 code
resultMap.put("brand",maSopmalService.selectBOSopmalCdNm());
resultMap.put("sms",sms);
resultMap.put("smsTy",smsTy);
resultMap.put("boMaMssageSrchVO",boMaMssageSrchVO);
resultMap.put("code",service.selectBOSmsSndngDtlsListInqireForm());
return ApiResponse.of(resultMap).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 메시지 발송 내역 목록 조회
* @param bOSmsSrchVO
* @return ResponseEntity<?>
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectBOSmsSndngListInqire")
public ResponseEntity<?> selectBOSmsSndngListInqire(@RequestBody BOMaMssageSrchVO bOMaMssageSrchVO) {
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
bOMaMssageSrchVO.setRegusr(user.getUserInnb());
bOMaMssageSrchVO.setUpdusr(user.getUserInnb());
DataMap content = new DataMap();
//페이징 처리를 위한 pagination 객체 생성
PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(bOMaMssageSrchVO.getPageIndex());
paginationInfo.setRecordCountPerPage(bOMaMssageSrchVO.getPageUnit());
paginationInfo.setPageSize(paginationProperties.getPageSize());
bOMaMssageSrchVO.setPaginationInfo(paginationInfo);
//페이징 처리를 위한 값 설정
bOMaMssageSrchVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
bOMaMssageSrchVO.setLastIndex(paginationInfo.getLastRecordIndex());
bOMaMssageSrchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
bOMaMssageSrchVO.setSecretKey(boCommonService.selectSecretkey());
//메시지 발송 목록 조회 결과 및 페이징정보 넣기
content.put("paginationInfo", bOMaMssageSrchVO.getPaginationInfo());
content.put("mssageMap", service.selectBOSmsSndngListInqire(bOMaMssageSrchVO));
content.put("bOMaMssageSrchVO", bOMaMssageSrchVO);
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 메시지 발송 내역 상세 조회(수신 정보)
* @param bOMssageSrchVO
* @return ResponseEntity<?>
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectBOSmsSndngDtlInfo")
public ResponseEntity<?> selectBOSmsSndngDtlInfo(@RequestBody BOMaMssageSrchVO bOMaMssageSrchVO) {
Map<String, Object> content = new HashMap<>();
content.put("mssageDtlMap", service.selectBOSmsSndngDtlInfo(bOMaMssageSrchVO));
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/*************************************
정산
*************************************/
}

View File

@@ -0,0 +1,50 @@
package com.wb.domainserver.domain.admin.ntcn.mssage.mapper;
import com.wb.domainserver.domain.admin.ntcn.mssage.vo.BOMaMssageSrchVO;
import com.wb.domainserver.domain.gcone.ntcn.mssage.vo.BOMssageSrchVO;
import com.wb.domainserver.util.dataaccess.DataMap;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import java.util.List;
@Mapper
@Repository
public interface BOMaMssageMapper {
/**
* 발송 관리 목록 조회
*
* @param boMssageSrchVO
* @return List<DataMap>
*/
public List<DataMap> selectBOSmsSndngDtlsListInqire(BOMaMssageSrchVO boMaMssageSrchVO);
/**
* 발송 관리 건수 조회
*
* @param bOSmsVO
* @return Integer
*/
public Integer selectBOSmsSndngDtlsListTotCnt(BOMaMssageSrchVO boMaMssageSrchVO);
/**
* 발송 관리 수신 정보 조회
*
* @param boMssageSrchVO
* @return DataMap
*/
public DataMap selectBOSmsSndngDtlInfo(BOMaMssageSrchVO boMaMssageSrchVO);
/**
* 발송 관리 성공, 실패 건수 조회
*
* @param boMssageSrchVO
* @return Integer
*/
public DataMap selectBOSmsSndngresultSttusCnt(BOMaMssageSrchVO boMaMssageSrchVO);
}

View File

@@ -0,0 +1,243 @@
package com.wb.domainserver.domain.admin.ntcn.mssage.service;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.wb.domainserver.domain.admin.ntcn.mssage.mapper.BOMaMssageMapper;
import com.wb.domainserver.domain.admin.ntcn.mssage.vo.BOMaMssageSrchVO;
import com.wb.domainserver.domain.admin.sys.comncd.service.BOMaComncdService;
import com.wb.domainserver.domain.admin.sys.comncd.vo.BOMaComncdVO;
import com.wb.domainserver.domain.gcone.ntcn.mssage.mapper.BOMssageMapper;
import com.wb.domainserver.domain.gcone.ntcn.mssage.vo.BOMssageSrchVO;
import com.wb.domainserver.exception.WnbtRestException;
import com.wb.domainserver.util.dataaccess.DataMap;
import com.wb.domainserver.util.string.StringUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@Slf4j
@Service
public class BOMaMssageService {
@Autowired
private BOMaMssageMapper mapper;
@Autowired
private BOMaComncdService bOMaComncdService;
/**
* SMS 발송 내역 검색 코드 조회
* @return List<DataMap>
*/
public Map<String,Object> selectBOSmsSndngDtlsListInqireForm() {
Map<String,Object> code = new HashMap<>();
BOMaComncdVO bOMaComncdVO = new BOMaComncdVO();
//메시지 종류
bOMaComncdVO.setGroupCd("SMS_SNDNG_KND");
List<DataMap> sndngTy = bOMaComncdService.selectBOCommcdDetailList(bOMaComncdVO);
code.put("sndngTy", sndngTy);
//메시지 발송 상태 종류
bOMaComncdVO.setGroupCd("SMS_SNDNG_STTUS");
List<DataMap> sndngSttus = bOMaComncdService.selectBOCommcdDetailList(bOMaComncdVO);
code.put("sndngSttus", sndngSttus);
return code;
}
/**
* 메시지 발송 내역 목록 조회
* @param bOSmsSrchVO
* @return DataMap
*/
public DataMap selectBOSmsSndngListInqire(BOMaMssageSrchVO BOMaMssageSrchVO){
List<DataMap> smsSndngList = null;
DataMap rsltSttusCnt = null;
DataMap resultMap = new DataMap();
// 건수 조회
Integer totCnt = mapper.selectBOSmsSndngDtlsListTotCnt(BOMaMssageSrchVO);
log.info("totCnt => {}",totCnt);
// 건수 갯수 페이징 vo 에 set
BOMaMssageSrchVO.getPaginationInfo().setTotalRecordCount(totCnt);
// 건수 > 0 일시 목록 조회
if(totCnt > 0) {
smsSndngList = mapper.selectBOSmsSndngDtlsListInqire(BOMaMssageSrchVO);
//실제 표출시
smsSndngList = smsSndngList.stream()
.map(map -> {
DataMap sndngMap = new DataMap();
sndngMap.putAll(map);
//변환 이전 내용
String orgCn = StringUtil.isNullToString(map.get("cn"));
ObjectMapper objectMapper = new ObjectMapper();
DataMap substData = new DataMap();
if(!"".equals(StringUtil.isNullToString(map.get("substData")))) {
try {
//치환데이터 내용 map으로 변경
substData = objectMapper.readValue(StringUtil.isNullToString(map.get("substData")), DataMap.class);
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
}
//변환
String convertCnStr = mssageConvert(orgCn, substData);
if(convertCnStr.length() >= 40) {
convertCnStr = convertCnStr.substring(0, 40) + "...";
}
sndngMap.put("cn", convertCnStr);
//제목
String subjectStr = StringUtil.isNullToString(map.get("head"));
//제목이 없을 경우 내용 40자리
if("".equals(subjectStr)){
sndngMap.put("head", StringUtil.cutString(convertCnStr, 40));
} else {
sndngMap.put("head",subjectStr);
}
return sndngMap;
})
.toList();
}
resultMap.put("smsSndngList", smsSndngList);
return resultMap;
}
/**
* 메시지 발송 내역 상세 조회(수신 정보)
* @param bOMssageSrchVO
* @return DataMap
*/
public DataMap selectBOSmsSndngDtlInfo(BOMaMssageSrchVO bOMaMssageSrchVO){
DataMap sndngDtlInfo = new DataMap();
try {
//수신 정보 조회
sndngDtlInfo = mapper.selectBOSmsSndngDtlInfo(bOMaMssageSrchVO);
ObjectMapper objectMapper = new ObjectMapper();
String orgCn = StringUtil.isNullToString(sndngDtlInfo.get("cn"));
if(!"".equals(StringUtil.isNullToString(sndngDtlInfo.get("substData")))) {
DataMap sndngData = objectMapper.readValue(StringUtil.isNullToString(sndngDtlInfo.get("substData")), DataMap.class);
String convertCnStr = mssageConvert(orgCn, sndngData);
sndngDtlInfo.put("cn", convertCnStr);
}
} catch (WnbtRestException wre){
throw new WnbtRestException(wre.getMessage());
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return sndngDtlInfo;
}
/**
* 메시지 내 치환코드에 따라 변경 처리
* @param replaceMap
* @return
*/
public String mssageConvert(String cn, DataMap replaceMap) {
//필요에 따라 db 갈수 도 있으나 현재는 없다고 판단함
//내부로직 전체 가져오지않은 상태
//치환코드
Pattern pattern = Pattern.compile(
"(\\#\\{([^\\}]*)\\})|" + // #{key} 패턴
"(\\{([^\\}]*)\\})|" + // {key} 패턴
"(?<=__)([a-zA-Z0-9_]+)(?=__)" // __key__ 패턴
);
/*
Pattern pattern = Pattern.compile(
"(\\#\\{([^\\}]*)\\})|(\\{([^\\}]*)\\})|(#\\{[a-zA-Z]+\\}|\\{[a-zA-Z]+\\}|(?<=__)[a-zA-Z0-9_]+(?=__))");
*/
//메시지가 있는 경우
Matcher matcher = pattern.matcher(cn);
String output = matcher.replaceAll(match -> {
String key = "";
if(match.group(2) != null) {
//#{}으로 감싸져 있는 치환코드, 알림톡인 경우
key = match.group(2);
} else if(match.group(4) != null){
//{}으로 감싸져 있는 치환코드, 일반인 경우
key = match.group(4);
} else {
//__ __으로 감싸져 있는 치환코드, 대량
key = match.group(5);
if(key != null && key.contains("LINK")) {
key = key.replace("LINK_URL", "linkUrl");
}
if(key != null && key.contains("NUM")) {
key = key.replace("NUM", "substChr");
}
}
String camelKey = snakeToCamel(key);
Object value = replaceMap.getOrDefault(camelKey, match.group());
if(value instanceof LocalDateTime) {
// LocalDateTime인 경우 포맷팅 처리
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
return ((LocalDateTime) value).format(formatter);
} else {
return StringUtil.isNullToString(value);
}
});
return output;
}
// snake_case를 camelCase로 변환하는 헬퍼 메서드
private String snakeToCamel(String snake) {
StringBuilder result = new StringBuilder();
boolean upperCaseNext = false;
if(snake != null) {
for (int i = 0; i < snake.length(); i++) {
char c = snake.charAt(i); // charAt()을 사용하여 각 문자를 처리
if (c == '_') {
upperCaseNext = true;
} else {
if (upperCaseNext) {
result.append(Character.toUpperCase(c));
upperCaseNext = false;
} else {
result.append(c);
}
}
}
}
return result.toString();
}
}

View File

@@ -0,0 +1,51 @@
package com.wb.domainserver.domain.admin.ntcn.mssage.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
@Data
@EqualsAndHashCode(callSuper = false)
public class BOMaMssageSrchVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/**검색어타입*/
public String srchType;
/**검색어*/
public String srchStr;
/**검색 등록자 구분 */
private String srchRegusrDv;
/**발송 상태*/
private String srchSndngSttus;
/**발송 종류*/
private String srchSndngTy;
/**검색 시작 주문 금액 날짜 */
private String srchStrtSndngDt;
/**검색 종료 주문 금액 날짜 */
private String srchEndSndngDt ;
/**검색 쇼핑몰 코드*/
private String srchSopmalCd;
/**검색 발송 조회 기간 구분*/
private String srchDtDv;
/**검색 발송번호*/
private String sndngNb;
/** 검색 SMS 발송 고유번호*/
private String srchSmsInnb ;
/** 검색 SMS 발송 대상 고유번호*/
private String srchSmsToInnb ;
/** 검색 발송 식별번호 */
private Integer srchSndngIdnb;
/** 검색 수신번호*/
private String srchRecptnNb ;
/**검색 수신/발신 번호 구분 */
private String srchNbDv;
/**검색 발송유형 */
private List<String> srchDv;
/**검색 현재상태*/
private List<String> srchSttus;
/** 암호화 키 **/
private String secretKey;
}

View File

@@ -0,0 +1,185 @@
package com.wb.domainserver.domain.admin.ntcn.sms.controller;
import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.domain.admin.ntcn.sms.vo.MaSmsSrchVO;
import com.wb.domainserver.domain.mngr.ntcn.mssage.vo.MssageSrchVO;
import com.wb.domainserver.exception.WnbtRestException;
import com.wb.domainserver.response.WnbtWebClientResponseHandler;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.communicate.RESRC;
import com.wb.domainserver.util.communicate.SendToResrc;
import com.wb.domainserver.util.excel.ExcelDownloadUtil;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.*;
/*
* 통합관리자 > 문자메시지 발송 목록 FO Controller
* @author 김혜인
* @since 2024-02-19
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-02-19 김혜인. 최초 생성
* 2024-06-20 이대환. 내용 수정
*
* </pre>
*/
@Controller
@RequestMapping("/admin/ntcn/sms")
@Slf4j
public class MaSmsController {
/** WebClient 호출을 위한 wrapper */
@Autowired
private WnbtWebClientResponseHandler responseHandler;
@Autowired
private SendToResrc sendToResrc;
/** 공통 메시지 처리를 위한 메시지 객체 */
@Autowired
private GconeMessageSource gconeMessageSource;
/**
* 문자메시지 발송 목록 조회 폼
* @param MssageSrchVO
* @return MaSmsSndngDtlsListInqireRForm.jsp
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping("/selectSmsSndngDtlsListInqireForm")
public String selectSmsSndngDtlsListInqireForm(ModelMap model, MssageSrchVO mssageSrchVO) {
//BO에서 API 호출
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/ntcn/mssage/selectBOSmsSndngDtlsListInqireForm", mssageSrchVO),
model,
"resultMap"
);
return "admin/ntcn/sms/MaSmsSndngDtlsListInqireRForm";
}
/**
* 문자메시지 발송 내역 - 리스트 조회
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping("/selectSmsSndngDtlsListInqire")
public String selectSmsSndngDtlsListInqire(ModelMap model, MaSmsSrchVO maSmsSrchVO) {
//BO 문자메시지 발송 내역 조회 API 호출
try {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/ntcn/mssage/selectBOSmsSndngListInqire", maSmsSrchVO),
model,
"resultListMap"
);
model.addAttribute("maSmsSrchVO", maSmsSrchVO);
} catch (WnbtRestException wre){
throw new WnbtRestException(wre.getMessage());
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return "admin/ntcn/sms/MaSmsSndngDtlsListInqireR";
}
/**
* 문자메시지 상세 조회
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping("/selectSmsSndngDtlPopup")
public String selectSmsSndngDtlPopup(ModelMap model, MssageSrchVO mssageSrchVO) {
log.debug("메시지 상세 조회 팝업 param =>{}", mssageSrchVO);
//BO에서 API 호출
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/ntcn/mssage/selectBOSmsSndngDtlInfo", mssageSrchVO),
model,
"resultMap"
);
return "admin/ntcn/sms/MaSmsSndngDtlPopupR";
}
/**
* 엑셀 다운로드
* @param MssageSrchVO
* @param response
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/selectSmsSndngDtlsListExcelDwld" , method = RequestMethod.POST)
public void selectSmsSndngDtlsListExcelDwld(MssageSrchVO mssageSrchVO,HttpServletResponse response) {
mssageSrchVO.setPageIndex(1); //10000건까지 엑셀 출력
mssageSrchVO.setPageUnit(10000); //10000건까지 엑셀 출력
Map<String,Object> resultMap = responseHandler.handleResponseAsMap(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ntcn/mssage/selectBOSmsSndngListInqire",mssageSrchVO)
);
List<Map<String, Object>> resultMapList = new ArrayList<>();
if(resultMap != null) {
LinkedHashMap<String, Object> boCtrlMap = (LinkedHashMap<String, Object>) resultMap.get("boCtrlMap");
if(boCtrlMap != null) {
resultMapList = (List<Map<String, Object>>) boCtrlMap.get("smsSndngList");
}
}
List<Map<String, Object>> dataList = new ArrayList<>();
//엑셀 다운로드 다운로드 시간
Date date = new Date();
SimpleDateFormat excelFormat = new SimpleDateFormat("yyyyMMddHHmmss");
String str = excelFormat.format(date);
//엑셀 항목에 출력될 내용 설정
for (int i = 0; i < resultMapList.size(); i++) {
Map<String, Object> row = resultMapList.get(i);
HashMap<String, Object> dataMap = new HashMap<>();
int caculateSize = calculateSize(resultMapList.size(), i);
dataMap.put("rnum", caculateSize); //번호 역순 출력
dataMap.put("recptnNb", row.get("recptnNb"));
dataMap.put("sndngNb", row.get("sndngNb"));
dataMap.put("dv", row.get("dv"));
dataMap.put("sopmalNm", row.get("sopmalNm")!=null?row.get("sopmalNm"):row.get("sopmalCd"));
dataMap.put("cn", row.get("cn"));
dataMap.put("sndngDt", row.get("sndngDt"));
dataList.add(dataMap);
}
//엑셀 항목별 제목에 출력될 내용 설정
LinkedHashMap<String, String> headerMap = new LinkedHashMap<String, String>();
headerMap.put("rnum", "번호");
headerMap.put("recptnNb", "발송번호");
headerMap.put("sndngNb", "수신번호");
headerMap.put("dv", "종류");
headerMap.put("sopmalNm", "쇼핑몰");
headerMap.put("cn", "내용");
headerMap.put("sndngDt", "발송일시");
try {
ExcelDownloadUtil.createExcel("sms_Sndng_list_" + str, headerMap, dataList, response);
}catch(IOException ioe) {
throw new WnbtRestException("엑셀다운로드 중 오류가 발생하였습니다.");
}
}
/**
* 안전하게 계산 처리 메소드
* @param size
* @param index
* @return
*/
private int calculateSize(int size, int index) {
return size - index;
}
}

View File

@@ -0,0 +1,49 @@
package com.wb.domainserver.domain.admin.ntcn.sms.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
@Data
@EqualsAndHashCode(callSuper = false)
public class MaSmsSrchVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/**검색어타입*/
public String srchType;
/**검색어*/
public String srchStr;
/**검색 등록자 구분 */
private String srchRegusrDv;
/**발송 상태*/
private String srchSndngSttus;
/**발송 종류*/
private String srchSndngTy;
/**검색 시작 주문 금액 날짜 */
private String srchStrtSndngDt;
/**검색 종료 주문 금액 날짜 */
private String srchEndSndngDt ;
/**검색 쇼핑몰 코드*/
private String srchSopmalCd;
/**검색 발송 조회 기간 구분*/
private String srchDtDv;
/**검색 발송번호*/
private String sndngNb;
/** 검색 SMS 발송 고유번호*/
private String srchSmsInnb ;
/** 검색 SMS 발송 대상 고유번호*/
private String srchSmsToInnb ;
/** 검색 발송 식별번호 */
private Integer srchSndngIdnb;
/** 검색 수신번호*/
private String srchRecptnNb ;
/**검색 수신/발신 번호 구분 */
private String srchNbDv;
/**검색 발송유형 */
private List<String> srchDv;
/**검색 현재상태*/
private List<String> srchSttus;
}

View File

@@ -0,0 +1,177 @@
package com.wb.domainserver.domain.admin.ntcn.stl.controller;
import com.wb.domainserver.common.mvc.tags.ui.pagination.PaginationInfo;
import com.wb.domainserver.common.prop.PaginationProperties;
import com.wb.domainserver.domain.admin.ntcn.stl.service.BOMaStlMssageService;
import com.wb.domainserver.domain.admin.ntcn.stl.vo.BOMaStlMssageVO;
import com.wb.domainserver.domain.admin.store.sopmal.service.BOMaSopmalService;
import com.wb.domainserver.domain.admin.sys.comncd.service.BOMaComncdService;
import com.wb.domainserver.domain.admin.sys.comncd.vo.BOMaComncdVO;
import com.wb.domainserver.domain.gcone.common.service.BOCommonService;
import com.wb.domainserver.domain.itrnt.mbr.service.BOItrntMbrService;
import com.wb.domainserver.domain.itrnt.mbr.vo.BOItrntMbrSrchVO;
import com.wb.domainserver.domain.itrnt.ntcn.stl.service.BOItrntStlMssageService;
import com.wb.domainserver.domain.itrnt.ntcn.stl.vo.BOItrntStlMssageVO;
import com.wb.domainserver.response.ApiResponse;
import com.wb.domainserver.security.authentication.AnonymousUser;
import com.wb.domainserver.security.authentication.MemberJwtContextHolder;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.communicate.SendToResrc;
import com.wb.domainserver.util.dataaccess.DataMap;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
*
* 톻합관리자 정산
* @author 추지훈
* @since 2024-02-05
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-02-05 추지훈 최초 생성
*
* </pre>
*/
@RestController
@Slf4j
@RequestMapping("/admin/ntcn/stl")
public class BOMaStlMssageController {
@Autowired
private BOMaStlMssageService service;
@Autowired
private SendToResrc sendToResrc;
@Autowired
private PaginationProperties paginationProperties;
@Autowired
private BOCommonService boCommonService;
@Autowired
private BOMaComncdService bOMaComncdService;
@Autowired
private BOMaSopmalService maSopmalService;
@Autowired
private BOCommonService commonService;
@Autowired
private BOItrntMbrService boItrntMbrService;
/*************************************
정산
*************************************/
/**
* 정산 목록 조회 폼
* @param vo(mbrInnb)
* @return ResponseEntity<?>
*/
@Policy(AuthPolicy.PUBLIC)
@PostMapping(value = "/selectBOMaStlMssageListRForm")
public ResponseEntity<?> selectBOMaStlMssageListRForm(@RequestBody BOMaStlMssageVO vo) {
//사용자 정보 추출 및 적용
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
if("04".equals(user.getSysDvCd())){
vo.setStrInnb(String.valueOf(user.getUserInnb()));
}
vo.setSopmalCd(user.getReprsntBrand());
//페이징 처리를 위한 pagination 객체 생성
PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(vo.getPageIndex());
paginationInfo.setRecordCountPerPage(vo.getPageUnit());
paginationInfo.setPageSize(paginationProperties.getPageSize());
vo.setPaginationInfo(paginationInfo);
//페이징 처리를 위한 값 설정
vo.setFirstIndex(paginationInfo.getFirstRecordIndex());
vo.setLastIndex(paginationInfo.getLastRecordIndex());
vo.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
Map<String, Object> content = new HashMap<>();
//매장 구분 코드
BOMaComncdVO bOMaComncdVO = new BOMaComncdVO();
bOMaComncdVO.setGroupCd("STR_DV");
List<?> strDv = bOMaComncdService.selectBOCommcdDetailList(bOMaComncdVO);
content.put("strDv", strDv);
bOMaComncdVO.setGroupCd("REGUSR_DV");
List<?> regusrDv = bOMaComncdService.selectBOCommcdDetailList(bOMaComncdVO);
content.put("regusrDv", regusrDv);
List<DataMap> storeList = service.selectBOStoreList(vo);
content.put("paginationInfo", vo.getPaginationInfo());
content.put("boItrntStlMssageVO", vo);
content.put("tentGroup",user.getTentGroup());
content.put("storeList", storeList);
//현재 년도
int currentYear = Calendar.getInstance().get(Calendar.YEAR);
content.put("currentYear", currentYear);
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 정산 목록 조회
*
* @param vo(mbrInnb)
* @return ResponseEntity<?>
*/
@Policy(AuthPolicy.PUBLIC)
@PostMapping(value = "/selectBOMaStlMssageList")
public ResponseEntity<?> selectBOMaStlMssageList(@RequestBody BOMaStlMssageVO vo) {
log.debug("vo => {}",vo);
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
Map<String, Object> content = new HashMap<>();
//페이징 처리를 위한 pagination 객체 생성
PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(vo.getPageIndex());
paginationInfo.setRecordCountPerPage(vo.getPageUnit());
paginationInfo.setPageSize(paginationProperties.getPageSize());
vo.setPaginationInfo(paginationInfo);
//페이징 처리를 위한 값 설정
vo.setFirstIndex(paginationInfo.getFirstRecordIndex());
vo.setLastIndex(paginationInfo.getLastRecordIndex());
vo.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
//리셀러 여부 o
BOMaComncdVO bOMaComncdVO = new BOMaComncdVO();
bOMaComncdVO.setGroupCd("RSLR_APPN_DV");
// List<?> appen = bOMaComncdService.selectBOCommcdDetailList(bOMaComncdVO);
content.put("paginationInfo", vo.getPaginationInfo());
content.put("strInfo", service.selectBOMaStlMssageCharge(vo));
// content.put("appen", appen);
log.debug("정산 목록 조회 내용 => {}", content);
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
}

View File

@@ -0,0 +1,163 @@
package com.wb.domainserver.domain.admin.ntcn.stl.controller;
import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.domain.admin.ntcn.stl.vo.MaStlMssageVO;
import com.wb.domainserver.exception.WnbtRestException;
import com.wb.domainserver.response.WnbtWebClientResponseHandler;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.communicate.RESRC;
import com.wb.domainserver.util.communicate.SendToResrc;
import com.wb.domainserver.util.excel.ExcelDownloadUtil;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import java.io.IOException;
import java.math.BigInteger;
import java.text.SimpleDateFormat;
import java.util.*;
/*
* 문자 정산 Controller
* @author 리브가
* @since 2024-02-21
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-02-21 리브가 최초 생성
* 2024-04-17 이대환 내용 수정
*
* </pre>
*/
@Slf4j
@Controller
@RequestMapping("/admin/ntcn/stl")
public class MaStlMssageController {
/** WebClient 호출을 위한 wrapper */
@Autowired
private WnbtWebClientResponseHandler responseHandler;
/** WebClient 호출을 위한 wrapper */
@Autowired
private SendToResrc sendToResrc;
/** 공통 메시지 처리를 위한 메시지 객체 */
@Autowired
private GconeMessageSource gconeMessageSource;
/**
* 메세지 정산 조회 폼
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectMaStlMssageListInqireRForm")
public String selectMaStlMssageListInqireRForm(MaStlMssageVO vo, ModelMap model){
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/ntcn/stl/selectBOMaStlMssageListRForm", vo),
model,
"resultMap"
);
return "admin/ntcn/stl/MaStlMssageListInqireRForm";
}
/**
* 메세지 정산 목록 내역 조회
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectMaStlMssageListInqire")
public String selectMaStlMssageListInqire(MaStlMssageVO vo, ModelMap model){
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/ntcn/stl/selectBOMaStlMssageList", vo),
model,
"resultMap"
);
return "admin/ntcn/stl/MaStlMssageListInqireR";
}
/**
* 엑셀 다운로드
* @param response
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/excelFileDownload")
public void excelFileDownload(MaStlMssageVO vo, HttpServletResponse response, ModelMap model) {
vo.setPageIndex(1);
vo.setPageUnit(50);
Map<String, Object> resultMap = responseHandler.handleResponseAsMap(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/ntcn/stl/selectBOMaStlMssageList", vo)
);
/*엑셀 데이터 set*/
List<Map<String, Object>> excelList = new ArrayList<>();
Map<String, Object> excelMap = (Map<String, Object>) resultMap.get("strInfo");
excelList = (List<Map<String, Object>>) excelMap.get("chargeList");
//엑셀 다운로드 다운로드 시간
Date date = new Date();
SimpleDateFormat excelFormat = new SimpleDateFormat("yyyyMMddHHmmss");
String str = excelFormat.format(date);
try {
//엑셀 항목에 출력될 내용 설정
List<Map<String, Object>> dataList = new ArrayList<>();
if (excelList != null) {
BigInteger num = BigInteger.valueOf(excelList.size());
for (int i = 0; i < excelList.size(); i++) {
HashMap<String, Object> dataMap = new HashMap<>();
HashMap<String, Object> map = new HashMap<>();
map = (HashMap<String, Object>) excelList.get(i);
/*데이터 set*/
dataMap.put("itme01", num.subtract(BigInteger.valueOf(i)));
dataMap.put("itme02", map.get(""));
dataMap.put("itme03", map.get("regusr"));
dataMap.put("itme04", map.get("sms"));
dataMap.put("itme05", map.get("lms"));
dataMap.put("itme06", map.get("mms"));
dataMap.put("itme07", map.get("at"));
dataMap.put("itme08", map.get("ft"));
dataMap.put("itme09", map.get("fti"));
dataMap.put("itme10", map.get("totCost"));
dataList.add(dataMap);
}
}
//엑셀 항목별 제목에 출력될 내용 설정
LinkedHashMap<String, String> headerMap = new LinkedHashMap<String, String>();
headerMap.put("itme01", "번호");
headerMap.put("itme02", "년월");
headerMap.put("itme03", "매장");
headerMap.put("itme04", "SMS");
headerMap.put("itme05", "LMS");
headerMap.put("itme06", "MMS");
headerMap.put("itme07", "알림톡");
headerMap.put("itme08", "친구톡(TXT)");
headerMap.put("itme09", "친구톡(TXT+IMG)");
headerMap.put("itme10", "금액");
//엑셀생성 및 다운로드
ExcelDownloadUtil.createExcel("stl_excel_file"+str, headerMap, dataList, response);
} catch(IOException ioe) {
log.error("엑셀다운로드 중 오류가 발생하였습니다.", ioe);
throw new WnbtRestException("엑셀다운로드 중 오류가 발생하였습니다.");
} catch (Exception e) {
log.error("엑셀다운로드 중 오류가 발생하였습니다.", e);
throw new WnbtRestException("엑셀다운로드 중 오류가 발생하였습니다.");
}
}
}

View File

@@ -0,0 +1,28 @@
package com.wb.domainserver.domain.admin.ntcn.stl.mapper;
import com.wb.domainserver.domain.admin.ntcn.stl.vo.BOMaStlMssageVO;
import com.wb.domainserver.domain.itrnt.ntcn.stl.vo.BOItrntStlMssageVO;
import com.wb.domainserver.util.dataaccess.DataMap;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import java.util.List;
@Mapper
@Repository
public interface BOMaStlMssageMapper {
/**
* 매장 목록 조회
* @param vo
* @return
*/
List<DataMap> selectBOMaStoreList(BOMaStlMssageVO vo);
/**
* 정산 내역 조회
* @param vo
* @return
*/
List<DataMap> selectBOMaStlMssageList(BOItrntStlMssageVO vo);
}

View File

@@ -0,0 +1,264 @@
package com.wb.domainserver.domain.admin.ntcn.stl.service;
import com.wb.domainserver.common.prop.PropertyService;
import com.wb.domainserver.domain.admin.ntcn.stl.mapper.BOMaStlMssageMapper;
import com.wb.domainserver.domain.admin.ntcn.stl.vo.BOMaStlMssageVO;
import com.wb.domainserver.domain.itrnt.mbr.vo.BOItrntMbrSrchVO;
import com.wb.domainserver.domain.itrnt.ntcn.stl.mapper.BOItrntStlMssageMapper;
import com.wb.domainserver.domain.itrnt.ntcn.stl.vo.BOItrntStlMssageVO;
import com.wb.domainserver.domain.sure.mapper.SureMapper;
import com.wb.domainserver.util.dataaccess.DataMap;
import com.wb.domainserver.util.string.StringUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.YearMonth;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Slf4j
@Service
public class BOMaStlMssageService {
@Autowired
private BOMaStlMssageMapper mapper;
@Autowired
private SureMapper sureMapper;
@Autowired
private Environment environment;
/**
* 매장 목록 조회
* @param vo
* @return
*/
public List<DataMap> selectBOStoreList(BOMaStlMssageVO vo) {
log.debug("selectBOStoreList => {}", vo);
// 매장 목록 조회
List<DataMap> storeList = mapper.selectBOMaStoreList(vo);
log.debug("storeList => {}", storeList);
return storeList;
}
/**
* 슈어 정산 정보 조회
* @param vo
* @return
*/
public DataMap selectBOMaStlMssageCharge(BOMaStlMssageVO vo) {
DataMap stlInfo = new DataMap();
//개월 수 조정
String srchMng = vo.getSrchMnt();
if(srchMng.length() == 1) {
vo.setSrchMnt("0" + srchMng);
}
for (String profile : environment.getActiveProfiles()) {
if ("stage".equals(profile)) {
vo.setSrchYm(vo.getSrchYear() + vo.getSrchMnt());
}
}
//정산 대상 조회
List<DataMap> stlMssageChargeList = sureMapper.selectBOMaStlMssageChargeList(vo);
//매장정보 조회
List<DataMap> storeList = mapper.selectBOMaStoreList(vo);
vo.getPaginationInfo().setTotalRecordCount(stlMssageChargeList.size());
int totSmsCnt = 0;
int totLmsCnt = 0;
int totMmsCnt = 0;
int totAtCnt = 0;
int totFtCnt = 0;
int totFtiCnt = 0;
BigDecimal totSumCost = BigDecimal.ZERO;;
for(DataMap stlMap : stlMssageChargeList) {
BigDecimal smsCost = BigDecimal.ZERO;
BigDecimal lmsCost = BigDecimal.ZERO;
BigDecimal mmsCost = BigDecimal.ZERO;
BigDecimal atCost = BigDecimal.ZERO;
BigDecimal ftCost = BigDecimal.ZERO;
BigDecimal ftiCost = BigDecimal.ZERO;
BigDecimal totCost = BigDecimal.ZERO;
String regusr = StringUtil.isNullToString(stlMap.get("regusr"));
int index = regusr.indexOf(":");
if(index > 0) {
String[] etc1Ex = regusr.split(":");
String regusrDv = etc1Ex[0];
String strInnb = etc1Ex[1];
log.debug("regusrDv => {}", regusrDv);
log.debug("strInnb => {}", strInnb);
for(DataMap store : storeList) {
String strInnStr = StringUtil.isNullToString(store.get("strInnb"));
if(strInnStr.equals(strInnb)) {
stlMap.put("regusr", store.get("tentcpnNm"));
}
}
}
// 입력 받은 연도와 월로 YearMonth 객체 생성
YearMonth inputDate = YearMonth.of(Integer.parseInt(vo.getSrchYear()), Integer.parseInt(vo.getSrchMnt()));
//이전 조건 날짜
YearMonth comparisonDate = YearMonth.of(2022, 1);
//기존
if(inputDate.isBefore(comparisonDate)) {
smsCost = smsCost.add(objNumToBigDecimal(stlMap.get("sms")).multiply(BigDecimal.valueOf(7.4)));
lmsCost = lmsCost.add(objNumToBigDecimal(stlMap.get("lms")).multiply(BigDecimal.valueOf(23)));
mmsCost = mmsCost.add(objNumToBigDecimal(stlMap.get("mms")).multiply(BigDecimal.valueOf(50)));
atCost = atCost.add(objNumToBigDecimal(stlMap.get("at")).multiply(BigDecimal.valueOf(4.5)));
ftCost = ftCost.add(objNumToBigDecimal(stlMap.get("ft")).multiply(BigDecimal.valueOf(9.6)));
ftiCost = ftiCost.add(objNumToBigDecimal(stlMap.get("fti")).multiply(BigDecimal.valueOf(15.6)));
} else {
//신규 22년 1월 부터 인하
smsCost = smsCost.add(objNumToBigDecimal(stlMap.get("sms")).multiply(BigDecimal.valueOf(7.2)));
lmsCost = lmsCost.add(objNumToBigDecimal(stlMap.get("lms")).multiply(BigDecimal.valueOf(23)));
mmsCost = mmsCost.add(objNumToBigDecimal(stlMap.get("mms")).multiply(BigDecimal.valueOf(45.2)));
atCost = atCost.add(objNumToBigDecimal(stlMap.get("at")).multiply(BigDecimal.valueOf(3.9)));
ftCost = ftCost.add(objNumToBigDecimal(stlMap.get("ft")).multiply(BigDecimal.valueOf(9.6)));
ftiCost = ftiCost.add(objNumToBigDecimal(stlMap.get("fti")).multiply(BigDecimal.valueOf(15.6)));
}
//등록 매장별 총합계
totCost = totCost.add(smsCost).add(lmsCost).add(mmsCost).add(atCost).add(ftCost);
//총금액
totSumCost = totSumCost.add(totCost);
totSmsCnt += Integer.parseInt(StringUtil.isNullToString(stlMap.get("sms")));
totLmsCnt += Integer.parseInt(StringUtil.isNullToString(stlMap.get("lms")));
totMmsCnt += Integer.parseInt(StringUtil.isNullToString(stlMap.get("mms")));
totAtCnt += Integer.parseInt(StringUtil.isNullToString(stlMap.get("at")));
totFtCnt += Integer.parseInt(StringUtil.isNullToString(stlMap.get("ft")));
totFtiCnt += Integer.parseInt(StringUtil.isNullToString(stlMap.get("fti")));
stlMap.put("smsCost", smsCost);
stlMap.put("lmsCost", lmsCost);
stlMap.put("mmsCost", mmsCost);
stlMap.put("atCost", atCost);
stlMap.put("ftCost", ftCost);
stlMap.put("ftiCost", ftiCost);
stlMap.put("totCost", totCost);
// cost += objNumToBigDecimal(stlMap.get("lmsCnt")) * 23;
// cost += objNumToBigDecimal(stlMap.get("mmsCnt")) * 50;
// cost += objNumToBigDecimal(stlMap.get("atCnt")) * 4.5;
// cost += objNumToBigDecimal(stlMap.get("ftCnt")) * 9.6;
// cost += objNumToBigDecimal(stlMap.get("ftiCnt") * 15.6;
}
stlInfo.put("totSmsCnt", totSmsCnt);
stlInfo.put("totLmsCnt", totLmsCnt);
stlInfo.put("totMmsCnt", totMmsCnt);
stlInfo.put("totAtCnt", totAtCnt);
stlInfo.put("totFtCnt", totFtCnt);
stlInfo.put("totFtiCnt", totFtiCnt);
stlInfo.put("totSumCost", totSumCost);
stlInfo.put("chargeList", stlMssageChargeList);
return stlInfo;
}
/**
* 정산 정보 조회
* @param vo
* @return
*/
public List<DataMap> selectBOMaStlMssageList(BOMaStlMssageVO vo) {
List<DataMap> stlMssageList = sureMapper.selectBOMaStlSureList(vo);
return stlMssageList;
}
/**
* 객체가 null 인지 확인하고 null 인 경우 0, 아니면 BigDecimal 숫자 리턴
* @param object
* @return
*/
public BigDecimal objNumToBigDecimal(Object object) {
BigDecimal decimal = BigDecimal.ZERO;
if (object == null) {
return decimal;
} else if (object instanceof BigDecimal bigDecimal){
return bigDecimal;
} else {
return BigDecimal.valueOf((Integer) object);
}
}
//
// /**
// * 고객센터/무료수신거부 조회
// * @param vo
// * @return
// */
// public DataMap selectBOShopNb(BOItrntMssageVO vo) {
//
// DataMap resultMap = new DataMap();
//
// try {
// resultMap = mapper.selectBOShopNb(vo);
//
// } catch (WnbtRestException wre){
// throw new WnbtRestException(wre.getMessage());
// } catch (Exception e) {
// log.error(e.getMessage(), e);
// }
//
// return resultMap;
// }
//
// public Object selectBOItrntMbrListInqire(BOItrntMbrSrchVO vo) {
//
// log.debug("회원 목록 조회 param확인 (Service) => {}", vo);
// List<DataMap> resultList = null;
// Map<String, Object> resultMap = new HashMap<>();
// // 건수 조회
// Integer totCnt = mapper.selectBOItrntMbrListTotCnt(vo);
// // 건수 갯수 페이징vo에 set
// if (vo.getPaginationInfo() == null) {
// vo.setPaginationInfo(new PaginationInfo());
// vo.setRecordCountPerPage(totCnt);
// vo.setFirstIndex(0);
// }
// vo.getPaginationInfo().setTotalRecordCount(totCnt);
// // 건수 > 0 일시 회원 목록 조회
// if (totCnt > 0) {
// resultList = mapper.selectBOItrntMbrListInqire(vo);
// }
// resultMap.put("resultList", resultList);
// return resultMap;
// }
}

View File

@@ -0,0 +1,37 @@
package com.wb.domainserver.domain.admin.ntcn.stl.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigInteger;
@Data
@EqualsAndHashCode(callSuper = false)
public class BOMaStlMssageVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/** 매장 번호 */
private String strInnb;
/** 등록자 구분 */
private String regusrDv;
/** 매장 구분 */
private String strDv;
/** 쇼핑몰 코드 */
private String sopmalCd;
/** 연도 */
private String srchYear;
/** 월 */
private String srchMnt;
/** 법인 구분 */
private String srchCrp;
/** 연월 */
private String srchYm;
}

View File

@@ -0,0 +1,28 @@
package com.wb.domainserver.domain.admin.ntcn.stl.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class MaStlMssageVO extends AbstractVO {
/** 매장 번호 */
private String strInnb;
/** 등록자 구분 */
private String regusrDv;
/** 매장 구분 */
private String strDv;
/** 연도 */
private String srchYear;
/** 월 */
private String srchMnt;
/** 조회 법인 */
private String srchCrp;
}

View File

@@ -0,0 +1,335 @@
package com.wb.domainserver.domain.admin.ntcn.tmplt.controller;
import com.wb.domainserver.domain.admin.ntcn.tmplt.service.BOMaTmpltService;
import com.wb.domainserver.domain.admin.ntcn.tmplt.vo.BOMaTmpltVO;
import com.wb.domainserver.domain.admin.store.sopmal.service.BOMaSopmalService;
import com.wb.domainserver.domain.gcone.common.service.BOCommonService;
import com.wb.domainserver.response.ApiResponse;
import com.wb.domainserver.security.authentication.AnonymousUser;
import com.wb.domainserver.security.authentication.MemberJwtContextHolder;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.dataaccess.DataMap;
import com.wb.domainserver.util.string.StringUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 템플릿 관리를 위한 Controller
*
* @author 리브가
* @since 2024-02-21
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-02-21 리브가 최초 생성
* 2024-04-17 이대환 내용 수정
*
* </pre>
*/
@Slf4j
@RestController
@RequestMapping("/admin/ntcn/tmplt")
public class BOMaTmpltController {
@Autowired
private BOMaTmpltService service;
@Autowired
private BOMaSopmalService maSopmalService;
/**
* 템플릿 관리 페이지
* @param vo
* @return ResponseEntity<?>
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectBOAtmcSndngTmplatManage")
public ResponseEntity<?> selectBOAtmcSndngTmplatManage(@RequestBody BOMaTmpltVO vo) {
log.debug("이메일 자동 발송 템플릿 BO 진입 =>{}", vo);
//사용자 정보 추출 및 적용
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
vo.setRegusr(user.getUserInnb());
vo.setUpdusr(user.getUserInnb());
if("01".equals(user.getSysDvCd())){
vo.setSopmalCd(user.getSopmalCd());
}
Map<String, Object> content = new HashMap<>();
List<DataMap> sopmalCdList = service.selectBOSopmalAtmcSndng();
content.put("sopmalCdList", sopmalCdList);
//초기 쇼핑몰 코드 없을 경우 목록의 첫번째 입력
if("".equals(StringUtil.isNullToString(vo.getSopmalCd()))) {
vo.setSopmalCd(StringUtil.isNullToString(sopmalCdList.get(0).get("sopmalCd")));
}
content.put("boMaTmpltVo", vo);
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 이메일 자동 발송 템플릿 조회
* @param vo
* @return ResponseEntity<?>
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectBOEmailAtmcSndngTmplatOneInqireForm")
public ResponseEntity<?> selectBOEmailAtmcSndngTmplatOneInqireForm(@RequestBody BOMaTmpltVO vo) {
log.debug("이메일 자동 발송 템플릿 BO 진입 =>{}", vo);
//사용자 정보 추출 및 적용
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
vo.setRegusr(user.getUserInnb());
vo.setUpdusr(user.getUserInnb());
if("01".equals(user.getSysDvCd())){
vo.setSopmalCd(user.getSopmalCd());
}
Map<String, Object> content = new HashMap<>();
List<DataMap> sopmalCdList = service.selectBOSopmalAtmcSndng();
content.put("sopmalCdList", sopmalCdList);
//초기 쇼핑몰 코드 없을 경우 목록의 첫번째 입력
if("".equals(StringUtil.isNullToString(vo.getSopmalCd()))) {
vo.setSopmalCd(StringUtil.isNullToString(sopmalCdList.get(0).get("sopmalCd")));
}
content.put("bOTmpltVO", vo);
// content.put("groupCd", service.selectBOTmplatGroupCd("FORM_DV"));
content.put("groupCd", service.selectBOTmplatGroup(vo.getSopmalCd()));
content.put("formDvCd", service.selectBOTmplatFormGroup(vo.getSopmalCd()));
content.put("boCtrlMap", service.selectBOEmailAtmcSndngTmplatOneInqireForm(vo));
content.put("dsptchAdres", service.selectBOEmailAtmcSndngDsptchAdres(vo));
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 이메일 자동 발송 템플릿 수정
* @param vo
* @return ResponseEntity<?>
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/updateBOEmailAtmcSndngTmplatUpdt")
public ResponseEntity<?> updateBOEmailAtmcSndngTmplatUpdt(@RequestBody BOMaTmpltVO vo) {
log.debug("이메일 자동 발송 템플릿 수정 BO 진입 =>{}", vo);
//사용자 정보 추출 및 적용
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
vo.setRegusr(user.getUserInnb());
vo.setUpdusr(user.getUserInnb());
if("01".equals(user.getSysDvCd())){
vo.setSopmalCd(user.getSopmalCd());
}
Map<String, Object> message = new HashMap<>();
message = service.updateBOEmailAtmcSndngTmplatUpdt(vo);
return ApiResponse.of(message).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 메시지 자동 발송 템플릿 조회
* @param vo
* @return ResponseEntity<?>
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectBOMssageAtmcSndngTmplatInqireForm")
public ResponseEntity<?> selectBOMssageAtmcSndngTmplatInqireForm(@RequestBody BOMaTmpltVO vo) {
log.debug("메시지 자동 발송 템플릿 BO 진입 =>{}", vo);
//사용자 정보 추출 및 적용
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
vo.setRegusr(user.getUserInnb());
vo.setUpdusr(user.getUserInnb());
if("01".equals(user.getSysDvCd())){
vo.setSopmalCd(user.getSopmalCd());
}
Map<String, Object> content = new HashMap<>();
content.put("bOTmpltVO", vo);
// content.put("groupCd", service.selectBOTmplatGroupCd("FORM_DV"));
content.put("groupCd", service.selectBOTmplatGroup(vo.getSopmalCd()));
content.put("formDvCd", service.selectBOTmplatFormGroup(vo.getSopmalCd()));
content.put("boCtrlMap", service.selectBOMssageAtmcSndngTmplatInqireForm(vo));
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 메시지 자동 발송 템플릿 수정
* @param vo
* @return ResponseEntity<?>
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/updateBOMssageAtmcSndngTmplatUpdt")
public ResponseEntity<?> updateBOMssageAtmcSndngTmplatUpdt(@RequestBody BOMaTmpltVO boTmpltVO) {
//serializedFormData += "&sopmalCd="+MemberJwtContextHolder.getMemberInfo().getSopmalCd();
//사용자 정보 추출 및 적용
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
if("01".equals(user.getSysDvCd())){
boTmpltVO.setSopmalCd(user.getSopmalCd());
}
log.debug("메시지 자동 발송 템플릿 수정 BO 진입 =>{}", boTmpltVO);
Map<String, Object> message = new HashMap<>();
message = service.updateBOMssageAtmcSndngTmplatUpdt(boTmpltVO);
return ApiResponse.of(message).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 알림톡 자동 발송 템플릿 조회
* @param vo
* @return ResponseEntity<?>
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectBONtcntalkAtmcSndngTmplatInqireForm")
public ResponseEntity<?> selectBONtcntalkAtmcSndngTmplatInqireForm(@RequestBody BOMaTmpltVO vo) {
log.debug("알림톡 자동 발송 템플릿 BO 진입 =>{}", vo);
//사용자 정보 추출 및 적용
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
vo.setRegusr(user.getUserInnb());
vo.setUpdusr(user.getUserInnb());
if("01".equals(user.getSysDvCd())){
vo.setSopmalCd(user.getSopmalCd());
}
Map<String, Object> content = new HashMap<>();
content.put("bOTmpltVO", vo);
// content.put("groupCd", service.selectBOTmplatGroupCd("FORM_DV"));
content.put("groupCd", service.selectBOTmplatGroup(vo.getSopmalCd()));
content.put("formDvCd", service.selectBOTmplatFormGroup(vo.getSopmalCd()));
content.put("boCtrlMap", service.selectBONtcntalkAtmcSndngTmplatInqireForm(vo));
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 알림톡 자동 발송 템플릿 수정 팝업 화면 메서드
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectBONtcntalkAtmcSndngTmplatUpdtPopupForm")
public ResponseEntity<?> selectBONtcntalkAtmcSndngTmplatUpdtPopupForm(@RequestBody BOMaTmpltVO vo) {
log.debug("알림톡 자동 발송 수정 팝업 BO 진입 =>{}", vo);
//사용자 정보 추출 및 적용
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
vo.setRegusr(user.getUserInnb());
vo.setUpdusr(user.getUserInnb());
if("01".equals(user.getSysDvCd())){
vo.setSopmalCd(user.getSopmalCd());
}
Map<String, Object> content = new HashMap<>();
content.put("bOTmpltVO", vo);
content.put("boCtrlMap", service.selectBONtcntalkAtmcSndngTmplatUpdtPopupForm(vo));
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 알림톡 자동 발송 템플릿 수정
* @param vo
* @return ResponseEntity<?>
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/updateBONtcntalkAtmcSndngTmplatUpdt")
public ResponseEntity<?> updateBONtcntalkAtmcSndngTmplatUpdt(@RequestBody BOMaTmpltVO vo) {
//사용자 정보 추출 및 적용
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
vo.setRegusr(user.getUserInnb());
vo.setUpdusr(user.getUserInnb());
if("01".equals(user.getSysDvCd())){
vo.setSopmalCd(user.getSopmalCd());
}
//알림톡 템플릿 버튼 정제
if(vo.getBtnType() != null){
for(int i = 0; i < vo.getBtnType().size(); i++){
if(vo.getBtnType().get(i) == "DS") {
vo.getBtnNm().set(i, "");
vo.getBtnMUrl().set(i, "");
vo.getBtnPcUrl().set(i, "");
}
}
switch (vo.getBtnType().size()){
case 5:
vo.setBtnNm05(vo.getBtnNm().get(4));
vo.setBtnType05(vo.getBtnType().get(4));
vo.setBtn05Url01(vo.getBtnMUrl().get(4));
vo.setBtn05Url02(vo.getBtnPcUrl().get(4));
case 4:
vo.setBtnNm04(vo.getBtnNm().get(3));
vo.setBtnType04(vo.getBtnType().get(3));
vo.setBtn04Url01(vo.getBtnMUrl().get(3));
vo.setBtn04Url02(vo.getBtnPcUrl().get(3));
case 3:
vo.setBtnNm03(vo.getBtnNm().get(2));
vo.setBtnType03(vo.getBtnType().get(2));
vo.setBtn03Url01(vo.getBtnMUrl().get(2));
vo.setBtn03Url02(vo.getBtnPcUrl().get(2));
case 2:
vo.setBtnNm02(vo.getBtnNm().get(1));
vo.setBtnType02(vo.getBtnType().get(1));
vo.setBtn02Url01(vo.getBtnMUrl().get(1));
vo.setBtn02Url02(vo.getBtnPcUrl().get(1));
case 1:
vo.setBtnNm01(vo.getBtnNm().get(0));
vo.setBtnType01(vo.getBtnType().get(0));
vo.setBtn01Url01(vo.getBtnMUrl().get(0));
vo.setBtn01Url02(vo.getBtnPcUrl().get(0));
}
}
log.debug("알림톡 자동 발송 템플릿 수정 BO 진입 =>{}", vo);
Map<String, Object> message = new HashMap<>();
message = service.updateBONtcntalkAtmcSndngTmplatUpdt(vo);
return ApiResponse.of(message).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
}

View File

@@ -0,0 +1,261 @@
package com.wb.domainserver.domain.admin.ntcn.tmplt.controller;
import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.domain.admin.ntcn.tmplt.vo.MaTmpltVO;
import com.wb.domainserver.exception.WnbtRestException;
import com.wb.domainserver.response.WnbtResponse;
import com.wb.domainserver.response.WnbtWebClientResponseHandler;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.communicate.RESRC;
import com.wb.domainserver.util.communicate.ReplyFromResrc;
import com.wb.domainserver.util.communicate.SendToResrc;
import com.wb.domainserver.util.communicate.ValidateResultConverter;
import jakarta.servlet.http.HttpSession;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
/*
* 템플릿 관리 Controller
* @author 리브가
* @since 2024-02-21
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-02-21 리브가 최초 생성
* 2024-04-17 이대환 내용 수정
*
* </pre>
*/
@Slf4j
@Controller
@RequestMapping("/admin/ntcn/tmplt")
public class MaTmpltController {
/** WebClient 호출을 위한 wrapper */
@Autowired
private WnbtWebClientResponseHandler responseHandler;
/** WebClient 호출을 위한 wrapper */
@Autowired
private SendToResrc sendToResrc;
/** 공통 메시지 처리를 위한 메시지 객체 */
@Autowired
private GconeMessageSource gconeMessageSource;
/**
* 템플릿 관리 페이지
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectAtmcSndngTmplatManage")
public String selectEmailPassivSndngManage(ModelMap model, MaTmpltVO maTmpltVO){
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/ntcn/tmplt/selectBOAtmcSndngTmplatManage", maTmpltVO),
model,
"resultMap"
);
return "admin/ntcn/tmplt/MaAtmcSndngTmplatManage";
}
/**
* 템플릿 관리 > 이메일 템플릿 폼
* @param model
* @param tmpltVO
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectEmailAtmcSndngTmplatOneInqireForm")
public String selectEmailAtmcSndngTmplatOneInqireForm(ModelMap model, MaTmpltVO tmpltVO, HttpSession session) {
try {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/ntcn/tmplt/selectBOEmailAtmcSndngTmplatOneInqireForm", tmpltVO),
model,
"resultListMap"
);
model.addAttribute("tmpltVO",tmpltVO);
} catch (WnbtRestException wre){
throw new WnbtRestException(wre.getMessage());
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return "admin/ntcn/tmplt/MaEmailAtmcSndngTmplatU";
}
/**
* 템플릿 관리 > 이메일 템플릿 폼 > 이메일 템플릿
* @return
* @author 이대환
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/selectEmailAtmcSndngTmplatOne")
public ResponseEntity<WnbtResponse> selectEmailAtmcSndngTmplatOne(MaTmpltVO tmpltVO, HttpSession session){
// tmpltVO.setSopmalCd(session.getAttribute("authSopmalCd").toString());
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/ntcn/tmplt/selectBOEmailAtmcSndngTmplatOneInqireForm", tmpltVO),
ReplyFromResrc::getReply
);
}
/**
* 템플릿 관리 > 이메일 템플릿 - 이메일 템플릿 수정
* @param tmpltVO
* @param bindingResult 바인딩 및 정합성 점검결과 객체
* @return ResponseEntity<WnbtResponse>
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updateEmailAtmcSndngTmplatUpdt", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updateEmailAtmcSndngTmplatUpdt(MaTmpltVO tmpltVO, BindingResult bindingResult, HttpSession session) {
// tmpltVO.setSopmalCd(session.getAttribute("authSopmalCd").toString());
if(bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/ntcn/tmplt/updateBOEmailAtmcSndngTmplatUpdt", tmpltVO),
ReplyFromResrc::getReply
);
}
/**
* 템플릿 관리 > SMS 템플릿 폼
* @param model
* @param tmpltVO
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectMssageAtmcSndngTmplatInqireForm")
public String selectMssageAtmcSndngTmplatInqireForm(ModelMap model, MaTmpltVO tmpltVO, HttpSession session) {
try {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/ntcn/tmplt/selectBOMssageAtmcSndngTmplatInqireForm", tmpltVO),
model,
"resultListMap"
);
model.addAttribute("tmpltVO",tmpltVO);
} catch (WnbtRestException wre){
throw new WnbtRestException(wre.getMessage());
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return "admin/ntcn/tmplt/MaMssageAtmcSndngTmplatU";
}
/**
* 템플릿 관리 > SMS 템플릿 - SMS 템플릿 수정
* @param serializedFormData
* @param bindingResult 바인딩 및 정합성 점검결과 객체
* @return ResponseEntity<WnbtResponse>
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updateMssageAtmcSndngTmplatUpdt", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updateMssageAtmcSndngTmplatUpdt(MaTmpltVO tmpltVO, BindingResult bindingResult, HttpSession session) {
// tmpltVO.setSopmalCd(session.getAttribute("authSopmalCd").toString());
if(bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/ntcn/tmplt/updateBOMssageAtmcSndngTmplatUpdt", tmpltVO),
ReplyFromResrc::getReply
);
}
/**
* 템플릿 관리 > 알림톡 템플릿 폼
* @param model
* @param tmpltVO
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectNtcntalkAtmcSndngTmplatInqireForm")
public String selectNtcntalkAtmcSndngTmplatInqireForm(ModelMap model, MaTmpltVO tmpltVO, HttpSession session) {
// tmpltVO.setSopmalCd(session.getAttribute("authSopmalCd").toString());
try {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/ntcn/tmplt/selectBONtcntalkAtmcSndngTmplatInqireForm", tmpltVO),
model,
"resultListMap"
);
model.addAttribute("tmpltVO",tmpltVO);
} catch (WnbtRestException wre){
throw new WnbtRestException(wre.getMessage());
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return "admin/ntcn/tmplt/MaNtcntalkAtmcSndngTmplatU";
}
/**
* 템플릿 관리 > 알림톡 템플릿 > 알림톡 탬플릿 수정 팝업 폼
* @param model
* @param tmpltVO
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectNtcntalkAtmcSndngTmplatUpdtPopupForm")
public String selectNtcntalkAtmcSndngTmplatUpdtPopupForm(MaTmpltVO tmpltVO, ModelMap model, HttpSession session) {
// tmpltVO.setSopmalCd(session.getAttribute("authSopmalCd").toString());
try {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/ntcn/tmplt/selectBONtcntalkAtmcSndngTmplatUpdtPopupForm", tmpltVO),
model,
"resultMap"
);
model.addAttribute("tmpltVO",tmpltVO);
} catch (WnbtRestException wre){
throw new WnbtRestException(wre.getMessage());
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return "admin/ntcn/tmplt/MaNtcntalkAtmcSndngTmplatUpdtPopupU";
}
/**
* 템플릿 관리 > 알림톡 템플릿 - 알림톡 템플릿 수정
* @param serializedFormData
* @param bindingResult 바인딩 및 정합성 점검결과 객체
* @return ResponseEntity<WnbtResponse>
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updateNtcntalkAtmcSndngTmplatUpdt", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updateNtcntalkAtmcSndngTmplatUpdt(@Validated MaTmpltVO tmpltVO, BindingResult bindingResult, HttpSession session) {
// tmpltVO.setSopmalCd(session.getAttribute("authSopmalCd").toString());
if(bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/ntcn/tmplt/updateBONtcntalkAtmcSndngTmplatUpdt", tmpltVO),
ReplyFromResrc::getReply
);
}
}

View File

@@ -0,0 +1,180 @@
package com.wb.domainserver.domain.admin.ntcn.tmplt.mapper;
import com.wb.domainserver.domain.admin.ntcn.tmplt.vo.BOMaTmpltVO;
import com.wb.domainserver.util.dataaccess.DataMap;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* 템플릿 위한 Mapper Interface
*
* @author 리브가
* @since 2024-02-21
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-02-21 리브가 최초 생성
* 2024-04-17 이대환 내용 수정
*
* </pre>
*/
@Mapper
@Repository
public interface BOMaTmpltMapper {
public List<DataMap> selectBOEmailTmpltListInqire(BOMaTmpltVO tmpltVO);
public List<DataMap> selectBOSmsTmpltListInqire(BOMaTmpltVO tmpltVO);
public List<DataMap> selectBOKakaoTmpltListInqire(BOMaTmpltVO tmpltVO);
/***********************************************************************
* 공통코드
***********************************************************************/
/**
* 그룹코드, 양식구분 조회
* @param String
* @return List<DataMap>
*/
public List<DataMap> selectBOTmplatGroupCd(String param);
/***********************************************************************
* 이메일 자동발송 발신주소 조회
***********************************************************************/
/**
* 이메일 자동발송 발신주소 조회
* @param vo
* @return String
*/
public String selectBOEmailAtmcSndngDsptchAdres(BOMaTmpltVO vo);
/***********************************************************************
* 이메일 템플릿
***********************************************************************/
/**
* 이메일 템플릿 조회
* @param vo
* @return List<DataMap>
*/
public List<DataMap> selectBOEmailAtmcSndngTmplatInqireForm(BOMaTmpltVO vo);
/**
* 이메일 템플릿 단건 조회
* @param vo
* @return DataMap
*/
public DataMap selectBOEmailAtmcSndngTmplatOneInqireForm(BOMaTmpltVO vo);
/**
* 이메일 템플릿 등록
* @param vo
* @return
*/
public void insertBOEmailTmplat(BOMaTmpltVO vo);
/**
* 이메일 템플릿 수정
* @param
* @return
*/
public void updateBOEmailTmplat(BOMaTmpltVO vo);
/***********************************************************************
* 메시지 템플릿
***********************************************************************/
/**
* 메시지 템플릿 조회
* @param vo
* @return List<DataMap>
*/
public List<DataMap> selectBOMssageAtmcSndngTmplatInqireForm(BOMaTmpltVO vo);
/**
* 메시지 템플릿 등록
* @param vo
* @return
*/
public void insertBOMssageTmplat(BOMaTmpltVO vo);
/**
* 메시지 템플릿 수정
* @param voList
* @return
*/
public void updateBOMssageTmplat(List<BOMaTmpltVO> voList);
/***********************************************************************
* 알림톡 템플릿
***********************************************************************/
/**
* 메시지 템플릿 조회
* @param vo
* @return List<DataMap>
*/
public List<DataMap> selectBONtcntalkAtmcSndngTmplatInqireForm(BOMaTmpltVO vo);
/**
* 알림톡 템플릿 조회 _ 팝업
* @param vo
* @return
*/
public DataMap selectBONtcntalkAtmcSndngTmplatUpdtPopupForm(BOMaTmpltVO vo);
/**
* 알림톡 템플릿 등록
* @param vo
* @return
*/
public void insertBOKakaoForm(BOMaTmpltVO vo);
/**
* 알림톡 템플릿 등록_버튼
* @param vo
* @return
*/
public void insertBOKakaoFormButton(BOMaTmpltVO vo);
/**
* 알림톡 템플릿 수정
* @param
* @return
*/
public void updateBOKakaoForm(List<BOMaTmpltVO> voList);
/**
* 알림톡 템플릿 수정_팝업
* @param
* @return
*/
public void updateBOKakaoFormPopup(BOMaTmpltVO boTmpltVO);
/**
* 통합관리자 자동발송관리 쇼핑몰 조회
* @return
*/
List<DataMap> selectBOSopmalAtmcSndng();
/**
* 템플릿 사용 그룹 조회
* @return
*/
List<DataMap> selectBOTmplatGroup(String param);
/**
* 템플릿 사용 그룹별 폼 조회
* @return
*/
List<DataMap> selectBOTmplatFormGroup(String param);
}

View File

@@ -0,0 +1,439 @@
package com.wb.domainserver.domain.admin.ntcn.tmplt.service;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.wb.domainserver.domain.admin.ntcn.tmplt.mapper.BOMaTmpltMapper;
import com.wb.domainserver.domain.admin.ntcn.tmplt.vo.BOMaTmpltVO;
import com.wb.domainserver.exception.WnbtRestException;
import com.wb.domainserver.util.dataaccess.DataMap;
import com.wb.domainserver.util.string.StringUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 템플릿 관리를 위한 Service
*
* @author 리브가
* @since 2024-02-21
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-02-21 리브가 최초 생성
* 2024-04-17 이대환 내용 수정
*
* </pre>
*/
@Slf4j
@Service
public class BOMaTmpltService {
@Autowired
private BOMaTmpltMapper mapper;
// @Autowired
// private BOMaComncdService bOMaComncdService;
/**
* 그룹코드, 양식구분 조회 메서드
* @param param
* @return List<DataMap>
*/
public List<DataMap> selectBOTmplatGroupCd(String param) {
List<DataMap> resultList = null;
resultList = mapper.selectBOTmplatGroupCd(param);
return resultList;
}
/**
* 이메일 자동발송 발신주소 조회
* @param vo
* @return List<DataMap>
*/
public String selectBOEmailAtmcSndngDsptchAdres(BOMaTmpltVO vo) {
String result= null;
result= mapper.selectBOEmailAtmcSndngDsptchAdres(vo);
return result;
}
/**
* 이메일 자동 발송 템플릿 조회 메서드
* @param vo
* @return List<DataMap>
*/
public List<DataMap> selectBOEmailAtmcSndngTmplatInqireForm(BOMaTmpltVO vo) {
List<DataMap> result= null;
result= mapper.selectBOEmailAtmcSndngTmplatInqireForm(vo);
return result;
}
/**
* 이메일 자동 발송 템플릿 단건 조회 메서드
* @param vo
* @return DataMap
*/
public DataMap selectBOEmailAtmcSndngTmplatOneInqireForm(BOMaTmpltVO vo) {
DataMap resultOne = new DataMap();
formDvSplit(vo);
resultOne = mapper.selectBOEmailAtmcSndngTmplatOneInqireForm(vo);
return resultOne;
}
/**
* 이메일 자동 발송 템플릿 수정 메서드
* @param vo
* @return Map<String, Object>
*/
public Map<String, Object> updateBOEmailAtmcSndngTmplatUpdt(BOMaTmpltVO vo) {
Map<String, Object> message = new HashMap<>();
formDvSplit(vo);
try {
mapper.updateBOEmailTmplat(vo);
message.put("getEmailSndngFormInnb", vo.getEmailSndngFormInnb());
message.put("result", "success");
} catch (WnbtRestException wre){
throw new WnbtRestException(wre.getMessage());
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return message;
}
/**
* 메시지 자동 발송 템플릿 조회 메서드
* @param vo
* @return List<DataMap>
*/
public List<DataMap> selectBOMssageAtmcSndngTmplatInqireForm(BOMaTmpltVO vo) {
List<DataMap> resultList = null;
resultList = mapper.selectBOMssageAtmcSndngTmplatInqireForm(vo);
return resultList;
}
/**
* 메시지 자동 발송 템플릿 수정 메서드
* @param serializedFormData
* @return Map<String, Object>
*/
public Map<String, Object> updateBOMssageAtmcSndngTmplatUpdt(BOMaTmpltVO boTmpltVO) {
Map<String, Object> message = new HashMap<>();
try {
ObjectMapper objectMapper = new ObjectMapper();
List<BOMaTmpltVO> tmplatList = new ArrayList<>();
String tmplatListStr = StringUtil.isNullToString(boTmpltVO.getTmplatList());
if(!"".equals(tmplatListStr)){
tmplatList = objectMapper.readValue(tmplatListStr, new TypeReference<List<BOMaTmpltVO>>() {});
}
mapper.updateBOMssageTmplat(tmplatList);
message.put("getSmsSndngFormInnb", tmplatList.get(tmplatList.size()-1).getSmsSndngFormInnb());
message.put("result", "success");
/* 파라미터 정제 및 복호화 */
//Map<String, List<String>> formDataMap = formSplitNDecode(serializedFormData);
// String sopmalCd = formDataMap.get("sopmalCd").get(0);
//// log.debug("sopmalCd =>{}", sopmalCd);
// String formDvCd = formDataMap.get("formDvCd").get(0);
//// log.debug("formDvCd =>{}", formDvCd);
// List<String> formDtlDvCdList = formDataMap.get("formDtlDvCd");
//// log.debug("smsSndngFormInnbList =>{}", smsSndngFormInnbList);
// List<String> smsCnList = formDataMap.get("smsCn");
//// log.debug("smsCnList =>{}", smsCnList);
//
// //사용자 정보 추출 및 적용
// AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
//
// List<BOTmpltVO> voList = new ArrayList<>();
// if (formDtlDvCdList != null && smsCnList != null) {
// for (int i = 0; i < formDtlDvCdList.size(); i++) {
// String formDtlDvCd = formDtlDvCdList.get(i);
// String smsCn = smsCnList.get(i);
// BOTmpltVO newVo = new BOTmpltVO(sopmalCd, formDvCd, formDtlDvCd, smsCn);
// newVo.setUpdusr(user.getUserInnb());
// voList.add(newVo);
// }
// }
//// log.debug("파라미터 VO 변환 및 복호화 =>{}", voList);
//
} catch (WnbtRestException wre){
throw new WnbtRestException(wre.getMessage());
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return message;
}
/**
* 알림톡 자동 발송 템플릿 조회 메서드
* @param vo
* @return List<DataMap>
*/
public List<DataMap> selectBONtcntalkAtmcSndngTmplatInqireForm(BOMaTmpltVO vo) {
List<DataMap> resultList = null;
resultList = mapper.selectBONtcntalkAtmcSndngTmplatInqireForm(vo);
return resultList;
}
/**
* 알림톡 자동 발송 템플릿 조회 메서드_ 팝업
* @param vo
* @return
*/
public DataMap selectBONtcntalkAtmcSndngTmplatUpdtPopupForm(BOMaTmpltVO vo) {
DataMap ntcntalkDtlInfo = null;
ntcntalkDtlInfo = mapper.selectBONtcntalkAtmcSndngTmplatUpdtPopupForm(vo);
return ntcntalkDtlInfo;
}
/**
* 알림톡 자동 발송 템플릿 수정 메서드
* @param boTmpltVO
* @return Map<String, Object>
*/
public Map<String, Object> updateBONtcntalkAtmcSndngTmplatUpdt(BOMaTmpltVO boTmpltVO) {
Map<String, Object> message = new HashMap<>();
try {
mapper.updateBOKakaoFormPopup(boTmpltVO);
// ObjectMapper objectMapper = new ObjectMapper();
// List<BOMaTmpltVO> tmplatList = new ArrayList<>();
//
// String tmplatListStr = StringUtil.isNullToString(boTmpltVO.getTmplatList());
//
// if(!"".equals(tmplatListStr)){
// tmplatList = objectMapper.readValue(tmplatListStr, new TypeReference<List<BOMaTmpltVO>>() {});
// }
//
// tmplatList = tmplatList.stream()
// .map(vo -> {
// vo.setSopmalCd(boTmpltVO.getSopmalCd());
// return vo;
// }).toList();
//
// log.debug("tmeplatList {}", tmplatList);
// mapper.updateBOKakaoFormPopup(tmplatList);
//
// message.put("getNtcntalkSndngFormInnb", tmplatList.get(tmplatList.size()-1).getNtcntalkSndngFormInnb());
// message.put("result", "success");
// /* 파라미터 정제 및 복호화 */
// Map<String, List<String>> formDataMap = formSplitNDecode(serializedFormData);
//
// String formDvCd = formDataMap.get("formDvCd").get(0);
//// log.debug("formDvCd =>{}", formDvCd);
// List<String> formDtlDvCdList = formDataMap.get("formDtlDvCd");
//// log.debug("formDtlDvCdList =>{}", formDtlDvCdList);
// List<String> msgList = formDataMap.get("msg");
//// log.debug("msgList =>{}", msgList);
// List<String> smsRplcAtList = formDataMap.get("smsRplcAt");
//// log.debug("smsRplcAtList =>{}", smsRplcAtList);
// List<String> smsCnList = formDataMap.get("smsRplcCn");
//// log.debug("smsCnList =>{}", smsCnList);
//
// List<String> btnTypeList = formDataMap.get("btnType");
// log.debug("btnTypeList =>{}", btnTypeList);
// List<String> btnNmList = formDataMap.get("btnNm");
//// log.debug("btnNmList =>{}", btnNmList);
// List<String> btnPcUrlList = formDataMap.get("btnPcUrl");
//// log.debug("btnPcUrlList =>{}", btnPcUrlList);
// List<String> btnMUrlList = formDataMap.get("btnMUrl");
//// log.debug("btnMUrlList =>{}", btnMUrlList);
//
// //사용자 정보 추출 및 적용
// AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
//
// List<BOTmpltVO> voList = new ArrayList<>();
// if (formDtlDvCdList != null && msgList != null) {
// for (int i = 0; i < formDtlDvCdList.size(); i++) {
// String formDtlDvCd = formDtlDvCdList.get(i);
// String msg = msgList.get(i);
// String smsRplcAt = smsRplcAtList.get(i);
// String smsCn = smsCnList.get(i);
// BOTmpltVO newVo = new BOTmpltVO(formDvCd, formDtlDvCd, msg, smsRplcAt, smsCn);
//
// if(formDtlDvCdList.size() == 1) {
// if(btnTypeList != null) {
// for(int j = 0; j < btnTypeList.size(); j++) {
// switch (j) {
// case 0: {
// newVo.setBtnType01(btnTypeList.get(j));
// newVo.setBtnNm01(btnNmList.get(j));
// newVo.setBtn01Url01(btnMUrlList.get(j));
// newVo.setBtn01Url02(btnPcUrlList.get(j));
// if(btnTypeList.get(j).equals("DS")) {
// newVo.setBtnNm01("");
// newVo.setBtn01Url01("");
// newVo.setBtn01Url02("");
// }
// break;
// }
// case 1: {
// newVo.setBtnType02(btnTypeList.get(j));
// newVo.setBtnNm02(btnNmList.get(j));
// newVo.setBtn02Url01(btnMUrlList.get(j));
// newVo.setBtn02Url02(btnPcUrlList.get(j));
// if(btnTypeList.get(j).equals("DS")) {
// newVo.setBtnNm02("");
// newVo.setBtn02Url01("");
// newVo.setBtn02Url02("");
// }
// break;
// }
// case 2: {
// newVo.setBtnType03(btnTypeList.get(j));
// newVo.setBtnNm03(btnNmList.get(j));
// newVo.setBtn03Url01(btnMUrlList.get(j));
// newVo.setBtn03Url02(btnPcUrlList.get(j));
// if(btnTypeList.get(j).equals("DS")) {
// newVo.setBtnNm03("");
// newVo.setBtn03Url01("");
// newVo.setBtn03Url02("");
// }
// break;
// }
// case 3: {
// newVo.setBtnType04(btnTypeList.get(j));
// newVo.setBtnNm04(btnNmList.get(j));
// newVo.setBtn04Url01(btnMUrlList.get(j));
// newVo.setBtn04Url02(btnPcUrlList.get(j));
// if(btnTypeList.get(j).equals("DS")) {
// newVo.setBtnNm04("");
// newVo.setBtn04Url01("");
// newVo.setBtn04Url02("");
// }
// break;
// }
// case 4: {
// newVo.setBtnType05(btnTypeList.get(j));
// newVo.setBtnNm05(btnNmList.get(j));
// newVo.setBtn05Url01(btnMUrlList.get(j));
// newVo.setBtn05Url02(btnPcUrlList.get(j));
// if(btnTypeList.get(j).equals("DS")) {
// newVo.setBtnNm05("");
// newVo.setBtn05Url01("");
// newVo.setBtn05Url02("");
// }
// break;
// }
// }
// }
// }
// }
//
// newVo.setUpdusr(user.getUserInnb());
// voList.add(newVo);
// }
// }
// log.debug("파라미터 VO 변환 및 복호화 =>{}", voList);
//
// /* 템플릿 관리 > 알림톡 탭 수정 기능 */
//// if(btnTypeList != null) {
//
//// }else {
//// mapper.updateBOKakaoForm(voList);
//// }
} catch (WnbtRestException wre){
throw new WnbtRestException(wre.getMessage());
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return message;
}
/**
* 폼 데이터 정제 및 복호화
* @return Map<String, List<String>>
*/
private Map<String, List<String>> formSplitNDecode(String serializedFormData) {
Map<String, List<String>> formDataMap = new HashMap<>();
String[] keyValuePairs = serializedFormData.split("&");
try {
for (String pair : keyValuePairs) {
String[] keyValue = pair.split("=");
String key = keyValue[0];
String value = keyValue.length > 1 ? keyValue[1] : "";
formDataMap.computeIfAbsent(URLDecoder.decode(key, "UTF-8"), k -> new ArrayList<>()).add(URLDecoder.decode(value, "UTF-8"));
}
} catch (UnsupportedEncodingException e) {
log.error(e.getMessage(), e);
}
return formDataMap;
}
/**
* 양식구분 정제
* @return
*/
private void formDvSplit(BOMaTmpltVO vo) {
String formDvCd = vo.getFormDvCd();
String[] parts = formDvCd.split(",")[0].split("&");
log.debug("parts {}", parts[0]);
vo.setFormDvCd(parts[0]);
if(parts.length > 1) {
vo.setFormDtlDvCd(parts[1]);
}
}
/**
* 통합관리자 자동발송관리 쇼핑몰 조회
* @return
*/
public List<DataMap> selectBOSopmalAtmcSndng() {
List<DataMap> resultList = null;
resultList = mapper.selectBOSopmalAtmcSndng();
return resultList;
}
/**
* 템플릿 사용 그룹 조회
* @return
*/
public List<DataMap> selectBOTmplatGroup(String param) {
List<DataMap> resultList = null;
resultList = mapper.selectBOTmplatGroup(param);
return resultList;
}
/**
* 템플릿 사용 그룹별 폼 조회
* @return
*/
public List<DataMap> selectBOTmplatFormGroup(String param) {
List<DataMap> resultList = null;
resultList = mapper.selectBOTmplatFormGroup(param);
return resultList;
}
}

View File

@@ -0,0 +1,120 @@
package com.wb.domainserver.domain.admin.ntcn.tmplt.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
@Data
@EqualsAndHashCode(callSuper = false)
public class BOMaTmpltVO extends AbstractVO {
/** 템플릿 공통 */
/** 쇼핑몰 코드 */
private String sopmalCd;
/** 양식구분 */
private String formDvCd;
/** 양식상세구분 */
private String formDtlDvCd;
/** 이메일 템플릿 */
/** 고유번호 */
private Integer emailSndngFormInnb;
/** 이메일 제목 */
private String emailSj;
/** 이메일 내용 */
private String emailCn;
/** 메시지 템플릿 */
/** 고유번호*/
private Integer smsSndngFormInnb;
/** SMS 내용*/
private String smsCn;
/** 카카오 알림톡 템플릿 내용 */
/** 알림톡 발송양식 고유번호 */
private Integer ntcntalkSndngFormInnb;
/** 템플릿내용 */
private String msg;
/** 템플릿코드 */
private String templatecode;
/** SMS대체여부 */
private String smsRplcAt;
/** SMS 대체문자*/
private String smsRplcCn;
/** 카카오 알림톡_버튼 */
/** 버튼타입 */
private String btnType01;
/** 버튼명 */
private String btnNm01;
/** 링크주소(mobile) */
private String btn01Url01;
/** 링크주소(pc) */
private String btn01Url02;
/** 버튼타입2 */
private String btnType02;
/** 버튼명2 */
private String btnNm02;
/** 링크주소2(mobile) */
private String btn02Url01;
/** 링크주소2(pc) */
private String btn02Url02;
/** 버튼타입3 */
private String btnType03;
/** 버튼명3 */
private String btnNm03;
/** 링크주소3(mobile) */
private String btn03Url01;
/** 링크주소3(pc) */
private String btn03Url02;
/** 버튼타입4 */
private String btnType04;
/** 버튼명4 */
private String btnNm04;
/** 링크주소4(mobile) */
private String btn04Url01;
/** 링크주소4(pc) */
private String btn04Url02;
/** 버튼타입5 */
private String btnType05;
/** 버튼명5 */
private String btnNm05;
/** 링크주소5(mobile) */
private String btn05Url01;
/** 링크주소5(pc) */
private String btn05Url02;
/** 템플릿 정보 목록 */
private String tmplatList;
/** 버튼타입 리스트 */
private List<String> btnType;
/** 버튼명 리스트 */
private List<String> btnNm;
/** 링크주소1(mobile) 리스트 */
private List<String> btnMUrl;
/** 링크주소1(pc) 리스트 */
private List<String> btnPcUrl;
public BOMaTmpltVO(String sopmalCd, String formDvCd, String formDtlDvCd, String smsCn) {
this.sopmalCd = sopmalCd;
this.formDvCd = formDvCd;
this.formDtlDvCd = formDtlDvCd;
this.smsCn = smsCn;
}
public BOMaTmpltVO(String formDvCd, String formDtlDvCd, String msg, String smsRplcAt, String smsCn) {
// this.sopmalCd = sopmalCd;
this.formDvCd = formDvCd;
this.formDtlDvCd = formDtlDvCd;
this.msg = msg;
this.smsRplcAt = smsRplcAt;
this.smsCn = smsCn;
}
public BOMaTmpltVO() {
super();
// TODO Auto-generated constructor stub
}
}

View File

@@ -0,0 +1,99 @@
package com.wb.domainserver.domain.admin.ntcn.tmplt.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
@Data
@EqualsAndHashCode(callSuper = false)
public class MaTmpltVO extends AbstractVO {
/** 템플릿 공통 */
/** 쇼핑몰 코드 */
private String sopmalCd;
/** 양식구분 */
private String formDvCd;
/** 양식상세구분 */
private String formDtlDvCd;
/** 이메일 템플릿 */
/** 고유번호 */
private Integer emailSndngFormInnb;
/** 이메일 제목 */
private String emailSj;
/** 이메일 내용 */
private String emailCn;
/** 메시지 템플릿 */
/** 고유번호*/
private Integer smsSndngFormInnb;
/** SMS 내용*/
private String smsCn;
/** 카카오 알림톡 템플릿 내용 */
/** 알림톡 발송양식 고유번호 */
private Integer ntcntalkSndngFormInnb;
/** 템플릿내용 */
private String msg;
/** 템플릿코드 */
private String templatecode;
/** SMS대체여부 */
private String smsRplcAt;
/** 카카오 알림톡_버튼 */
/** 버튼타입1 */
private String btnType01;
/** 버튼명1 */
private String btnNm01;
/** 링크주소1(mobile) */
private String btn01Url01;
/** 링크주소1(pc) */
private String btn01Url02;
/** 버튼타입2 */
private String btnType02;
/** 버튼명2 */
private String btnNm02;
/** 링크주소2(mobile) */
private String btn02Url01;
/** 링크주소2(pc) */
private String btn02Url02;
/** 버튼타입3 */
private String btnType03;
/** 버튼명3 */
private String btnNm03;
/** 링크주소3(mobile) */
private String btn03Url01;
/** 링크주소3(pc) */
private String btn03Url02;
/** 버튼타입4 */
private String btnType04;
/** 버튼명4 */
private String btnNm04;
/** 링크주소4(mobile) */
private String btn04Url01;
/** 링크주소4(pc) */
private String btn04Url02;
/** 버튼타입5 */
private String btnType05;
/** 버튼명5 */
private String btnNm05;
/** 링크주소5(mobile) */
private String btn05Url01;
/** 링크주소5(pc) */
private String btn05Url02;
/** 템플릿 정보 목록 */
private String tmplatList;
/** 버튼타입 리스트 */
private List<String> btnType;
/** 버튼명 리스트 */
private List<String> btnNm;
/** 링크주소(mobile) 리스트 */
private List<String> btnMUrl;
/** 링크주소(pc) 리스트 */
private List<String> btnPcUrl;
}

View File

@@ -0,0 +1,139 @@
package com.wb.domainserver.domain.admin.stats.marktAnals.controller;
import com.wb.domainserver.common.mvc.tags.ui.pagination.PaginationInfo;
import com.wb.domainserver.common.prop.PaginationProperties;
import com.wb.domainserver.domain.admin.stats.marktAnals.service.BOMaAdminStatsService;
import com.wb.domainserver.domain.admin.stats.marktAnals.vo.BOMaMbrNdMlgVO;
import com.wb.domainserver.domain.gcone.stats.marktAnals.service.BOMarktAnalsService;
import com.wb.domainserver.domain.gcone.stats.marktAnals.vo.BOMarktAnalsVO;
import com.wb.domainserver.response.ApiResponse;
import com.wb.domainserver.security.authentication.AnonymousUser;
import com.wb.domainserver.security.authentication.MemberJwtContextHolder;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.dataaccess.DataMap;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping(value = "/admin/stats/marktAnals")
@Slf4j
public class BOMaAdminStatsController {
@Autowired
private BOMaAdminStatsService service;
@Autowired
private PaginationProperties paginationProperties;
/**************************************************************************
* 회원 및 마일리지
*************************************************************************/
/**
* 통합관리자 회원 및 마일리지 통계 화면
* @param
* @return ResponseEntity<?>
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectBOAdminMbrNdMlgStats")
public ResponseEntity<?> selectBOAdminMbrNdMlgStats(@RequestBody DataMap vo) {
// 응답 메세지 객체
Map<String, Object> content = new HashMap<>();
content.put("resultList", service.selectBOAdminMbrNdMlgStats(vo));
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 통합관리자 회원 및 마일리지 통계 표 조회
* @param
* @return ResponseEntity<?>
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectBOAdminMbrNdMlgStatsTableInqire")
public ResponseEntity<?> selectBOAdminMbrNdMlgStatsTableInqire(@RequestBody BOMarktAnalsVO vo) {
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
if("01".equals(user.getSysDvCd())){
vo.setSopmalCd(user.getSopmalCd());
}
// 응답 메세지 객체
Map<String, Object> content = new HashMap<>();
PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(vo.getPageIndex());
paginationInfo.setRecordCountPerPage(vo.getRecordCountPerPage());
paginationInfo.setPageSize(paginationProperties.getPageSize());
vo.setPaginationInfo(paginationInfo);
vo.setFirstIndex(paginationInfo.getFirstRecordIndex());
vo.setLastIndex(paginationInfo.getLastRecordIndex());
vo.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
List<DataMap> resultList = service.selectBOAdminMbrNdMlgStatsTableInqire(vo);
content.put("resultList", resultList);
content.put("paginationInfo", paginationInfo);
content.put("unitFlag", vo.getUnitFlag());
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 마일리지 정산
*
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectBOAdminMlgStlForm")
public ResponseEntity<?> selectBOAdminMlgStlForm() {
Map<String, Object> content = new HashMap<>();
//현재 년도
int currentYear = Calendar.getInstance().get(Calendar.YEAR);
content.put("currentYear", currentYear);
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 마일리지 목록 조회
*
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectBOAdminMlgStlListInqire")
public ResponseEntity<?> selectBOAdminMlgStlListInqire(@RequestBody BOMaMbrNdMlgVO vo) {
log.debug("selectBOAdminMlgStlListInqire(vo = {})", vo);
Map<String, Object> content = new HashMap<>();
//
// //마일리지 통계
// List<DataMap> mlgStatList = service.selectBOMaMlgStatList(vo);
// log.debug("mlgStatList {}", mlgStatList);
// content.put("mlgStatList", mlgStatList);
//
// //마일리지 정산 목록
// List<DataMap> mlgStlList = service.selectBOMaMlgStlList(vo);
// log.debug("mlgStlList {}", mlgStlList);
// content.put("mlgStlList", mlgStlList);
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
}

View File

@@ -0,0 +1,158 @@
package com.wb.domainserver.domain.admin.stats.marktAnals.controller;
import com.wb.domainserver.domain.admin.stats.marktAnals.service.BOMaAdminStatsService;
import com.wb.domainserver.domain.admin.stats.marktAnals.vo.MaStlMlgVO;
import com.wb.domainserver.domain.mngr.stats.marktAnals.vo.MarktAnalsVO;
import com.wb.domainserver.response.WnbtWebClientResponseHandler;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.communicate.RESRC;
import com.wb.domainserver.util.communicate.SendToResrc;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping(value = "/admin/stats/marktAnals")
@Slf4j
public class MaMarktAnalsController {
@Autowired
private BOMaAdminStatsService service;
/** WebClient 호출을 위한 wrapper */
@Autowired
private WnbtWebClientResponseHandler responseHandler;
@Autowired
private SendToResrc sendToResrc;
/**************************************************************************
* 회원 및 마일리지
*************************************************************************/
/**
* 회원 및 마일리지 화면
*
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectAdminMbrNdMlgStats")
public String selectAdminMbrMlg(ModelMap model) {
MarktAnalsVO vo = new MarktAnalsVO();
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/stats/marktAnals/selectBOAdminMbrNdMlgStats", vo),
model,
"cond"
);
model.put("resultMap", vo);
return "admin/stats/marktAnals/MaMbrNdMlgStats";
}
/**
* 회원 및 마일리지 표 조회
*
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectAdminMbrNdMlgStatsTableInqire")
public String selectAdminMbrMlgTableInqire(MarktAnalsVO vo, ModelMap model) {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/stats/marktAnals/selectBOAdminMbrNdMlgStatsTableInqire", vo),
model,
"resultMap"
);
return "admin/stats/marktAnals/MaMbrNdMlgStatsTable";
}
/**
* 마일리지 통계 화면
*
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectAdminMlg")
public String selectAdminMlg() {
log.debug("selectAdminMlg()");
return "admin/stats/marktAnals/mlg";
}
/**
* 마일리지 표 조회
*
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectAdminMlgTableInqire")
public String selectAdminMlgTableInqire(ModelMap model) {
log.debug("selectAdminMlgTableInqire(vo = )");
// responseHandler.handleResponse(
// sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/stats/marktAnals/selectBOAdminMbrMlgTableInqire", vo),
// model,
// "resultMap"
// );
return "admin/stats/marktAnals/mlgTable";
}
/**
* 마일리지 정산
*
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectAdminMlgStlForm")
public String selectAdminMlgStlForm(ModelMap model, MaStlMlgVO vo) {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/stats/marktAnals/selectBOAdminMlgStlForm", vo),
model,
"resultMap"
);
return "admin/stats/marktAnals/MlgStlForm";
}
/**
* 마일리지 표 조회
*
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectAdminMlgStlListInqire")
public String selectAdminMlgStlListInqire(ModelMap model, MaStlMlgVO vo) {
log.debug("selectAdminMlgTableInqire(vo = {})", vo);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/stats/marktAnals/selectBOAdminMlgStlListInqire", vo),
model,
"resultMap"
);
return "admin/stats/marktAnals/MlgStlList";
}
}

View File

@@ -0,0 +1,50 @@
package com.wb.domainserver.domain.admin.stats.marktAnals.mapper;
import com.wb.domainserver.domain.admin.stats.marktAnals.vo.BOMaMbrNdMlgVO;
import com.wb.domainserver.domain.gcone.stats.marktAnals.vo.BOMarktAnalsVO;
import com.wb.domainserver.domain.itrnt.ntcn.stl.vo.BOItrntStlMssageVO;
import com.wb.domainserver.util.dataaccess.DataMap;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import java.util.List;
@Mapper
@Repository
public interface BOMaAdminStatsMapper {
/**
* 회원 및 마일리지 표 건수 조회
* @param vo
* @return
*/
public Integer selectBOAdminMbrNdMlgTableCntInqire(BOMarktAnalsVO vo);
/**
* 회원 및 마일리지 표 조회
* @param vo
* @return
*/
public List<DataMap> selectBOAdminMbrNdMlgTableInqire(BOMarktAnalsVO vo);
/**
* 마일리지 통계 조회
* @param vo
* @return
*/
List<DataMap> selectBOMaMlgStatList(BOMaMbrNdMlgVO vo);
/**
* 마일리지 정산 조회
* @param vo
* @return
*/
List<DataMap> selectBOMaMlgStlList(BOMaMbrNdMlgVO vo);
/**
* 쇼핑몰 코드, 이름 조회
*/
public List<DataMap> selectBOAdminMbrNdMlgStats(DataMap vo);
}

View File

@@ -0,0 +1,117 @@
package com.wb.domainserver.domain.admin.stats.marktAnals.service;
import com.wb.domainserver.domain.admin.stats.marktAnals.mapper.BOMaAdminStatsMapper;
import com.wb.domainserver.domain.admin.stats.marktAnals.vo.BOMaMbrNdMlgVO;
import com.wb.domainserver.domain.gcone.stats.marktAnals.vo.BOMarktAnalsVO;
import com.wb.domainserver.util.dataaccess.DataMap;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Slf4j
@Service
public class BOMaAdminStatsService {
@Autowired
private BOMaAdminStatsMapper mapper;
/**
* 통합관리자 회원 및 마일리지 통계 화면
* @param vo
* @return List<DataMap>
*/
public List<DataMap> selectBOAdminMbrNdMlgStats(DataMap vo) {
// 차트 데이터
List<DataMap> resultList = new ArrayList<>();
resultList = mapper.selectBOAdminMbrNdMlgStats(vo);
return resultList;
}
/**
* 통합관리자 회원 및 마일리지 통계 표 조회
* @param vo
* @return List<DataMap>
*/
public List<DataMap> selectBOAdminMbrNdMlgStatsTableInqire(BOMarktAnalsVO vo) {
// 응답 객체
Map<String, Object> content = new HashMap<>();
List<DataMap> resultList = new ArrayList<DataMap>();
Integer totalCnt = 0;
vo.setOrdrFinal(namingConvention(vo.getOrdrStand(), vo.getOrdrType()));
vo.setUnitFlag("");//todo : 삭제
if("".equals(vo.getUnitFlag()) ) {
totalCnt = mapper.selectBOAdminMbrNdMlgTableCntInqire(vo);
vo.getPaginationInfo().setTotalRecordCount(totalCnt);
if(totalCnt > 0) {
resultList = mapper.selectBOAdminMbrNdMlgTableInqire(vo);
}
}
return resultList;
}
/**
* 정렬 조건 만들기
* @param ordrStand
* @param ordrType
* @return String
*/
public static String namingConvention(String ordrStand, String ordrType) {
StringBuilder result = new StringBuilder();
if(ordrStand == null){
return "";
}
for (int i = 0; i < ordrStand.length(); i++) {
char currentChar = ordrStand.charAt(i);
if ((Character.isUpperCase(currentChar) || Character.isDigit(currentChar)) && i != 0) {
result.append('_');
}
result.append(Character.toUpperCase(currentChar));
}
return result.toString() + " " + ordrType;
}
/**
* 마일리지 통계
* @param vo
* @return
*/
public List<DataMap> selectBOMaMlgStatList(BOMaMbrNdMlgVO vo) {
//년월 합친 문자 202502로 조회
String srchDt = vo.getSrchYear() + vo.getSrchMnt();
vo.setSrchDt(srchDt);
return mapper.selectBOMaMlgStatList(vo);
}
/**
* 마일리지 정산 목록
* @param vo
* @return
*/
public List<DataMap> selectBOMaMlgStlList(BOMaMbrNdMlgVO vo) {
//년월 합친 문자 202502로 조회
String srchDt = vo.getSrchYear() + vo.getSrchMnt();
vo.setSrchDt(srchDt);
return mapper.selectBOMaMlgStlList(vo);
}
}

View File

@@ -0,0 +1,30 @@
package com.wb.domainserver.domain.admin.stats.marktAnals.vo;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class BOMaMbrNdMlgVO {
/** 매장 번호 */
private String strInnb;
/** 등록자 구분 */
private String regusrDv;
/** 매장 구분 */
private String strDv;
/** 연도 */
private String srchYear;
/** 월 */
private String srchMnt;
/** 조회년월 */
private String srchDt;
/** 조회 법인 */
private String srchCrp;
}

View File

@@ -0,0 +1,28 @@
package com.wb.domainserver.domain.admin.stats.marktAnals.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class MaStlMlgVO extends AbstractVO {
/** 매장 번호 */
private String strInnb;
/** 등록자 구분 */
private String regusrDv;
/** 매장 구분 */
private String strDv;
/** 연도 */
private String srchYear;
/** 월 */
private String srchMnt;
/** 조회 법인 */
private String srchCrp;
}

View File

@@ -0,0 +1,212 @@
package com.wb.domainserver.domain.admin.store.bsnm.controller;
import com.wb.domainserver.common.mvc.tags.ui.pagination.PaginationInfo;
import com.wb.domainserver.common.prop.PaginationProperties;
import com.wb.domainserver.domain.admin.store.bsnm.service.BOBsnmService;
import com.wb.domainserver.domain.admin.store.bsnm.vo.BOBsnmVO;
import com.wb.domainserver.response.ApiResponse;
import com.wb.domainserver.security.authentication.AnonymousUser;
import com.wb.domainserver.security.authentication.MemberJwtContextHolder;
import com.wb.domainserver.security.authentication.MemberJwtToken;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.dataaccess.DataMap;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
*
* 사업자 관리 Controller
* @author rvg
* @since 2023-12-19
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2023-12-19 리브가 최초 생성
*
* </pre>
*/
@Slf4j
@RestController
@RequestMapping("/admin/store/bsnm")
public class BOBsnmController {
@Autowired
private BOBsnmService service;
@Autowired
private PaginationProperties paginationProperties;
/**
* 사업자 목록조회
* @param boBsnmVO 파라미터VO
* @return ResponseEntity<?> 목록조회 결과
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping("/selectBOBsnmListInqireForm")
public ResponseEntity<?> selectBOBsnmListInqireForm(@RequestBody BOBsnmVO boBsnmVO) {
Map<String, Object> content = new HashMap<>();
content.put("BOBsnmVO", boBsnmVO);
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 사업자 목록조회
* @param boBsnmVO 파라미터VO
* @return ResponseEntity<?> 목록조회 결과
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping("/selectBOBsnmListInqire")
public ResponseEntity<?> selectBOBsnmListInqire(@RequestBody BOBsnmVO boBsnmVO) {
Map<String, Object> content = new HashMap<>();
//페이징 처리를 위한 pagination 객체 생성
PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(boBsnmVO.getPageIndex());
paginationInfo.setRecordCountPerPage(boBsnmVO.getPageUnit());
paginationInfo.setPageSize(paginationProperties.getPageSize());
//페이징 처리를 위한 값 설정
boBsnmVO.setPaginationInfo(paginationInfo);
boBsnmVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
boBsnmVO.setLastIndex(paginationInfo.getLastRecordIndex());
boBsnmVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
//사업자 목록조회
List<BOBsnmVO> list = service.selectBOBsnmList(boBsnmVO);
//사업자 목록조회 결과 설정
content.put("BOBsnmVO", boBsnmVO);
content.put("paginationInfo", boBsnmVO.getPaginationInfo());
content.put("list", list);
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 사업자 등록
* @param boBsnmVO
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/insertBOBsnmRegist")
public ResponseEntity<?> insertBOBsnmRegist(@RequestBody BOBsnmVO boBsnmVO) {
Map<String, Object> message = new HashMap<>();
//사용자 정보 추출 및 적용
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
boBsnmVO.setRegusr(user.getUserInnb());
boBsnmVO.setUpdusr(user.getUserInnb());
Integer result = service.selectBOBizrnbDplct(boBsnmVO.getBizrnb());
if (result > 0) {
message.put("result", "dublechk");
} else{
// 사업자 등록
message = service.insertBOBsnm(boBsnmVO);
}
return ApiResponse.of(message).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 사업자 상세 조회
* @param boBsnmVO
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectBOBsnmDtlInqire")
public ResponseEntity<?> selectBOBsnmDtlInqire(@RequestBody BOBsnmVO boBsnmVO) {
Map<String, Object> content = new HashMap<>();
//사업자 정보 조회
List<BOBsnmVO> list = service.selectBOBsnmDtl(boBsnmVO);
content.put("BOBsnmVO", boBsnmVO);
content.put("list", list);
DataMap map = service.selectGroupCd();
List<DataMap> codeList = new ArrayList<>();
codeList.add(map);
content.put("codeList", codeList);
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 사업자 등록 폼
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectBOBsnmRegistForm")
public ResponseEntity<?> selectBOBsnmRegistForm(@RequestBody BOBsnmVO boBsnmVO) {
Map<String, Object> content = new HashMap<>();
content.put("BOBsnmVO", boBsnmVO);
DataMap map = service.selectGroupCd();
List<DataMap> codeList = new ArrayList<>();
codeList.add(map);
content.put("codeList", codeList);
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 사업자 수정
* @param boBsnmVO
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/updateBOBsnmUpdt")
public ResponseEntity<?> updateBOBsnmUpdt(@RequestBody BOBsnmVO boBsnmVO) {
//사용자 정보 추출 및 적용
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
boBsnmVO.setRegusr(user.getUserInnb());
boBsnmVO.setUpdusr(user.getUserInnb());
Map<String, Object> message = service.updateBOBsnmUpdt(boBsnmVO);
return ApiResponse.of(message).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 사업자 삭제
* @param boBsnmVO
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/deleteBOBsnmDel")
public ResponseEntity<?> deleteBOBsnmDel(@RequestBody BOBsnmVO boBsnmVO) {
//사용자 정보 추출 및 적용
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
boBsnmVO.setRegusr(user.getUserInnb());
boBsnmVO.setUpdusr(user.getUserInnb());
Map<String, Object> message = service.deleteBOBsnm(boBsnmVO);
return ApiResponse.of(message).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 사업자등록번호 중복 조회
* @param boBsnmVO
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectBOBizrnbDplctInqire")
public ResponseEntity<?> selectBOBizrnbDplctInqire(@RequestBody BOBsnmVO boBsnmVO) {
Integer result = service.selectBOBizrnbDplct(boBsnmVO.getBizrnb());
return ApiResponse.of(result).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
}

View File

@@ -0,0 +1,213 @@
package com.wb.domainserver.domain.admin.store.bsnm.controller;
import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.domain.admin.store.bsnm.vo.MaBsnmVO;
import com.wb.domainserver.exception.WnbtRestException;
import com.wb.domainserver.response.WnbtResponse;
import com.wb.domainserver.response.WnbtWebClientResponseHandler;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.communicate.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
/**
* 사업자 관리 Controller
*
* @author rvg
* @version 1.0
* @see <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2023-12-19 rvg 최초 생성
*
* </pre>
* @since 2023-12-19
*/
@Slf4j
@Controller
@RequestMapping("/admin/store/bsnm")
public class MaBsnmController {
/** WebClient 호출을 위한 wrapper */
@Autowired
private WnbtWebClientResponseHandler responseHandler;
@Autowired
private SendToResrc sendToResrc;
/** 공통 메시지 처리를 위한 메시지 객체 */
@Autowired
private GconeMessageSource gconeMessageSource;
/**
* 사업자 목록 화면
* @param maBsnmVO
* @param model
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping("/selectBsnmListInqireForm")
public String selectBsnmListInqireForm(MaBsnmVO maBsnmVO,
ModelMap model) {
//BO 발송그룹 목록조회 API 호출
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/store/bsnm/selectBOBsnmListInqireForm", maBsnmVO),
model,
"resultMap"
);
return "admin/store/bsnm/MaBsnmListInqireRForm";
}
/**
* 사업자 목록 조회
* @param maBsnmVO
* @param model
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping("/selectBsnmListInqire")
public String selectBsnmListInqire(MaBsnmVO maBsnmVO,
ModelMap model) {
//BO 발송그룹 목록조회 API 호출
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/store/bsnm/selectBOBsnmListInqire", maBsnmVO),
model,
"resultMap"
);
return "admin/store/bsnm/MaBsnmListInqireR";
}
/**
* 사업자 등록 화면이동
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping("/selectBsnmRegistForm")
public String selectBsnmRegistForm(MaBsnmVO maBsnmVO, ModelMap model) {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/store/bsnm/selectBOBsnmRegistForm", maBsnmVO),
model,
"resultMap"
);
return "admin/store/bsnm/MaBsnmRegistC";
}
/**
* 사업자등록번호 중복 조회
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping("/selectBizrnbDplctInqire")
public ResponseEntity<WnbtResponse> selectBizrnbDplctInqire(@RequestBody MaBsnmVO maBsnmVO) {
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/store/bsnm/selectBOBizrnbDplctInqire", maBsnmVO),
ReplyFromResrc::getReply
);
}
/**
* 사업자 등록
* @param maBsnmVO
* @param bindingResult
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/insertBsnmRegist", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> insertBsnmRegist(@Validated MaBsnmVO maBsnmVO, BindingResult bindingResult) {
if(bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/store/bsnm/insertBOBsnmRegist", maBsnmVO),
ReplyFromResrc::getReply
);
}
/**
* 사업자 수정 화면이동
* @param maBsnmVO
* @param model
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping("/selectBsnmUpdtForm")
public String selectBsnmUpdtForm(MaBsnmVO maBsnmVO,
ModelMap model) {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/store/bsnm/selectBOBsnmDtlInqire", maBsnmVO),
model,
"resultMap"
);
return "admin/store/bsnm/MaBsnmUpdtU";
}
/**
* 사업자 수정
* @param maBsnmVO
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updateBsnmUpdt", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updateBsnmUpdt(@Validated MaBsnmVO maBsnmVO, BindingResult bindingResult) {
if(bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/store/bsnm/updateBOBsnmUpdt", maBsnmVO),
ReplyFromResrc::getReply
);
}
/**
* 사업자 삭제
* @param maBsnmVO
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/deleteBsnmDel", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> deleteBsnmDel(MaBsnmVO maBsnmVO) {
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/store/bsnm/deleteBOBsnmDel", maBsnmVO),
ReplyFromResrc::getReply
);
}
/**
* 사업자 상세 조회 팝업
* @param maBsnmVO
* @param model
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping("/selectBsnmInqirePopup")
public String selectBsnmInqirePopup(MaBsnmVO maBsnmVO,
ModelMap model) {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/store/bsnm/selectBOBsnmDtlInqire", maBsnmVO),
model,
"resultMap"
);
return "admin/store/bsnm/MaBsnmInqirePopupR";
}
}

View File

@@ -0,0 +1,80 @@
package com.wb.domainserver.domain.admin.store.bsnm.mapper;
import com.wb.domainserver.domain.admin.store.bsnm.vo.BOBsnmVO;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
*
* Bsnm Mapper Class
* @author rvg
* @since 2023-12-11
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2023-12-19 리브가 최초 생성
*
* </pre>
*/
@Mapper
@Repository
public interface BOBsnmMapper {
/**
* 사업자 건수
* @param boBsnmVO
* @return
*/
public Integer selectBOBsnmListCnt(BOBsnmVO boBsnmVO);
/**
* 사업자 목록
*
* @param boBsnmVO
* @return
*/
public List<BOBsnmVO> selectBOBsnmList(BOBsnmVO boBsnmVO);
/**
* 사업자 등록
* @param boBsnmVO
* @return
*/
public void insertBOBsnm(BOBsnmVO boBsnmVO);
/**
* 사업자 정보 상세 조회
* @param boBsnmVO
* @return
*/
public List<BOBsnmVO> selectBOBsnmDtl(BOBsnmVO boBsnmVO);
/**
* 사업자 정보 수정
* @param boBsnmVO
* @return
*/
public void updateBOBsnmUpdt(BOBsnmVO boBsnmVO);
/**
* 사업자 정보 삭제
* @param
* @return
*/
public void deleteBOBsnm(String bsnmInnb);
/**
* 사업자 등록번호 중복 확인
* @param bizrnb
* @return
*/
public Integer selectBOBizrnbDplct(String bizrnb);
}

View File

@@ -0,0 +1,164 @@
package com.wb.domainserver.domain.admin.store.bsnm.service;
import com.wb.domainserver.domain.admin.store.bsnm.mapper.BOBsnmMapper;
import com.wb.domainserver.domain.admin.store.bsnm.vo.BOBsnmVO;
import com.wb.domainserver.domain.admin.sys.comncd.mapper.BOMaComncdMapper;
import com.wb.domainserver.domain.admin.sys.comncd.vo.BOMaComncdVO;
import com.wb.domainserver.util.dataaccess.DataMap;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 사업자 관리 service
*
* @author rvg
* @since 2023-12-19
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2023-12-19 리브가 최초 생성
*
* </pre>
*/
@Slf4j
@Service
public class BOBsnmService {
@Autowired
private BOBsnmMapper mapper;
@Autowired
private BOMaComncdMapper codeMapper;
/**
* 사업자 건수 및 목록조회
* @param boBsnmVO
* @return list
*/
public List<BOBsnmVO> selectBOBsnmList(BOBsnmVO boBsnmVO) {
List<BOBsnmVO> bsnmList = null;
//사업자 건수 조회
boBsnmVO.getPaginationInfo().setTotalRecordCount(mapper.selectBOBsnmListCnt(boBsnmVO));
if(boBsnmVO.getPaginationInfo().getTotalRecordCount() > 0) {
//사업자 건수가 0일 경우 사업자 목록조회를 실시하지 않음
//사업자 목록조회
bsnmList = mapper.selectBOBsnmList(boBsnmVO);
}
return bsnmList;
}
/**
* 사업자 등록
* @param boBsnmVO
* @return message 등록 결과
*/
public Map<String, Object> insertBOBsnm(BOBsnmVO boBsnmVO) {
Map<String, Object> message = new HashMap<>();
try {
mapper.insertBOBsnm(boBsnmVO);
message.put("getBsnmInnb", boBsnmVO.getBsnmInnb());
message.put("result", "success");
} catch (Exception e) {
message.put("result", e.getMessage());
}
return message;
}
/**
* 사업자 정보 상세 조회
* @param boBsnmVO 파라미터VO
* @return list
*/
public List<BOBsnmVO> selectBOBsnmDtl(BOBsnmVO boBsnmVO) {
List<BOBsnmVO> list = mapper.selectBOBsnmDtl(boBsnmVO);
for (BOBsnmVO item : list) {
String userEmail = item.getEmail();
if (userEmail != null && userEmail.contains("@")) {
// @ 기준으로 아이디와 도메인 분리
String[] emailParts = userEmail.split("@");
item.setEmail1(emailParts[0]);
item.setEmail2(emailParts[1]);
}
}
return list;
}
/**
* 사업자 정보 수정
* @param boBsnmVO 파라미터VO
* @return message 수정 결과
*/
public Map<String, Object> updateBOBsnmUpdt(BOBsnmVO boBsnmVO) {
Map<String, Object> message = new HashMap<>();
try {
mapper.updateBOBsnmUpdt(boBsnmVO);
message.put("getBsnmInnb", boBsnmVO.getBsnmInnb());
message.put("result", "success");
} catch (Exception e) {
message.put("result", e.getMessage());
}
return message;
}
/**
* 사업자 정보 삭제
* @param boBsnmVO
* @return message 삭제 결과
*/
public Map<String, Object> deleteBOBsnm(BOBsnmVO boBsnmVO) {
Map<String, Object> message = new HashMap<>();
try {
mapper.deleteBOBsnm(boBsnmVO.getBsnmInnb());
message.put("getBsnmInnb", boBsnmVO.getBsnmInnb());
message.put("result", "success");
} catch (Exception e) {
message.put("result", e.getMessage());
}
return message;
}
/**
* 사업자등록번호 중복 조회
* @param bizrnb
* @return
*/
public Integer selectBOBizrnbDplct(String bizrnb) {
return mapper.selectBOBizrnbDplct(bizrnb);
}
/**
* 공통코드
* @return
*/
public DataMap selectGroupCd() {
DataMap map = new DataMap();
BOMaComncdVO paramVO = new BOMaComncdVO();
//이메일
paramVO.setGroupCd("EMAIL_ADRES");
List<DataMap> EMAIL_ADRES = codeMapper.selectBOCommcdDetailList(paramVO);
map.put("EMAIL_ADRES", EMAIL_ADRES);
System.out.println("EMAIL_ADRES = " + EMAIL_ADRES);
return map;
}
}

View File

@@ -0,0 +1,68 @@
package com.wb.domainserver.domain.admin.store.bsnm.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class BOBsnmVO extends AbstractVO {
/** 사업자 고유번호 */
private String bsnmInnb;
/** 사업자명 */
private String bsnmNm;
/** 업태내용 */
private String bizcndCn;
/** 종목내용 */
private String itemCn;
/** 사업자등록번호 */
private String bizrnb;
/** 통신판매업신고번호 */
private String mobDclNb;
/** 대표자명 */
private String reprsntvnm;
/** 개인정보보호책임자명 */
private String indvdlinfoPrtcRspnberNm;
/** 전화번호 */
private String telnb;
/** 팩스번호 */
private String fxnb;
/** 이메일 */
private String email;
/** 이메일 ID */
private String email1;
/** 이메일 도메인 */
private String email2;
/** 영업신고번호 */
private String bsnDclNb;
/** 우편번호 */
private String zip;
/** 지번주소 */
private String lnbAdres;
/** 도로명주소 */
private String rnmAdres;
/** 상세주소 */
private String dtlAdres;
/** 검색 타입 */
private String srchType;
/** 검색어 */
private String srchStr;
}

View File

@@ -0,0 +1,76 @@
package com.wb.domainserver.domain.admin.store.bsnm.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class MaBsnmVO extends AbstractVO {
/** 사업자 고유번호 */
private String bsnmInnb;
/** 사업자명 */
@NotBlank(message = "사업자명")
private String bsnmNm;
/** 업태내용 */
private String bizcndCn;
/** 종목내용 */
private String itemCn;
/** 사업자등록번호 */
@NotBlank(message = "사업자등록번호")
private String bizrnb;
/** 통신판매업신고번호 */
@NotBlank(message = "통신판매업 신고번호")
private String mobDclNb;
/** 대표자명 */
@NotBlank(message = "대표자명")
private String reprsntvnm;
/** 개인정보보호책임자명 */
@NotBlank(message = "개인정보 보호책임자명")
private String indvdlinfoPrtcRspnberNm;
/** 전화번호 */
@NotBlank(message = "전화번호")
private String telnb;
/** 팩스번호 */
private String fxnb;
/** 이메일 */
@NotBlank(message = "이메일")
private String email;
private String email1;
private String email2;
/** 영업신고번호 */
private String bsnDclNb;
/** 우편번호 */
@NotBlank(message = "사업장 주소")
private String zip;
/** 지번주소 */
private String lnbAdres;
/** 도로명주소 */
private String rnmAdres;
/** 상세주소 */
private String dtlAdres;
/** 검색 타입 */
private String srchType;
/** 검색어 */
private String srchStr;
}

View File

@@ -0,0 +1,224 @@
package com.wb.domainserver.domain.admin.store.extlink.controller;
import com.wb.domainserver.common.mvc.tags.ui.pagination.PaginationInfo;
import com.wb.domainserver.common.prop.PaginationProperties;
import com.wb.domainserver.domain.admin.store.extlink.service.BOMaExtlinkService;
import com.wb.domainserver.domain.admin.store.extlink.vo.BOMaExtlinkVO;
import com.wb.domainserver.response.ApiResponse;
import com.wb.domainserver.security.authentication.AnonymousUser;
import com.wb.domainserver.security.authentication.MemberJwtContextHolder;
import com.wb.domainserver.security.authentication.MemberJwtToken;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.dataaccess.DataMap;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping("/admin/store/extlink")
@Slf4j
public class BOMaExtlinkController {
@Autowired
private BOMaExtlinkService service;
@Autowired
private PaginationProperties paginationProperties;
/**
* 외부연동 목록
* @param vo
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@PostMapping( "/selectBOExtlinkListForm")
public ResponseEntity<?> selectBOExtlinkListForm(@RequestBody BOMaExtlinkVO vo) {
DataMap content = new DataMap();
PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(vo.getPageIndex());
paginationInfo.setRecordCountPerPage(vo.getPageUnit());
paginationInfo.setPageSize(paginationProperties.getPageSize());
vo.setPaginationInfo(paginationInfo);
vo.setFirstIndex(paginationInfo.getFirstRecordIndex());
vo.setLastIndex(paginationInfo.getLastRecordIndex());
vo.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
List<DataMap> extLinkSystemList = new ArrayList<>();
extLinkSystemList = service.selectBOextlinkSystemList();
content.put("paramVO", vo);
content.put("extlinkSystemList", extLinkSystemList);
content.put("paginationInfo", vo.getPaginationInfo());
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 외부연동 조회
* @param vo
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectBOExtlinkList")
public ResponseEntity<?> selectBOExtlinkList(@RequestBody BOMaExtlinkVO vo) {
DataMap content = new DataMap();
PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(vo.getPageIndex());
paginationInfo.setRecordCountPerPage(vo.getPageUnit());
paginationInfo.setPageSize(paginationProperties.getPageSize());
vo.setPaginationInfo(paginationInfo);
vo.setFirstIndex(paginationInfo.getFirstRecordIndex());
vo.setLastIndex(paginationInfo.getLastRecordIndex());
vo.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
content.put("paramVO", vo);
List<DataMap> extLinkList = new ArrayList<>();
extLinkList = service.selectBOextlinkList(vo);
content.put("resultList", extLinkList);
content.put("paginationInfo", vo.getPaginationInfo());
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 외부연동 등록화면
* @param vo
* @return ResponseEntity<?>
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectBOExtLinkRegistForm")
public ResponseEntity<?> selectBOExtLinkRegistForm(@RequestBody BOMaExtlinkVO vo) {
DataMap content = new DataMap();
List<DataMap> extLinkSystemList = new ArrayList<>();
extLinkSystemList = service.selectBOextlinkSystemList();
content.put("extLinkSystemList", extLinkSystemList);
DataMap srchData = new DataMap();
srchData.put("srchExtrlNm", vo.getSrchExtrlNm());
srchData.put("srchExtrlSystem", vo.getSrchExtrlSystem());
srchData.put("pageUnit", vo.getPageUnit());
srchData.put("pageIndex", vo.getPageIndex());
content.put("srchData", srchData);
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 외부연동 등록
* @param vo
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/insertBOExtLinkRegist")
public ResponseEntity<?> insertBOExtLinkRegist(@RequestBody BOMaExtlinkVO vo) {
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
vo.setRegusr(user.getUserInnb());
DataMap result = new DataMap();
result = service.insertBOExtLinkRegist(vo);
return ApiResponse.of(result).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 외부연동 수정 화면
* @param vo
* @return ResponseEntity<?>
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectBOExtLinkUpdtForm")
public ResponseEntity<?> selectBOExtLinkUpdtForm(@RequestBody BOMaExtlinkVO vo) {
DataMap content = new DataMap();
DataMap srchData = new DataMap();
srchData.put("srchExtrlNm", vo.getSrchExtrlNm());
srchData.put("srchExtrlSystem", vo.getSrchExtrlSystem());
srchData.put("pageUnit", vo.getPageUnit());
srchData.put("pageIndex", vo.getPageIndex());
content.put("srchData", srchData);
List<DataMap> extLinkSystemList = new ArrayList<>();
extLinkSystemList = service.selectBOextlinkSystemList();
content.put("extLinkSystemList", extLinkSystemList);
DataMap extlinkInfo = new DataMap();
extlinkInfo = service.selectBOExtLinkUpdtForm(String.valueOf(vo.getExtrlInnb()));
content.put("extLink", extlinkInfo);
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 외부연동 수정
* @param vo
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/updateBOExtLinkUpdt")
public ResponseEntity<?> updateBOExtLinkUpdt(@RequestBody BOMaExtlinkVO vo) {
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
vo.setUpdusr(user.getUserInnb());
DataMap result = new DataMap();
result = service.updateBOExtLinkUpdt(vo);
return ApiResponse.of(result).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 외부연동 조회 엑셀 다운
* @param vo
* @return ResponseEntity<?>
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectBOexcelFileDownload")
public ResponseEntity<?> selectBOexcelFileDownload(@RequestBody BOMaExtlinkVO vo) {
DataMap content = new DataMap();
PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(vo.getPageIndex());
paginationInfo.setRecordCountPerPage(vo.getPageUnit());
paginationInfo.setPageSize(paginationProperties.getPageSize());
vo.setPaginationInfo(paginationInfo);
vo.setFirstIndex(paginationInfo.getFirstRecordIndex());
vo.setLastIndex(paginationInfo.getLastRecordIndex());
vo.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
List<DataMap> excelList = new ArrayList<>();
excelList = service.selectBOexcelFileDownload(vo);
content.put("excelList", excelList);
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 외부연동 삭제
* @param vo
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/deleteBOExtLinkDel")
public ResponseEntity<String> deleteBOExtLinkDel(@RequestBody BOMaExtlinkVO vo) {
//사용자 정보 추출 및 적용
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
vo.setRegusr(user.getUserInnb());
vo.setUpdusr(user.getUserInnb());
Map<String, Object> message = service.deleteBOExtLinkDel(vo);
return ApiResponse.of(message).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
}

View File

@@ -0,0 +1,230 @@
package com.wb.domainserver.domain.admin.store.extlink.controller;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.domain.admin.store.extlink.vo.MaExtlinkVO;
import com.wb.domainserver.domain.admin.store.mbrgrad.vo.MaMbrgradVO;
import com.wb.domainserver.exception.WnbtRestException;
import com.wb.domainserver.response.WnbtResponse;
import com.wb.domainserver.response.WnbtResponseBody;
import com.wb.domainserver.response.WnbtWebClientResponseHandler;
import com.wb.domainserver.util.communicate.*;
import com.wb.domainserver.util.excel.ExcelDownloadUtil;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import java.io.IOException;
import java.util.*;
@Slf4j
@Controller
@RequestMapping("/admin/store/extlink")
public class MaExtlinkController {
@Autowired
private WnbtWebClientResponseHandler responseHandler;
@Autowired
private SendToResrc sendToResrc;
@Autowired
private GconeMessageSource gconeMessageSource;
/**
* 외부연동 목록 폼
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectExtLinkListForm")
public String selectExtLinkListForm(MaExtlinkVO vo, ModelMap model) {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/store/extlink/selectBOExtlinkListForm", vo),
model,
"resultMap"
);
return "admin/store/extlink/maExtLinkListForm";
}
/**
* 외부연동 목록 조회
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping("/selectExtLinkListInqire")
public String selectExtLinkListInqire(MaExtlinkVO vo, ModelMap model) {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/store/extlink/selectBOExtlinkList", vo),
model,
"resultMap"
);
return "admin/store/extlink/maExtLinkListR";
}
/**
* 외부연동 등록 화면이동
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping("/selectExtLinkRegistForm")
public String selectExtLinkRegistForm(MaExtlinkVO vo, ModelMap model) {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/store/extlink/selectBOExtLinkRegistForm", vo),
model,
"resultMap"
);
return "admin/store/extlink/maExtLinkC";
}
/**
* 외부연동 등록
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/insertExtLinkRegist")
public ResponseEntity<WnbtResponse> insertExtLinkRegist(MaExtlinkVO vo) {
List<Map<String, String>> errorList = new ArrayList<>();
if (ObjectUtils.isEmpty(vo.getExtrlNm())) {
errorList.add(ValidateResultConverter.setErrorMap("extrlNm", "외부연동 명은(는) 필수 입력값입니다."));
}
if (ObjectUtils.isEmpty(vo.getExtrlClientId())) {
errorList.add(ValidateResultConverter.setErrorMap("extrlClientId", "Client ID은(는) 필수 입력값입니다."));
}
if (ObjectUtils.isEmpty(vo.getExtrlClientSecret())) {
errorList.add(ValidateResultConverter.setErrorMap("extrlCientSecret", "Cleint Secret은(는) 필수 입력값입니다."));
}
if(errorList != null && !errorList.isEmpty()) {
throw new WnbtRestException(ValidateResultConverter.convertCustomValidate(errorList));
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/store/extlink/insertBOExtLinkRegist", vo),
ReplyFromResrc::getReply
);
}
/**
* 외부연동 수정 화면이동
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping("/selectExtLinkUpdtForm")
public String selectExtLinkUpdtForm(MaExtlinkVO vo, ModelMap model) {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/store/extlink/selectBOExtLinkUpdtForm", vo),
model,
"resultMap"
);
return "admin/store/extlink/maExtLinkU";
}
/**
* 외부연동 수정
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@PostMapping("/updateExtLinkUpdt")
public ResponseEntity<WnbtResponse> updateExtLinkUpdt(MaExtlinkVO vo) {
List<Map<String, String>> errorList = new ArrayList<>();
if (ObjectUtils.isEmpty(vo.getExtrlNm())) {
errorList.add(ValidateResultConverter.setErrorMap("extrlNm", "외부연동 명은(는) 필수 입력값입니다."));
}
if (ObjectUtils.isEmpty(vo.getExtrlClientId())) {
errorList.add(ValidateResultConverter.setErrorMap("extrlClientId", "Client ID은(는) 필수 입력값입니다."));
}
if (ObjectUtils.isEmpty(vo.getExtrlClientSecret())) {
errorList.add(ValidateResultConverter.setErrorMap("extrlCientSecret", "Cleint Secret은(는) 필수 입력값입니다."));
}
if(errorList != null && !errorList.isEmpty()) {
throw new WnbtRestException(ValidateResultConverter.convertCustomValidate(errorList));
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/store/extlink/updateBOExtLinkUpdt", vo),
ReplyFromResrc::getReply
);
}
/**
* 엑셀 다운로드
* @param response
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/excelFileDownload")
public void excelFileDownload(MaMbrgradVO vo, HttpServletResponse response, ModelMap model) {
Map<String,Object> resultMap = responseHandler.handleResponseAsMap(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/store/extlink/selectBOexcelFileDownload",vo)
);
List<Map<String, Object>> excelList = new ArrayList<>();
excelList = (List<Map<String, Object>>) resultMap.get("excelList");
//엑셀 항목에 출력될 내용 설정
List<Map<String, Object>> dataList = new ArrayList<>();
for (int i = 0; i < excelList.size(); i++ ) {
HashMap<String, Object> dataMap = new HashMap<>();
HashMap<String, Object> map = new HashMap<>();
map = (HashMap<String, Object>) excelList.get(i);
dataMap.put("itme01", excelList.size() - i);
dataMap.put("itme02", map.get("extrlNm"));
dataMap.put("itme03", map.get("extrlSystemNm"));
if("Y".equals(map.get("extrlFunctionLogin"))){
dataMap.put("itme04", "O");
} else {
dataMap.put("itme04", "X");
}
if("Y".equals(map.get("extrlFunctionBuy"))){
dataMap.put("itme05", "O");
} else {
dataMap.put("itme05", "X");
}
dataMap.put("itme06", map.get("registDt"));
dataList.add(dataMap);
}
//엑셀 항목별 제목에 출력될 내용 설정
LinkedHashMap<String, String> headerMap = new LinkedHashMap<String, String>();
headerMap.put("itme01", "번호");
headerMap.put("itme02", "외부연동명");
headerMap.put("itme03", "외부연동시스템");
headerMap.put("itme04", "가입 및 로그인");
headerMap.put("itme05", "구매");
headerMap.put("itme06", "등록일자");
try {
//엑셀생성 및 다운로드
ExcelDownloadUtil.createExcel("extrlList_excel_file", headerMap, dataList, response);
} catch(IOException ioe) {
log.error("엑셀다운로드 중 오류가 발생하였습니다.", ioe);
throw new WnbtRestException("엑셀다운로드 중 오류가 발생하였습니다.");
}
}
/**
* 외부연동 삭제
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/deleteExtLinkDel", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> deleteExtLinkDel(MaExtlinkVO vo, ModelMap model) {
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/store/extlink/deleteBOExtLinkDel", vo),
ReplyFromResrc::getReply
);
}
}

View File

@@ -0,0 +1,33 @@
package com.wb.domainserver.domain.admin.store.extlink.mapper;
import com.wb.domainserver.domain.admin.store.extlink.vo.BOMaExtlinkVO;
import com.wb.domainserver.util.dataaccess.DataMap;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import java.util.List;
@Mapper
@Repository
public interface BOMaExtlinkMapper {
int selectBOextlinkTotCnt(BOMaExtlinkVO vo);
List<DataMap> selectBOextlinkList(BOMaExtlinkVO vo);
void insertBOExtLinkRegist(BOMaExtlinkVO vo);
DataMap selectBOExtLinkUpdtForm(String extrlInnb);
void updateBOExtLinkUpdt(BOMaExtlinkVO vo);
List<DataMap> selectBOexcelFileDownload(BOMaExtlinkVO vo);
void deleteBOExtLinkDel(BOMaExtlinkVO vo);
List<DataMap> selectBOextlinkSystemList();
List<DataMap> selectBOextlinkListNotLimit(BOMaExtlinkVO vo);
Integer selectBOextlinkShopCnt(Integer extrlInnb);
}

View File

@@ -0,0 +1,119 @@
package com.wb.domainserver.domain.admin.store.extlink.service;
import com.wb.domainserver.domain.admin.store.extlink.mapper.BOMaExtlinkMapper;
import com.wb.domainserver.domain.admin.store.extlink.vo.BOMaExtlinkVO;
import com.wb.domainserver.util.dataaccess.DataMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
public class BOMaExtlinkService {
@Autowired
private BOMaExtlinkMapper mapper;
/**
* 외부연동 목록 조회
* @param vo
* @return
*/
public List<DataMap> selectBOextlinkList(BOMaExtlinkVO vo) {
List<DataMap> extLinkList = new ArrayList<DataMap>();
int total = 0;
total = mapper.selectBOextlinkTotCnt(vo);
vo.getPaginationInfo().setTotalRecordCount(total);
if (total > 0) {
extLinkList = mapper.selectBOextlinkList(vo);
}
return extLinkList;
}
/**
* 외부연동 등록
* @param vo
* @return
*/
public DataMap insertBOExtLinkRegist(BOMaExtlinkVO vo) {
DataMap dataMap = new DataMap();
try {
mapper.insertBOExtLinkRegist(vo);
dataMap.put("extrlInnb", vo.getExtrlInnb());
dataMap.put("result", "success");
} catch (Exception e) {
e.printStackTrace();
dataMap.put("result", "fail");
}
return dataMap;
}
/**
* 외부연동 수정화면
*
* @param vo
* @return
*/
public DataMap selectBOExtLinkUpdtForm(String extrlInnb) {
DataMap result = new DataMap();
result = mapper.selectBOExtLinkUpdtForm(extrlInnb);
return result;
}
public DataMap updateBOExtLinkUpdt(BOMaExtlinkVO vo) {
DataMap result = new DataMap();
try {
mapper.updateBOExtLinkUpdt(vo);
result.put("extrlInnb", vo.getExtrlInnb());
result.put("result", "success");
} catch (Exception e) {
e.printStackTrace();
result.put("result", "fail");
}
return result;
}
public List<DataMap> selectBOexcelFileDownload(BOMaExtlinkVO vo) {
List<DataMap> extLinkList = new ArrayList<DataMap>();
extLinkList = mapper.selectBOextlinkList(vo);
return extLinkList;
}
public Map<String, Object> deleteBOExtLinkDel(BOMaExtlinkVO vo) {
Map<String, Object> message = new HashMap<>();
try {
Integer count = mapper.selectBOextlinkShopCnt(vo.getExtrlInnb());
if(count == 0){
mapper.deleteBOExtLinkDel(vo);
message.put("result", "success");
} else {
message.put("result", "includeShop");
}
} catch (Exception e) {
e.printStackTrace();
message.put("result", "fail");
}
return message;
}
public List<DataMap> selectBOextlinkSystemList() {
List<DataMap> dataMap = new ArrayList<DataMap>();
dataMap = mapper.selectBOextlinkSystemList();
return dataMap;
}
}

View File

@@ -0,0 +1,51 @@
package com.wb.domainserver.domain.admin.store.extlink.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class BOMaExtlinkVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/** fm_extrl_key */
/** 외부연동 고유번호 */
private Integer extrlInnb;
/** 외부연동 명 */
private String extrlNm;
/** 외부연동 시스템 */
private String extrlSystem;
/** 외부연동 기능 로그인 */
private String extrlFunctionLogin;
/** 외부연동 기능 구매 */
private String extrlFunctionBuy;
/** 외부연동 클라이언트 ID */
private String extrlClientId;
/** 외부연동 클라이언트 Secret */
private String extrlClientSecret;
/** 외부연동 클라이언트 Secret Key */
private String extrlClientSecretKey;
/** 외부연동 시스템명 */
private String extrlSystemNm;
/** fm_shop_extrl */
/** 쇼핑몰 외부연동 고유번호 */
private String sopmalExtrlInnb;
/** 쇼핑몰 코드 */
private String sopmalCd;
private String srchExtrlNm;
private String srchExtrlSystem;
}

View File

@@ -0,0 +1,56 @@
package com.wb.domainserver.domain.admin.store.extlink.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class MaExtlinkVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/** fm_extrl_key */
/** 외부연동 고유번호 */
private Integer extrlInnb;
/** 외부연동 명 */
@NotNull(message = "외부연동명")
private String extrlNm;
/** 외부연동 시스템 */
private String extrlSystem;
/** 외부연동 기능 로그인 */
private String extrlFunctionLogin;
/** 외부연동 기능 구매 */
private String extrlFunctionBuy;
/** 외부연동 클라이언트 ID */
private String extrlClientId;
/** 외부연동 클라이언트 Secret */
private String extrlClientSecret;
/** 외부연동 클라이언트 Pay Secret Key */
private String extrlClientSecretKey;
/** 외부연동 시스템명 */
private String extrlSystemNm;
/** fm_shop_extrl */
/** 쇼핑몰 외부연동 고유번호 */
private String sopmalExtrlInnb;
/** 쇼핑몰 코드 */
private String sopmalCd;
private String srchExtrlNm;
private String srchExtrlSystem;
}

View File

@@ -0,0 +1,147 @@
package com.wb.domainserver.domain.admin.store.mbrgrad.controller;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.wb.domainserver.common.mvc.tags.ui.pagination.PaginationInfo;
import com.wb.domainserver.common.prop.PaginationProperties;
import com.wb.domainserver.domain.admin.store.mbrgrad.service.BOMaMbrgradService;
import com.wb.domainserver.domain.admin.store.mbrgrad.vo.BOMaMbrgradVO;
import com.wb.domainserver.domain.admin.store.sopmal.service.BOMaSopmalService;
import com.wb.domainserver.response.ApiResponse;
import com.wb.domainserver.security.authentication.AnonymousUser;
import com.wb.domainserver.security.authentication.MemberJwtContextHolder;
import com.wb.domainserver.security.authentication.MemberJwtToken;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.dataaccess.DataMap;
import lombok.extern.slf4j.Slf4j;
/**
* BOMaMbrgradController Class (back)
*
* @author 최범식
* @version 1.0
* @see <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2023-12-12 최범식 최초 생성
*
* </pre>
* @since 2023-12-12
*/
@Slf4j
@RestController
@RequestMapping("/admin/store/mbrgrad")
public class BOMaMbrgradController {
@Autowired
private BOMaMbrgradService service;
@Autowired
private PaginationProperties paginationProperties;
@Autowired
private BOMaSopmalService sopmalService;
/**
* 회원 등급 조회 화면
*
* @param BOMaMbrgradVO
* @return ResponseEntity<?>
*/
@Policy(AuthPolicy.RESTRICTED)
@PostMapping("/selectBOMbrGradListInqireForm")
public ResponseEntity<?> selectBOMbrGradListInqireForm(@RequestBody BOMaMbrgradVO vo) {
/*쇼핑몰 조회*/
List<DataMap> sopmalList = new ArrayList<>();
sopmalList = sopmalService.selectBOSopmalCdNm();
DataMap content = new DataMap();
content.put("paramVO", vo);
content.put("sopmalList", sopmalList);
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 회원 등급 조회
*
* @param BOMaMbrgradVO
* @return ResponseEntity<?>
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectBOMbrGradListInqire")
public ResponseEntity<?> selectBOMbrGradListInqire(@RequestBody BOMaMbrgradVO vo) {
PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(vo.getPageIndex());
paginationInfo.setRecordCountPerPage(vo.getPageUnit());
paginationInfo.setPageSize(paginationProperties.getPageSize());
vo.setPaginationInfo(paginationInfo);
vo.setFirstIndex(paginationInfo.getFirstRecordIndex());
vo.setLastIndex(paginationInfo.getLastRecordIndex());
vo.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
List<DataMap> mbrgradList = new ArrayList<>();
mbrgradList = service.selectBOMbrGradList(vo);
DataMap content = new DataMap();
content.put("paramVO", vo);
content.put("resultList", mbrgradList);
content.put("paginationInfo", vo.getPaginationInfo());
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 회원 등급 수정 화면
* @param BOMaMbrgradVO
* @return ResponseEntity<?>
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectBOMbrGradUpdtForm")
public ResponseEntity<?> selectBOMbrGradUpdtForm(@RequestBody BOMaMbrgradVO vo) {
/*회원등급그룹 조회*/
Map<String,Object> mbrGradInfo = new HashMap<>();
mbrGradInfo = service.selectBOMbrGradUpdtForm(vo);
Map<String,Object> srchData = new HashMap<>();
srchData.put("maMbrGradVO", vo);
srchData.put("mbrGradInfo", mbrGradInfo);
return ApiResponse.of(srchData).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 회원 등급 수정
* @param BOMaMbrgradVO
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updateBOMbrGradUpdt")
public ResponseEntity<?> updateBOMbrGradUpdt(@RequestBody BOMaMbrgradVO vo) {
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
vo.setRegusr(user.getUserInnb());
vo.setUpdusr(user.getUserInnb());
Map<String, Object> result = new HashMap<>();
result = service.updateBOMbrGradUpdt(vo);
return ApiResponse.of(result).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
}

View File

@@ -0,0 +1,189 @@
package com.wb.domainserver.domain.admin.store.mbrgrad.controller;
import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.domain.admin.store.mbrgrad.vo.MaMbrgradVO;
import com.wb.domainserver.exception.WnbtRestException;
import com.wb.domainserver.response.WnbtWebClientResponseHandler;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.communicate.*;
import com.wb.domainserver.util.excel.ExcelDownloadUtil;
import com.wb.domainserver.util.file.service.FileStorageService;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.util.ObjectUtils;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;
import java.io.IOException;
import java.math.BigInteger;
import java.text.SimpleDateFormat;
import java.util.*;
@Slf4j
@Controller
@RequestMapping("/admin/store/mbrgrad")
public class MaMbrgradController {
@Autowired
private SendToResrc sendToResrc;
@Autowired
private GconeMessageSource gconeMessageSource;
@Autowired
private FileStorageService filestore;
@Autowired
private WnbtWebClientResponseHandler responseHandler;
/**select
* 회원 등급 목록 폼
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectMbrGradListInqireForm")
public String selectMbrGradListInqireForm(MaMbrgradVO vo, ModelMap model) {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/store/mbrgrad/selectBOMbrGradListInqireForm", vo),
model,
"resultMap"
);
return "admin/store/mbrgrad/maMbrGradListInqireForm";
}
/**select
* 회원 등급 목록 조회
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectMbrGradListInqire")
public String selectMbrGradListInqire(MaMbrgradVO vo, ModelMap model) {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/store/mbrgrad/selectBOMbrGradListInqire", vo),
model,
"resultMap"
);
return "admin/store/mbrgrad/maMbrGradListInqireR";
}
/**
* 회원 등급 수정 화면이동
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectMbrGradUpdtForm")
public String selectMbrGradUpdtForm(MaMbrgradVO vo, ModelMap model) {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/store/mbrgrad/selectBOMbrGradUpdtForm", vo),
model,
"resultMap"
);
return "admin/store/mbrgrad/maMbrGradU";
}
/**
* 회원 등급 수정
* @return
*/
@SuppressWarnings("unchecked")
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updateMbrGradUpdt")
public ResponseEntity<?> updateMbrGradUpdt(MaMbrgradVO vo, BindingResult bindingResult, HttpServletRequest request) {
/*필수 입력 값 체크*/
List<Map<String, String>> errorList = new ArrayList<>();
if (ObjectUtils.isEmpty(vo.getMbrGradNmArr())) {
errorList.add(ValidateResultConverter.setErrorMap("gradNm", "등급명은(는) 필수 입력값입니다."));
}
if(errorList != null && !errorList.isEmpty()) {
throw new WnbtRestException(ValidateResultConverter.convertCustomValidate(errorList));
}
//파일 경로 설정
List<HashMap<String, Object>> file = new ArrayList<HashMap<String, Object>>();
request.setAttribute("shopCd", vo.getSopmalCd());
request.setAttribute("pathGubun", "ETCM");
List<HashMap<String, Object>> ulpladFileMap = new ArrayList<HashMap<String, Object>>();
ulpladFileMap = filestore.fileUpload(request); //BDIG로 경로 구분 get
vo.setFileInfo(ulpladFileMap);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/store/mbrgrad/updateBOMbrGradUpdt", vo),
ReplyFromResrc::getReply
);
}
/**
* 엑셀 다운로드
* @param response
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/excelFileDownload")
public void excelFileDownload(MaMbrgradVO vo, HttpServletResponse response, ModelMap model) {
vo.setPageIndex(1);
vo.setPageUnit(50);
Map<String, Object> resultMap = responseHandler.handleResponseAsMap(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/store/mbrgrad/selectBOMbrGradListInqire", vo)
);
/*엑셀 데이터 set*/
List<Map<String, Object>> excelList = new ArrayList<>();
excelList = (List<Map<String, Object>>) resultMap.get("resultList");
//엑셀 다운로드 다운로드 시간
Date date = new Date();
SimpleDateFormat excelFormat = new SimpleDateFormat("yyyyMMddHHmmss");
String str = excelFormat.format(date);
try {
//엑셀 항목에 출력될 내용 설정
List<Map<String, Object>> dataList = new ArrayList<>();
if (excelList != null) {
BigInteger num = BigInteger.valueOf(excelList.size());
for (int i = 0; i < excelList.size(); i++) {
HashMap<String, Object> dataMap = new HashMap<>();
HashMap<String, Object> map = new HashMap<>();
map = (HashMap<String, Object>) excelList.get(i);
/*데이터 set*/
dataMap.put("itme01", num.subtract(BigInteger.valueOf(i)));
dataMap.put("itme02", map.get("mbrGradGroupNm"));
dataMap.put("itme03", map.get("sopmalNm"));
dataMap.put("itme05", map.get("gradMdatStdrMt") + " 월 " + map.get("gradMdatStdrDe") + " 일");
dataMap.put("itme06", map.get("calcPdMtCntNm"));
dataMap.put("itme07", map.get("gradMdatCycleMtCntNm"));
dataMap.put("itme08", map.get("registDt"));
dataList.add(dataMap);
}
}
//엑셀 항목별 제목에 출력될 내용 설정
LinkedHashMap<String, String> headerMap = new LinkedHashMap<String, String>();
headerMap.put("itme01", "번호");
headerMap.put("itme02", "회원등급 그룹명");
headerMap.put("itme03", "쇼핑몰");
headerMap.put("itme05", "등급조정일");
headerMap.put("itme06", "선정기간");
headerMap.put("itme07", "등급조정주기");
headerMap.put("itme08", "등록일자");
//엑셀생성 및 다운로드
ExcelDownloadUtil.createExcel("mbrGrad_excel_file"+str, headerMap, dataList, response);
} catch(IOException ioe) {
log.error("엑셀다운로드 중 오류가 발생하였습니다.", ioe);
throw new WnbtRestException("엑셀다운로드 중 오류가 발생하였습니다.");
} catch (Exception e) {
log.error("엑셀다운로드 중 오류가 발생하였습니다.", e);
throw new WnbtRestException("엑셀다운로드 중 오류가 발생하였습니다.");
}
}
}

View File

@@ -0,0 +1,46 @@
package com.wb.domainserver.domain.admin.store.mbrgrad.mapper;
import java.util.List;
import com.wb.domainserver.domain.admin.store.sopmal.vo.BOMaSopmalVO;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import com.wb.domainserver.domain.admin.store.mbrgrad.vo.BOMaMbrgradVO;
import com.wb.domainserver.domain.admin.store.mbrgrad.vo.BOMbrGradVO;
import com.wb.domainserver.util.dataaccess.DataMap;
@Mapper
@Repository
public interface BOMaMbrgradMapper {
/************************회원등급 그룹 관련**************************/
/*회원등급건수*/
public Integer selectBOMbrGradTotCnt(BOMaMbrgradVO vo);
/*회원등급조회*/
public List<DataMap> selectBOMbrGradList(BOMaMbrgradVO vo);
/*회원 등급 그룹 상세 조회*/
public BOMaMbrgradVO selectBOMbrGradDtl(BOMaMbrgradVO vo);
/*회원 등급 그룹 수정*/
public int updateMbrGrad(BOMaMbrgradVO vo);
/*회원 등급 그룹 등록*/
public int insertBOMbrGradGroup(BOMaMbrgradVO vo);
/************************회원등급 관련**************************/
/*그룹별 회원 등급 조회*/
public List<DataMap> selectBOMbrGradStdrList(BOMaMbrgradVO vo);
/*회원 등급 등록*/
public int insertBOMbrGradStdr(BOMaMbrgradVO vo);
/*회원등급 수정*/
public int updateBOMbrGradCnd(BOMaMbrgradVO vo);
/*************************회원등급 권한 관련*********************/
/*회원등급 수정*/
public int insertBOGradAuth(BOMaMbrgradVO vo);
}

View File

@@ -0,0 +1,267 @@
package com.wb.domainserver.domain.admin.store.mbrgrad.service;
import java.io.File;
import java.util.*;
import com.wb.domainserver.domain.admin.store.sopmal.vo.BOMaSopmalVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils;
import com.wb.domainserver.domain.admin.store.mbrgrad.mapper.BOMaMbrgradMapper;
import com.wb.domainserver.domain.admin.store.mbrgrad.vo.BOMaMbrgradVO;
import com.wb.domainserver.domain.admin.store.mbrgrad.vo.BOMbrGradVO;
import com.wb.domainserver.domain.admin.sys.comncd.mapper.BOMaComncdMapper;
import com.wb.domainserver.domain.admin.sys.comncd.vo.BOMaComncdVO;
import com.wb.domainserver.exception.WnbtRestException;
import com.wb.domainserver.util.dataaccess.DataMap;
import com.wb.domainserver.util.string.StringUtil;
/**
* BOMaMbrgradService Class (back)
*
* @author 최범식
* @since 2023-12-12
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2023-12-12 최범식 최초 생성
*
* </pre>
*/
@Slf4j
@Service
public class BOMaMbrgradService {
@Autowired
private BOMaMbrgradMapper mapper;
@Autowired
private BOMaComncdMapper codeMapper;
/**
* 회원 등급 조회
*
* @param BOMaMbrgradVO
* @return List<DataMap>
*/
public List<DataMap> selectBOMbrGradList(BOMaMbrgradVO vo) {
Integer total = mapper.selectBOMbrGradTotCnt(vo);
vo.getPaginationInfo().setTotalRecordCount(total);
List<DataMap> mbrgradList = new ArrayList<DataMap>();
/*회원등급그룹 조회*/
if (total > 0) {
mbrgradList = mapper.selectBOMbrGradList(vo);
}
return mbrgradList;
}
/**
* 회원 등급 그룹 등록
*
* @param vo
* @return int
*/
public int insertBOMbrGradGroup(BOMaMbrgradVO vo) {
int result = 0;
try{
result = mapper.insertBOMbrGradGroup(vo);
}catch (WnbtRestException wre){
throw new WnbtRestException(wre.getMessage());
}catch (Exception e){
log.error(e.getMessage(), e);
}
return result;
}
/**
* 회원 등급 등록
*
* @param vo
* @return int
*/
public int insertBOMbrGrad(BOMaMbrgradVO vo) {
int result = 0;
try{
result = mapper.insertBOMbrGradStdr(vo);
}catch (WnbtRestException wre){
throw new WnbtRestException(wre.getMessage());
}catch (Exception e){
log.error(e.getMessage(), e);
}
return result;
}
/**
* 회원 등급 수정 화면
*
* @param BOMaMbrgradVO
* @return BOMaMbrgradVO
*/
public Map<String,Object> selectBOMbrGradUpdtForm(BOMaMbrgradVO vo) {
/*회원등급 그룹 상세 조회*/
BOMaMbrgradVO mbrGradVo = new BOMaMbrgradVO();
mbrGradVo = mapper.selectBOMbrGradDtl(vo);
List<DataMap> gradStdrList = new ArrayList<>();
DataMap codeMap = new DataMap();
if(!"sopmal".equals(vo.getServerDv())){
/*회원등급 상세 조회*/
BOMbrGradVO mgVo = new BOMbrGradVO();
/* 1.memberGroup, sopmalCd 값 set*/
mgVo.setMbrGradGroupInnb(vo.getMbrGradGroupInnb());
mgVo.setSopmalCd(vo.getSopmalCd());
/* 2.회원등급 조회*/
gradStdrList = mapper.selectBOMbrGradStdrList(vo);
/*공통코드 조회*/
codeMap = selectBOMbrGradCode();
mbrGradVo.setCodeMap(codeMap);
}
Map<String,Object> mbrGradInfo = new HashMap<>();
mbrGradInfo.put("mbrGradInfo",mbrGradVo);
mbrGradInfo.put("gradStdrList",gradStdrList);
mbrGradInfo.put("codeMap",codeMap);
return mbrGradInfo;
}
/**
* 회원 등급 수정
*/
@Transactional
public Map<String, Object> updateBOMbrGradUpdt(BOMaMbrgradVO vo) {
Map<String, Object> message = new HashMap<>();
try {
/*회원등급 그룹 수정*/
mapper.updateMbrGrad(vo);
/*회원등급 설정 수정*/
List<HashMap<String, Object>> fileStoreResult = new ArrayList<>();
fileStoreResult = vo.getFileInfo();
if (vo.getMbrGradNmArr().size() > 0) {
int filUploadIdx = 0;
for (int i = 0; i < vo.getMbrGradNmArr().size(); i++) {
BOMaMbrgradVO data = new BOMaMbrgradVO();
//회원등급그룹 set
data.setMbrGradGroupInnb(vo.getMbrGradGroupInnb());
//쇼핑몰
data.setSopmalCd(vo.getSopmalCd());
//등급명
data.setMbrGradNm(vo.getMbrGradNmArr().get(i));
//등급조건
data.setMbrGradCndCd(vo.getMbrGradCndCdArr().get(i));
//실결제금액
data.setMbrGradAmt(vo.getMbrGradAmtArr().get(i));
//회원등급 순서 set
data.setMbrGradOrdr(i + 1);
//파일 정보 set
if (fileStoreResult != null) { //업로드 파일이 있을 시
if ("1".equals(vo.getFilUploadAt().get(i))) {//해당 등급에 아이콘 파일 첨부가 있을 시
HashMap<String, Object> fileData = fileStoreResult.get(filUploadIdx);
String mbrGradIconCours = fileData.get("filePath").toString() + File.separator + fileData.get("fileId").toString();
data.setMbrGradIconCours(mbrGradIconCours);
filUploadIdx++;
} else {
if (!"X".equals(vo.getMbrGradIconCoursArr().get(i))) {//해당 등급에 기존 아이콘 경로가 있으면
data.setMbrGradIconCours(vo.getMbrGradIconCoursArr().get(i));
} else {
data.setMbrGradIconCours(null);
}
}
} else {//업로드 파일이 없을시
if (!"x".equals(vo.getMbrGradIconCoursArr().get(i))) {//해당 등급에 기존 아이콘 경로가 있R으면
data.setMbrGradIconCours(vo.getMbrGradIconCoursArr().get(i));
} else {
data.setMbrGradIconCours(null);
}
}
if (!"x".equals(vo.getMbrGradInnbArr().get(i))) { //기존 회원 등급 수정
data.setMbrGradInnb(vo.getMbrGradInnbArr().get(i));
data.setUseAt(vo.getUseAtArr().get(i));
mapper.updateBOMbrGradCnd(data);
} else { //회원 등급 추가
mapper.insertBOMbrGradStdr(data);
mapper.insertBOGradAuth(data);
}
}
}
message.put("result", "성공");
}catch (WnbtRestException wre){
throw new WnbtRestException(wre.getMessage());
}catch (Exception e) {
log.error(e.getMessage(), e);
log.error("회원 등급 수정 실패");
}
return message;
}
/**
* 공통 코드
*/
private DataMap selectBOMbrGradCode() {
DataMap codeMap = new DataMap();
BOMaComncdVO paramVO = new BOMaComncdVO();
paramVO.setGroupCd("MT_CD");
/** 주기 중 개월을 나타내는 코드 그룹 */
List<DataMap> mtCd = new ArrayList<>();
mtCd = codeMapper.selectBOCommcdDetailList(paramVO);
codeMap.put("mtCd", mtCd);
paramVO.setGroupCd("MBR_GRAD_CND");
/** 회원등급 조건 코드 회원가입시|제품구매시 */
List<DataMap> mbrGradCnd = new ArrayList<>();
mbrGradCnd = codeMapper.selectBOCommcdDetailList(paramVO);
codeMap.put("mbrGradCnd", mbrGradCnd);
/*등급조정 기준 월*/
List<DataMap> mtArr = new ArrayList<>();
for (int k = 1; k < 13; k++) {
DataMap mt = new DataMap();
mt.put("cd", k + " ");
mt.put("cdNm", k + "월");
mtArr.add(mt);
}
codeMap.put("mtArr", mtArr);
/*등급조정 기준 일*/
List<DataMap> dtArr = new ArrayList<>();
DataMap dt = new DataMap();
dt.put("cd", "1");
dt.put("cdNm", "1일");
dtArr.add(dt);
dt = new DataMap();
dt.put("cd", "15");
dt.put("cdNm", "15일");
dtArr.add(dt);
codeMap.put("dtArr", dtArr);
return codeMap;
}
}

View File

@@ -0,0 +1,96 @@
package com.wb.domainserver.domain.admin.store.mbrgrad.vo;
import java.util.HashMap;
import java.util.List;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import com.wb.domainserver.util.dataaccess.DataMap;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper=false)
public class BOMaMbrgradVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/**회원등급그룹 고유번호(PK)*/
private String mbrGradGroupInnb;
/**쇼핑몰코드*/
private String sopmalCd;
/**쇼핑몰이름*/
private String sopmalNm;
/**회원등급그룹명*/
private String mbrGradGroupNm;
/**산정기간월수*/
private String calcPdMtCnt;
/**등급조정기준월*/
private String gradMdatStdrMt;
/**등급조정기준일*/
private String gradMdatStdrDe;
/**등급조정주기월수*/
private String gradMdatCycleMtCnt;
/**사용여부*/
private String useAt;
/**회원등급 고유번호(PK)*/
private String mbrGradInnb;
/**쿠폰팩 고유번호(FK)*/
private String cupnpkInnb;
/**회원등급명*/
private String mbrGradNm;
/**회원등급조건코드*/
private String mbrGradCndCd;
/**회원등급구매건수*/
private String mbrGradPurchsCnt;
/**회원등급실결제금액*/
private String mbrGradAmt;
/**회원등급순서*/
private Integer mbrGradOrdr;
/**회원등급아이콘경로*/
private String mbrGradIconCours;
/**마일리지적립단위구분코드*/
private String mlgAccmlUnitDvCd;
/**마일리지적립금액*/
private String mlgAccmlAmt;
/**마일리지최대적립금액*/
private String mlgMxmmAccmlAmt;
/**마일리지유효월수*/
private String mlgValidMtCnt;
/*공통 코드*/
private DataMap codeMap;
/** files */
/*파일 정보*/
private List<HashMap<String, Object>> fileInfo;
/*배열*/
/*회원등급명 배열*/
private List<String> mbrGradNmArr;
/*회원등급조건코드 배열*/
private List<String> mbrGradCndCdArr;
/*회원등급실결제금액 배열*/
private List<String> mbrGradAmtArr;
/*회원등급구매건수 배열*/
private List<String> mbrGradInnbArr;
/*아이콘배열*/
private List<String> mbrGradIconCoursArr;
/*사용여부배열*/
private List<String> useAtArr;
/*파일 업로드 여부*/
private List<String> filUploadAt;
/*검색어*/
/*회원등급그룹*/
private String srchMbrGradNm;
/*쇼핑몰코드*/
private String srchSopmalCd;
/**회원등급 권한 관련**/
/*등급 권한 고유번호*/
private String gradAuthorInnb;
/*서버구분*/
private String serverDv;
}

View File

@@ -0,0 +1,49 @@
package com.wb.domainserver.domain.admin.store.mbrgrad.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper=false)
public class BOMbrGradVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/*쇼핑몰 코드*/
private String sopmalCd;
/** 회원등급그룹 고유번호 */
private String mbrGradGroupInnb;
/** 회원등급 고유번호 */
private String mbrGradInnb;
/** 등급명 */
private String gradNm;
/** 회원가입시, 제품구매시 */
private String gradMdatCndCd;
/** 구매건수 */
private String purchsCnt;
/** 실결제금액 */
private String rlSetleAmt;
/** 순서 */
private String ordr;
/** 파일경로 */
private String filCours;
/** 원본파일명 */
private String orginlFilNm;
/** 시스템파일명 */
private String sysFilNm;
/** 파일크기 */
private String filMg;
/** 파일타입 */
private String filTy;
/** 아이콘경로 */
private String iconCours;
/** */
private String rlatMbrCnt;
/** */
private String rlatBnefCnt;
}

View File

@@ -0,0 +1,45 @@
package com.wb.domainserver.domain.admin.store.mbrgrad.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class MaMbrgradStdrVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/** 회원등급그룹 고유번호 */
private String mbrGradGroupInnb;
/** 회원등급 고유번호 */
private String mbrGradInnb;
/** 등급명 */
private String gradNm;
/** 회원가입시, 제품구매시 */
private String gradMdatCndCd;
/** 구매건수 */
private String purchsCnt;
/** 실결제금액 */
private String rlSetleAmt;
/** 순서 */
private String ordr;
/** 파일경로 */
private String filCours;
/** 원본파일명 */
private String orginlFilNm;
/** 시스템파일명 */
private String sysFilNm;
/** 파일크기 */
private String filMg;
/** 파일타입 */
private String filTy;
/** 아이콘경로 */
private String iconCours;
/** */
private String rlatMbrCnt;
/** */
private String rlatBnefCnt;
}

View File

@@ -0,0 +1,86 @@
package com.wb.domainserver.domain.admin.store.mbrgrad.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.HashMap;
import java.util.List;
@Data
@EqualsAndHashCode(callSuper = false)
public class MaMbrgradVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/**회원등급그룹 고유번호(PK)*/
private String mbrGradGroupInnb;
@NotBlank(message = "쇼핑몰")
private String sopmalCd;
/**쇼핑몰이름*/
private String sopmalNm;
@NotBlank(message = "회원등급그룹명")
/**회원등급그룹명*/
private String mbrGradGroupNm;
/**산정기간월수*/
private String calcPdMtCnt;
/**등급조정기준월*/
private String gradMdatStdrMt;
/**등급조정기준일*/
private String gradMdatStdrDe;
/**등급조정주기월수*/
private String gradMdatCycleMtCnt;
/**사용여부*/
private String useAt;
/**회원등급 고유번호(PK)*/
private String mbrGradInnb;
/**쿠폰팩 고유번호(FK)*/
private String cupnpkInnb;
/**회원등급명*/
private String mbrGradNm;
/**회원등급조건코드*/
private String mbrGradCndCd;
/**회원등급실결제금액*/
private String mbrGradAmt;
/**회원등급순서*/
private String mbrGradOrdr;
/**회원등급아이콘경로*/
private String mbrGradIconCours;
/**마일리지적립단위구분코드*/
private String mlgAccmlUnitDvCd;
/**마일리지적립금액*/
private String mlgAccmlAmt;
/**마일리지최대적립금액*/
private String mlgMxmmAccmlAmt;
/**마일리지유효월수*/
private String mlgValidMtCnt;
/** files */
/*파일 정보*/
private List<HashMap<String, Object>> fileInfo;
/*배열*/
/*회원등급명 배열*/
private List<String> mbrGradNmArr;
/*회원등급조건코드 배열*/
private List<String> mbrGradCndCdArr;
/*회원등급실결제금액 배열*/
private List<String> mbrGradAmtArr;
/*회원등급고유번호 배열*/
private List<String> mbrGradInnbArr;
/*아이콘배열*/
private List<String> mbrGradIconCoursArr;
/*사용여부배열*/
private List<String> useAtArr;
/*파일 업로드 여부*/
private List<String> filUploadAt;
/*검색어*/
/*회원등급그룹*/
private String srchMbrGradNm;
/*실결제금액여부*/
private String srchSopmalCd;
}

View File

@@ -0,0 +1,540 @@
package com.wb.domainserver.domain.admin.store.sopmal.controller;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.wb.domainserver.domain.admin.sys.comncd.service.BOMaComncdService;
import com.wb.domainserver.util.string.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.wb.domainserver.common.mvc.tags.ui.pagination.PaginationInfo;
import com.wb.domainserver.common.prop.PaginationProperties;
import com.wb.domainserver.domain.admin.store.sopmal.service.BOMaSopmalService;
import com.wb.domainserver.domain.admin.store.sopmal.vo.BOMaSopmalVO;
import com.wb.domainserver.domain.admin.sys.comncd.vo.BOMaComncdVO;
import com.wb.domainserver.response.ApiResponse;
import com.wb.domainserver.security.authentication.AnonymousUser;
import com.wb.domainserver.security.authentication.MemberJwtContextHolder;
import com.wb.domainserver.security.authentication.MemberJwtToken;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.dataaccess.DataMap;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
/**
* BOMaSopmalController Class (back)
*
* @author 최범식
* @since 2024-02-05
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-02-05 최범식 최초 생성
*
* </pre>
*/
@Slf4j
@RestController
@RequestMapping("/admin/store/sopmal")
public class BOMaSopmalController {
@Autowired
private BOMaSopmalService service;
@Autowired
private PaginationProperties paginationProperties;
@Autowired
private BOMaComncdService bOMaComncdService;
/**
* 쇼핑몰 조회 화면
* @param BOMaSopmalVO
* @return ResponseEntity<?>
*/
@Policy(AuthPolicy.PUBLIC)
@PostMapping(value = "/selectBOSopmalListInqireForm")
public ResponseEntity<?> selectBOMbrGradListInqireForm(@RequestBody BOMaSopmalVO vo) {
DataMap content = new DataMap();
// 페이징
PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(vo.getPageIndex());
paginationInfo.setRecordCountPerPage(vo.getPageUnit());
paginationInfo.setPageSize(paginationProperties.getPageSize());
vo.setPaginationInfo(paginationInfo);
vo.setFirstIndex(paginationInfo.getFirstRecordIndex());
vo.setLastIndex(paginationInfo.getLastRecordIndex());
vo.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
List<DataMap> companyAllList = new ArrayList<>();
companyAllList = service.selectBOCompanyAllList();
content.put("companyAllList", companyAllList);
BOMaComncdVO cdVO = new BOMaComncdVO();
List<DataMap> sopmalTyCdList = new ArrayList<>();
cdVO.setGroupCd("SOPMAL_TY");
sopmalTyCdList = service.selectCommCode(cdVO);
content.put("sopmalTyCdList", sopmalTyCdList);
content.put("paramVO", vo);
content.put("paginationInfo", vo.getPaginationInfo());
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 쇼핑몰 조회
* @param BOMaSopmalVO
* @return ResponseEntity<?>
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectBOSopmalListInqire")
public ResponseEntity<?> selectBOMbrGradListInqire(@RequestBody BOMaSopmalVO vo) {
DataMap content = new DataMap();
PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(vo.getPageIndex());
paginationInfo.setRecordCountPerPage(vo.getPageUnit());
paginationInfo.setPageSize(paginationProperties.getPageSize());
vo.setPaginationInfo(paginationInfo);
vo.setFirstIndex(paginationInfo.getFirstRecordIndex());
vo.setLastIndex(paginationInfo.getLastRecordIndex());
vo.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
content.put("paramVO", vo);
List<DataMap> sopmalList = new ArrayList<>();
sopmalList = service.selectBOSopmalList(vo);
content.put("sopmalList", sopmalList);
content.put("paginationInfo", vo.getPaginationInfo());
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 쇼핑몰 등록 화면이동
* @param BOMaSopmalVO
* @return ResponseEntity<?>
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectBOSopmalRegistForm")
public ResponseEntity<?> selectBOSopmalRegistForm(@RequestBody BOMaSopmalVO vo) {
DataMap content = new DataMap();
List<DataMap> srchList = new ArrayList<>();
DataMap srchMap = new DataMap();
srchMap.put("srchType", vo.getSrchType());
srchMap.put("srchStr", vo.getSrchStr());
srchMap.put("srchSopmalTyCd", vo.getSrchSopmalTyCd());
srchMap.put("srchBsnmInnb", vo.getSrchBsnmInnb());
srchMap.put("srchOperAt", vo.getSrchOperAt());
srchMap.put("pageUnit", vo.getPageUnit());
srchMap.put("pageIndex", vo.getPageIndex());
srchList.add(srchMap);
content.put("srchList", srchList);
List<DataMap> companyAllList = new ArrayList<>();
companyAllList = service.selectBOCompanyAllList();
content.put("companyAllList", companyAllList);
/** 회원등급 삭제 7.2 */
// List<DataMap> mbrGradList = new ArrayList<>();
// mbrGradList = service.selectBOMbrGradList();
// content.put("mbrGradList", mbrGradList);
List<DataMap> themeList = new ArrayList<>();
themeList = service.selectBOThemeList();
content.put("themeList", themeList);
List<DataMap> CGN002 = new ArrayList<>();
DataMap dm = new DataMap();
dm.put("groupCd", "STPLAT_DV");
CGN002 = service.selectBOCommcdClauseDetailList(dm);
content.put("CGN002", CGN002);
List<DataMap> clause01List = new ArrayList<>();
DataMap cl01 = new DataMap();
cl01.put("stplatDvCd", "01");
clause01List = service.selectBOClauseList(cl01);
content.put("clause01List", clause01List);
List<DataMap> clause02List = new ArrayList<>();
DataMap cl02 = new DataMap();
cl02.put("stplatDvCd", "02");
clause02List = service.selectBOClauseList(cl02);
content.put("clause02List", clause02List);
BOMaComncdVO cdVO = new BOMaComncdVO();
List<DataMap> pgList = new ArrayList<>();
cdVO.setGroupCd("SETLE_SETUP_TY");
pgList = service.selectCommCode(cdVO);
content.put("pgList", pgList);
List<DataMap> sopmalTyCdList = new ArrayList<>();
cdVO.setGroupCd("SOPMAL_TY");
sopmalTyCdList = service.selectCommCode(cdVO);
content.put("sopmalTyCdList", sopmalTyCdList);
// List<DataMap> mlgMxmmUseDvList = new ArrayList<>();
// cdVO.setGroupCd("MLG_MXMM_USE_DV");
// mlgMxmmUseDvList = service.selectCommCode(cdVO);
// content.put("mlgMxmmUseDvList", mlgMxmmUseDvList);
List<DataMap> CGN001 = new ArrayList<>();
cdVO.setGroupCd("EMAIL_ADRES");
CGN001 = service.selectCommCode(cdVO);
content.put("CGN001", CGN001);
DataMap extrlList = service.selectBOExtrlList();
content.put("extrlList", extrlList);
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 쇼핑몰 등록
* @param BOMaSopmalVO
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/insertBOSopmalRegist")
public ResponseEntity<?> insertBOSopmalRegist(@RequestBody BOMaSopmalVO vo) {
log.debug("insertBOSopmalRegist(vo = {})", vo);
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
vo.setRegusr(user.getUserInnb());
DataMap content = new DataMap();
content = service.insertBOSopmalRegist(vo);
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 쇼핑몰 수정 화면
* @param BOMaSopmalVO
* @return ResponseEntity<?>
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectBOSopmalUpdtForm")
public ResponseEntity<?> selectBOSopmalUpdtForm(@RequestBody BOMaSopmalVO vo) {
DataMap content = new DataMap();
List<DataMap> srchList = new ArrayList<>();
DataMap srchMap = new DataMap();
srchMap.put("srchType", vo.getSrchType());
srchMap.put("srchStr", vo.getSrchStr());
srchMap.put("srchSopmalTyCd", vo.getSrchSopmalTyCd());
srchMap.put("srchBsnmInnb", vo.getSrchBsnmInnb());
srchMap.put("srchOperAt", vo.getSrchOperAt());
srchMap.put("pageUnit", vo.getPageUnit());
srchMap.put("pageIndex", vo.getPageIndex());
srchList.add(srchMap);
content.put("srchList", srchList);
List<DataMap> companyAllList = new ArrayList<>();
companyAllList = service.selectBOCompanyAllList();
content.put("companyAllList", companyAllList);
/** 회원등급 삭제 7.2 */
// List<DataMap> mbrGradList = new ArrayList<>();
// mbrGradList = service.selectBOMbrGradList();
// content.put("mbrGradList", mbrGradList);
List<DataMap> themeList = new ArrayList<>();
themeList = service.selectBOThemeList();
content.put("themeList", themeList);
List<DataMap> CGN002 = new ArrayList<>();
DataMap dm = new DataMap();
dm.put("groupCd", "STPLAT_DV");
CGN002 = service.selectBOCommcdClauseDetailList(dm);
content.put("CGN002", CGN002);
List<DataMap> clause01List = new ArrayList<>();
DataMap cl01 = new DataMap();
cl01.put("stplatDvCd", "01");
clause01List = service.selectBOClauseList(cl01);
content.put("clause01List", clause01List);
List<DataMap> clause02List = new ArrayList<>();
DataMap cl02 = new DataMap();
cl02.put("stplatDvCd", "02");
clause02List = service.selectBOClauseList(cl02);
content.put("clause02List", clause02List);
BOMaComncdVO cdVO = new BOMaComncdVO();
List<DataMap> pgList = new ArrayList<>();
cdVO.setGroupCd("SETLE_SETUP_TY");
pgList = service.selectCommCode(cdVO);
content.put("pgList", pgList);
List<DataMap> CGN001 = new ArrayList<>();
cdVO.setGroupCd("EMAIL_ADRES");
CGN001 = service.selectCommCode(cdVO);
content.put("CGN001", CGN001);
// List<DataMap> mlgMxmmUseDvList = new ArrayList<>();
// cdVO.setGroupCd("MLG_MXMM_USE_DV");
// mlgMxmmUseDvList = service.selectCommCode(cdVO);
// content.put("mlgMxmmUseDvList", mlgMxmmUseDvList);
List<DataMap> sopmalTyCdList = new ArrayList<>();
cdVO.setGroupCd("SOPMAL_TY");
sopmalTyCdList = service.selectCommCode(cdVO);
content.put("sopmalTyCdList", sopmalTyCdList);
List<DataMap> sopmalDetailList = new ArrayList<>();
sopmalDetailList = service.selectBOSopmalUpdtForm(vo);
content.put("sopmalDetailList", sopmalDetailList);
List<DataMap> clauseList = new ArrayList<>();
clauseList = service.selectBOSopmalUpdtFormClauseList(vo);
content.put("clauseList", clauseList);
List<DataMap> sitelList = new ArrayList<>();
sitelList = service.selectBOSopmalUpdtFormSitelList(vo);
content.put("sitelList", sitelList);
List<DataMap> companyList = new ArrayList<>();
companyList = service.selectBOSopmalUpdtFormCompanyList(vo);
content.put("companyList", companyList);
/** 회원등급 삭제 7.2 */
// DataMap mbrGradByShop = service.selectBOMbrGradGroupByShop(vo);
// content.put("mbrGradByShop", mbrGradByShop);
/*DataMap extrlByShop = service.selectBOExtrlByShop(vo);
content.put("extrlByShop", extrlByShop);
DataMap extrlList = service.selectBOExtrlList();
content.put("extrlList", extrlList);*/
DataMap payLinkList = service.selectBOShopPayLinkList(vo);
content.put("payLinkList", payLinkList);
if(payLinkList != null){
List<DataMap> payInfoList = service.selectBOpayInfoList(payLinkList);
content.put("payInfoList", payInfoList);
}
log.debug("content result {}", content);
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 쇼핑몰 수정
* @param BOMaSopmalVO
* @return ResponseEntity<?>
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/updateBOSopmalUpdt")
public ResponseEntity<?> updateBOSopmalUpdt(@RequestBody BOMaSopmalVO vo) {
log.debug("updateBOSopmalUpdt(vo = {})", vo);
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
vo.setUpdusr(user.getUserInnb());
log.debug("updateBOSopmalUpdt controller {}", vo.getJoinComptWords());
DataMap content = new DataMap();
content = service.updateBOSopmalUpdt(vo);
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 쇼핑몰 상세 조회
* @param BOMaSopmalVO
* @return ResponseEntity<?>
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectBOSopmalInfoDtl")
public ResponseEntity<?> selectBOSopmalInfoDtl(@RequestBody BOMaSopmalVO vo) {
/*쇼핑몰 상세 조회*/
List<DataMap> sopmalInfoList = new ArrayList<>();
sopmalInfoList = service.selectBOSopmalUpdtForm(vo);
DataMap sopmalInfo = new DataMap();
/*map형태로 추출*/
if(!CollectionUtils.isEmpty(sopmalInfoList)){
sopmalInfo = sopmalInfoList.get(0);
}
DataMap content = new DataMap();
content.put("sopmalInfo", sopmalInfo);
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 약관 목록 조회
* @param BOMaSopmalVO
* @return ResponseEntity<?>
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectBOSubClauseList")
public ResponseEntity<?> selectBOSubClauseList(@RequestBody BOMaSopmalVO vo) {
DataMap content = new DataMap();
List<DataMap> clauseList = new ArrayList<>();
clauseList = service.selectBOSubClauseList(vo);
content.put("clauseList", clauseList);
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 통합관리자 > 약관 내용 조회
* @param BOMaSopmalVO
* @return ResponseEntity<?>
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectBOClauseInformation")
public ResponseEntity<?> selectBOClauseInformation(@RequestBody BOMaSopmalVO vo) {
DataMap content = new DataMap();
List<DataMap> clauseList = new ArrayList<>();
clauseList = service.selectBOClauseInformation(vo);
/** 은행 구분, 은행 코드 이름, 계좌 구분 조회*/
BOMaComncdVO bOMaComncdVO = new BOMaComncdVO();
bOMaComncdVO.setGroupCd("STPLAT_DV");
List<?> stplat = bOMaComncdService.selectBOCommcdDetailList(bOMaComncdVO);
content.put("clauseList", clauseList);
content.put("stplat", stplat);
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 사용자 > 약관 내용 조회
* @param BOMaSopmalVO
* @return ResponseEntity<?>
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectBOClauseInformationSopmal")
public ResponseEntity<?> selectBOClauseInformationSopmal(@RequestBody BOMaSopmalVO vo) {
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
vo.setSopmalCd(user.getSopmalCd());
DataMap content = new DataMap();
List<DataMap> clauseList = new ArrayList<>();
clauseList = service.selectBOClauseInformation(vo);
/**약관구분 공통코드*/
BOMaComncdVO bOMaComncdVO = new BOMaComncdVO();
bOMaComncdVO.setGroupCd("STPLAT_DV");
List<?> stplat = bOMaComncdService.selectBOCommcdDetailList(bOMaComncdVO);
content.put("clauseList", clauseList);
content.put("stplat", stplat);
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 사업자 정보 조회
* @param BOMaSopmalVO
* @return ResponseEntity<?>
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectBOBusinessInformation")
public ResponseEntity<?> selectBOBusinessInformation(@RequestBody BOMaSopmalVO vo) {
DataMap content = new DataMap();
List<DataMap> list = new ArrayList<>();
list = service.selectBOBusinessInformation(vo);
content.put("list", list);
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 쇼핑몰 코드 중복 확인
* @param BOMaSopmalVO
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectBOSopmalCdduplicat")
public ResponseEntity<?> selectBOSopmalCdduplicat(@RequestBody BOMaSopmalVO vo) {
DataMap content = new DataMap();
String message = service.selectBOSopmalCdduplicat(vo);
content.put("message", message);
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 사용자 footer정보 조회
*
* @param vo
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectBOSopmalFooterInfo")
public ResponseEntity<?> selectBOSopmalFooterInfo() {
BOMaSopmalVO vo = new BOMaSopmalVO();
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
vo.setSopmalCd(user.getSopmalCd());
Map<String,Object> footerInfo = new HashMap<>();
footerInfo.put("footerInfo", service.selectBOSopmalFooterInfo(vo));
return ApiResponse.of(footerInfo).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 회원가입정보 조회
*
* @param vo
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectBOJoinInfo")
public ResponseEntity<?> selectBOJoinInfo(@RequestBody BOMaSopmalVO vo) {
//
// AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
// vo.setSopmalCd(user.getSopmalCd());
DataMap content = new DataMap();
content.put("joinInfo", service.selectBOJoinInfo(vo));
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
}

View File

@@ -0,0 +1,378 @@
package com.wb.domainserver.domain.admin.store.sopmal.controller;
import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.domain.admin.store.sopmal.service.BOMaSopmalService;
import com.wb.domainserver.domain.admin.store.sopmal.vo.BOMaSopmalVO;
import com.wb.domainserver.domain.admin.store.sopmal.vo.MaSopmalVO;
import com.wb.domainserver.domain.admin.sys.authgrp.vo.MaAuthgrpVO;
import com.wb.domainserver.exception.WnbtRestException;
import com.wb.domainserver.response.WnbtResponse;
import com.wb.domainserver.response.WnbtWebClientResponseHandler;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.communicate.*;
import com.wb.domainserver.util.dataaccess.DataMap;
import com.wb.domainserver.util.excel.ExcelDownloadUtil;
import com.wb.domainserver.util.string.StringUtil;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import java.io.IOException;
import java.util.*;
import java.util.regex.Pattern;
/**
* MaSopmalController Class (back)
*
* @author 최범식
* @since 2024-02-05
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-02-05 최범식 최초 생성
*
* </pre>
*/
@Slf4j
@Controller
@RequestMapping("/admin/store/sopmal")
public class MaSopmalController {
@Autowired
private BOMaSopmalService service;
/** WebClient 호출을 위한 wrapper */
@Autowired
private WnbtWebClientResponseHandler responseHandler;
@Autowired
private SendToResrc sendToResrc;
/** 공통 메시지 처리를 위한 메시지 객체 */
@Autowired
private GconeMessageSource gconeMessageSource;
/**
* 쇼핑몰 목록 조회
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping("/selectSopmalListForm")
public String selectSopmalListForm(MaSopmalVO vo, ModelMap model) {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/store/sopmal/selectBOSopmalListInqireForm", vo),
model,
"resultMap"
);
return "admin/store/sopmal/maSopmalListInqireForm";
}
/**
* 쇼핑몰 목록 조회
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping("/selectSopmalListInqire")
public String selectSopmalListInqire(MaSopmalVO vo, ModelMap model) {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/store/sopmal/selectBOSopmalListInqire", vo),
model,
"resultMap"
);
return "admin/store/sopmal/maSopmalListInqireR";
}
/**
* 쇼핑몰 등록 화면이동
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping("/selectSopmalRegistForm")
public String selectSopmalRegistForm(MaSopmalVO vo, ModelMap model) {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/store/sopmal/selectBOSopmalRegistForm", vo),
model,
"resultMap"
);
return "admin/store/sopmal/maSopmalC";
}
/**
* 쇼핑몰 등록
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/insertSopmalRegist")
public ResponseEntity<WnbtResponse> insertSopmalRegist(@Validated MaSopmalVO vo, BindingResult bindingResult) {
if(bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
List<Map<String, String>> errorList = new ArrayList<>();
/*이메일 자동발송 발신 주소, 대표이메일 체크*/
if(!StringUtil.isEmpty(vo.getReprsntId()) && StringUtil.isEmpty(vo.getReprsntDomain())){
errorList.add(ValidateResultConverter.setErrorMap("reprsntDomain", "대표 이메일 도메인"));
}
if(!StringUtil.isEmpty(vo.getId()) && StringUtil.isEmpty(vo.getDomain())){
errorList.add(ValidateResultConverter.setErrorMap("domain", "이메일 자동발송 발신주소 도메인"));
}
for(int i=0; i<vo.getBsnmInnbArr().length; i++){
if(vo.getBsnmInnbArr()[i].isEmpty()){
errorList.add(ValidateResultConverter.setErrorMap("bsnmInnbArr", "판매사, 운영사는 필수 항목입니다."));
break;
}
}
if("false".equals(vo.getIsChkdStplat())){
errorList.add(ValidateResultConverter.setErrorMap("stplatInnbArr", "약관구분 또는 약관을 선택하세요."));
}
if("false".equals(vo.getIsChkdDup())){
errorList.add(ValidateResultConverter.setErrorMap("sopmalCd", "쇼핑몰코드 중복확인을 해주세요."));
}
if ("01".equals(vo.getMlgMxmmUseDv())) {
vo.setMlgMxmmUseAmt("0");
}
if(errorList != null && !errorList.isEmpty()) {
throw new WnbtRestException(ValidateResultConverter.convertCustomValidate(errorList));
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/store/sopmal/insertBOSopmalRegist", vo),
ReplyFromResrc::getReply
);
}
/**
* 쇼핑몰 수정 화면이동
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping("/selectSopmalUpdtForm")
public String selectSopmalUpdtForm(MaSopmalVO vo, ModelMap model) {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/store/sopmal/selectBOSopmalUpdtForm", vo),
model,
"resultMap"
);
return "admin/store/sopmal/maSopmalU";
}
/**
* 쇼핑몰 수정
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updateSopmalUpdt")
public ResponseEntity<WnbtResponse> updateSopmalUpdt(@Validated MaSopmalVO vo, BindingResult bindingResult, HttpServletRequest request) {
if(bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
List<Map<String, String>> errorList = new ArrayList<>();
/*이메일 자동발송 발신 주소, 대표이메일 체크*/
if (!StringUtil.isEmpty(vo.getReprsntId()) && StringUtil.isEmpty(vo.getReprsntDomain())) {
errorList.add(ValidateResultConverter.setErrorMap("reprsntDomain", "대표 이메일 도메인을 입력하세요."));
}
if (!StringUtil.isEmpty(vo.getId()) && StringUtil.isEmpty(vo.getDomain())) {
errorList.add(ValidateResultConverter.setErrorMap("domain", "이메일 자동발송 발신주소 도메인을 입력하세요."));
}
for(int i=0; i<vo.getBsnmInnbArr().length; i++){
if(vo.getBsnmInnbArr()[i].isEmpty()){
errorList.add(ValidateResultConverter.setErrorMap("bsnmInnbArr", "판매사, 운영사는 필수 항목입니다."));
break;
}
}
if("false".equals(vo.getIsChkdStplat())){
errorList.add(ValidateResultConverter.setErrorMap("stplatInnbArr", "약관구분 또는 약관을 선택하세요."));
}
if ("01".equals(vo.getMlgMxmmUseDv())) {
vo.setMlgMxmmUseAmt("0");
}
if(errorList != null && !errorList.isEmpty()) {
throw new WnbtRestException(ValidateResultConverter.convertCustomValidate(errorList));
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/store/sopmal/updateBOSopmalUpdt", vo),
ReplyFromResrc::getReply
);
}
/**
* 약관 내용 조회
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectSubClauseList")
public ResponseEntity<WnbtResponse> updateSopmalUpdt(MaSopmalVO vo) {
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/store/sopmal/selectBOSubClauseList", vo),
ReplyFromResrc::getReply
);
}
/**
* 사업자 정보 조회
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectBusinessInformation")
public String selectBusinessInformation(MaSopmalVO vo, ModelMap model) {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/store/sopmal/selectBOBusinessInformation", vo),
model,
"resultSrchMap"
);
return "admin/store/sopmal/MaBsnmInqirePopupR";
}
/**
* 약관 정보 조회
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectClauseInformation")
public ResponseEntity<WnbtResponse> selectClauseInformation(MaSopmalVO vo) {
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/store/sopmal/selectBOClauseInformation", vo),
ReplyFromResrc::getReply
);
}
/**
* 쇼핑몰 코드 중복 확인
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectSopmalCdduplicat")
public ResponseEntity<WnbtResponse> selectSopmalCdduplicat(MaSopmalVO vo) {
List<Map<String, String>> errorList = new ArrayList<>();
final String REGEX_CD = "^[a-zA-Z\\s]*$";
Pattern boardId = Pattern.compile(REGEX_CD);
if (!boardId.matcher(vo.getSopmalCd()).matches()) {
errorList.add(ValidateResultConverter.setErrorMap("sopmalCd", "쇼핑몰 코드는 영문만 사용 가능합니다."));
}
if(errorList != null && !errorList.isEmpty()) {
throw new WnbtRestException(ValidateResultConverter.convertCustomValidate(errorList));
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/store/sopmal/selectBOSopmalCdduplicat", vo),
ReplyFromResrc::getReply
);
}
/**
* 엑셀 다운로드
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/excelFileDownload")
public void excelFileDownload(BOMaSopmalVO vo, HttpServletResponse response) {
List<DataMap> excelList = new ArrayList<>();
excelList = service.selectBOSopmalExcelList(vo);
//엑셀 항목에 출력될 내용 설정
List<Map<String, Object>> dataList = new ArrayList<>();
if(excelList != null && !excelList.isEmpty()) {
for (int i = 0; i < excelList.size(); i++ ) {
HashMap<String, Object> dataMap = new HashMap<>();
DataMap map = new DataMap();
map = excelList.get(i);
String oper ="운영";
String n = "N";
if (n.equals(map.get("operAt"))) {
oper = "운영중지";
}
String domain = "PC : " + map.get("pcDomnAdres") + "모바일 : " + map.get("mblDomnAdres");
int excelSize = calculateExcelsize(excelList.size(), i);
dataMap.put("itme01", excelSize);
dataMap.put("itme02", map.get("sopmalNm"));
dataMap.put("itme03", map.get("sopmalTyCdNm"));
dataMap.put("itme04", domain);
dataMap.put("itme05", map.get("bsnmNm"));
dataMap.put("itme06", map.get("updtDt"));
dataMap.put("itme07", oper);
dataList.add(dataMap);
}
}
//엑셀 항목별 제목에 출력될 내용 설정
LinkedHashMap<String, String> headerMap = new LinkedHashMap<String, String>();
headerMap.put("itme01", "번호");
headerMap.put("itme02", "쇼핑몰 명");
headerMap.put("itme03", "구분");
headerMap.put("itme04", "도메인");
headerMap.put("itme05", "쇼핑몰운영사");
headerMap.put("itme06", "최종 수정일시");
headerMap.put("itme07", "상태");
try {
//엑셀생성 및 다운로드
ExcelDownloadUtil.createExcel("sopmal_excel_file", headerMap, dataList, response);
} catch(IOException ioe) {
log.error("엑셀다운로드 중 오류가 발생하였습니다.", ioe);
throw new WnbtRestException("엑셀다운로드 중 오류가 발생하였습니다.");
}
}
/**
* 안전하게 계산 처리 메소드
* @param size
* @param index
* @return
*/
private int calculateExcelsize(int size, int index) {
return size - index;
}
/**
* 회원가입정보 조회
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectJoinInfo")
public ResponseEntity<WnbtResponse> selectJoinInfo(MaSopmalVO vo) {
// Map<String,Object> resultMap = responseHandler.handleResponseAsMap(
// sendToResrc.ofPost(RESRC.GCONEBO, "/admin/store/sopmal/selectBOJoinInfo", vo)
// );
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/store/sopmal/selectBOJoinInfo", vo),
ReplyFromResrc::getReply
);
}
}

View File

@@ -0,0 +1,199 @@
package com.wb.domainserver.domain.admin.store.sopmal.mapper;
import java.util.List;
import com.wb.domainserver.domain.admin.store.sopmal.vo.Shop;
import com.wb.domainserver.domain.gcone.promtn.coupon.vo.BOCouponVO;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import com.wb.domainserver.domain.admin.store.sopmal.vo.BOMaSopmalVO;
import com.wb.domainserver.domain.admin.store.sopmal.vo.BOShopSetupVO;
import com.wb.domainserver.domain.admin.sys.menu.vo.BOMaMenuVO;
import com.wb.domainserver.util.dataaccess.DataMap;
/**
* 쇼핑몰을 관리하는 mapper
*
* @author 박철민
* @since 2023-12-15
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2023-12-15 박철민 최초 생성
*
* </pre>
*/
@Mapper
@Repository
public interface BOMaSopmalMapper {
public int selectBOSopmalTotCnt(BOMaSopmalVO vo);
public List<DataMap> selectBOSopmalList(BOMaSopmalVO vo);
/*사업자 조회*/
public List<DataMap> selectBOCompanyList(DataMap dm);
public List<DataMap> selectBOSopmalExcelList(BOMaSopmalVO vo);
public List<DataMap> selectBOMbrGradList(DataMap dm);
public List<DataMap> selectBOThemeList(DataMap dm);
public List<DataMap> selectBOpayInfoList(DataMap dm);
public List<DataMap> selectBOClauseList(DataMap dm);
public DataMap selectBOBusinessInformation(DataMap dm);
public int selectBOSopmalCdduplicat(String sopmalCd);
public int insertBOSopmal(BOMaSopmalVO vo);
public int insertBOShopFamilySite(DataMap dm);
public int insertBOShopClause(DataMap dm);
public int insertBOShopCompany(DataMap dm);
public List<DataMap> selectBOStplatDtl(BOMaSopmalVO vo);
/*쇼핑몰 상세 조회*/
public List<DataMap> selectBOSopmalUpdtForm(BOMaSopmalVO vo);
public List<DataMap> selectBOSopmalUpdtFormClauseList(BOMaSopmalVO vo);
/*쇼핑몰 상세화면 패밀리 사이트 조회 */
public List<DataMap> selectBOSopmalUpdtFormSitelList(BOMaSopmalVO vo);
public List<DataMap> selectBOSopmalUpdtFormCompanyList(BOMaSopmalVO vo);
public List<DataMap> selectBOCommcdClauseDetailList(DataMap dm);
public List<DataMap> selectBOCompanyAllList();
public int updateBOSopmalUpdt(BOMaSopmalVO vo);
public int deteteBOShopFamilySite(BOMaSopmalVO vo);
public int deteteBOShopClause(BOMaSopmalVO vo);
public int deteteBOShopCompany(BOMaSopmalVO vo);
public void insertBOShopPayLink(BOMaSopmalVO vo);
public List<DataMap> selectBOSopmalCdNm();
/**
* 쇼핑몰 설정 목록을 조회한다.
* @param paramVO 파라미터VO
* @return List<?> 쇼핑몰 목록정보
*/
public List<?> selectBOSopmalSetupList(BOShopSetupVO vo);
/**
* 설정ID를 채번한다.
* @param paramVO 파라미터VO
* @return String 설정ID
*/
public String selectBOSopmalSetupId(BOShopSetupVO paramVO);
/**
* 쇼핑몰 설정을 등록한다.
* @param paramVO 파라미터VO
*/
public void insertBOSopmalSetup(BOShopSetupVO paramVO);
/**
* 쇼핑몰 설정을 수정한다.
* @param paramVO
*/
public void updateBOSopmalSetup(BOShopSetupVO paramVO);
/**
* 쇼핑몰 설정을 삭제한다.
* @param 파라미터VO
*/
public void deleteBOSopmalSetup(BOShopSetupVO paramVO);
/**
* 쇼핑몰 설정 목록을 조회한다.
* @param
* @return List<?> 쇼핑몰 목록정보
*/
public List<?> selectBOSopmalSetupCnList();
/**
* 쇼핑몰별 회원등급 조회
* @param vo
* @return
*/
DataMap selectBOMbrGradGroupByShop(BOMaSopmalVO vo);
/**
* 쇼핑몰 외부연동 조회
* @param data
* @return
*/
String selectBOExtrlByShop(DataMap data);
void insertBOShopExtrl(DataMap dm);
void deleteBOShopExtrl(DataMap dm);
void deleteBOShopPayLink(DataMap dm);
DataMap selectBOShopPayLinkList(BOMaSopmalVO vo);
void deleteBOShopMbrGrad(BOMaSopmalVO vo);
void insertBOshopMbrGrad(DataMap dm);
public String selectBOSopmalCouponNbInqire(BOCouponVO couponVO);
void insertBOShopPayInfo(DataMap dm);
void updateBOShopPayLink(BOMaSopmalVO vo);
void updateBOShopPayInfo(DataMap dm);
String selectBORejectTelnb(String rejectTelnb);
Integer selectBONpayUseAtByShop(String sopmalCd);
/**
* 회원가입정보 조회
* @param vo
* @return
*/
DataMap selectBOJoinInfo(BOMaSopmalVO vo);
/** 푸터 디자인 설정 유무 조회 */
public DataMap selectBODesignSetup(BOMaSopmalVO vo);
/** 푸터 디자인 설정 유무 조회 */
public DataMap selectBODesignScriptSetup(BOMaSopmalVO vo);
/** 치환코드 쇼핑몰, 사업자 정보 조회*/
public DataMap selectBOCommonSubstStoreInfo(String sopmalCd);
/** 법인명(판매사명) 조회*/
String selectBsnmName(String sopmalCd);
/*해당 쇼핑몰 쇼핑몰 타입별 목록 조회*/
List<DataMap> selectSopmalGroupList(BOMaSopmalVO vo);
Shop selectSopmalInfo(String sopmalCd);
}

View File

@@ -0,0 +1,989 @@
package com.wb.domainserver.domain.admin.store.sopmal.service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.wb.domainserver.domain.admin.store.extlink.mapper.BOMaExtlinkMapper;
import com.wb.domainserver.domain.admin.store.extlink.vo.BOMaExtlinkVO;
import com.wb.domainserver.domain.admin.store.mbrgrad.service.BOMaMbrgradService;
import com.wb.domainserver.domain.admin.store.mbrgrad.vo.BOMaMbrgradVO;
import com.wb.domainserver.domain.admin.store.mbrgrad.vo.BOMbrGradVO;
import com.wb.domainserver.domain.admin.store.sopmal.vo.Shop;
import com.wb.domainserver.domain.admin.sys.authFnctMenu.mapper.BOMaAuthFnctMenuMapper;
import com.wb.domainserver.domain.admin.sys.ctgry.mapper.BOMaCtgryMapper;
import com.wb.domainserver.domain.admin.sys.ctgry.vo.BOMaCtgryVO;
import com.wb.domainserver.domain.admin.sys.menu.mapper.BOMaMenuMapper;
import com.wb.domainserver.domain.admin.sys.menu.vo.BOMaMenuVO;
import com.wb.domainserver.domain.gcone.goods.goodsinfo.mapper.BOGoodsinfoMapper;
import com.wb.domainserver.domain.gcone.goods.goodsinfo.vo.BOGoodsInfoVO;
import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.wb.domainserver.domain.admin.store.sopmal.mapper.BOMaSopmalMapper;
import com.wb.domainserver.domain.admin.store.sopmal.vo.BOMaSopmalVO;
import com.wb.domainserver.domain.admin.store.sopmal.vo.BOShopSetupVO;
import com.wb.domainserver.domain.admin.sys.comncd.mapper.BOMaComncdMapper;
import com.wb.domainserver.domain.admin.sys.comncd.vo.BOMaComncdVO;
import com.wb.domainserver.domain.gcone.setup.nbkk.vo.BOSetupNbkkVO;
import com.wb.domainserver.exception.WnbtRestException;
import com.wb.domainserver.util.dataaccess.DataMap;
import com.wb.domainserver.util.string.StringUtil;
import lombok.extern.slf4j.Slf4j;
/**
*
* 쇼핑몰을 관리하는 Service
* @author 박철민
* @since 2023-12-15
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2023-12-15 박철민 최초 생성
*
* </pre>
*/
@Slf4j
@Service
public class BOMaSopmalService {
@Autowired
private BOMaSopmalMapper mapper;
@Autowired
private BOMaMenuMapper menuMapper;
@Autowired
private BOMaAuthFnctMenuMapper afmMapper;
@Autowired
private BOMaComncdMapper codeMapper;
@Autowired
private BOMaExtlinkMapper extrlMapper;
@Autowired
private BOMaCtgryMapper ctgryMapper;
@Autowired
private BOGoodsinfoMapper boGoodsinfoMapper;
@Autowired
private BOMaMbrgradService boMbrgradService;
/**
* 쇼핑몰 코드,명 조회
* @param paramVO 파라미터VO
* @return List<DataMap> 쇼핑몰 목록
*/
public List<DataMap> selectBOSopmalCdNm() {
List<DataMap> SopmalCdNmList = mapper.selectBOSopmalCdNm();
return SopmalCdNmList;
}
/**
* 쇼핑몰 목록 조회
* @param paramVO 파라미터VO
* @return List<DataMap> 쇼핑몰 목록
*/
public List<DataMap> selectBOSopmalList(BOMaSopmalVO vo) {
int total = 0;
total = mapper.selectBOSopmalTotCnt(vo);
vo.getPaginationInfo().setTotalRecordCount(total);
List<DataMap> sopmalLsit = new ArrayList<>();
if (total > 0) {
sopmalLsit = mapper.selectBOSopmalList(vo);
}
return sopmalLsit;
}
/**
* 쇼핑몰 등록
* @param paramVO 파라미터VO
*/
@Transactional
public DataMap insertBOSopmalRegist(BOMaSopmalVO vo) throws WnbtRestException {
log.debug("insertBOSopmalRegist(vo = {})", vo);
DataMap message = new DataMap();
int result = 0;
String sopmalCd = "";
setBOMaSopmalVO(vo);
try {
result = mapper.insertBOSopmal(vo);
sopmalCd = vo.getSopmalCd();
if (result > 0) {
DataMap dm = new DataMap();
dm.put("sopmalCd", sopmalCd);
dm.put("regusr", vo.getRegusr());
log.debug("before mbrgradGroup {}", vo);
//회원등급그룹 입력
BOMaMbrgradVO maMbrgradVO = new BOMaMbrgradVO();
maMbrgradVO.setMbrGradGroupNm(vo.getSopmalNm());
maMbrgradVO.setSopmalCd(vo.getSopmalCd());
maMbrgradVO.setRegusr(vo.getRegusr());
maMbrgradVO.setUpdusr(vo.getUpdusr());
boMbrgradService.insertBOMbrGradGroup(maMbrgradVO);
//회원등급 입력
maMbrgradVO.setMbrGradCndCd("01");
maMbrgradVO.setMbrGradAmt("0");
maMbrgradVO.setMbrGradOrdr(1);
maMbrgradVO.setUseAt("Y");
boMbrgradService.insertBOMbrGrad(maMbrgradVO);
String externalLinkages = vo.getExternalLinkages();
String[] externalLinkagesArr = null;
if (!StringUtil.isEmpty(externalLinkages)) {
externalLinkagesArr = StringUtil.split(externalLinkages, "$");
for(Object extrlInnb : externalLinkagesArr){
if(! "".equals(extrlInnb)) {
dm.put("extrlInnb", extrlInnb);
mapper.insertBOShopExtrl(dm);
}
}
}
// insert payLink
mapper.insertBOShopPayLink(vo);
// PC 결제 정보
String pcSetleType = vo.getPcSetleTypeList();
String[] pcSetleTypeArr = null;
DataMap pcSetleInfoDm = new DataMap();
if (!StringUtil.isEmpty(pcSetleType)) {
pcSetleTypeArr = StringUtil.split(pcSetleType, "$");
pcSetleInfoDm = ynSetParam(pcSetleTypeArr);
pcSetleInfoDm.put("regusr", vo.getRegusr());
pcSetleInfoDm.put("setleSetupInnb", vo.getSetleSetupInnb());
pcSetleInfoDm.put("setlePltfomTyCd", "01");
mapper.insertBOShopPayInfo(pcSetleInfoDm);
} else {
pcSetleInfoDm = ynSetParam(pcSetleTypeArr);
pcSetleInfoDm.put("regusr", vo.getRegusr());
pcSetleInfoDm.put("setleSetupInnb", vo.getSetleSetupInnb());
pcSetleInfoDm.put("setlePltfomTyCd", "01");
mapper.insertBOShopPayInfo(pcSetleInfoDm);
}
// MOBILE 결제 정보
String mobileSetleType = vo.getMobileSetleTypeList();
String[] mobileSetleTypeArr = null;
DataMap mobileSetleInfoDm = new DataMap();
if (!StringUtil.isEmpty(mobileSetleType)) {
mobileSetleTypeArr = StringUtil.split(mobileSetleType, "$");
mobileSetleInfoDm = ynSetParam(mobileSetleTypeArr);
mobileSetleInfoDm.put("regusr", vo.getRegusr());
mobileSetleInfoDm.put("setleSetupInnb", vo.getSetleSetupInnb());
mobileSetleInfoDm.put("setlePltfomTyCd", "02");
mapper.insertBOShopPayInfo(mobileSetleInfoDm);
} else {
mobileSetleInfoDm = ynSetParam(mobileSetleTypeArr);
mobileSetleInfoDm.put("regusr", vo.getRegusr());
mobileSetleInfoDm.put("setleSetupInnb", vo.getSetleSetupInnb());
mobileSetleInfoDm.put("setlePltfomTyCd", "02");
mapper.insertBOShopPayInfo(mobileSetleInfoDm);
}
if (!ObjectUtils.isEmpty(vo.getFamilySiteNmArr())) {
String[] siteNm = vo.getFamilySiteNmArr();
String[] siteUrl = vo.getFamilySiteUrlArr();
for (int a = 0; a < siteNm.length; a++) {
if (!StringUtil.isEmpty(siteNm[a])) {
dm.put("familySiteNm", siteNm[a]);
dm.put("familySiteUrl", siteUrl[a]);
mapper.insertBOShopFamilySite(dm);
}
}
}
if (!ObjectUtils.isEmpty(vo.getStplatInnbArr())) {
String[] stplatInnb = vo.getStplatInnbArr();
for (int b = 0; b < stplatInnb.length; b++) {
if (!StringUtil.isEmpty(stplatInnb[b])) {
dm.put("stplatInnb", stplatInnb[b]);
mapper.insertBOShopClause(dm);
}
}
}
if (!ObjectUtils.isEmpty(vo.getBsnmInnbArr())) {
String[] bsnmInnb = vo.getBsnmInnbArr();
String[] bsnmDvCd = vo.getBsnmDvCdArr();
for (int c = 0; c < bsnmInnb.length; c++) {
dm.put("bsnmInnb", bsnmInnb[c]);
dm.put("bsnmDvCd", bsnmDvCd[c]);
mapper.insertBOShopCompany(dm);
}
}
// 메뉴관리 쇼핑몰 추가
String[] upMostMenuArr = {"adm", "crm"};
for(String upmostMenuCd : upMostMenuArr){
BOMaMenuVO menuVo = new BOMaMenuVO();
menuVo.setSopmalCd(sopmalCd);
menuVo.setUpperMenuCd(upmostMenuCd);
menuVo.setMenuNm(vo.getSopmalNm());
menuVo.setMenuDc("메인");
menuVo.setMenuDepth("1");
menuVo.setExpsrCd("01");
menuVo.setUpmostMenuCd(upmostMenuCd);
menuVo.setRegusr(vo.getRegusr());
menuMapper.insertBOMenuManage(menuVo);
}
// 카테고리 추가
BOMaCtgryVO ctrgryVo = new BOMaCtgryVO();
ctrgryVo.setCtgryId(2);
ctrgryVo.setUpperCtgryId(1);
ctrgryVo.setSopmalCd(sopmalCd);
ctrgryVo.setCtgryNm("쇼핑몰");
ctrgryVo.setCtgryDepth(1);
ctrgryVo.setRegusr(vo.getRegusr());
ctgryMapper.insertBOCtgryManage(ctrgryVo);
}
//상품노출정보 초기 설정
BOGoodsInfoVO goodsInfoVo = new BOGoodsInfoVO();
goodsInfoVo.setSopmalCd(sopmalCd);
goodsInfoVo.setGoodsInfoSetupSj(vo.getSopmalNm());
goodsInfoVo.setGoodsNmExpsrAt("Y");
goodsInfoVo.setGoodsNmExpsrOrdr("1");
goodsInfoVo.setReprsntDcExpsrAt("Y");
goodsInfoVo.setReprsntDcExpsrOrdr("2");
goodsInfoVo.setPricExpsrAt("Y");
goodsInfoVo.setPricExpsrOrdr("3");
goodsInfoVo.setDlvyExpsrAt("Y");
goodsInfoVo.setDlvyExpsrOrdr("4");
goodsInfoVo.setRvwEvlScreExpsrAt("Y");
goodsInfoVo.setRvwEvlScreExpsrOrdr("5");
goodsInfoVo.setIconExpsrAt("Y");
goodsInfoVo.setIconExpsrOrdr("6");
goodsInfoVo.setUseAt("Y");
goodsInfoVo.setRegusr(vo.getRegusr());
goodsInfoVo.setUpdusr(vo.getRegusr());
boGoodsinfoMapper.insertBOGoodsInfo(goodsInfoVo);
message.put("result", "success");
message.put("sopmalCd", sopmalCd);
} catch (WnbtRestException wre){
throw new WnbtRestException(wre.getMessage());
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return message;
}
/**
* 쇼핑몰 상세 조회
* @param paramVO 파라미터VO
* @return List<DataMap>
*/
public List<DataMap> selectBOSopmalUpdtForm(BOMaSopmalVO vo) {
List<DataMap> sopmalDetailList = new ArrayList<>();
sopmalDetailList = mapper.selectBOSopmalUpdtForm(vo);
DataMap dm = new DataMap();
if (sopmalDetailList != null && !sopmalDetailList.isEmpty()) {
dm = sopmalDetailList.get(0);
}
if(!ObjectUtils.isEmpty(dm.get("smsAtmcSndngLmttBgntme")))
dm.put("smsAtmcSndngLmttBgntme", StringUtil.addColonChar(dm.get("smsAtmcSndngLmttBgntme").toString()));
if(!ObjectUtils.isEmpty(dm.get("smsAtmcSndngLmttEndtme")))
dm.put("smsAtmcSndngLmttEndtme", StringUtil.addColonChar(dm.get("smsAtmcSndngLmttEndtme").toString()));
return sopmalDetailList;
}
/**
* 쇼핑몰 상세화면 약관 조회
* @param paramVO 파라미터VO
* @return List<DataMap>
*/
public List<DataMap> selectBOSopmalUpdtFormClauseList(BOMaSopmalVO vo) {
List<DataMap> clauseList = new ArrayList<>();
clauseList = mapper.selectBOSopmalUpdtFormClauseList(vo);
log.debug("약관 목록 : {}", clauseList);
for (int a = 0; a < clauseList.size(); a++) {
List<DataMap> subClauseList = new ArrayList<>();
DataMap dm = new DataMap();
dm = clauseList.get(a);
if (a > 1) {
DataMap cl02 = new DataMap();
cl02.put("stplatDvCd", dm.get("stplatDvCd"));
subClauseList = mapper.selectBOClauseList(cl02);
log.debug("약관 목록 : {}", subClauseList);
dm.put("subClauseList", subClauseList);
}
}
return clauseList;
}
/**
* 쇼핑몰 상세화면 패밀리 사이트 조회
* @param paramVO 파라미터VO
* @return List<DataMap>
*/
public List<DataMap> selectBOSopmalUpdtFormSitelList(BOMaSopmalVO vo) {
List<DataMap> sitelList = new ArrayList<>();
sitelList = mapper.selectBOSopmalUpdtFormSitelList(vo);
return sitelList;
}
/**
* 쇼핑몰 상세화면 사업자 조회
* @param paramVO 파라미터VO
* @return List<DataMap>
*/
public List<DataMap> selectBOSopmalUpdtFormCompanyList(BOMaSopmalVO vo) {
List<DataMap> companyList = new ArrayList<>();
companyList = mapper.selectBOSopmalUpdtFormCompanyList(vo);
return companyList;
}
/**
* 쇼핑몰 수정
* @param paramVO 파라미터VO
*/
@Transactional
public DataMap updateBOSopmalUpdt(BOMaSopmalVO vo) throws WnbtRestException {
log.debug("updateBOSopmalUpdt(vo = {})", vo);
DataMap message = new DataMap();
int result = 0;
String sopmalCd = vo.getSopmalCd();
setBOMaSopmalVO(vo);
log.debug("updateBOSopmalUpdt {}", vo);
try {
result = mapper.updateBOSopmalUpdt(vo);
if (result > 0) {
mapper.deteteBOShopFamilySite(vo);
mapper.deteteBOShopClause(vo);
mapper.deteteBOShopCompany(vo);
/** 회원등급 삭제 7.2 */
// mapper.deleteBOShopMbrGrad(vo);
DataMap dm = new DataMap();
dm.put("sopmalCd", sopmalCd);
dm.put("updusr", vo.getUpdusr());
dm.put("regusr", vo.getUpdusr());
/** 회원등급 삭제 7.2 */
// dm.put("mbrGradGroupInnb", vo.getMbrGradGroupInnb());
// mapper.insertBOshopMbrGrad(dm);
mapper.deleteBOShopExtrl(dm);
String externalLinkages = vo.getExternalLinkages();
String[] externalLinkagesArr = null;
externalLinkagesArr = StringUtil.split(externalLinkages, "$");
if (externalLinkagesArr.length > 0) {
for(Object extrlInnb : externalLinkagesArr){
if(! "".equals(extrlInnb)){
dm.put("extrlInnb", extrlInnb);
mapper.insertBOShopExtrl(dm);
}
}
}
log.debug("masopmal {}", vo);
// update payLink
mapper.updateBOShopPayLink(vo);
// PC 결제 정보
String pcSetleType = vo.getPcSetleTypeList();
String[] pcSetleTypeArr = null;
DataMap pcSetleInfoDm = new DataMap();
if (!StringUtil.isEmpty(pcSetleType)) {
pcSetleTypeArr = StringUtil.split(pcSetleType, "$");
pcSetleInfoDm = ynSetParam(pcSetleTypeArr);
pcSetleInfoDm.put("updusr", vo.getUpdusr());
pcSetleInfoDm.put("setleInfoInnb", vo.getPcSetleInfoInnb());
mapper.updateBOShopPayInfo(pcSetleInfoDm);
} else {
pcSetleInfoDm = ynSetParam(pcSetleTypeArr);
pcSetleInfoDm.put("updusr", vo.getUpdusr());
pcSetleInfoDm.put("setleInfoInnb", vo.getPcSetleInfoInnb());
mapper.updateBOShopPayInfo(pcSetleInfoDm);
}
// MOBILE 결제 정보
String mobileSetleType = vo.getMobileSetleTypeList();
String[] mobileSetleTypeArr = null;
DataMap mobileSetleInfoDm = new DataMap();
if (!StringUtil.isEmpty(mobileSetleType)) {
mobileSetleTypeArr = StringUtil.split(mobileSetleType, "$");
mobileSetleInfoDm = ynSetParam(mobileSetleTypeArr);
mobileSetleInfoDm.put("updusr", vo.getUpdusr());
mobileSetleInfoDm.put("setleInfoInnb", vo.getMobileSetleInfoInnb());
mapper.updateBOShopPayInfo(mobileSetleInfoDm);
} else {
mobileSetleInfoDm = ynSetParam(mobileSetleTypeArr);
mobileSetleInfoDm.put("updusr", vo.getUpdusr());
mobileSetleInfoDm.put("setleInfoInnb", vo.getMobileSetleInfoInnb());
mapper.updateBOShopPayInfo(mobileSetleInfoDm);
}
if (!ObjectUtils.isEmpty(vo.getFamilySiteNmArr())) {
String[] siteNm = vo.getFamilySiteNmArr();
String[] siteUrl = vo.getFamilySiteUrlArr();
for (int a = 0; a < siteNm.length; a++) {
if (!StringUtil.isEmpty(siteNm[a])) {
dm.put("familySiteNm", siteNm[a]);
dm.put("familySiteUrl", siteUrl[a]);
mapper.insertBOShopFamilySite(dm);
}
}
}
if (!ObjectUtils.isEmpty(vo.getStplatInnbArr())) {
String[] stplatInnb = vo.getStplatInnbArr();
for (int b = 0; b < stplatInnb.length; b++) {
if (!StringUtil.isEmpty(stplatInnb[b])) {
dm.put("stplatInnb", stplatInnb[b]);
mapper.insertBOShopClause(dm);
}
}
}
if (!ObjectUtils.isEmpty(vo.getBsnmInnbArr())) {
String[] bsnmInnb = vo.getBsnmInnbArr();
String[] bsnmDvCd = vo.getBsnmDvCdArr();
for (int c = 0; c < bsnmInnb.length; c++) {
dm.put("bsnmInnb", bsnmInnb[c]);
dm.put("bsnmDvCd", bsnmDvCd[c]);
mapper.insertBOShopCompany(dm);
}
}
}
message.put("result", "success");
message.put("sopmalCd", sopmalCd);
} catch (WnbtRestException wre){
throw new WnbtRestException(wre.getMessage());
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return message;
}
private void setBOMaSopmalVO(BOMaSopmalVO vo) {
if(!StringUtil.isEmpty(vo.getSmsAtmcSndngLmttBgntme()))
vo.setSmsAtmcSndngLmttBgntme(vo.getSmsAtmcSndngLmttBgntme().replaceAll(":", ""));
if(!StringUtil.isEmpty(vo.getSmsAtmcSndngLmttEndtme()))
vo.setSmsAtmcSndngLmttEndtme(vo.getSmsAtmcSndngLmttEndtme().replaceAll(":", ""));
if(!StringUtil.isEmpty(vo.getMlgHoldUseAmt()))
vo.setMlgHoldUseAmt(StringUtil.removeCommaChar(vo.getMlgHoldUseAmt()));
if(!StringUtil.isEmpty(vo.getMlgSetleAmtUseAmt()))
vo.setMlgSetleAmtUseAmt(StringUtil.removeCommaChar(vo.getMlgSetleAmtUseAmt()));
if(!StringUtil.isEmpty(vo.getMlgMummUseAmt()))
vo.setMlgMummUseAmt(StringUtil.removeCommaChar(vo.getMlgMummUseAmt()));
if(!StringUtil.isEmpty(vo.getMlgMxmmUseAmt()))
vo.setMlgMxmmUseAmt(StringUtil.removeCommaChar(vo.getMlgMxmmUseAmt()));
if(!StringUtil.isEmpty(vo.getInstcSleMntrngTrgetCnt()))
vo.setInstcSleMntrngTrgetCnt(StringUtil.removeCommaChar(vo.getInstcSleMntrngTrgetCnt()));
if(!StringUtil.isEmpty(vo.getInstcSleMntrngDeCnt()))
vo.setInstcSleMntrngDeCnt(StringUtil.removeCommaChar(vo.getInstcSleMntrngDeCnt()));
if(!StringUtil.isEmpty(vo.getOrdrCartMntncPd()))
vo.setOrdrCartMntncPd(StringUtil.removeCommaChar(vo.getOrdrCartMntncPd()));
if(!StringUtil.isEmpty(vo.getOrdrCanclAtmcProcsPd()))
vo.setOrdrCanclAtmcProcsPd(StringUtil.removeCommaChar(vo.getOrdrCanclAtmcProcsPd()));
if(!StringUtil.isEmpty(vo.getOrdrAtmcPurchsDcsnPd()))
vo.setOrdrAtmcPurchsDcsnPd(StringUtil.removeCommaChar(vo.getOrdrAtmcPurchsDcsnPd()));
}
/**
* 회원 등급 목록
* @param dm
*/
public List<DataMap> selectBOMbrGradList() {
List<DataMap> mbrGradList = new ArrayList<>();
DataMap dm = new DataMap();
mbrGradList = mapper.selectBOMbrGradList(dm);
return mbrGradList;
}
/**
* 테마 목록
* @param dm
*/
public List<DataMap> selectBOThemeList() {
List<DataMap> themeList = new ArrayList<>();
DataMap dm = new DataMap();
themeList = mapper.selectBOThemeList(dm);
return themeList;
}
/**
* 사업자 목록
* @param dm
*/
public List<DataMap> selectBOCompanyList(DataMap dm) {
List<DataMap> companyList = new ArrayList<>();
companyList = mapper.selectBOCompanyList(dm);
return companyList;
}
/**
* 모든 사업자 목록
*/
public List<DataMap> selectBOCompanyAllList() {
List<DataMap> companyAllList = new ArrayList<>();
companyAllList = mapper.selectBOCompanyAllList();
return companyAllList;
}
/**
* 결제 수단 목록
* @param dm
*/
public List<DataMap> selectBOpayInfoList(DataMap payData) {
List<DataMap> paymentMethodList = new ArrayList<>();
paymentMethodList = mapper.selectBOpayInfoList(payData);
return paymentMethodList;
}
/**
* 이용약관 목록
* @param dm
*/
public List<DataMap> selectBOClauseList(DataMap dm) {
List<DataMap> clauseList = new ArrayList<>();
clauseList = mapper.selectBOClauseList(dm);
return clauseList;
}
/**
* 선택 약관 내용 조회
*/
public List<DataMap> selectBOSubClauseList(BOMaSopmalVO vo) {
List<DataMap> clauseList = new ArrayList<>();
DataMap dm = new DataMap();
dm.put("stplatDvCd", vo.getStplatDvCd());
clauseList = mapper.selectBOClauseList(dm);
return clauseList;
}
/**
* 공통 코드
*/
public List<DataMap> selectCommCode(BOMaComncdVO vo) {
List<DataMap> codeList = new ArrayList<>();
codeList = codeMapper.selectBOCommcdDetailList(vo);
return codeList;
}
/**
* 약관 공통 코드
*/
public List<DataMap> selectBOCommcdClauseDetailList(DataMap dm) {
List<DataMap> codeClauseList = new ArrayList<>();
codeClauseList = mapper.selectBOCommcdClauseDetailList(dm);
return codeClauseList;
}
public List<DataMap> selectBOBusinessInformation(BOMaSopmalVO vo) {
List<DataMap> list = new ArrayList<>();
DataMap business = new DataMap();
DataMap dm = new DataMap();
dm.put("bsnmInnb", vo.getBsnmInnb());
business = mapper.selectBOBusinessInformation(dm);
list.add(business);
return list;
}
public List<DataMap> selectBOClauseInformation(BOMaSopmalVO vo) {
List<DataMap> clauseList = new ArrayList<>();
clauseList = mapper.selectBOStplatDtl(vo);
return clauseList;
}
public String selectBOSopmalCdduplicat(BOMaSopmalVO vo) {
int result = mapper.selectBOSopmalCdduplicat(vo.getSopmalCd());
String message = "possible";
if (result > 0) {
message = "impossible";
}
return message;
}
/**
* 엑셀 다운로드
*/
public List<DataMap> selectBOSopmalExcelList(BOMaSopmalVO vo) {
List<DataMap> sopmalLsit = new ArrayList<>();
sopmalLsit = mapper.selectBOSopmalExcelList(vo);
return sopmalLsit;
}
/**
* 쇼핑몰 설정목록 조회
* @param paramVO 파라미터VO
* @return List<?> 쇼핑몰 설정 목록
*/
public List<?> selectBOSopmalSetupList(BOShopSetupVO vo) {
List<?> sopmalSetupLsit = new ArrayList<>();
sopmalSetupLsit = mapper.selectBOSopmalSetupList(vo);
return sopmalSetupLsit;
}
/**
* 쇼핑몰 설정 저장
* @param paramVO 파라미터VO
*/
public void saveBOSopmalSetup(BOShopSetupVO vo) {
if(StringUtil.isEmpty(vo.getSetupId())) {
vo.setSetupId(mapper.selectBOSopmalSetupId(vo));
mapper.insertBOSopmalSetup(vo);
} else {
mapper.updateBOSopmalSetup(vo);
}
}
/**
* 쇼핑몰 설정 삭제
* @param paramVO 파라미터VO
*/
public void deleteBOSopmalSetup(BOShopSetupVO vo) {
mapper.deleteBOSopmalSetup(vo);
}
/**
* 쇼핑몰 설정목록 조회
* @return List<?> 쇼핑몰 설정 목록
*/
public List<?> selectBOSopmalSetupCnList() {
List<?> sopmalSetupLsit = new ArrayList<>();
sopmalSetupLsit = mapper.selectBOSopmalSetupCnList();
log.debug("sopmalSetupLsit = {}", sopmalSetupLsit);
return sopmalSetupLsit;
}
/**
* 쇼핑몰별 회원등급 조회
* @param vo
* @return
*/
public DataMap selectBOMbrGradGroupByShop(BOMaSopmalVO vo) {
DataMap data = mapper.selectBOMbrGradGroupByShop(vo);
return data;
}
/**
* 쇼핑몰별 네이버페이사용여부 조회
* @param vo
* @return
*/
public String selectBONpayUseAtByShop(String sopmalCd) {
String useAt = "";
Integer result = mapper.selectBONpayUseAtByShop(sopmalCd);
if (result > 0) {
useAt = "Y";
} else {
useAt = "N";
}
return useAt;
}
/**
* 쇼핑몰 외부연동 조회
* @param vo
* @return
*/
public DataMap selectBOExtrlByShop(BOMaSopmalVO vo) {
DataMap extrlByShop = new DataMap();
extrlByShop.put("sopmalCd", vo.getSopmalCd());
extrlByShop.put("extrlSystem", "01");
String kakao = mapper.selectBOExtrlByShop(extrlByShop);
extrlByShop.put("kakao", kakao);
extrlByShop.put("extrlSystem", "02");
String naver = mapper.selectBOExtrlByShop(extrlByShop);
extrlByShop.put("naver", naver);
return extrlByShop;
}
/**
* 외부연동 목록 조회
* @return
*/
public DataMap selectBOExtrlList() {
DataMap extrlList = new DataMap();
BOMaExtlinkVO vo = new BOMaExtlinkVO();
// 카카오 리스트
vo.setSrchExtrlSystem("01");
List<DataMap> kakao = extrlMapper.selectBOextlinkListNotLimit(vo);
extrlList.put("kakao", kakao);
// 네이버 리스트
vo.setSrchExtrlSystem("02");
List<DataMap> naver = extrlMapper.selectBOextlinkListNotLimit(vo);
extrlList.put("naver", naver);
return extrlList;
}
public DataMap selectBOShopPayLinkList(BOMaSopmalVO vo) {
DataMap payLinkList = mapper.selectBOShopPayLinkList(vo);
return payLinkList;
}
private DataMap ynSetParam(String[] setleNmArr) {
DataMap dm = new DataMap();
Map<String, String> mapping = new HashMap<>();
mapping.put("gcpayCard", "GCPAY_CARD_USE_AT");
mapping.put("gcpayAcntnb", "GCPAY_ACNTNB_USE_AT");
mapping.put("card", "CARD_USE_AT");
mapping.put("rltmAcnt", "RLTM_ACNT_USE_AT");
mapping.put("virtlAcnt", "VIRTL_ACNT_USE_AT");
mapping.put("virtlAcntEscw", "VIRTL_ACNT_ESCW_USE_AT");
mapping.put("payco", "PAYCO_USE_AT");
mapping.put("nbkk", "NBKK_USE_AT");
mapping.put("tpay", "TPAY_USE_AT");
mapping.put("memor", "MEMOR_USE_AT");
mapping.put("npay", "NPAY_USE_AT");
mapping.put("kpay", "KPAY_USE_AT");
// 모든 매핑된 값의 기본값을 "N"으로 설정
for (String key : mapping.values()) {
dm.put(key, "N");
}
if(setleNmArr != null){
for (String setleNm : setleNmArr) {
if (mapping.containsKey(setleNm)) {
dm.put(mapping.get(setleNm), "Y");
}
}
}
return dm;
}
public List<Map<String, Object>> parseStringToListMap(String input) {
List<Map<String, Object>> list = new ArrayList<>();
if (input.startsWith(",")) {
input = input.substring(1);
}
String[] items = input.split("(?<=\\}),(?=\\{)");
for (String item : items) {
item = item.replaceAll("[{}]", "").trim();
String[] keyValuePairs = item.split(", ");
Map<String, Object> map = new HashMap<>();
for (String pair : keyValuePairs) {
String[] keyValue = pair.split("=", 2);
if (keyValue.length == 2) {
map.put(keyValue[0].trim(), keyValue[1].trim().isEmpty() ? null : keyValue[1].trim());
} else if (keyValue.length == 1) {
map.put(keyValue[0].trim(), null);
}
}
list.add(map);
}
return list;
}
public Map<String, Object> selectBOSopmalFooterInfo(BOMaSopmalVO vo) {
Map<String, Object> content = new HashMap<>();
//패밀리 사이트 조회
List<DataMap> familySite = new ArrayList<>();
familySite = mapper.selectBOSopmalUpdtFormSitelList(vo);
//사업자 정보 조회(판매사)
DataMap sleBsnmInfo = new DataMap();
DataMap sleBsnmData = new DataMap();
sleBsnmData.put("sopmalCd",vo.getSopmalCd());
sleBsnmData.put("bsnmDvCd","01");
sleBsnmInfo = mapper.selectBOBusinessInformation(sleBsnmData);
//사업자 정보 조회(운영사)
DataMap operBsnmInfo = new DataMap();
DataMap operBsnmData = new DataMap();
operBsnmData.put("sopmalCd",vo.getSopmalCd());
operBsnmData.put("bsnmDvCd","02");
operBsnmInfo = mapper.selectBOBusinessInformation(operBsnmData);
//쇼핑몰 정보 조회
List<DataMap> sopmalList = new ArrayList<>();
sopmalList = mapper.selectBOSopmalUpdtForm(vo);
DataMap sopmalInfo = new DataMap();
if(!CollectionUtils.isEmpty(sopmalList)){
sopmalInfo = sopmalList.get(0);
}
// 푸터 디자인 설정 유무
DataMap designSetup = mapper.selectBODesignSetup(vo);
// log.debug("designSetup = {}", designSetup);
// log.debug("operBsnmInfo = {}", operBsnmInfo);
// log.debug("sleBsnmInfo = {}", sleBsnmInfo);
//하단 스크립트 설정 조회
DataMap scriptSetup = mapper.selectBODesignScriptSetup(vo);
content.put("scriptSetup",scriptSetup);
content.put("familySite",familySite);
content.put("sleBsnmInfo",sleBsnmInfo);
content.put("operBsnmInfo",operBsnmInfo);
content.put("sopmalInfo",sopmalInfo);
content.put("designSetup", designSetup);
return content;
}
public String selectBORejectTelnb(String rejectTelnb) {
String rejectTelnbSopmalCd = mapper.selectBORejectTelnb(rejectTelnb);
return rejectTelnbSopmalCd;
}
/**
* 회원가입 정보 조회
* @param vo
* @return
*/
public DataMap selectBOJoinInfo(BOMaSopmalVO vo) {
return mapper.selectBOJoinInfo(vo);
}
/**
* 치환코드 쇼핑몰, 사업자 정보 조회
* @param vo
* @return
*/
public DataMap selectBOCommonSubstStoreInfo(String sopmalCd) {
DataMap sopInfo = new DataMap();
sopInfo = mapper.selectBOCommonSubstStoreInfo(sopmalCd);
return sopInfo;
}
/**
* 해당 쇼핑몰 쇼핑몰 타입별 쇼핑몰 목록 조회
* 독립몰 -> 자신 , 통합몰 -> 통합몰 목록
* @param vo
* @return List<DataMap>
*/
public List<DataMap> selectSopmalGroupList(BOMaSopmalVO vo) {
List<DataMap> sopmalList = new ArrayList<>();
sopmalList = mapper.selectSopmalGroupList(vo);
return sopmalList;
}
public Shop selectSopmalInfo(String sopmalCd){
return mapper.selectSopmalInfo(sopmalCd);
}
}

View File

@@ -0,0 +1,479 @@
package com.wb.domainserver.domain.admin.store.sopmal.vo;
import java.util.List;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import com.wb.domainserver.util.dataaccess.DataMap;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 쇼핑몰 VO
*
* @author 박철민
* @since 2023-12-15
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2023-12-15 박철민 최초 생성
* 2024-02-05 최범식 수정
*
* </pre>
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class BOMaSopmalVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/** 메타 타이틀 */
private String metaSj;
/** 메타 키워드 */
private String metaKwrd;
/** 메타 설명 */
private String metaDc;
/** 메타 상품 여부 */
private String metaGoodsAt;
/** 메타 상품 설명 */
private String metaGoodsDc;
/** 메타 상품 타이틀 */
private String metaGoodsSj;
/** 메타 상품 키워드 */
private String metaGoodsKwrd;
/*대표자 이메일*/
private String reprsntEmail;
/*대표자 전화번호*/
private String reprsntTelnb;
/** fm_shop */
/** 쇼핑몰코드 */
private String sopmalCd;
/** 회원등급그룹 고유번호 */
private String mbrGradGroupInnb;
/** 테마 고유번호 */
private String themaInnb;
/** 쇼핑몰명 */
private String sopmalNm;
/** 자사몰, 독립몰 */
private String sopmalTyCd;
/** PC도메인주소 */
private String pcDomnAdres;
/** 모바일도메인주소 */
private String mblDomnAdres;
/** 파비콘경로 */
private String fviconCours;
/** 대체URL */
private String rplcUrl;
/** 이메일 자동발송 발신주소 */
private String emailAtmcSndngDsptchAdres;
/** SMS 자동발송 발신번호 */
private String smsAtmcSndngDsptchNb;
/** SMS 자동발송제한 시작시간 */
private String smsAtmcSndngLmttBgntme;
/** SMS 자동발송제한 종료시간 */
private String smsAtmcSndngLmttEndtme;
/** 운영여부 */
private String operAt;
/** 외부 연동 */
/** 카카오 로그인 */
private String kakaoIntrlckAt;
/** 네이버 로그인 */
private String naverIntrlckAt;
/** 네이버 결제 */
private String naverPurchsAt;
/** 주문 장바구니 보존기간 */
private String ordrCartMntncPd;
/** 주문 무효 자동실행 여부 */
private String ordrCanclAtmcExecutAt;
/** 주문 무효 자동처리기간 */
private String ordrCanclAtmcProcsPd;
/** 주문 구매확정 여부 */
private String ordrPurchsrDcsnAt;
/** 주문 자동 구매확정 기간 */
private String ordrAtmcPurchsDcsnPd;
/** 마일리지 보유 사용 금액 */
private String mlgHoldUseAmt;
/** 마일리지 결제금액 사용 금액 */
private String mlgSetleAmtUseAmt;
/** 마일리지 최소 사용 금액 */
private String mlgMummUseAmt;
/** 마일리지 최대 사용 구분(MLG_MXMM_USE_DV) */
private String mlgMxmmUseDv;
/** 마일리지 최대 사용 금액 */
private String mlgMxmmUseAmt;
/** 부정판매 모니터링 여부 */
private String instcSleMntrngAt;
/** 부정판매 모니터링 대상건수 */
private String instcSleMntrngTrgetCnt;
/** 부정판매 모니터링 일수 */
private String instcSleMntrngDeCnt;
/** 고객센터 전화주문가능 여부 */
private String cscTelnbOrdrPosblAt;
/** 고객센터 평일 근무시간 */
private String cscWkdayWorkTme;
/** 고객센터 점심시간 */
private String cscLunchTme;
/** 고객센터 휴무일 */
private String cscRstde;
/** 고객센터 전화번호 */
private String cscTelnb;
/** 수신거부 전화번호 */
private String rejectTelnb;
/** AS센터 운영 여부 */
private String ascOperAt;
/** AS센터 업체명 */
private String ascEntrpsNm;
/** AS센터 평일근무시간 */
private String ascWkdayWorkTme;
/** AS센터 점심시간 */
private String ascLunchTme;
/** AS센터 우편번호 */
private String ascZip;
/** AS센터 주소 */
private String ascAdres;
/** AS센터 상세 주소 */
private String ascDtlAdres;
/** 임시 */
/** 외부연동 */
private String externalLinkages;
private String[] externalLinkageArr;
/** fm_shop_family_site */
/** 패밀리사이트 고유번호 */
private String familySiteInnb;
/** 패밀리사이트명 */
private String familySiteNm;
private String[] familySiteNmArr;
/** 패밀리사이트URL */
private String familySiteUrl;
private String[] familySiteUrlArr;
/** fm_shop_company */
/** 쇼핑몰사업자고유번호 */
private String sopmalBsnmInnb;
/** 사업자 고유번호 */
private String bsnmInnb;
private String[] bsnmInnbArr;
/** 코드CGN007 : 판매사 | 운영사 */
private String bsnmDvCd;
private String[] bsnmDvCdArr;
private String bsnmDvCdNm;
/** fm_company */
/** 사업자명 */
private String bsnmNm;
/** 업태내용 */
private String bizcndCn;
/** 종목내용 */
private String itemCn;
/** 사업자등록번호 */
private String bizrnb;
/** 통신판매업신고번호 */
private String mobDclNb;
/** 대표자명 */
private String reprsntvnm;
/** 개인정보보호책임자명 */
private String indvdlinfoPrtcRspnberNm;
/** 전화번호 */
private String telnb;
/** 팩스번호 */
private String fxnb;
/** 이메일 */
private String email;
/** 영업신고번호 */
private String bsnDclNb;
/** 우편번호 */
private String zip;
/** 지번주소 */
private String lnbAdres;
/** 도로명주소 */
private String rnmAdres;
/** 상세주소 */
private String dtlAdres;
/** GC_PAY_LINK */
/** 결제정보 고유번호 */
private Integer setleSetupInnb;
/** 결제설정유형코드 */
private String setleSetupTyCd;
/** KCP결제 상점ID */
private String kcpMid;
/** KCP결제_인증서KEY */
private String kcpClntKey;
/** KCP결제_개인키KEY */
private String kcpSecretKey;
/** KCP결제_개인키비밀번호 */
private String kcpPublicKey;
/** KCP수기결제 상점ID */
private String kcpKeyinMid;
/** KCP수기결제_인증서KEY */
private String kcpKeyinClntKey;
/** KCP수기결제_개인키KEY */
private String kcpKeyinSecretKey;
/** KCP수기결제_개인키비밀번호 */
private String kcpKeyinPublicKey;
/** 토스결제 상점ID */
private String tossMid;
/** 토스결제 클라이언트KEY */
private String tossClntKey;
/** 토스결제 시크릿KEY */
private String tossSecretKey;
/** 토스결제_개인키비밀번호 */
private String tossPublicKey;
/** 토스수기결제 상점ID */
private String tossKeyinMid;
/** 토스수기결제 클라이언트KEY */
private String tossKeyinClntKey;
/** 토스수기결제 시크릿KEY */
private String tossKeyinSecretKey;
/** 토스수기결제_개인키비밀번호 */
private String tossKeyinPublicKey;
/** 브랜드페이 상점ID */
private String bpayMid;
/** 브랜드페이_클라이언트KEY */
private String bpayClntKey;
/** 브랜드페이_시크릿KEY */
private String bpaySecretKey;
/** 브랜드페이_개인키비밀번호 */
private String bpayPublicKey;
/** EASYPAY 상점ID */
private String easypayMid;
/** EASYPAY 클라이언트 KEY */
private String easypayClntKey;
/** EASYPAY 시크릿 KEY */
private String easypaySecretKey;
/** EASYPAY 머트 키 */
private String easypayPublicKey;
/** 토스/토스페이 결제 상점ID(OLD) */
private String oldTossMid;
/** 토스/토스페이 결제 클라이언트 KEY(OLD) */
private String oldTossClntKey;
/** 토스/토스페이 결제 시크릿 KEY(OLD) */
private String oldTossSecretKey;
/** 토스/토스페이 결제 머트 키(OLD) */
private String oldTossPublicKey;
/** 입금기한 */
private String dueDt;
/** gc_pay_info */
/** 쇼핑몰결제정보 고유번호 */
private Integer setleInfoInnb;
/** 결제플랫폼유형코드 */
private String setlePltfomTyCd;
/** gcpay 카드간편결제 사용여부 */
private String gcpayCardUseAt;
/** gcpay 계좌간편결제 사용여부 */
private String gcpayAcntnbUseAt;
/** 신용카드 사용여부 */
private String cardUseAt;
/** 실시간계좌이체 사용여부 */
private String rltmAcntUseAt;
/** 가상계좌 사용여부 */
private String virtlAcntUseAt;
/** 가상계좌(에스크로) 사용여부 */
private String virtlAcntEscwUseAt;
/** 페이코 사용여부 */
private String paycoUseAt;
/** 무통장입금 사용여부 */
private String nbkkUseAt;
/** 토스페이 사용여부 */
private String tpayUseAt;
/** 수기결제 사용여부 */
private String memorUseAt;
/** 네이버페이 사용여부 */
private String npayUseAt;
/** 카카오페이 사용여부 */
private String kpayUseAt;
/** fm_shop_clause */
/** 쇼핑몰약관고유번호 */
private String sopmalStplatInnb;
/** 약관 고유번호 */
private String stplatInnb;
private String[] stplatInnbArr;
/** 약관 코드 */
private String StplatDvCd;
/** fm_shop_mileage_setup */
/** 마일리지적립비율 */
private String mlgAccmlRt;
/** 마일리지적립금액 */
private String mlgAccmlmnyAmt;
/** 마일리지최대적립금액 */
private String mlgMxmmAccmlmnyAmt;
/** 마일리지유효월수 */
private String mlgValidMtCnt;
/** 검색 */
/** 검색타입 */
private String srchType;
/** 검색어 */
private String srchStr;
/** 쇼핑몰 구분 */
private String srchSopmalTyCd;
/** 사업자 */
private String srchBsnmInnb;
/** 상태 */
private String srchOperAt;
/*** 공통코드 */
private DataMap codeMap;
private List<DataMap> codeList;
/** pc 결제정보 List */
private String pcSetleTypeList;
/** mobile 결제정보 List */
private String mobileSetleTypeList;
/** pc 결제정보 Innb */
private String pcSetleInfoInnb;
/** mobile 결제정보 Innb */
private String mobileSetleInfoInnb;
/** 회원가입 안내 타이틀 */
private String joinGuidanceSj;
/** 회원가입 안내문구 */
private String joinGuidanceWords;
/** 회원가입 주요혜택 */
private String joinBnef;
/** 회원가입 주요문구 */
private String joinComptWords;
/** 회원등급 정보 */
private String mbrGradGroupNm;
}

View File

@@ -0,0 +1,41 @@
package com.wb.domainserver.domain.admin.store.sopmal.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 쇼핑몰 설정을 관리하는 VO
*
* @author 박철민
* @since 2023-12-15
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2023-12-15 박철민 최초 생성
* 2024-02-05 최범식 수정
*
* </pre>
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class BOMlgUseSetupVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/** 쇼핑몰 코드 */
private String sopmalCd;
/** 설정구분코드 */
private String setupDvCd;
/** 설정ID */
private String setupId;
/** 설정내용 */
private String setupCn;
}

View File

@@ -0,0 +1,41 @@
package com.wb.domainserver.domain.admin.store.sopmal.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 쇼핑몰 설정을 관리하는 VO
*
* @author 박철민
* @since 2023-12-15
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2023-12-15 박철민 최초 생성
* 2024-02-05 최범식 수정
*
* </pre>
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class BOOrderSetupVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/** 쇼핑몰 코드 */
private String sopmalCd;
/** 설정구분코드 */
private String setupDvCd;
/** 설정ID */
private String setupId;
/** 설정내용 */
private String setupCn;
}

View File

@@ -0,0 +1,35 @@
package com.wb.domainserver.domain.admin.store.sopmal.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 쇼핑몰 VO
*
* @author 박철민
* @since 2023-12-15
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2023-12-15 박철민 최초 생성
* 2024-02-05 최범식 수정
*
* </pre>
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class BOSetleSetupVO extends AbstractVO {
private static final long serialVersionUID = 1L;
}

View File

@@ -0,0 +1,40 @@
package com.wb.domainserver.domain.admin.store.sopmal.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 쇼핑몰 설정을 관리하는 VO
*
* @author 박철민
* @since 2023-12-15
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2023-12-15 박철민 최초 생성
*
* </pre>
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class BOShopSetupVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/** 쇼핑몰 코드 */
private String sopmalCd;
/** 설정구분코드 */
private String setupDvCd;
/** 설정ID */
private String setupId;
/** 설정내용 */
private String setupCn;
}

View File

@@ -0,0 +1,478 @@
package com.wb.domainserver.domain.admin.store.sopmal.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
import java.util.Map;
@Data
@EqualsAndHashCode(callSuper = false)
public class MaSopmalVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/** 메타 타이틀 */
private String metaSj;
/** 메타 키워드 */
private String metaKwrd;
/** 메타 설명 */
private String metaDc;
/** 메타 상품 여부 */
private String metaGoodsAt;
/** 메타 상품 설명 */
private String metaGoodsDc;
/** 메타 상품 타이틀 */
private String metaGoodsSj;
/** 메타 상품 키워드 */
private String metaGoodsKwrd;
/*대표자 이메일*/
private String reprsntEmail;
private String reprsntId;
private String reprsntDomain;
/*대표자 전화번호*/
private String reprsntTelnb;
/** fm_shop */
/** 쇼핑몰코드 */
private String sopmalCd;
/** 회원등급그룹 고유번호 */
/** 7.2 삭제 */
// @NotBlank(message = "회원등급그룹")
// private String mbrGradGroupInnb;
/** 테마 고유번호 */
@NotBlank(message = "테마")
private String themaInnb;
/** 쇼핑몰명 */
@NotBlank(message = "쇼핑몰명")
private String sopmalNm;
/** 자사몰, 독립몰 */
@NotBlank(message = "구분")
private String sopmalTyCd;
/** PC도메인주소 */
@NotBlank(message = "PC도메인주소")
private String pcDomnAdres;
/** 모바일도메인주소 */
@NotBlank(message = "모바일도메인주소")
private String mblDomnAdres;
/** 파비콘경로 */
@NotBlank(message = "파비콘경로")
private String fviconCours;
/** 대체URL */
@NotBlank(message = "대체URL")
private String rplcUrl;
/** 이메일 자동발송 발신주소 */
@NotBlank(message = "이메일 자동발송 발신주소")
private String emailAtmcSndngDsptchAdres;
/** SMS 자동발송 발신번호 */
@NotBlank(message = "SMS 자동발송 발신번호")
private String smsAtmcSndngDsptchNb;
/** SMS 자동발송제한 시작시간 */
@NotBlank(message = "SMS 자동발송제한 시작시간")
private String smsAtmcSndngLmttBgntme;
/** SMS 자동발송제한 종료시간 */
@NotBlank(message = "SMS 자동발송제한 종료시간")
private String smsAtmcSndngLmttEndtme;
/** 운영여부 */
@NotBlank(message = "운영여부")
private String operAt;
/** 외부 연동 */
/** 카카오 로그인 */
private String kakaoIntrlckAt;
/** 네이버 로그인 */
private String naverIntrlckAt;
/** 네이버 결제 */
private String naverPurchsAt;
/** 주문 장바구니 보존기간 */
private String ordrCartMntncPd;
/** 주문 무효 자동실행 여부 */
private String ordrCanclAtmcExecutAt;
/** 주문 무효 자동처리기간 */
private String ordrCanclAtmcProcsPd;
/** 주문 구매확정 여부 */
private String ordrPurchsrDcsnAt;
/** 주문 자동 구매확정 기간 */
private String ordrAtmcPurchsDcsnPd;
/** 마일리지 보유 사용 금액 */
private String mlgHoldUseAmt;
/** 마일리지 결제금액 사용 금액 */
private String mlgSetleAmtUseAmt;
/** 마일리지 최소 사용 금액 */
private String mlgMummUseAmt;
/** 마일리지 최대 사용 구분(MLG_MXMM_USE_DV) */
private String mlgMxmmUseDv;
/** 마일리지 최대 사용 금액 */
private String mlgMxmmUseAmt;
/** 부정판매 모니터링 여부 */
private String instcSleMntrngAt;
/** 부정판매 모니터링 대상건수 */
private String instcSleMntrngTrgetCnt;
/** 부정판매 모니터링 일수 */
private String instcSleMntrngDeCnt;
/** 고객센터 전화주문가능 여부 */
private String cscTelnbOrdrPosblAt;
/** 고객센터 평일 근무시간 */
private String cscWkdayWorkTme;
/** 고객센터 점심시간 */
private String cscLunchTme;
/** 고객센터 휴무일 */
private String cscRstde;
/** 고객센터 전화번호 */
private String cscTelnb;
/** 수신거부 전화번호 */
private String rejectTelnb;
/** AS센터 운영 여부 */
private String ascOperAt;
/** AS센터 업체명 */
private String ascEntrpsNm;
/** AS센터 평일근무시간 */
private String ascWkdayWorkTme;
/** AS센터 점심시간 */
private String ascLunchTme;
/** AS센터 우편번호 */
private String ascZip;
/** AS센터 주소 */
private String ascAdres;
/** AS센터 상세 주소 */
private String ascDtlAdres;
/** 임시 */
/** 외부연동 */
private String externalLinkages;
private String[] externalLinkageArr;
/** fm_shop_family_site */
/** 패밀리사이트 고유번호 */
private String familySiteInnb;
/** 패밀리사이트명 */
private String familySiteNm;
private String[] familySiteNmArr;
/** 패밀리사이트URL */
private String familySiteUrl;
private String[] familySiteUrlArr;
/** fm_shop_company */
/** 쇼핑몰사업자고유번호 */
private String sopmalBsnmInnb;
/** 사업자 고유번호 */
private String bsnmInnb;
private String[] bsnmInnbArr;
/** 코드CGN007 : 판매사 | 운영사 */
private String bsnmDvCd;
private String[] bsnmDvCdArr;
private String bsnmDvCdNm;
/** fm_company */
/** 사업자명 */
private String bsnmNm;
/** 업태내용 */
private String bizcndCn;
/** 종목내용 */
private String itemCn;
/** 사업자등록번호 */
private String bizrnb;
/** 통신판매업신고번호 */
private String mobDclNb;
/** 대표자명 */
private String reprsntvnm;
/** 개인정보보호책임자명 */
private String indvdlinfoPrtcRspnberNm;
/** 전화번호 */
private String telnb;
/** 팩스번호 */
private String fxnb;
/** 이메일 */
private String email;
private String id;
private String domain;
/** 영업신고번호 */
private String bsnDclNb;
/** 우편번호 */
private String zip;
/** 지번주소 */
private String lnbAdres;
/** 도로명주소 */
private String rnmAdres;
/** 상세주소 */
private String dtlAdres;
/** GC_PAY_LINK */
/** 결제정보 고유번호 */
private Integer setleSetupInnb;
/** 결제설정유형코드 */
private String setleSetupTyCd;
/** KCP결제 상점ID */
private String kcpMid;
/** KCP결제_인증서KEY */
private String kcpClntKey;
/** KCP결제_개인키KEY */
private String kcpSecretKey;
/** KCP결제_개인키비밀번호 */
private String kcpPublicKey;
/** KCP수기결제 상점ID */
private String kcpKeyinMid;
/** KCP수기결제_인증서KEY */
private String kcpKeyinClntKey;
/** KCP수기결제_개인키KEY */
private String kcpKeyinSecretKey;
/** KCP수기결제_개인키비밀번호 */
private String kcpKeyinPublicKey;
/** 토스결제 상점ID */
private String tossMid;
/** 토스결제 클라이언트KEY */
private String tossClntKey;
/** 토스결제 시크릿KEY */
private String tossSecretKey;
/** 토스결제_개인키비밀번호 */
private String tossPublicKey;
/** 토스수기결제 상점ID */
private String tossKeyinMid;
/** 토스수기결제 클라이언트KEY */
private String tossKeyinClntKey;
/** 토스수기결제 시크릿KEY */
private String tossKeyinSecretKey;
/** 토스수기결제_개인키비밀번호 */
private String tossKeyinPublicKey;
/** 브랜드페이 상점ID */
private String bpayMid;
/** 브랜드페이_클라이언트KEY */
private String bpayClntKey;
/** 브랜드페이_시크릿KEY */
private String bpaySecretKey;
/** 브랜드페이_개인키비밀번호 */
private String bpayPublicKey;
/** EASYPAY 상점ID */
private String easypayMid;
/** EASYPAY 클라이언트 KEY */
private String easypayClntKey;
/** EASYPAY 시크릿 KEY */
private String easypaySecretKey;
/** EASYPAY 머트 키 */
private String easypayPublicKey;
/** 토스/토스페이 결제 상점ID(OLD) */
private String oldTossMid;
/** 토스/토스페이 결제 클라이언트 KEY(OLD) */
private String oldTossClntKey;
/** 토스/토스페이 결제 시크릿 KEY(OLD) */
private String oldTossSecretKey;
/** 토스/토스페이 결제 머트 키(OLD) */
private String oldTossPublicKey;
/** 입금기한 */
private String dueDt;
/** gc_pay_info */
/** 쇼핑몰결제정보 고유번호 */
private Integer setleInfoInnb;
/** 결제플랫폼유형코드 */
private String setlePltfomTyCd;
/** gcpay 카드간편결제 사용여부 */
private String gcpayCardUseAt;
/** gcpay 계좌간편결제 사용여부 */
private String gcpayAcntnbUseAt;
/** 신용카드 사용여부 */
private String cardUseAt;
/** 실시간계좌이체 사용여부 */
private String rltmAcntUseAt;
/** 가상계좌 사용여부 */
private String virtlAcntUseAt;
/** 가상계좌(에스크로) 사용여부 */
private String virtlAcntEscwUseAt;
/** 페이코 사용여부 */
private String paycoUseAt;
/** 무통장입금 사용여부 */
private String nbkkUseAt;
/** 토스페이 사용여부 */
private String tpayUseAt;
/** 수기결제 사용여부 */
private String memorUseAt;
/** 네이버페이 사용여부 */
private String npayUseAt;
/** 카카오페이 사용여부 */
private String kpayUseAt;
/** fm_shop_clause */
/** 쇼핑몰약관고유번호 */
private String sopmalStplatInnb;
/** 약관 고유번호 */
private String stplatInnb;
private String[] stplatInnbArr;
/** 약관 코드 */
private String StplatDvCd;
/** fm_shop_mileage_setup */
/** 마일리지적립비율 */
private String mlgAccmlRt;
/** 마일리지적립금액 */
private String mlgAccmlmnyAmt;
/** 마일리지최대적립금액 */
private String mlgMxmmAccmlmnyAmt;
/** 마일리지유효월수 */
private String mlgValidMtCnt;
/** 검색 */
/** 검색타입 */
private String srchType;
/** 검색어 */
private String srchStr;
/** 쇼핑몰 구분 */
private String srchSopmalTyCd;
/** 사업자 */
private String srchBsnmInnb;
/** 상태 */
private String srchOperAt;
/** 공통코드 */
private Map<String, Object> codeMap;
private List<Map<String, Object>> codeList;
/** 중복 체크 및 정합성검사 용 */
private String isChkdDup;
private String isChkdStplat;
/** pc 결제정보 List */
private String pcSetleTypeList;
/** mobile 결제정보 List */
private String mobileSetleTypeList;
/** pc 결제정보 Innb */
private String pcSetleInfoInnb;
/** mobile 결제정보 Innb */
private String mobileSetleInfoInnb;
/** 회원가입 안내 타이틀 */
private String joinGuidanceSj;
/** 회원가입 안내문구 */
private String joinGuidanceWords;
/** 회원가입 주요혜택 */
private String joinBnef;
/** 회원가입 완료문구 */
private String joinComptWords;
}

View File

@@ -0,0 +1,26 @@
package com.wb.domainserver.domain.admin.store.sopmal.vo;
import lombok.Data;
import lombok.EqualsAndHashCode;
/*로그인시 로그인 화면 관련 정보 조회용 */
@Data
@EqualsAndHashCode(callSuper=false)
public class Shop {
private String sopmalCd;
private String sopmalNm;
private String kakaoIntrlckAt;
private String naverIntrlckAt;
private String topSysFilNm;
private String topFilCours;
private String cssCours;
private String metaDc;
private String metaKwrd;
private String metaSj;
private String fviconCours;
private String cscTelnbOrdrPosblAt;
private String cscWkdayWorkTme;
private String cscLunchTme;
private String cscRstde;
private String cscTelnb;
}

View File

@@ -0,0 +1,197 @@
package com.wb.domainserver.domain.admin.store.sopthema.controller;
import com.wb.domainserver.common.mvc.tags.ui.pagination.PaginationInfo;
import com.wb.domainserver.common.prop.PaginationProperties;
import com.wb.domainserver.domain.admin.store.sopmal.service.BOMaSopmalService;
import com.wb.domainserver.domain.admin.store.sopthema.service.BOSopthemaService;
import com.wb.domainserver.domain.admin.store.sopthema.vo.BOSopThemaVO;
import com.wb.domainserver.response.ApiResponse;
import com.wb.domainserver.security.authentication.AnonymousUser;
import com.wb.domainserver.security.authentication.MemberJwtContextHolder;
import com.wb.domainserver.security.authentication.MemberJwtToken;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.dataaccess.DataMap;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 쇼핑몰 테마 관리 Controller
*
* @author rvg
* @since 2023-12-26
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2023-12-26 리브가 최초 생성
*
* </pre>
*/
@Slf4j
@RestController
@RequestMapping("/admin/store/sopthema")
public class BOSopthemaController {
@Autowired
private BOSopthemaService service;
@Autowired
private BOMaSopmalService boMaSopmalService;
@Autowired
private PaginationProperties paginationProperties;
@Policy(AuthPolicy.PUBLIC)
@RequestMapping("/selectBOSopThemaListInqireForm")
public ResponseEntity<?> selectBOSopThemaListInqireForm(@RequestBody BOSopThemaVO boSopthemaVO) {
Map<String, Object> reulstMap = new HashMap<>();
List<?> SopmalCdNmList = boMaSopmalService.selectBOSopmalCdNm();
reulstMap.put("SopmalCdNmList", SopmalCdNmList); //검색조건 > 쇼핑몰
reulstMap.put("BOSopThemaVO", boSopthemaVO);
return ApiResponse.of(reulstMap).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 쇼핑몰 테마 목록조회
* @param boSopthemaVO 파라미터VO
* @return ResponseEntity<?> 목록조회 결과
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping("/selectBOSopThemaListInqire")
public ResponseEntity<?> selectBOSopThemaListInqire(@RequestBody BOSopThemaVO boSopthemaVO) {
Map<String, Object> content = new HashMap<>();
try {
//페이징 처리를 위한 pagination 객체 생성
PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(boSopthemaVO.getPageIndex());
paginationInfo.setRecordCountPerPage(boSopthemaVO.getPageUnit());
paginationInfo.setPageSize(paginationProperties.getPageSize());
boSopthemaVO.setPaginationInfo(paginationInfo);
//페이징 처리를 위한 값 설정
boSopthemaVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
boSopthemaVO.setLastIndex(paginationInfo.getLastRecordIndex());
boSopthemaVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
//쇼핑몰 테마 목록조회
List<DataMap> list = service.selectBOSopThemaList(boSopthemaVO);
content.put("BOSopThemaVO", boSopthemaVO);
content.put("paginationInfo", boSopthemaVO.getPaginationInfo());
content.put("list", list);
} catch(Exception e) {
}
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 쇼핑몰 테마 등록
* @param boSopthemaVO
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/insertBOSopThemaRegist")
public ResponseEntity<?> insertBOSopThemaRegist(@RequestBody BOSopThemaVO boSopthemaVO) {
//사용자 정보 추출 및 적용
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
boSopthemaVO.setRegusr(user.getUserInnb());
boSopthemaVO.setUpdusr(user.getUserInnb());
// 쇼핑몰 테마 등록
Map<String, Object> message = service.insertBOSopThema(boSopthemaVO);
return ApiResponse.of(message).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 쇼핑몰 테마 상세 정보 조회
* @param boSopthemaVO
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectBOSopThemaDtlInqire")
public ResponseEntity<?> selectBOSopThemaDtlInqire(@RequestBody BOSopThemaVO boSopthemaVO) {
Map<String, Object> content = new HashMap<>();
//쇼핑몰 테마 상세 정보 조회
List<BOSopThemaVO> list = service.selectBOSopthemaDtl(boSopthemaVO);
content.put("BOSopThemaVO", boSopthemaVO);
content.put("list", list);
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 쇼핑몰 테마 수정
* @param boSopthemaVO
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/updateBOSopThemaUpdt")
public ResponseEntity<?> updateBOSopThemaUpdt(@RequestBody BOSopThemaVO boSopthemaVO) {
//사용자 정보 추출 및 적용
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
boSopthemaVO.setRegusr(user.getUserInnb());
boSopthemaVO.setUpdusr(user.getUserInnb());
// 쇼핑몰 테마 수정
Map<String, Object> message = service.updateBOSopThema(boSopthemaVO);
return ApiResponse.of(message).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 쇼핑몰 테마 삭제
* @param boSopthemaVO
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/deleteBOSopThemaDel")
public ResponseEntity<String> deleteBOSopThemaDel(@RequestBody BOSopThemaVO boSopthemaVO) {
//사용자 정보 추출 및 적용
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
boSopthemaVO.setRegusr(user.getUserInnb());
boSopthemaVO.setUpdusr(user.getUserInnb());
// 쇼핑몰 테마 삭제
Map<String, Object> message = service.deleteBOSopthema(boSopthemaVO);
return ApiResponse.of(message).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 사용자 > 쇼핑몰 테마 조회
* @param boSopthemaVO
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectBOSopThemaDtlInfo")
public ResponseEntity<?> selectBOSopThemaDtlInfo(@RequestBody BOSopThemaVO boSopthemaVO) {
Map<String, Object> content = new HashMap<>();
//쇼핑몰 테마 상세 정보 조회
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
boSopthemaVO.setSopmalCd(user.getSopmalCd());
String themaDtl = service.selectBOSopThemaDtlInfo(boSopthemaVO);
content.put("themaDtl", themaDtl);
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
}

View File

@@ -0,0 +1,182 @@
package com.wb.domainserver.domain.admin.store.sopthema.controller;
import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.domain.admin.store.sopthema.vo.MaSopThemaVO;
import com.wb.domainserver.exception.WnbtRestException;
import com.wb.domainserver.response.WnbtResponse;
import com.wb.domainserver.response.WnbtWebClientResponseHandler;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.communicate.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
/**
* 쇼핑몰 테마 관리 Controller
*
* @author rvg
* @version 1.0
* @see <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2023-12-26 rvg 최초 생성
*
* </pre>
* @since 2023-12-26
*/
@Slf4j
@Controller
@RequestMapping("/admin/store/sopthema")
public class MaSopthemaController {
/** WebClient 호출을 위한 wrapper */
@Autowired
private WnbtWebClientResponseHandler responseHandler;
@Autowired
private SendToResrc sendToResrc;
/** 공통 메시지 처리를 위한 메시지 객체 */
@Autowired
private GconeMessageSource gconeMessageSource;
/**
* 쇼핑몰 테마 목록 조회
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping("/selectSopThemaListInqireForm")
public String selectSopThemaListInqireForm(MaSopThemaVO maSopthemaVO,
ModelMap model) {
//BO 발송그룹 목록조회 API 호출
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/store/sopthema/selectBOSopThemaListInqireForm", maSopthemaVO),
model,
"resultMap"
);
return "admin/store/sopthema/MaSopThemaListInqireRForm";
}
/**
* 쇼핑몰 테마 목록 조회
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping("/selectSopThemaListInqire")
public String selectSopThemaListInqire(MaSopThemaVO maSopthemaVO,
ModelMap model) {
//BO 발송그룹 목록조회 API 호출
try {
log.debug("It's excuted!");
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/store/sopthema/selectBOSopThemaListInqire", maSopthemaVO),
model,
"resultMap"
);
} catch(Exception e) {
e.printStackTrace();
}
//BO 발송그룹 목록조회 API 결과를 Map으로 변환하여 설정
return "admin/store/sopthema/MaSopThemaListInqireR";
}
/**
* 쇼핑몰 테마 등록 화면이동
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping("/selectSopThemaRegistForm")
public String selectSopThemaRegistForm(MaSopThemaVO maSopthemaVO,
ModelMap model) {
//BO 발송그룹 목록조회 API 호출
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/store/sopthema/selectBOSopThemaListInqire", maSopthemaVO),
model,
"resultMap"
);
return "admin/store/sopthema/MaSopThemaRegistC";
}
/**
* 쇼핑몰 테마 수정 화면이동
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping("/selectSopThemaUpdtForm")
public String selectSopThemaUpdtForm(MaSopThemaVO maSopthemaVO,
ModelMap model) {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/store/sopthema/selectBOSopThemaDtlInqire", maSopthemaVO),
model,
"resultMap"
);
return "admin/store/sopthema/MaSopThemaUpdtU";
}
/**
* 쇼핑몰 테마 등록
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/insertSopThemaRegist", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> insertSopThemaRegist(@Validated MaSopThemaVO maSopthemaVO, BindingResult bindingResult) {
if(bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/store/sopthema/insertBOSopThemaRegist", maSopthemaVO),
ReplyFromResrc::getReply
);
}
/**
* 쇼핑몰 테마 수정
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updateSopThemaUpdt", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updateSopThemaUpdt(@Validated MaSopThemaVO maSopthemaVO, BindingResult bindingResult) {
if(bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/store/sopthema/updateBOSopThemaUpdt", maSopthemaVO),
ReplyFromResrc::getReply
);
}
/**
* 쇼핑몰 테마 삭제
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/deleteSopThemaDel", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> deleteSopThemaDel(MaSopThemaVO maSopthemaVO) {
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/store/sopthema/deleteBOSopThemaDel", maSopthemaVO),
ReplyFromResrc::getReply
);
}
}

View File

@@ -0,0 +1,87 @@
package com.wb.domainserver.domain.admin.store.sopthema.mapper;
import com.wb.domainserver.domain.admin.store.sopthema.vo.BOSopThemaVO;
import com.wb.domainserver.util.dataaccess.DataMap;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* 쇼핑몰 테마 관리 Mapper
*
* @author rvg
* @since 2023-12-26
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2023-12-26 rvg 최초 생성
*
* </pre>
*/
@Mapper
@Repository
public interface BOSopthemaMapper {
/**
* 쇼핑몰 테마 건수
* @param boSopthemaVO
* @return
*/
public Integer selectBOSopThemaTotCnt(BOSopThemaVO boSopthemaVO);
/**
* 쇼핑몰 테마 목록
*
* @param boSopthemaVO
* @return
*/
public List<DataMap> selectBOSopThemaList(BOSopThemaVO boSopthemaVO);
/**
* 쇼핑몰 테마 등록
* @param boSopthemaVO
* @return
*/
public void insertBOSopThema(BOSopThemaVO boSopthemaVO);
/**
* 쇼핑몰 테마 정보 상세 조회
* @param boSopthemaVO
* @return
*/
public List<BOSopThemaVO> selectBOSopThemaDtl(BOSopThemaVO boSopthemaVO);
/**
* 쇼핑몰 테마 정보 수정
* @param boSopthemaVO
* @return
*/
public void updateBOSopThema(BOSopThemaVO boSopthemaVO);
/**
* 쇼핑몰 테마 정보 삭제
* @param
* @return
*/
public void deleteBOSopThema(Integer SopthemaInnb);
/**
* 참조하고 있는 쇼핑몰 확인
* @param boSopthemaVO
* @return
*/
public Integer selectBOSopThemaReferCnt(BOSopThemaVO boSopthemaVO);
/**
* 쇼핑몰 테마 조회
* @param boSopthemaVO
* @return
*/
public DataMap selectBOSopThemaDtlInfo(BOSopThemaVO boSopthemaVO);
}

View File

@@ -0,0 +1,169 @@
package com.wb.domainserver.domain.admin.store.sopthema.service;
import com.wb.domainserver.domain.admin.store.sopthema.mapper.BOSopthemaMapper;
import com.wb.domainserver.domain.admin.store.sopthema.vo.BOSopThemaVO;
import com.wb.domainserver.domain.admin.sys.comncd.mapper.BOMaComncdMapper;
import com.wb.domainserver.exception.WnbtRestException;
import com.wb.domainserver.exception.code.ErrorCode;
import com.wb.domainserver.util.dataaccess.DataMap;
import com.wb.domainserver.util.string.StringUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 쇼핑몰 테마 관리 service
*
* @author rvg
* @since 2023-12-26
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2023-12-26 리브가 최초 생성
*
* </pre>
*/
@Slf4j
@Service
public class BOSopthemaService {
@Autowired
private BOSopthemaMapper mapper;
@Autowired
private BOMaComncdMapper codeMapper;
@Value("${css-cours}")
String cssCours;
/**
* 쇼핑몰 테마 건수 및 목록조회
* @param boSopthemaVO
* @return list
*/
public List<DataMap> selectBOSopThemaList(BOSopThemaVO boSopthemaVO) {
List<DataMap> themaList = null;
//쇼핑몰 테마 건수 조회
boSopthemaVO.getPaginationInfo().setTotalRecordCount(mapper.selectBOSopThemaTotCnt(boSopthemaVO));
if(boSopthemaVO.getPaginationInfo().getTotalRecordCount() > 0) {
//쇼핑몰 테마 건수가 0일 경우 쇼핑몰 테마 목록조회를 실시하지 않음
//쇼핑몰 테마 목록조회
themaList = mapper.selectBOSopThemaList(boSopthemaVO);
}
return themaList;
}
/**
* 쇼핑몰 테마 등록
* @param boSopthemaVO
* @return message 등록 결과
*/
public Map<String, Object> insertBOSopThema(BOSopThemaVO boSopthemaVO) {
Map<String, Object> message = new HashMap<>();
try {
mapper.insertBOSopThema(boSopthemaVO);
message.put("getThemaInnb", boSopthemaVO.getThemaInnb());
message.put("result", "success");
} catch (Exception e) {
message.put("result", e.getMessage());
}
return message;
}
/**
* 쇼핑몰 테마 정보 상세 조회
* @param boSopthemaVO 파라미터VO
* @return list
*/
public List<BOSopThemaVO> selectBOSopthemaDtl(BOSopThemaVO boSopthemaVO) {
List<BOSopThemaVO> list = mapper.selectBOSopThemaDtl(boSopthemaVO);
return list;
}
/**
* 쇼핑몰 테마 정보 수정
* @param boSopthemaVO 파라미터VO
* @return message 수정 결과
*/
public Map<String, Object> updateBOSopThema(BOSopThemaVO boSopthemaVO) {
Map<String, Object> message = new HashMap<>();
try {
mapper.updateBOSopThema(boSopthemaVO);
message.put("getThemaInnb", boSopthemaVO.getThemaInnb());
message.put("result", "success");
} catch (Exception e) {
message.put("result", e.getMessage());
}
return message;
}
/**
* 쇼핑몰 테마 정보 삭제
* @param boSopthemaVO
* @return message 삭제 결과
*/
public Map<String, Object> deleteBOSopthema(BOSopThemaVO boSopthemaVO) {
Map<String, Object> message = new HashMap<>();
try {
if(mapper.selectBOSopThemaReferCnt(boSopthemaVO) == 0 ) {
mapper.deleteBOSopThema(boSopthemaVO.getThemaInnb());
message.put("getThemaInnb", boSopthemaVO.getThemaInnb());
message.put("result", "success");
}else{
throw new WnbtRestException(ErrorCode.MISSING_REQUEST_PARAMETER_ERROR, "쇼핑몰 테마를 사용중입니다.");
}
} catch (Exception e) {
message.put("result", e.getMessage());
}
return message;
}
/*************************
* 사용자
*************************/
/**
* 쇼핑몰 테마 정보 상세 조회
* @param boSopthemaVO 파라미터VO
* @return list
*/
public String selectBOSopThemaDtlInfo(BOSopThemaVO boSopthemaVO) {
DataMap resultTheme = mapper.selectBOSopThemaDtlInfo(boSopthemaVO);
String envPath = "";
//접속환경에 따른 경로 설정
if("PC".equalsIgnoreCase(boSopthemaVO.getEnv())){
envPath = "pc";
}else{
envPath = "mobile";
}
//css 경로 적용
String themeCssCours = "";
if(!StringUtil.isEmpty((String) resultTheme.get("cssCours"))){
themeCssCours = resultTheme.get("cssCours").toString().trim();
}else{
themeCssCours = cssCours;
}
if (!themeCssCours.startsWith("/")) {
themeCssCours = "/" + envPath + "/" + themeCssCours;
} else {
themeCssCours = "/" + envPath + themeCssCours;
}
return themeCssCours;
}
}

View File

@@ -0,0 +1,42 @@
package com.wb.domainserver.domain.admin.store.sopthema.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class BOSopThemaVO extends AbstractVO {
/** 테마 고유번호 */
private Integer themaInnb;
/** 테마명 */
private String themaNm;
/** CSS 경로*/
private String cssCours;
/** 설명내용 */
private String dcCn;
/** 검색 쇼핑몰테마명 */
private String srchThemaNm;
/** 검색 쇼핑몰 */
private String srchSopmalCd;
/** 적용 쇼핑몰 */
private String sopmalNm;
/*접속환경*/
private String env;
/************************
* 사용자 조회
************************/
/** 쇼핑몰코드 */
private String sopmalCd;
}

View File

@@ -0,0 +1,34 @@
package com.wb.domainserver.domain.admin.store.sopthema.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class MaSopThemaVO extends AbstractVO {
/** 테마 고유번호 */
private Integer themaInnb;
/** 테마명 */
@NotBlank(message = "쇼핑몰테마명")
private String themaNm;
/** CSS 경로*/
@NotBlank(message = "스타일시트경로")
private String cssCours;
/** 설명내용 */
private String dcCn;
/** 검색 쇼핑몰테마명 */
private String srchThemaNm;
/** 검색 쇼핑몰 */
private String srchSopmalCd;
/** 적용 쇼핑몰 */
private String sopmalNm;
}

View File

@@ -0,0 +1,324 @@
package com.wb.domainserver.domain.admin.store.stplat.controller;
import com.wb.domainserver.common.mvc.tags.ui.pagination.PaginationInfo;
import com.wb.domainserver.common.prop.PaginationProperties;
import com.wb.domainserver.domain.admin.store.stplat.service.BOStplatService;
import com.wb.domainserver.domain.admin.store.stplat.vo.BOStplatVO;
import com.wb.domainserver.domain.admin.sys.comncd.service.BOMaComncdService;
import com.wb.domainserver.domain.admin.sys.comncd.vo.BOMaComncdVO;
import com.wb.domainserver.response.ApiResponse;
import com.wb.domainserver.security.authentication.AnonymousUser;
import com.wb.domainserver.security.authentication.MemberJwtContextHolder;
import com.wb.domainserver.security.authentication.MemberJwtToken;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.dataaccess.DataMap;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
/**
*
* BOStplat Controller Class
*
* @author 김혜지
* @since 2023-12-19
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2023-12-19 김혜지 최초 생성
*
* </pre>
*/
@Slf4j
@RestController
@RequestMapping("/admin/store/stplat")
public class BOStplatController {
@Autowired
private BOStplatService service;
@Autowired
private BOMaComncdService bOMaComncdService;
@Autowired
private PaginationProperties paginationProperties;
/**
* 약관 검색 폼
* @param stplat 약관 파라미터VO
* @return ResponseEntity<?> 목록조회 결과
*/
@Policy(AuthPolicy.PUBLIC)
@PostMapping("/selectBOStplatListFormInqire")
public ResponseEntity<?> selectBOStplatListFormInqire(@RequestBody BOStplatVO stplat) {
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
stplat.setRegusr(user.getUserInnb());
stplat.setUpdusr(user.getUserInnb());
DataMap content = new DataMap();
//쇼핑몰 목록 조회
List<DataMap> stplatSopmalList = service.selectBOStplatSopmalListInqire();
//약관 구분 코드
BOMaComncdVO bOMaComncdVO = new BOMaComncdVO();
bOMaComncdVO.setGroupCd("STPLAT_DV");
List<DataMap> stplatDvList = bOMaComncdService.selectBOCommcdDetailList(bOMaComncdVO);
content.put("stplatSopmalList", stplatSopmalList);
content.put("stplatDvList", stplatDvList);
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 약관 목록 조회
* @param stplat 약관 파라미터VO
* @return ResponseEntity<?> 목록조회 결과
*/
@Policy(AuthPolicy.PUBLIC)
@PostMapping("/selectBOStplatListInqire")
public ResponseEntity<?> selectBOStplatListInqire(@RequestBody BOStplatVO stplat) {
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
stplat.setRegusr(user.getUserInnb());
stplat.setUpdusr(user.getUserInnb());
List<DataMap> resultList = new ArrayList<>();
List<DataMap> codeList = new ArrayList<>();
DataMap content = new DataMap();
DataMap map = new DataMap();
// pagination
PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(stplat.getPageIndex());
paginationInfo.setRecordCountPerPage(stplat.getPageUnit());
paginationInfo.setPageSize(paginationProperties.getPageSize());
stplat.setPaginationInfo(paginationInfo);
stplat.setFirstIndex(paginationInfo.getFirstRecordIndex());
stplat.setLastIndex(paginationInfo.getLastRecordIndex());
stplat.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
// 약관 목록 조회
resultList = service.selectBOStplatList(stplat);
// 그룹 코드 조회
map = service.selectGroupCd();
codeList.add(map);
content.put("stplat", stplat);
content.put("resultList", resultList);
content.put("codeList", codeList);
content.put("paginationInfo", stplat.getPaginationInfo());
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 약관 목록 조회 (excel)
* @param stplat 약관 파라미터VO
* @return ResponseEntity<?>
*/
@Policy(AuthPolicy.PUBLIC)
@PostMapping("/selectBOStplatListExcelDwld")
public ResponseEntity<?> selectBOStplatListExcelDwld(@RequestBody BOStplatVO stplat) {
DataMap content = new DataMap();
List<DataMap> resultList = new ArrayList<>();
// 약관 변경이력 상세 조회
resultList = service.selectBOStplatListExcelDwld(stplat);
content.put("resultList", resultList);
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 약관 등록 폼
* @param stplat 약관 파라미터VO
* @return ResponseEntity<?>
*/
@Policy(AuthPolicy.PUBLIC)
@PostMapping("/selectBOStplatRegistForm")
public ResponseEntity<?> selectBOStplatRegistForm(@RequestBody BOStplatVO stplat) {
DataMap content = new DataMap();
DataMap srchData = new DataMap();
srchData.put("srchSopmalCd", stplat.getSrchSopmalCd());
srchData.put("srchStplatDvCd", stplat.getSrchStplatDvCd());
srchData.put("srchStplatNm", stplat.getSrchStplatNm());
srchData.put("pageUnit", stplat.getPageUnit());
srchData.put("pageIndex", stplat.getPageIndex());
List<DataMap> srchList = new ArrayList<>();
srchList.add(srchData);
//약관 구분 코드
BOMaComncdVO bOMaComncdVO = new BOMaComncdVO();
bOMaComncdVO.setGroupCd("STPLAT_DV");
List<DataMap> stplatDvList = bOMaComncdService.selectBOCommcdDetailList(bOMaComncdVO);
content.put("stplat", stplat);
content.put("stplatDvList", stplatDvList);
content.put("srchData", srchData);
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 약관 등록
* @param stplat 약관 파라미터VO
* @return ResponseEntity<?> 등록 결과
*/
@Policy(AuthPolicy.PUBLIC)
@PostMapping("/insertBOStplatRegist")
public ResponseEntity<?> insertBOStplatRegist(@RequestBody BOStplatVO stplat) {
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
stplat.setRegusr(user.getUserInnb());
stplat.setUpdusr(user.getUserInnb());
// 약관 등록
DataMap content = new DataMap();
content = service.insertBOStplat(stplat);
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 약관 수정 폼 (상세 조회)
* @param stplat 약관 파라미터VO
* @return ResponseEntity<?> 등록 결과
*/
@Policy(AuthPolicy.PUBLIC)
@PostMapping("/selectBOStplatUpdtForm")
public ResponseEntity<?> selectBOStplatUpdtForm(@RequestBody BOStplatVO stplat) {
DataMap content = new DataMap();
DataMap srchData = new DataMap();
srchData.put("srchSopmalCd", stplat.getSrchSopmalCd());
srchData.put("srchStplatDvCd", stplat.getSrchStplatDvCd());
srchData.put("srchStplatNm", stplat.getSrchStplatNm());
srchData.put("pageUnit", stplat.getPageUnit());
srchData.put("pageIndex", stplat.getPageIndex());
srchData.put("pageDv", stplat.getPageDv());
List<DataMap> srchList = new ArrayList<>();
srchList.add(srchData);
// 약관 상세 조회
BOStplatVO vo = new BOStplatVO();
vo = service.selectBOStplatDtl(stplat);
vo.setPageDv(stplat.getPageDv());
// 약관 변경이력 조회
List<DataMap> resultList = service.selectBOStplatHistList(stplat);
// 그룹코드 조회
DataMap map = service.selectGroupCd();
List<DataMap> codeList = new ArrayList<>();
codeList.add(map);
//약관 구분 코드
BOMaComncdVO bOMaComncdVO = new BOMaComncdVO();
bOMaComncdVO.setGroupCd("STPLAT_DV");
List<DataMap> stplatDvList = bOMaComncdService.selectBOCommcdDetailList(bOMaComncdVO);
content.put("stplat", vo);
content.put("stplatDvList", stplatDvList);
content.put("srchData", srchData);
content.put("resultList", resultList);
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 약관 수정
* @param stplat 약관 파라미터VO
* @return ResponseEntity<?> 수정 결과
*/
@Policy(AuthPolicy.PUBLIC)
@PostMapping("/updateBOStplatUpd")
public ResponseEntity<?> updateBOStplatUpd(@RequestBody BOStplatVO stplat) {
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
stplat.setUpdusr(user.getUserInnb());
DataMap content = new DataMap();
content = service.updateBOStplat(stplat);
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 약관 쇼핑몰관리 사용 여부
* @param stplat 약관 파라미터VO
* @return ResponseEntity<?> 수정 결과
*/
@Policy(AuthPolicy.PUBLIC)
@PostMapping("/selectBOStplatSopmalUse")
public ResponseEntity<?> selectBOStplatSopmalUse(@RequestBody BOStplatVO stplat) {
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
stplat.setUpdusr(user.getUserInnb());
DataMap content = service.selectBOStplatSopmalUse(stplat);
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 약관 사용여부 수정
* @param stplat 약관 파라미터VO
* @return ResponseEntity<?> 수정 결과
*/
@Policy(AuthPolicy.PUBLIC)
@PostMapping("/updateBOStplatUseAtUpd")
public ResponseEntity<?> updateBOStplatUseAtUpd(@RequestBody BOStplatVO stplat) {
AnonymousUser user = MemberJwtContextHolder.getMemberInfo();
stplat.setUpdusr(user.getUserInnb());
DataMap content = new DataMap();
content = service.updateBOStplatUseAtUpd(stplat);
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 약관 변경이력 상세 팝업
* @param stplat 약관 파라미터VO
* @return ResponseEntity<?> 조회 결과
*/
@Policy(AuthPolicy.PUBLIC)
@PostMapping("/selectBOStplatHistDtlInqire")
public ResponseEntity<?> selectBOStplatHistDtlInqire(@RequestBody BOStplatVO stplat) {
DataMap content = new DataMap();
// 약관 변경이력 상세 조회
stplat = service.selectBOStplatHistDtl(stplat.getStplatInnb(), stplat.getChngSnb());
content.put("stplat", stplat);
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
/**
* 약관 변경이력 상세 팝업
* @param stplat 약관 파라미터VO
* @return ResponseEntity<?> 조회 결과
*/
@Policy(AuthPolicy.PUBLIC)
@PostMapping("/selectBoStplatInqire")
public ResponseEntity<?> selectStplatInqire(@RequestBody BOStplatVO stplat) {
DataMap content = new DataMap();
// 약관 변경이력 상세 조회
stplat = service.selectStplatInqire(stplat.getStplatInnb(), stplat.getChngSnb());
content.put("stplat", stplat);
return ApiResponse.of(content).ifPresentOrElse(HttpStatus.OK, HttpStatus.NOT_FOUND);
}
}

View File

@@ -0,0 +1,300 @@
package com.wb.domainserver.domain.admin.store.stplat.controller;
import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.domain.admin.store.stplat.vo.MaStplatVO;
import com.wb.domainserver.exception.WnbtRestException;
import com.wb.domainserver.response.WnbtResponse;
import com.wb.domainserver.response.WnbtWebClientResponseHandler;
import com.wb.domainserver.security.authorization.annotation.AuthPolicy;
import com.wb.domainserver.security.authorization.annotation.Policy;
import com.wb.domainserver.util.communicate.RESRC;
import com.wb.domainserver.util.communicate.ReplyFromResrc;
import com.wb.domainserver.util.communicate.SendToResrc;
import com.wb.domainserver.util.communicate.ValidateResultConverter;
import com.wb.domainserver.util.excel.ExcelDownloadUtil;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.util.ObjectUtils;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import java.io.IOException;
import java.util.*;
/**
*
* MaStplat Controller Class
*
* @author 김혜지
* @since 2023-12-19
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2023-12-19 김혜지 최초 생성
*
* </pre>
*/
@Slf4j
@Controller
@RequestMapping("/admin/store/stplat")
public class MaStplatController {
@Autowired
private WnbtWebClientResponseHandler responseHandler;
@Autowired
private SendToResrc sendToResrc;
@Autowired
private GconeMessageSource gconeMessageSource;
/**
* 약관 목록 조회 (검색 section)
* @param stplat 약관 파라미터VO
* @param model
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectStplatListInqireForm")
public String selectStplatListInqireForm(MaStplatVO stplat, ModelMap model) {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/store/stplat/selectBOStplatListFormInqire", stplat),
model,
"resultMap"
);
return "admin/store/stplat/maStplatListInqireRForm";
}
/**
* 약관 목록 조회 (리스트 section)
* @param stplat 약관 파라미터VO
* @param model
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectStplatListInqire")
public String selectStplatListInqire(MaStplatVO stplat, ModelMap model) {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/store/stplat/selectBOStplatListInqire", stplat),
model,
"resultMap"
);
return "admin/store/stplat/maStplatListInqireR";
}
/**
* 약관 목록 조회 (excel)
* @param stplat 약관 파라미터VO
* @param response
* @return
*/
@SuppressWarnings("unchecked")
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectStplatListExcelDwld", method = RequestMethod.POST)
public void selectStplatListExcelDwld(MaStplatVO stplat, HttpServletResponse response, ModelMap model) {
Map<String,Object> resultMap = responseHandler.handleResponseAsMap(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/store/stplat/selectBOStplatListExcelDwld",stplat)
);
List<Map<String, Object>> listMap = new ArrayList<>();
listMap = (List<Map<String, Object>>) resultMap.get("resultList");
// 엑셀 항목에 출력될 내용 설정
List<Map<String, Object>> dataList = new ArrayList<>();
try {
if ( !ObjectUtils.isEmpty(listMap) ) {
for (int i = 0; i < listMap.size(); i++ ) {
Map<String, Object> dm = new HashMap<>();
HashMap<String, Object> dataMap = new HashMap<>();
dm = listMap.get(i);
int reversedRnum = calculateExcelSize(listMap.size(), i);
dataMap.put("itme01", reversedRnum);
dataMap.put("itme02", dm.get("stplatNm"));
dataMap.put("itme03", dm.get("stplatDvCdNm"));
dataMap.put("itme04", dm.get("sopmalNm"));
dataMap.put("itme05", dm.get("registDt"));
dataMap.put("itme06", dm.get("updtDe"));
dataList.add(dataMap);
}
} else {
HashMap<String, Object> dataMap = new HashMap<>();
dataMap.put("itme01", null);
dataList.add(dataMap);
}
// 엑셀 항목별 제목에 출력될 내용 설정
LinkedHashMap<String, String> headerMap = new LinkedHashMap<String, String>();
headerMap.put("itme01", "번호");
headerMap.put("itme02", "약관명");
headerMap.put("itme03", "약관구분");
headerMap.put("itme04", "적용쇼핑몰");
headerMap.put("itme05", "등록일자");
headerMap.put("itme06", "최종수정일자");
if (!dataList.isEmpty()) {
ExcelDownloadUtil.createExcel("stplat_excel_file", headerMap, dataList, response);
}
} catch(IOException ioe) {
throw new WnbtRestException("엑셀다운로드 중 오류가 발생하였습니다.");
}
}
public int calculateExcelSize(int size, int i) {
return size - i;
}
/**
* 약관 등록 화면이동
* @param stplat 약관 파라미터VO
* @param model
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectStplatRegistForm")
public String selectStplatRegistForm(MaStplatVO stplat, ModelMap model) {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/store/stplat/selectBOStplatRegistForm", stplat),
model,
"resultMap"
);
return "admin/store/stplat/maStplatC";
}
/**
* 약관 등록
* @param stplat 약관 파라미터VO
* @param bindingResult
* @return ResponseEntity<?>
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/insertStplatRegist", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> insertStplatRegist(@Validated MaStplatVO stplat, BindingResult bindingResult) {
if(bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/store/stplat/insertBOStplatRegist", stplat),
ReplyFromResrc::getReply
);
}
/**
* 약관 수정 화면이동 (상세 조회)
* @param stplat 약관 파라미터VO
* @param model
* @return
*
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectStplatUpdtForm")
public String selectStplatUpdtForm(MaStplatVO stplat, ModelMap model) {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/store/stplat/selectBOStplatUpdtForm", stplat),
model,
"resultMap"
);
return "admin/store/stplat/maStplatU";
}
/**
* 약관 수정
* @param stplat 약관 파라미터VO
* @param bindingResult
* @return ResponseEntity<?>
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updateStplatUpd", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updateStplatUpd(@Validated MaStplatVO stplat, BindingResult bindingResult) {
if(bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/store/stplat/updateBOStplatUpd", stplat),
ReplyFromResrc::getReply
);
}
/**
* 약관 쇼핑몰관리 사용여부
* @param stplat 약관 파라미터VO
* @param bindingResult
* @return ResponseEntity<?>
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectStplatSopmalUse", method = RequestMethod.POST)
public ResponseEntity<?> selectStplatSopmalUse(@Validated MaStplatVO stplat, BindingResult bindingResult) {
if(bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/store/stplat/selectBOStplatSopmalUse", stplat),
ReplyFromResrc::getReply
);
}
/**
* 약관 삭제
* @param stplat 약관 파라미터VO
* @param bindingResult
* @return ResponseEntity<?>
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/deleteStplatDel", method = RequestMethod.POST)
public ResponseEntity<?> deleteStplatDel(@Validated MaStplatVO stplat, BindingResult bindingResult) {
if(bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/store/stplat/updateBOStplatUseAtUpd", stplat),
ReplyFromResrc::getReply
);
}
/**
* 약관 변경내용 조회 팝업
* @param stplat 약관 파라미터VO
* @param model
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping("/selectStplatChangePopup")
public String selectStplatChangePopup(MaStplatVO stplat, ModelMap model) {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/store/stplat/selectBOStplatHistDtlInqire", stplat),
model,
"resultMap"
);
return "admin/store/stplat/maStplatChangePopupR";
}
/**
* 약관 단일 조회
* @param stplat 약관 파라미터VO
* @param bindingResult
* @return ResponseEntity<?>
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectStplatInqire", method = RequestMethod.POST)
public ResponseEntity<?> selectStplatInqire(MaStplatVO stplat, BindingResult bindingResult) {
if(bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/store/stplat/selectBoStplatInqire", stplat),
ReplyFromResrc::getReply
);
}
}

View File

@@ -0,0 +1,67 @@
package com.wb.domainserver.domain.admin.store.stplat.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import com.wb.domainserver.domain.admin.store.stplat.vo.BOStplatVO;
import com.wb.domainserver.util.dataaccess.DataMap;
@Mapper
@Repository
public interface BOStplatMapper {
/**
* 약관 검색 폼 - 쇼핑몰 리스트
* @return
*/
List<DataMap> selectBOStplatSopmalListInqire();
/** 약관 건수 조회 */
public Integer selectBOStplatTotCnt(BOStplatVO stplat);
/** 약관 목록을 paging처리하여 조회 */
public List<DataMap> selectBOStplatList(BOStplatVO stplat);
/** 약관 목록을 paging처리없이 조회 */
public List<DataMap> selectBOStplatListExcelDwld(BOStplatVO stplat);
/** 약관 등록 */
public Integer insertBOStplat(BOStplatVO stplat);
/** 약관 변경이력 등록 */
public void insertBOStplatHist(BOStplatVO stplat);
/** 약관 수정 */
public void updateBOStplat(BOStplatVO stplat);
/** 약관 상세조회 */
public BOStplatVO selectBOStplatDtl(Integer stplatInnb);
/** 약관 변경이력 목록 조회 */
public List<DataMap> selectBOStplatHistList(BOStplatVO stplat);
/** 약관 변경이력 상세조회 */
public BOStplatVO selectBOStplatHistDtl(BOStplatVO stplat);
/** 약관 쇼핑몰 목록조회 */
public List<DataMap> selectBOStplatShopList();
/**
* 약관 쇼핑몰관리 사용 여부
*
* @param stplat
* @return
*/
DataMap selectBOStplatSopmalUse(BOStplatVO stplat);
/**
* 약관 사용여부 수정
* @param stplat
* @return
*/
Integer updateBOStplatUseAtUpd(BOStplatVO stplat);
}

View File

@@ -0,0 +1,256 @@
package com.wb.domainserver.domain.admin.store.stplat.service;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.wb.domainserver.domain.admin.store.stplat.mapper.BOStplatMapper;
import com.wb.domainserver.domain.admin.store.stplat.vo.BOStplatVO;
import com.wb.domainserver.domain.admin.sys.comncd.mapper.BOMaComncdMapper;
import com.wb.domainserver.domain.admin.sys.comncd.vo.BOMaComncdVO;
import com.wb.domainserver.exception.WnbtRestException;
import com.wb.domainserver.util.dataaccess.DataMap;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@Service
@Slf4j
@RequiredArgsConstructor
public class BOStplatService {
@Autowired
private BOStplatMapper mapper;
@Autowired
private BOMaComncdMapper codeMapper;
/**
* 약관 검색 폼 - 등록 쇼핑몰 리스트 조회
* @return
*/
public List<DataMap> selectBOStplatSopmalListInqire() {
List<DataMap> resultList = new ArrayList<>();
resultList = mapper.selectBOStplatSopmalListInqire();
return resultList;
}
/**
* 약관 목록 조회 (paging)
* @param stplat 파라미터VO
* @return List<DataMap> 전체 목록
*/
public List<DataMap> selectBOStplatList(BOStplatVO stplat) {
List<DataMap> resultList = new ArrayList<>();
Integer totCnt = mapper.selectBOStplatTotCnt(stplat);
stplat.getPaginationInfo().setTotalRecordCount(totCnt);
if(totCnt > 0) {
resultList = mapper.selectBOStplatList(stplat);
}
return resultList;
}
/**
* 약관 목록 조회 (excel)
* @param stplat 파라미터VO
* @return List<DataMap> 전체 목록
*/
public List<DataMap> selectBOStplatListExcelDwld(BOStplatVO stplat) {
List<DataMap> resultList = new ArrayList<>();
resultList = mapper.selectBOStplatListExcelDwld(stplat);
return resultList;
}
/**
* 약관 등록 폼 (그룹코드)
* @param
* @return DataMap 조회 결과
*/
public DataMap selectGroupCd() {
DataMap map = new DataMap();
BOMaComncdVO paramVO = new BOMaComncdVO();
paramVO.setGroupCd("STPLAT_DV");
/** 입력항목유형코드 체크박스|라디오|셀렉트|텍스트 */
List<DataMap> CGN002 = new ArrayList<>();
CGN002 = codeMapper.selectBOCommcdDetailList(paramVO);
map.put("CGN002", CGN002);
paramVO.setGroupCd("BRAND");
/** 입력항목유형코드 체크박스|라디오|셀렉트|텍스트 */
List<DataMap> CGO114 = new ArrayList<>();
CGO114 = mapper.selectBOStplatShopList();
// CGO114 = codeMapper.selectBOCommcdDetailList(paramVO);
map.put("CGO114", CGO114);
return map;
}
/**
* 약관 등록
* @param stplat 파라미터VO
* @return DataMap 등록 결과
*/
@Transactional
public DataMap insertBOStplat(BOStplatVO stplat) throws WnbtRestException {
DataMap message = new DataMap();
message.put("status", "0");
message.put("result", "success");
try {
// 1. 약관 등록
mapper.insertBOStplat(stplat);
// 2. 약관 히스토리 등록
mapper.insertBOStplatHist(stplat);
message.put("stplatInnb", stplat.getStplatInnb());
// 3. 검색정보 저장
message.put("srchSopmalCd", stplat.getSrchSopmalCd());
message.put("srchStplatDvCd", stplat.getSrchStplatDvCd());
message.put("srchStplatNm", stplat.getSrchStplatNm());
message.put("pageUnit", stplat.getPageUnit());
message.put("pageDv", "R");
} catch (WnbtRestException wre){
message.put("status", "1");
message.put("result", "fail");
log.error(wre.getMessage(), wre);
//throw new WnbtRestException(wre.getMessage());
} catch (Exception e) {
message.put("status", "1");
message.put("result", "fail");
log.error(e.getMessage(), e);
}
return message;
}
/**
* 약관 수정
* @param stplat 파라미터VO
* @return DataMap 수정 결과
*/
@Transactional
public DataMap updateBOStplat(BOStplatVO stplat) throws WnbtRestException {
DataMap message = new DataMap();
message.put("status", "0");
message.put("result", "success");
String chngResnCn = stplat.getChngResnCn();
try {
if(!chngResnCn.isEmpty()) {
// 1. 약관 수정
mapper.updateBOStplat(stplat);
// 2-1. 약관 변경 사유 등록
stplat.setChngResnCn(chngResnCn);
// 2-2. 약관 히스토리 등록
mapper.insertBOStplatHist(stplat);
message.put("stplatInnb", stplat.getStplatInnb());
// 3. 검색정보 저장
message.put("srchSopmalCd", stplat.getSrchSopmalCd());
message.put("srchStplatDvCd", stplat.getSrchStplatDvCd());
message.put("srchStplatNm", stplat.getSrchStplatNm());
message.put("pageUnit", stplat.getPageUnit());
message.put("pageDv", "U");
} else {
throw new Exception("약관 변경 사유 없음");
}
} catch (WnbtRestException wre){
message.put("status", "1");
message.put("result", "fail");
log.error(wre.getMessage(), wre);
//throw new WnbtRestException(wre.getMessage());
} catch (Exception e) {
message.put("status", "1");
message.put("result", "fail");
log.error(e.getMessage(), e);
}
return message;
}
/**
* 약관 상세조회 (수정 폼)
* @param stplatInnb 약관 고유번호
* @return BOStplatVO 상세조회 결과
*/
public BOStplatVO selectBOStplatDtl(BOStplatVO stplat) {
BOStplatVO vo = mapper.selectBOStplatDtl(stplat.getStplatInnb());
return vo;
}
/**
* 약관 변경이력 목록 조회
* @param stplat 파라미터VO
* @return List<DataMap> 목록조회 결과
*/
public List<DataMap> selectBOStplatHistList(BOStplatVO stplat) {
List<DataMap> resultList = new ArrayList<>();
resultList = mapper.selectBOStplatHistList(stplat);
return resultList;
}
/**
* 약관 쇼핑몰 관리 사용 여부
* @param stplat
* @return
*/
public DataMap selectBOStplatSopmalUse(BOStplatVO stplat) {
DataMap content = new DataMap();
DataMap stplatMap = mapper.selectBOStplatSopmalUse(stplat);
if(stplatMap == null || stplatMap.isEmpty()) {
content.put("result", "N");
} else {
content.put("result", "Y");
}
return content;
}
/**
* 약관 사용여부 수정
* @param stplat
* @return
*/
@Transactional
public DataMap updateBOStplatUseAtUpd(BOStplatVO stplat) {
DataMap content = new DataMap();
content.put("status", "0");
content.put("result", "success");
Integer result = mapper.updateBOStplatUseAtUpd(stplat);
if(result == 0) {
content.put("status", "1");
content.put("result", "fail");
}
return content;
}
/**
* 약관 변경이력 상세조회
* @param stplatInnb 약관 고유번호
* @param chngSnb 약관 순번
* @return BOStplatVO 변경이력 상세조회 결과
*/
public BOStplatVO selectBOStplatHistDtl(Integer stplatInnb, Integer chngSnb) {
DataMap result = new DataMap();
BOStplatVO stplat = new BOStplatVO();
stplat.setStplatInnb(stplatInnb);
stplat.setChngSnb(chngSnb);
stplat = mapper.selectBOStplatHistDtl(stplat);
result.put("stplat", stplat);
return stplat;
}
public BOStplatVO selectStplatInqire(Integer stplatInnb, Integer chngSnb) {
DataMap result = new DataMap();
BOStplatVO stplat = new BOStplatVO();
stplat.setStplatInnb(stplatInnb);
stplat.setChngSnb(chngSnb);
stplat = mapper.selectBOStplatHistDtl(stplat);
result.put("stplat", stplat);
return stplat;
}
}

View File

@@ -0,0 +1,64 @@
package com.wb.domainserver.domain.admin.store.stplat.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class BOStplatVO extends AbstractVO{
private static final long serialVersionUID = 1L;
/** 약관 고유번호 */
private Integer stplatInnb;
/** 변경순번 */
private Integer chngSnb;
/** 약관명 */
private String stplatNm;
/** 약관구분코드 */
private String stplatDvCd;
/** 약관내용 */
private String stplatCn;
/** 중요약관내용 */
private String imprtncStplatCn;
/** 쇼핑몰 이름 */
private String sopmalNm;
/** 등록자(수정자) 이름 */
private String mngrNm;
/** 수정일(String) */
private String updtDe;
/** 변경사유내용 */
private String chngResnCn;
/** 필수 여부 */
private String essntlAt;
/** 내용작성여부 */
private String cnWritngAt;
/** 회원가입사용여부 */
private String joinUseAt;
/** 비회원구매여부*/
private String nmbrPurchsAt;
/** 사용여부 */
private String useAt;
/**
* 검색
*/
/** 약관명 검색 */
private String srchStplatNm;
/** 쇼핑몰코드 검색 */
private String srchSopmalCd;
/** 약관구분코드 검색 */
private String srchStplatDvCd;
/** history 정보 */
private String pageDv;
/** 그룹코드이름 */
private String stplatDvNm;
}

View File

@@ -0,0 +1,94 @@
package com.wb.domainserver.domain.admin.store.stplat.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.hibernate.validator.constraints.Length;
@Data
@EqualsAndHashCode(callSuper = false)
public class MaStplatVO extends AbstractVO{
private static final long serialVersionUID = 1L;
/** 약관 고유번호 */
private Integer stplatInnb;
/** 변경순번 */
private Integer chngSnb;
/** 약관명 */
@NotBlank(message = "약관 명")
@Length(min = 0, max = 100, message = "약관 명")
private String stplatNm;
/** 약관구분코드 */
@NotBlank(message = "약관구분코드")
private String stplatDvCd;
/** 약관내용 */
@NotBlank(message = "약관내용")
private String stplatCn;
/** 중요약관내용 */
private String imprtncStplatCn;
/** 변경사유내용 */
@NotBlank(message = "변경사유내용")
private String chngResnCn;
/** 필수 여부 */
private String essntlAt;
/** 내용작성여부 */
private String cnWritngAt;
/** 회원가입사용여부 */
private String joinUseAt;
/** 비회원구매여부*/
private String nmbrPurchsAt;
/** 쇼핑몰 이름 */
private String sopmalNm;
/** 등록자(수정자) 이름 */
private String mngrNm;
/** 수정일(String) */
private String updtDe;
/**
* 검색
*/
/** 쇼핑몰코드 검색 */
private String srchSopmalCd;
/** 약관명 검색 */
private String srchStplatNm;
/** 약관구분코드 검색 */
private String srchStplatDvCd;
/** history 정보 */
private String pageDv;
/**
* 그룹코드
*/
/** 그룹코드 이름 */
private String stplatDvNm;
private String[] stplatNmArr;
private String[] stplatDvNmArr;
private String[] sopmalNmArr;
private String[] registDtArr;
private String[] updtDeArr;
private String[] rnumArr;
}

View File

@@ -0,0 +1,23 @@
package com.wb.domainserver.domain.admin.sys.authFnctMenu.mapper;
import com.wb.domainserver.domain.admin.sys.fnct.vo.BOFnctVO;
import com.wb.domainserver.util.dataaccess.DataMap;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import java.util.List;
@Mapper
@Repository
public interface BOMaAuthFnctMenuMapper {
int insertBOAuthFnctMenu(DataMap dm);
int deleteBOAuthFnctMenu(Object authorMenuFnctInnb);
int insertBOAuthFnctMenuLog(DataMap dm);
List<DataMap> selectBOAuthGrpFnctList(DataMap dm);
int selectBOFnctUrlDplct(BOFnctVO vo);
}

View File

@@ -0,0 +1,12 @@
package com.wb.domainserver.domain.admin.sys.authFnctMenu.service;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
@Service
@Slf4j
public class BOMaAuthFnctMenuService {
}

Some files were not shown because too many files have changed in this diff Show More