초기소스

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,108 @@
package com.wb.domainserver.domain.crm.bbs.controller;
import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.domain.crm.cnslt.vo.CrmCnsltVO;
import com.wb.domainserver.domain.mngr.bbs.gnrlsctt.vo.GnrlscttVO;
import com.wb.domainserver.domain.mngr.bbs.rvw.vo.RvwVO;
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.CookieValue;
import org.springframework.web.bind.annotation.RequestMapping;
@Slf4j
@Controller
@RequestMapping("/crm/bbs")
public class CrmBbsController {
/** WebClient 호출을 위한 wrapper */
@Autowired
private WnbtWebClientResponseHandler responseHandler;
/** WebClient 호출을 위한 wrapper */
@Autowired
private SendToResrc sendToResrc;
/** 공통 메시지 처리를 위한 메시지 객체 */
@Autowired
private GconeMessageSource gconeMessageSource;
/**
* 리뷰 목록 조회 폼
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectGoodsRvwInqireForm")
public String selectGoodsRvwInqireForm(ModelMap model, CrmCnsltVO vo) {
/*left 값 세팅*/
model.addAttribute("cnsltVO",vo);
return "crm/bbs/GoodsRvwListRForm";
}
/**
* 리뷰 목록 조회
* @param rvwVO
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectGoodsRvwInqire")
public String selectGoodsRvwInqire(ModelMap model, RvwVO rvwVO, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
rvwVO.setReqUrl("crm");
rvwVO.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOMyRvwListInqire", rvwVO),
model,
"resultMap"
);
model.addAttribute("pageUnit",rvwVO.getPageUnit());
return "crm/bbs/GoodsRvwListR";
}
/**
* 상품 qna 목록 조회 폼
* @param bbsctt
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectGoodsInqryInqireForm")
public String selectGoodsInqryInqireForm(CrmCnsltVO vo , GnrlscttVO bbsctt, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
bbsctt.setReqUrl("crm");
bbsctt.setBbsId("goods_qna");
bbsctt.setBbsTyCd("05");
bbsctt.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOBbscttListInqireForm", bbsctt),
model,
"resultMap"
);
/*left 값 세팅*/
model.addAttribute("cnsltVO",vo);
return "crm/bbs/GoodsInqryListRForm";
}
/**
* 상품 qna 목록 조회
* @param bbsctt
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectGoodsInqryInqire")
public String selectGoodsInqryInqire(GnrlscttVO bbsctt, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd){
bbsctt.setReqUrl("crm");
bbsctt.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/gnrlbbsctt/selectBOBbscttListInqire", bbsctt),
model,
"resultMap"
);
model.addAttribute("pageUnit",bbsctt.getPageUnit());
return "crm/bbs/GoodsInqryListR";
}
}

View File

@@ -0,0 +1,5 @@
package com.wb.domainserver.domain.crm.bbs.vo;
public class CrmBbsVO {
}

View File

@@ -0,0 +1,236 @@
package com.wb.domainserver.domain.crm.cnslt.controller;
import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.domain.auth.controller.AuthController;
import com.wb.domainserver.domain.crm.cnslt.vo.CrmCnsltVO;
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.string.StringUtil;
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.CookieValue;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
*
* CRM 상담
* @author 추지훈
* @since 2024-02-19
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-02-19 추지훈. 최초 생성
*
* </pre>
*/
@Controller
@RequestMapping("/crm/cnslt")
@Slf4j
public class CrmCnsltController {
/** WebClient 호출을 위한 wrapper */
@Autowired
private WnbtWebClientResponseHandler responseHandler;
@Autowired
private SendToResrc sendToResrc;
@Autowired
private GconeMessageSource gconeMessageSource;
@Autowired
private AuthController authController;
/**
* CRM 상담 내역 폼 이동
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectCnsltDtlsForm")
public String selectCnsltDtlsForm(CrmCnsltVO cnsltVO, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
cnsltVO.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/cnslt/selectBOCstmrCnsltUnityBbscttListInqireForm", cnsltVO),
model,
"resultMap"
);
model.addAttribute("cnsltVO", cnsltVO);
return "crm/cnslt/CnsltDtlsRForm";
}
/**
* CRM 상담 내역 조회
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectCnsltDtlsInqire")
public String selectCnsltDtlsInqire(CrmCnsltVO cnsltVO, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
cnsltVO.setSopmalCd(authSopmalCd);
cnsltVO.setCrmAt("Y");
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/cnslt/selectBOCstmrCnsltUnityBbscttListInqire", cnsltVO),
model,
"resultMap"
);
return "crm/cnslt/CnsltDtlsR";
}
/**
* 상담 등록 폼 이동
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectCnsltRegistPopupForm")
public String selectCnsltRegistPopupForm(CrmCnsltVO cnsltVO, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
cnsltVO.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/cnslt/selectBOCnsltRegistPopupForm", cnsltVO),
model,
"resultMap"
);
model.addAttribute("cnsltVO", cnsltVO);
return "crm/cnslt/CnsltRegistPopupC";
}
/**
* 상담 등록 폼 공통코드 반환
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectCnsltRegistPopupFormCmmnCdArray")
public ResponseEntity<WnbtResponse> selectCnsltRegistPopupFormCmmnCdArray(CrmCnsltVO cnsltVO, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
cnsltVO.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/cnslt/selectBOCnsltRegistPopupFormCmmnCdArray", cnsltVO),
ReplyFromResrc::getReply
);
}
/**
* 상담 등록
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/insertCnsltRegist")
public ResponseEntity<WnbtResponse> insertCnsltRegist(@Validated CrmCnsltVO cnsltVO,BindingResult bindingResult, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
List<Map<String, String>> errorList = new ArrayList<>();
if(bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
} else {
if (StringUtil.isEmpty(cnsltVO.getCnsltCn())) {
errorList.add(ValidateResultConverter.setErrorMap("cnsltCn",
gconeMessageSource.getMessage("errors.required", new Object[]{"상담 내용"})));
}
if (errorList != null && !errorList.isEmpty()) {
throw new WnbtRestException(ValidateResultConverter.convertCustomValidate(errorList));
}
}
if("".equals(cnsltVO.getOrdrNb())){cnsltVO.setOrdrNb(null);}
if("".equals(cnsltVO.getDlivyInnb())){cnsltVO.setDlivyInnb(null);}
if("".equals(cnsltVO.getRefndCdNb())){cnsltVO.setRefndCdNb(null);}
if("".equals(cnsltVO.getGoodsInqryBbscttNb())){cnsltVO.setGoodsInqryBbscttNb(null);}
if("".equals(cnsltVO.getGoodsRvwBbscttNb())){cnsltVO.setGoodsRvwBbscttNb(null);}
cnsltVO.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/cnslt/insertBOCnsltRegist", cnsltVO),
ReplyFromResrc::getReply
);
}
/**
* 상담 상세 수정 팝업 폼
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectCnsltDtlUpdtInqirePopup")
public String selectCnsltDtlUpdtInqirePopup(CrmCnsltVO cnsltVO, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
cnsltVO.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/cnslt/selectBOCnsltDtlUpdtInqirePopup", cnsltVO),
model,
"resultMap"
);
return "crm/cnslt/CnsltDtlUpdtPopupU";
}
/**
* 상담 수정
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updateCnsltUpdt")
public ResponseEntity<WnbtResponse> updateCstmrCnsltUpdt(@Validated CrmCnsltVO cnsltVO, BindingResult bindingResult, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
log.debug("cnsltVO is {}", cnsltVO);
// 정합성 검사
if(bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
} else {
List<Map<String, String>> errorList = new ArrayList<>();
if (cnsltVO.getTelnbDvCd() == null || cnsltVO.getTelnbDvCd().isEmpty()) {
errorList.add(ValidateResultConverter.setErrorMap("telnbDvCd",
gconeMessageSource.getMessage("errors.required", new Object[] { "인콜/아웃콜" })));
}
if (cnsltVO.getCnsltCn() == null || cnsltVO.getCnsltCn().isEmpty()) {
errorList.add(ValidateResultConverter.setErrorMap("cnsltCn",
gconeMessageSource.getMessage("errors.required", new Object[] { "상담 내용" })));
}
if (errorList != null && !errorList.isEmpty()) {
throw new WnbtRestException(ValidateResultConverter.convertCustomValidate(errorList));
}
}
if("".equals(cnsltVO.getOrdrNb())){cnsltVO.setOrdrNb(null);}
if("".equals(cnsltVO.getDlivyInnb())){cnsltVO.setDlivyInnb(null);}
if("".equals(cnsltVO.getRefndCdNb())){cnsltVO.setRefndCdNb(null);}
if("".equals(cnsltVO.getGoodsInqryBbscttNb())){cnsltVO.setGoodsInqryBbscttNb(null);}
if("".equals(cnsltVO.getGoodsRvwBbscttNb())){cnsltVO.setGoodsRvwBbscttNb(null);}
cnsltVO.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/bbs/cnslt/updateBOCnsltUpdt", cnsltVO),
ReplyFromResrc::getReply
);
}
}

View File

@@ -0,0 +1,135 @@
package com.wb.domainserver.domain.crm.cnslt.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
*
* 관리자 - 상담 VO
* @author 추지훈
* @since 2024-01-26
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-01-26 추지훈. 최초 생성
*
* </pre>
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class CrmCnsltVO extends AbstractVO{
private static final long serialVersionUID = 1L;
/**
* 상담 컬럼
*/
/** 상담내역고유번호 */
private Integer cnsltDtlsInnb;
/** 쇼핑몰 코드 */
private String sopmalCd;
/** 회원고유번호 */
private Integer mbrInnb;
/** 회원 아이디 */
private String mbrid;
/** 회원명 */
private String mbrNm;
/** 회원 핸드폰번호 */
private String mbtlnb;
/** 회원명 이메일*/
private String email;
/** 회원구분코드 */
private String mbrDvCd;
/** 회원타입코드 */
private String mbrTyCd;
/** 관리자 고유번호 */
private String mngrInnb;
/** 관리자이름 */
private String mngrNm;
/** 상담분류 */
private String cnsltCl;
/** 관련주문번호 */
private String ordrNb;
/** 관련주문번호 */
private String ordrInnb;
/** 출고코드 */
private String dlivyInnb;
/** 반품코드 */
private String rtngudCdNb;
/** 환불코드 */
private String refndCdNb;
/** 관련상품문의 */
private String goodsInqryBbscttNb;
/** 관련상담번호 */
private String goodsRvwBbscttNb;
/** 처리상태 */
private String procsSttusCd;
/** 처리일시 */
private String procsDt;
/** 상담내용 */
@NotBlank(message="상담내용")
private String cnsltCn;
/** 전화구분코드 */
@NotBlank(message="인콜/아웃콜")
private String telnbDvCd;
/** 대분류 */
@NotBlank(message="대분류")
private String lrgeCl;
/** 중분류 */
@NotBlank(message="중분류")
private String middlCl;
/** 소분류 */
private String smllCl;
/** 녹취 key */
private String recrdKy;
/** 전화번호 */
@NotBlank(message="전화번호")
private String telnb;
/**
* 검색
*/
/** 검색_검색어 구분 */
private String srchKeywordDv;
/** 검색_검색어 */
private String srchKeyword;
/** 검색_등록일 구분 */
private String srchDtDv;
/** 검색_시작일 */
private String srchStartDate;
/** 검색_종료일 */
private String srchEndDate;
/** 검색_상담자 */
private String srchMngrNm;
/** 검색_처리 여부 */
private String[] srchProcsSttusCd;
/** 검색_관련번호 구분 */
private String srchRelateDv;
/** 검색_관련번호 */
private String srchRelateNm;
/** 검색_상담내용 */
private String srchCnsltCn;
private String record_key = "";
/** 저장될 녹취 key */
private String customer_record_key;
private String ctiAt;
/*crm인지, 통합게시판인지 판단 => bo join에 씀*/
private String crmAt;
}

View File

@@ -0,0 +1,171 @@
package com.wb.domainserver.domain.crm.coupon.controller;
import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.domain.crm.cnslt.vo.CrmCnsltVO;
import com.wb.domainserver.domain.crm.coupon.vo.CrmCouponVO;
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.CookieValue;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
/**
*
* CRM 쿠폰
* @author 추지훈
* @since 2024-02-19
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-02-19 추지훈. 최초 생성
*
* </pre>
*/
@Controller
@RequestMapping("/crm/coupon")
@Slf4j
public class CrmCouponController {
/** WebClient 호출을 위한 wrapper */
@Autowired
private WnbtWebClientResponseHandler responseHandler;
@Autowired
private SendToResrc sendToResrc;
@Autowired
private GconeMessageSource gconeMessageSource;
/**
* 쿠폰내역 목록 폼 이동
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectHoldCouponDtlsForm")
public String selectHoldCouponDtlsForm(CrmCnsltVO vo, CrmCouponVO couponVO, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
couponVO.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/promtn/coupon/selectBOHoldCouponDtlsForm", couponVO),
model,
"resultMap"
);
model.addAttribute("cnsltVO",vo);
return "crm/coupon/HoldCouponDtlsRForm";
}
/**
* 쿠폰내역 목록 조회 ( 사용 가능 쿠폰 내역 )
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectHoldCouponDtlsInqire")
public String selectHoldCouponDtlsInqire(CrmCouponVO couponVO, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
couponVO.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/promtn/coupon/selectBOCouponUsePosblDtlsInqire", couponVO),
model,
"resultMap"
);
return "crm/coupon/HoldCouponDtlsR";
}
/**
* 쿠폰 상세 팝업
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectHoldCouponDtlPopupForm")
public String selectHoldCouponDtlPopupForm(CrmCouponVO couponVO, ModelMap model) {
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/promtn/coupon/selectBOCouponInfoInqirePopup", couponVO),
model,
"resultMap"
);
return "crm/coupon/HoldCouponDtlPopupR";
}
/**
* 쿠폰 유효기간 수정
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updateCouponPdUpdt", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updateCouponPdUpdt(@Validated CrmCouponVO couponVO, BindingResult bindingResult) {
log.debug("couponVO info inqire {}", couponVO);
// 정합성 검사
if (bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/promtn/coupon/updateBOCouponValidPdUpdt", couponVO),
ReplyFromResrc::getReply
);
}
/**
* 쿠폰내역 목록 조회 ( 다운로드 가능 쿠폰 내역 )
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectDwldPosblCouponDtlsInqire")
public String selectDwldPosblCouponDtlsInqire(CrmCouponVO couponVO, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
couponVO.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/promtn/coupon/selectBODwldCouponDtlsInqire", couponVO),
model,
"resultMapDwld"
);
return "crm/coupon/DwldPosblCouponDtlsR";
}
/**
* 쿠폰 다운로드
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/insertCrmDwldCouponAllRegist")
public ResponseEntity<WnbtResponse> insertCrmDwldCouponAllRegist(CrmCouponVO couponVO, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
couponVO.setSopmalCd(authSopmalCd);
log.debug("CRM 쿠폰 다운로드 : {}", couponVO);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/promtn/coupon/insertBODwldCouponAllRegist", couponVO),
ReplyFromResrc::getReply
);
}
}

View File

@@ -0,0 +1,180 @@
package com.wb.domainserver.domain.crm.coupon.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigInteger;
import java.util.List;
/**
*
* 해당 클래스에 대한 설명을 입력하세요.
* @author 추지훈
* @since 2024-02-27
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-02-27 추지훈 최초 생성
*
* </pre>
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class CrmCouponVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/**
* 쿠폰정보
*/
/** 다운로드 쿠폰 고유번호 */
private BigInteger dwldCouponInnb;
/** 쿠폰 고유번호 */
private Integer couponInnb;
/** 회원 고유번호 */
private Integer mbrInnb;
/** 회원 구분 코드 */
private String mbrDvCd;
/** 쿠폰팩 고유번호 */
private Integer cupnpkInnb;
/** 오프라인쿠폰 고유번호 */
private Integer oflneCouponInnb;
/** 쿠폰 발송 고유번호 */
private Integer couponSndngInnb;
/** 쿠폰 발송 유형코드 */
private String couponSndngTy;
/** 발송구분 */
private String sndngDv;
/** 발송대상 구분 */
private String sndngTrgetDv;
/** 쇼핑몰 코드 */
private String sopmalCd;
/** 다운로드 쿠폰팩명 */
private String cupnpkNm;
/** 다운로드 쿠폰팩 설명 */
private String cupnpkDc;
/** 다운로드 쿠폰명 */
private String coupNm;
/** 다운로드 쿠폰 설명 */
private String couponDc;
/** 사용환경코드 */
private String useEnvrnCd;
/** 단독사용, 공동사용 */
private String otrCouponSmtmUseAt;
/** 중복다운로드여부 */
private String dplctDwldAt;
/** 중복할인여부 */
private String dplctDscntAt;
/** 사용가능금액 */
private String usePosblAmt;
/** 상품카테고리 제한구분( 전체상품(all), 상품/카테고리(issue) ) */
private String goodsCtgryLmttDv;
/** 유효기간시작일시 */
private String validpdBgnDt;
/** 유효기간시작일시 포맷 yyyy-mm-dd */
private String validpdBgnDe;
/** 유효기간종료일시 */
private String validpdEndDt;
/** 유효기간종료일시 포맷 yyyy-mm-dd */
private String validpdEndDe;
/** 유효기간 남은 일수 */
private String validpdDay;
/** 쿠폰 사용여부 */
private String couponUseAt;
/** 쿠폰 사용 일시 */
private String couponUseDt;
/** 오프라인쿠폰 인증번호 */
private String oflneCouponCrtnb;
/** 사용처구분 */
private String useplcDv;
/** 복원 원본쿠폰 */
private String recovryOrginlCoupon;
// 쿠폰 혜택
/** 다운로드 쿠폰 혜택 고유번호 */
private Integer dwldCouponBnefInnb;
/** 혜택구분 */
private String bnefDv;
/** 상품할인구분 */
private String goodsDscntDv;
/** 추가할인금액 */
private String aditDscntAmt;
/** 추가할인비율 */
private String aditDscntRt;
/** 할인최대금액 */
private String dscntMxmmAmt;
/** 무료, 금액 */
private String dlvyAmtDscntDv;
/** 배송비할인금액 */
private String dlvyAmtDscntAmt;
/** 배송비최대할인금액 */
private String dlvyAmtMxmmDscntAmt;
// 쿠폰 적용 상품
/** 쿠폰 적용상품 고유번호 */
private Integer dwldCouponApplcGoodsInnb;
/** 상품적용구분 */
private String goodsApplcDv;
/** 판매상품 고유번호 */
private Integer sleGoodsInnb;
/** 혜택 적용 판매상품 고유번호 리스트 */
private List<Integer> sleGoodsInnbList;
/** 혜택 제외 판매상품 고유번호 리스트 */
private List<Integer> ExclSleGoodsInnbList;
/** 카테고리 ID */
private Integer ctgryId;
/** 혜택 적용 카테고리 ID 리스트 */
private List<Integer> ctgryIdList;
/** 혜택 제외 카테고리 ID 리스트 */
private List<Integer> ExclCtgryIdList;
// 검색조건
/** 검색_회원아이디, 회원명 */
private String searchKeyword;
/** 검색_발급일 시작 */
private String srchStartDate;
/** 검색_발급일 종료 */
private String srchEndDate;
/** 검색_다운로드쿠폰사용여부 */
private String srchUseAt;
/** 쿠폰 발급 혹은 쿠폰 등록 시 */
// private String[] couponArray;
private String couponArray;
/** 그룹 코드 */
private String groupCd;
/** 주문 고유번호 ( 주문 쿠폰 사용 내역 조회 ) */
private String ordrInnb;
/** JSON 형태의 회원 리스트 ( 발급하기 ) */
private String jsonMbrList;
/**
* 서버 구분
*/
private String serverDv;
}

View File

@@ -0,0 +1,259 @@
package com.wb.domainserver.domain.crm.dlvylc.controller;
import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.domain.crm.cnslt.vo.CrmCnsltVO;
import com.wb.domainserver.domain.crm.dlvylc.vo.CrmDlvylcVO;
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.string.StringUtil;
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.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* CRM 배송지 관리 Controller
*
* @author 김혜인
* @since 2023-11-28
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2023-11-28 박철민 최초 생성
*
* </pre>
*/
@Controller
@RequestMapping("/crm/dlvylc")
@Slf4j
public class CrmDlvylcController {
/** WebClient 호출을 위한 wrapper */
@Autowired
private WnbtWebClientResponseHandler responseHandler;
/** WebClient 호출을 위한 wrapper */
@Autowired
private SendToResrc sendToResrc;
/** 공통 메시지 처리를 위한 메시지 객체 */
@Autowired
private GconeMessageSource gconeMessageSource;
/**
* 배송지 관리 목록 조회 이동
* @param crmDlvylcVO
* @param model
* @return MbrDlvylcListInqireR.jsp
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping("/selectMbrDlvylcListInqire")
public String selectMbrDlvylcListInqire(CrmCnsltVO vo ,ModelMap model) {
model.addAttribute("cnsltVO",vo);
return "crm/dlvylc/MbrDlvylcListInqireR";
}
/**
* 회원 자주쓰는 배송지 조회
* @param crmDlvylcVO
* @param model
* @return RpuseDlvylcListInqireR.jsp
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping("/selectRpuseDlvylcListInqire")
public String selectRpuseDlvylcListInqire(CrmDlvylcVO crmDlvylcVO,ModelMap model) {
log.debug("배송지 관리 : {}", crmDlvylcVO);
String jspPath = "";
//popUp or page 호출인지에 따라 페이지유닛 및 경로 분기
if("Y".equals(crmDlvylcVO.getIsPop())) {
crmDlvylcVO.setPageUnit(3);
jspPath = "crm/dlvylc/DlvylcManagePopupR";
} else {
jspPath = "crm/dlvylc/RpuseDlvylcListInqireR";
}
//BO에서 API 호출(자주쓰는 배송지 조회)
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/selectBOMbrDlvylcListInqire", crmDlvylcVO),
model,
"resultMap"
);
//BO에서 API 호출(자주쓰는 배송지 조회)
//기존 페이지 유지
model.addAttribute("pageIndex", crmDlvylcVO.getPageIndex());
//회원 고유 번호 유지
model.addAttribute("mbrInnb", crmDlvylcVO.getMbrInnb());
model.addAttribute("mbrDvCd", crmDlvylcVO.getMbrDvCd());
model.addAttribute("formId", crmDlvylcVO.getFormId());
//배송지 관리 팝업 > 콜백 함수 이름 전달
if("Y".equals(crmDlvylcVO.getIsPop())) {
model.addAttribute("callbackNm", crmDlvylcVO.getCallbackNm());
}
return jspPath;
}
/**
* 최근 배송지 조회
* @param CrmOrdrVO
* @param ModelMap
* @return RecentDlvylcListInqireR.jsp
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectRecentDlvylcListInqire")
public String selectRecentDlvylcListInqire(CrmDlvylcVO crmDlvylcVO, ModelMap model) {
//BO에서 API 호출(최근 배송지 조회)
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/selectBORecentDlvylcListInqire", crmDlvylcVO),
model,
"resultMap"
);
model.addAttribute("ordering",crmDlvylcVO.getOrdering());
return "crm/dlvylc/RecentDlvylcListInqireR";
}
/**
* 배송지 수정 상세 조회
* @param CrmOrdrVO
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@GetMapping(value="/selectDlvylcUpdtPopupForm")
public String selectDlvylcUpdtPopupForm(ModelMap model, CrmDlvylcVO crmDlvylcVO){
//BO API 호출하여 상세 조회
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/selectBODlvylcUpdtPopupForm", crmDlvylcVO),
model,
"dtlDlvylc"
);
//모델 객체에 상세 조회 및 페이지 인덱스,회원고유번호 담음
model.addAttribute("pageIndex",crmDlvylcVO.getPageIndex());
model.addAttribute("mbrInnb",crmDlvylcVO.getMbrInnb());
model.addAttribute("mbrDvCd",crmDlvylcVO.getMbrDvCd());
return "crm/dlvylc/DlvylcUpdtPopupU";
}
/**
* 배송지 수정
* @param crmDlvylcVO
* @return ResponseEntity<WnbtResponse>
*/
@Policy(AuthPolicy.RESTRICTED)
@PostMapping(value="/updateDlvylcUpdt")
public ResponseEntity<WnbtResponse> updateDlvylcUpdt(@Validated CrmDlvylcVO crmDlvylcVO,
BindingResult bindingResult){
//입력값 정합성 점검결과 처리
if(bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
//휴대폰번호 정합성 체크
String mbtlnb = crmDlvylcVO.getMbtlnb();
mbtlnb = mbtlnb.replace("-", "");
int mbtlnbLen = mbtlnb.length();
if (!(mbtlnbLen >= 8 && mbtlnbLen <= 12)) {
throw new WnbtRestException("번호는 8자~12자 입니다.");
}
//도로명 지번 분기처리 하여 vo에 set함
if("01".equals(crmDlvylcVO.getAdresDv())) {
crmDlvylcVO.setRnmAdres(crmDlvylcVO.getAdres());
crmDlvylcVO.setLnbAdres(null);
}else if("02".equals(crmDlvylcVO.getAdresDv())){
crmDlvylcVO.setLnbAdres(crmDlvylcVO.getAdres());
crmDlvylcVO.setRnmAdres(null);
}
//상세주소 미입력시 . 입력
if (StringUtil.isEmpty(crmDlvylcVO.getDtlAdres())) {
crmDlvylcVO.setDtlAdres(".");
}
//BO API 호출 => 배송지 수정
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/updateBODlvylcUpdt", crmDlvylcVO),
ReplyFromResrc::getReply
);
}
/**
* 배송지 등록 팝업 이동
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectDlvylcRegistForm")
public String selectDlvylcRegistForm(ModelMap model, CrmDlvylcVO crmDlvylcVO){
model.addAttribute("crmDlvylcVO",crmDlvylcVO);
return "crm/dlvylc/DlvylcRegistPopupC";
}
/**
* 배송지 등록
* @param CrmOrdrVO
* @param bindingResult
* @return ResponseEntity<WnbtResponse>
*/
@Policy(AuthPolicy.RESTRICTED)
@PostMapping(value="/insertDlvylcRegist")
public ResponseEntity<WnbtResponse> insertDlvylcRegist(@Validated CrmDlvylcVO crmDlvylcVO,
BindingResult bindingResult){
//입력값 정합성 점검결과 처리
if(bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
//휴대폰번호 정합성 체크
String mbtlnb = crmDlvylcVO.getMbtlnb();
mbtlnb = mbtlnb.replace("-", "");
int mbtlnbLen = mbtlnb.length();
if (!(mbtlnbLen >= 8 && mbtlnbLen <= 12)) {
throw new WnbtRestException("번호는 8자~12자 입니다.");
}
//등록 jsp에서 넘어온 주소를 도로명 지번 분기처리 하여 vo에 set함
if("01".equals(crmDlvylcVO.getAdresDv())) {
crmDlvylcVO.setRnmAdres(crmDlvylcVO.getAdres());
crmDlvylcVO.setLnbAdres(null);
}else if("02".equals(crmDlvylcVO.getAdresDv())){
crmDlvylcVO.setLnbAdres(crmDlvylcVO.getAdres());
crmDlvylcVO.setRnmAdres(null);
}
//상세주소 미입력시 . 입력
if(StringUtil.isEmpty(crmDlvylcVO.getDtlAdres())){
crmDlvylcVO.setDtlAdres(".");
}
//BO API 호출 => 배송지 등록
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/insertBODlvylcRegist", crmDlvylcVO),
ReplyFromResrc::getReply
);
}
/**
* 배송지 삭제
* @param CrmOrdrVO
* @return ResponseEntity<WnbtResponse>
*/
@Policy(AuthPolicy.RESTRICTED)
@PostMapping(value="/deleteDlvylcDel")
public ResponseEntity<WnbtResponse> deleteDlvylcDel(CrmDlvylcVO crmDlvylcVO){
log.debug("deleteDlvylcDel's crmDlvylcVO {}", crmDlvylcVO);
//BO API 호출 => 배송지 삭제
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/deleteBODlvylcDel", crmDlvylcVO),
ReplyFromResrc::getReply
);
}
}

View File

@@ -0,0 +1,64 @@
package com.wb.domainserver.domain.crm.dlvylc.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 CrmDlvylcVO extends AbstractVO{
private static final long serialVersionUID = 1L;
/** 주소록 고유번호 */
private Integer adbkInnb;
/** 회원고유번호 */
private String mbrInnb;
/**회원구분코드*/
public String mbrDvCd;
/** 배송지설명내용 */
@NotBlank(message = "배송지 설명")
@Length(min=1, max=67)
private String dlvylcDcCn;
/** 받는사람명 */
@NotBlank(message = "받으시는 분")
@Length(min=1, max=13)
private String recpntNm;
/** 전화번호 */
//private String telnb;
/** 휴대폰번호 */
@NotBlank(message = "휴대전화번호")
private String mbtlnb;
private String telnb;
/** 우편번호 */
@NotBlank(message = "우편번호")
@Length(min=1, max=5)
private String zip;
/** 도로명,지번 구분 */
private String adresDv;
/** 도로명 or 지번 주소 */
private String adres;
/** 지번주소 */
private String lnbAdres = "";
/** 도로명주소 */
private String rnmAdres = "";
/** 상세주소 */
private String dtlAdres;
/** 기본배송지여부 */
private String dftDlvylcAt = "N";
/** 최근배송지여부 */
private String recentDlvylcAt;
/** popUp 여부 확인 */
private String isPop;
/**오더링 방법 */
private String ordering;
/**콜백함수 이름 */
private String callbackNm;
/**쇼핑몰코드 */
private String sopmalCd;
/*녹취키*/
private String customer_record_key;
/* formId */
private String formId;
}

View File

@@ -0,0 +1,267 @@
package com.wb.domainserver.domain.crm.main.controller;
import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.domain.auth.controller.AuthController;
import com.wb.domainserver.domain.auth.vo.AuthVO;
import com.wb.domainserver.domain.crm.main.vo.CrmMainVO;
import com.wb.domainserver.domain.crm.main.vo.CrmMbrSrchVO;
import com.wb.domainserver.domain.mngr.ordr.ordrmngr.vo.OrdrSrchVO;
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.string.StringUtil;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
/**
*
* CRM 메인 페이지
* @author 추지훈
* @since 2024-02-19
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-02-19 추지훈. 최초 생성
* 2024-02-19 김혜인. 수정 주문 검색 추가
*
* </pre>
*/
@Controller
@Slf4j
public class CrmMainController {
/** WebClient 호출을 위한 wrapper */
@Autowired
private WnbtWebClientResponseHandler responseHandler;
/** WebClient 호출을 위한 wrapper */
@Autowired
private SendToResrc sendToResrc;
/** 공통 메시지 처리를 위한 메시지 객체 */
@Autowired
private GconeMessageSource gconeMessageSource;
@Autowired
private AuthController authController;
// @Value("${spring.security.oauth2.resourceserver.jwt.issuer-uri}")
String issuerUri;
/**
* CRM 메인 화면 이동
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/crm/main")
public String selectCrmMainPge(CrmMainVO mainVO, ModelMap model) {
model.addAttribute("mainVO", mainVO);
return "crm/main/CrmMainPgeR";
}
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/crm")
public String selectCrmRootInqire() {
return "redirect:/crm/main/selectCrmMainPge";
}
/**
* CRM 로그아웃
* @return
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value="/crm/logout")
public String crmLogout(HttpServletRequest request, @CookieValue(value = "authSopmalCd") String authSopmalCd, HttpSession session) {
session.invalidate();
request.getSession().invalidate();
request.getSession(true);
String returnUrl = issuerUri+"/login";
return "redirect:"+returnUrl;
}
/**
* CRM 메인 화면 이동
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/crm/main/selectCrmCtiUnion")
public String selectCrmCtiUnion(CrmMainVO mainVO, ModelMap model) {
model.addAttribute("mainVO", mainVO);
return "crm/main/ctiUnion";
}
/**
* CRM 회원 검색 팝업 폼 이동
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/crm/main/selectCrmMbrSrchForm")
public String selectCrmMbrSrchForm(CrmMbrSrchVO mbrSrchVO, ModelMap model, HttpSession session, HttpServletRequest request, HttpServletResponse response, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
// crm 전화받은게 아니면.
if(StringUtil.isEmpty(mbrSrchVO.getSopmalCd())) {
mbrSrchVO.setSopmalCd(authSopmalCd);
}else{
//콜 들어올 시 세션 쇼핑몰코드 전환
AuthVO authVO = new AuthVO();
authVO.setSopmalCd(mbrSrchVO.getSopmalCd());
authController.selectMngrSopmalSite(authVO, request, response);
}
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/selectBOCrmMbrSrchPopupForm", mbrSrchVO),
model,
"resultMap"
);
model.addAttribute("cnsltVO", mbrSrchVO);
return "crm/main/CrmMbrSrchPopupRForm";
}
/**
* CRM 회원 검색 목록 조회
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/crm/main/selectCrmMbrSrch")
public String selectCrmMbrSrch(CrmMbrSrchVO mbrSrchVO, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
mbrSrchVO.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/selectBOCrmMbrSrch", mbrSrchVO),
model,
"resultMap"
);
model.addAttribute("cnsltVO", mbrSrchVO);
return "crm/main/CrmMbrSrchPopupR";
}
/**
* CRM 주문 검색 목록 조회 폼
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/crm/main/selectCrmOrdrSrchPopupForm")
public String selectCrmOrdrSrchPopupForm(ModelMap model ,OrdrSrchVO ordrSrchVO, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
ordrSrchVO.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/selectBOAllOrdrListInqire", ordrSrchVO),
model,
"cond"
);
model.addAttribute("paramVO", ordrSrchVO);
return "crm/main/CrmOrdrSrchPopupRForm";
}
/**
* CRM 주문 검색 목록 조회
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/crm/main/selectCrmOrdrSrch", method = RequestMethod.POST)
public String selectCrmOrdrSrch (ModelMap model , OrdrSrchVO ordrSrchVO, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
ordrSrchVO.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/ordr/ordr/selectAllOrdrListInqireAjax", ordrSrchVO),
model,
"resultMap"
);
return "crm/main/CrmOrdrSrchPopupR";
}
/**
* 콜센터 창으로 연결
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/crm/main/callCenterCnncButton")
public String callCenterCnncButton () {
return "crm/main/ctiUnion";
}
/**
* 해당 회원 crm 정보 조회
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/crm/main/selectCrmMbrInfo")
public ResponseEntity<WnbtResponse> selectCrmMbrInfo (CrmMainVO mainVO, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
mainVO.setSopmalCd(authSopmalCd);
/*검색어에 해당하는 회원 조회*/
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/selectBOCrmMenuMbrInfoInqire", mainVO),
ReplyFromResrc::getReply
);
}
/**
* 비회원 crm 정보 조회
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/crm/main/selectCrmNmbrInfo")
public ResponseEntity<WnbtResponse> selectCrmNmbrInfo (CrmMainVO mainVO, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
mainVO.setSopmalCd(authSopmalCd);
/*검색어에 해당하는 회원 조회*/
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/selectBOCrmMenuNmbrInfoInqire", mainVO),
ReplyFromResrc::getReply
);
}
/**
* crm 쇼핑몰 이름 조회
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/crm/main/selectSopmalNm")
public ResponseEntity<WnbtResponse> selectSopmalNm(CrmMainVO mainVO) {
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/selectBOSopmalNm", mainVO),
ReplyFromResrc::getReply
);
}
}

View File

@@ -0,0 +1,53 @@
package com.wb.domainserver.domain.crm.main.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
*
* CRM 메인 VO
* @author 추지훈
* @since 2023-12-11
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2023-12-11 추지훈 최초 생성
*
* </pre>
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class CrmMainVO extends AbstractVO {
private String phone;
private String sopmalCd;
private String ctiAt;
private String record_key = "";
/*left 회원 정보*/
/*회원고유번호*/
private String mbrInnb;
/*회원구분코드*/
private String mbrDvCd;
/*left 비회원정보*/
private String mbtlnb;
/*left 비회원정보*/
private String ordrInnb;
/*left 비회원 이름*/
private String mbrNm;
}

View File

@@ -0,0 +1,119 @@
package com.wb.domainserver.domain.crm.main.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
*
* 회원 검색
* @author 김혜인
* @since 2024-01-10
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-02-15 추지훈. 수정
*
* </pre>
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class CrmMbrSrchVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/**검색어 구분*/
private String srchKywordDv;
/**검색어 키워드*/
private String srchKyword;
/** 검색_회원구분코드 */
private String srchMbrDvCd;
/** 가입일 검색 시작*/
private String sbscrbStrtDt;
/** 가입일 검색 종료*/
private String sbscrbEndDt;
/** 최종방문일 검색 시작*/
private String loginStrtDt;
/** 최종방문일 검색 종료*/
private String loginEndDt;
/** 등급코드 */
private String srchGradInnb;
/** 주문 금액 검색 시작*/
private String srchStrtOrdrAmt;
/** 주문 금액 검색 종료*/
private String srchEndOrdrAmt ;
/**검색 시작 주문 금액 날짜 */
private String srchStrtOrdrAmtDt;
/**검색 종료 주문 금액 날짜 */
private String srchEndOrdrAmtDt ;
/**검색 시작 주문 건수*/
private String srchStrtOrdrCnt;
/**검색 종료 주문 건수*/
private String srchEndOrdrCnt;
/**주문 건수 검색 시작 날짜 */
private String srchStrtOrdrCntDt;
/**주문 건수 검색 종료 날짜 */
private String srchEndOrdrCntDt;
/**검색 시작 마일리지*/
private String srchStrtMlg;
/**검색 종료 마일리지*/
private String srchEndMlg;
/**방문수, 리뷰 수 검색 구분*/
private String vstRvwDv;
/**검색 시작 방문수 or 리뷰 수*/
private String srchStrtVstRvwCnt;
/**검색 끝 방문수 or 리뷰 수*/
private String srchEndVstRvwCnt;
/**회원가입 환경*/
private String srchPlatform;
/**회원가입 방법*/
private String srchrute;
/**마케팅 수신 동의*/
private String srchMarktRecptnAgreAt;
/**마케팅 수신 동의 브랜드*/
private String[] srchBrand;
/**성별*/
private String srchSexDstn;
/**나이 검색 시작*/
private String srchStrtBrthDe;
/**나이 검색 끝*/
private String srchEndBrthDe;
/**리셀러 여부*/
private String srchAppen;
/**쇼핑몰코드*/
private String sopmalCd;
/**정렬 방식*/
private String sortDv;
/*콜 관련*/
//cti 고객 번호
private String phone;
//cti 레코드 키
private String record_key = "";
//cti 레코드키(커스텀)
private String customer_record_key;
//cti 여부
private String ctiAt;
}

View File

@@ -0,0 +1,427 @@
package com.wb.domainserver.domain.crm.mbr.controller;
import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.domain.crm.cnslt.vo.CrmCnsltVO;
import com.wb.domainserver.domain.crm.mbr.vo.CrmMbrVO;
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.string.StringUtil;
import com.wb.domainserver.util.util.Util;
import jakarta.servlet.http.HttpServletRequest;
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.CookieValue;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@Slf4j
@Controller
@RequestMapping("/crm/mbr")
public class CrmMbrController {
/** WebClient 호출을 위한 wrapper */
@Autowired
private WnbtWebClientResponseHandler responseHandler;
@Autowired
private SendToResrc sendToResrc;
@Autowired
private GconeMessageSource gconeMessageSource;
/**
* 로그/메모 폼 이동
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectLogMemoInqire")
public String selectLogMemoInqire(CrmCnsltVO vo , CrmMbrVO mbrVO, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
mbrVO.setPageDv("crm");
mbrVO.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/selectBOMbrInfoLogCrm", mbrVO),
model,
"resultMap"
);
model.addAttribute("cnsltVO",vo);
return "crm/mbr/LogMemoR";
}
/**
* 회원 관리자 메모 수정
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updateMemoUpdt")
public ResponseEntity<WnbtResponse> updateMemoUpdt(@Validated CrmMbrVO mbrVO,@CookieValue(value = "authSopmalCd") String authSopmalCd) {
mbrVO.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/updateBOMbrMemoUpdt", mbrVO),
ReplyFromResrc::getReply
);
}
/**
* CRM 회원 정보 수정 이동
*
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectMbrInfoUpdtInqire")
public String selectMbrInfoUpdtInqire(CrmCnsltVO vo,CrmMbrVO mbrVO, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
mbrVO.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/selectBOMbrInfoUpdtInqireCrm", mbrVO),
model,
"resultMap"
);
model.addAttribute("cnsltVO",vo);
return "crm/mbr/MbrInfoUpdtU";
}
/**
* 회원 정보 수정
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updateMbrInfoUpdt", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updateMbrInfoUpdt(@Validated CrmMbrVO mbrVO, HttpServletRequest request, @CookieValue(value = "authSopmalCd") String authSopmalCd, BindingResult bindingResult) {
// 정합성 검사
if (bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
} else {
List<Map<String, String>> errorList = new ArrayList<>();
if (mbrVO.getMbrNm() == null || mbrVO.getMbrNm().isEmpty()) {
errorList.add(ValidateResultConverter.setErrorMap("mbrNm",
gconeMessageSource.getMessage("errors.required", new Object[] { "회원명" })));
}
//아이디 변경시
if("Y".equals(mbrVO.getMbrIdChngAt()) && (mbrVO.getMbrId() == null || mbrVO.getMbrId().isEmpty())){
errorList.add(ValidateResultConverter.setErrorMap("mbrId",
gconeMessageSource.getMessage("errors.required", new Object[] { "회원아이디" })));
}
//비밀번호 변경시
if ("Y".equals(mbrVO.getMbrPwdChngAt()) && (mbrVO.getMbrPassword() == null || mbrVO.getMbrPassword().isEmpty())) {
errorList.add(ValidateResultConverter.setErrorMap("mbrPassword",
gconeMessageSource.getMessage("errors.required", new Object[] { "비밀번호" })));
}
//리셀러 변경시
String beforeAppnDvCd = StringUtil.isEmpty(mbrVO.getBeforeAppnDvCd()) ? "01" : mbrVO.getBeforeAppnDvCd();
if (!beforeAppnDvCd.equals(mbrVO.getAppnDvCd()) && StringUtil.isEmpty(mbrVO.getAppnMemo())) {
errorList.add(ValidateResultConverter.setErrorMap("appnMemo",
gconeMessageSource.getMessage("errors.required", new Object[]{"변경 사유"})));
}
if (errorList != null && !errorList.isEmpty()) {
throw new WnbtRestException(ValidateResultConverter.convertCustomValidate(errorList));
}
}
//쇼핑몰 코드 set
mbrVO.setSopmalCd(authSopmalCd);
//아이디 중복 체크
if("Y".equals(mbrVO.getMbrIdChngAt())){
//아이디 중복 체크
Map<String, Object> idResult = responseHandler.handleResponseAsMap(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/selectBOIdDplctCnfirm", mbrVO)
);
String possibleAt = (String) idResult.get("message");
if("impossible".equals(possibleAt)){
throw new WnbtRestException("중복된 아이디입니다.");
}
}
//비밀번호 체크
if("Y".equals(mbrVO.getMbrPwdChngAt())){
/*1 비밀번호 변경 시 관리자 비밀번호 확인*/
Map<String, Object> resultMap = responseHandler.handleResponseAsMap(
sendToResrc.ofPost(RESRC.GCONEBO, "/admin/user/mngr/selectBOJobUserPasswordInqire", mbrVO)
);
int result = (int) resultMap.get("result");
if (result == 0) {
throw new WnbtRestException("관리자 비밀번호가 일치하지 않습니다");
}else{
/*2 비밀번호 정규 표현식 확인*/
String password = mbrVO.getMbrPassword();
String pwPattern = "^(?=.*[a-zA-Z])(?=.*\\d)(?=.*\\W)?[a-zA-Z\\d\\W]{6,20}$|^(?=.*[a-zA-Z])(?=.*\\W)(?=.*\\d)?[a-zA-Z\\W\\d]{6,20}$|^(?=.*\\d)(?=.*\\W)(?=.*[a-zA-Z])?[a-zA-Z\\d\\W]{6,20}$";
Matcher matcher = Pattern.compile(pwPattern).matcher(password);
if (!matcher.matches()) {
throw new WnbtRestException("영문 대소문자, 숫자, 특수문자 중 2가지 이상 조합으로 6~20자 입력해 주세요.");
}
}
}
//생년월 set
mbrVO.setBrthDe(mbrVO.getBrthDe().replace(",", ""));
//등록 아이피 set
String ip = (String) Util.getRequestInfo(request).get("XForwardedFor");
mbrVO.setRegistIp(ip);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/updateBOMbrInfoUpdtCrm", mbrVO),
ReplyFromResrc::getReply
);
}
/**
* CRM 회원 탈퇴 팝업 이동
*
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectMbrSecsnProcsPopupForm")
public String selectMbrSecsnProcsPopupForm(CrmMbrVO mbrVO, ModelMap model) {
model.addAttribute("mbrVO",mbrVO);
return "crm/mbr/MbrSecsnProcsPopupU";
}
/**
* 회원 CRM 팝업 폼 ( 아이디 클릭시 바로 옆에 띄워지는 고객 CRM 팝업 화면 )
*
* @param paramVO
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectMbrCrmInfoPopupForm")
public String selectMbrCrmInfoPopupForm(CrmMbrVO mbrVO, ModelMap model,@CookieValue(value = "authSopmalCd") String authSopmalCd) {
mbrVO.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/selectBOMbrCrmInfoPopupInqire", mbrVO),
model,
"resultMap"
);
return "crm/mbr/MbrCrmInfoPopupR";
}
/**
* 비회원 CRM 팝업 폼 ( 아이디 클릭시 바로 옆에 띄워지는 고객 CRM 팝업 화면 )
*
* @param mbrVO
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectNmbrCrmInfoPopupForm")
public String selectNmbrCrmInfoPopupForm(CrmMbrVO mbrVO, ModelMap model,@CookieValue(value = "authSopmalCd") String authSopmalCd) {
mbrVO.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/selectBOCrmMenuNmbrInfoInqire", mbrVO),
model,
"resultMap"
);
model.addAttribute("vo",mbrVO);
return "crm/mbr/NmbrCrmInfoPopupR";
}
/**
* CRM 회원 정보 조회 이동
*
* @param paramVO
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectCstmrInfoInqire")
public String selectCstmrInfoInqire(CrmCnsltVO vo,CrmMbrVO mbrVO, ModelMap model,@CookieValue(value = "authSopmalCd") String authSopmalCd) {
mbrVO.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/selectBOCstmrInfoInqire", mbrVO),
model,
"resultMap"
);
model.addAttribute("cnsltVO",vo);
return "crm/mbr/CstmrInfoInqireR";
}
/**
* CRM 회원 정보 조회 > 관리매장 변경 팝업
*
* @param paramVO
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectManageStrChngPopupForm")
public String selectManageStrChngPopupForm(CrmMbrVO mbrVO, ModelMap model,@CookieValue(value = "authSopmalCd") String authSopmalCd) {
mbrVO.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/selectBOManageStrChngPopupForm", mbrVO),
model,
"resultMap"
);
return "crm/mbr/ManageStrChngPopupU";
}
/**
* 탈퇴사유조회
*
* @param paramVO
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectSecsnResn")
public ResponseEntity<WnbtResponse> selectSecsnResn(HttpServletRequest request, CrmMbrVO mbrVO,@CookieValue(value = "authSopmalCd") String authSopmalCd) {
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/selectBOMbrwithdrawal", mbrVO),
ReplyFromResrc::getReply
);
}
/**
* CRM 회원 정보 조회 > 관리매장 수정
*
* @param paramVO
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updateManageStrUpdt")
public ResponseEntity<WnbtResponse> updateManageStrUpdt(HttpServletRequest request, CrmMbrVO mbrVO,@CookieValue(value = "authSopmalCd") String authSopmalCd) { //등록 ip 설정
String ip = (String) Util.getRequestInfo(request).get("XForwardedFor");
mbrVO.setRegistIp(ip);
mbrVO.setSopmalCd(authSopmalCd);
//관리매장 없을시 set
if(StringUtil.isEmpty(mbrVO.getBeforeStrNm())){
mbrVO.setBeforeStrNm("관리매장 없음");
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/updateBOManageStrUpdt", mbrVO),
ReplyFromResrc::getReply
);
}
/**
* CRM 회원 활동 정보 조회 이동
*
* @param paramVO
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectMbrActInfoInqire")
public String selectMbrActInfoInqire(CrmCnsltVO vo ,CrmMbrVO mbrVO, ModelMap model,@CookieValue(value = "authSopmalCd") String authSopmalCd) {
mbrVO.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/selecBOtMbrActInfoInqire", mbrVO),
model,
"resultMap"
);
model.addAttribute("cnsltVO",vo);
return "crm/mbr/MbrActInfoInqireR";
}
/**
* CRM 회원 활동 정보 (고객 데이터 : 최근 본 상품 )
* @param paramVO
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectMbrDataGoodsInqireToday")
public String selectMbrDataGoodsInqireToday(CrmMbrVO mbrVO, ModelMap model,@CookieValue(value = "authSopmalCd") String authSopmalCd) {
mbrVO.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/selectBOMbrDataGoodsInqireToday", mbrVO),
model,
"resultMap"
);
return "crm/mbr/MbrDataInqireR";
}
/**
* CRM 회원 활동 정보 (고객 데이터 : 위시리스트에 담은 상품 )
* @param paramVO
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectMbrDataGoodsInqireWish")
public String selectMbrDataGoodsInqireWish(CrmMbrVO mbrVO, ModelMap model,@CookieValue(value = "authSopmalCd") String authSopmalCd) {
mbrVO.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/selectBOMbrDataGoodsInqireWish", mbrVO),
model,
"resultMap"
);
return "crm/mbr/MbrDataInqireR";
}
/**
* CRM 회원 활동 정보 (고객 데이터 : 장바구니에 담은 상품 )
* @param paramVO
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectMbrDataGoodsInqireCart")
public String selectMbrDataGoodsInqireCart(CrmMbrVO mbrVO, ModelMap model,@CookieValue(value = "authSopmalCd") String authSopmalCd) {
mbrVO.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/selectBOMbrDataGoodsInqireCart", mbrVO),
model,
"resultMap"
);
return "crm/mbr/MbrDataInqireR";
}
/**
* CRM 회원 활동 정보 (고객 데이터 : 최근 검색어 )
* @param paramVO
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectMbrDataGoodsInqireSrch")
public String selectMbrDataGoodsInqireSrch(CrmMbrVO mbrVO, ModelMap model,@CookieValue(value = "authSopmalCd") String authSopmalCd) {
mbrVO.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/selectBOMbrDataGoodsInqireSrch", mbrVO),
model,
"resultMap"
);
return "crm/mbr/MbrDataSrchKeywordR";
}
/**
* CRM 회원 정보 조회
*
* @param paramVO
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectMbrCrmInfo")
public ResponseEntity<WnbtResponse> selectMbrCrmInfo(CrmMbrVO mbrVO,@CookieValue(value = "authSopmalCd") String authSopmalCd) {
mbrVO.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mbr/selectBOMbrCrmInfoPopupInqire", mbrVO),
ReplyFromResrc::getReply
);
}
}

View File

@@ -0,0 +1,262 @@
package com.wb.domainserver.domain.crm.mbr.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import com.wb.domainserver.util.dataaccess.DataMap;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
/**
*
* 해당 클래스에 대한 설명을 입력하세요.
* @author 추지훈
* @since 2024-02-27
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-02-27 추지훈. 최초 생성
*
* </pre>
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class CrmMbrVO extends AbstractVO{
private static final long serialVersionUID = 1L;
// 회원 정보
/**회원 고유번호 배열*/
private String[] mbrarr;
/**회원고유번호*/
private String mbrInnb;
/**회원 구분 코드*/
private String mbrDvCd;
/**회원등급 고유번호*/
private String mbrGradInnb;
/**이전 회원등급 고유번호*/
private String beforeMbrGradInnb;
/**유입경로번호*/
private String inflowCoursNb;
/**가입환경코드*/
private String sbscrbEnvrnCd;
/**회원유형코드*/
private String mbrTyCd;
/**회원id*/
private String mbrId;
/*id 변경 여부*/
private String mbrIdChngAt;
/**회원비밀번호*/
private String mbrPassword;
/**비밀번호변경일자*/
private String passwordChngDe;
/** 비밀번호변경 여부 */
private String mbrPwdChngAt;
/**회원명*/
private String mbrNm;
/**이메일*/
private String email;
/**휴대폰번호*/
private String mbtlnb;
/**전화번호*/
private String telnb;
/**우편번호*/
private String zip;
/**도로명, 지번*/
private String adresDv;
/**지번주소*/
private String lnbAdres;
/**도로명주소*/
private String rnmAdres;
/**주소*/
private String adres;
/**상세주소*/
private String dtlAdres;
/**성별*/
private String sex;
/**일자는 01로 입력*/
private String brthDe;
/**상태*/
private String sttus;
/**통합서비스정보제공동의*/
private String unitySvcCnsOffrInfo;
/**년도*/
private String indvdlInfoValidPd;
/**광고수신동의변경일시*/
private String advrtsRecptnAgreUpdtDt;
/**광고수신동의전송일시*/
private String advrtsRecptnAgreTrnsmisDt;
/**gcone 가입여부*/
private String gconeSbscrbAt;
/** 관리자메모 */
private String mngrMemo;
/** 관리자로그 */
private String mngrLog;
/** 등록자 IP */
private String registIp;
/** 주문번호 */
private String ordrInnb;
// 외부연동 회원 ( kakao, naver, pos )
/** 외부연동순번 */
private Integer extrlIntrlckSnb;
/** 쇼핑몰코드 */
private String sopmalCd;
/** 외부연동구분코드 */
private String extrlIntrlckDvCd;
/** 외부연동ID */
private String extrlIntrlckId;
/** 가입구분코드 */
private String sbscrbDvCd;
/** 약정코드 */
private String stplatDvCds;
/** 약정코드 동의여부*/
private String stplatDvCdAts;
/** gc_marketing_agree */
/** 마케팅 발신 동의 여부 */
private String marktRecptnAgreAt;
/** 마케팅 발신 동의 여부 */
private String beforeMarktRecptnAgreAt;
/** 마케팅 발신 수신 동의 여부 수정일 */
private String marktRecptnAgreUpdtDt;
/** fm_member_login */
/** 약정코드 */
private String conectLogInnb;
/** 약정코드 */
private String conectEnvrn;
/** 약정코드 */
private String conectIp;
/** 약정코드 */
private String loginTy;
/** fm_clause_agre */
/** 약정코드 */
private String stplatAgreInnb;
/** 약정코드 */
private String stplatInnb;
/** fm_marketing_agree_log */
/** 약정코드 */
private String advrtsRecptnAgreChngInnb;
/** fm_delivery_address */
/** 약정코드 */
private String adbkInnb;
/** 약정코드 */
private String dlvylcDcCn;
/** 약정코드 */
private String recpntNm;
/** 약정코드 */
private String dftDlvylcAt;
/** 약정코드 */
private String recentDlvylcAt;
/** fm_extrl_member */
/** 약정코드 */
private String emailAdres;
/** 약정코드 */
private String sexdstnCd;
/** 관리자 확인 비밀번호 */
private String password;
// 회원 탈퇴 fm_member_withdrawal
/**탈퇴사유*/
private String secsnResn;
/**메모*/
private String memo;
/** 회원 탈퇴 고유번호 */
private Integer withdrawalMbrInnb;
// 관리 매장 변경
/** 기존 관리 매장명 */
private String beforeStrNm;
/** 변결 매장명 */
private String strNm;
/** 매장 고유번호 */
private Integer strInnb;
/*포스매장고유번호*/
private String posStrInnb;
/*페이지구분*/
private String pageDv;
/*쇼핑몰 리스트 => 회원 정보 수정 페이지 데이터 가져 올 때 사용*/
private List<DataMap> sopmalList;
/*쇼핑몰별 마케팅 동의 여부 리스트*/
private List<CrmMbrVO> agreeAtList;
/*리셀러 수정 전*/
private String beforeAppnDvCd;
/*리셀러 수정 후*/
private String appnDvCd;
/*지정 고유번호 배열*/
private List<String> appnInnbArr;
/*지정 메모*/
private String appnMemo;
}

View File

@@ -0,0 +1,267 @@
package com.wb.domainserver.domain.crm.mlg.controller;
import com.wb.domainserver.domain.crm.cnslt.vo.CrmCnsltVO;
import com.wb.domainserver.domain.crm.mlg.vo.CrmMlgVO;
import com.wb.domainserver.domain.crm.mlg.vo.PosReqVO;
import com.wb.domainserver.domain.mngr.mbr.vo.MlgSrchVO;
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 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.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.HashMap;
/**
*
* CRM 마일리지 내역
* @author 추지훈
* @since 2024-02-19
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-02-19 추지훈. 최초 생성
* 2024-05-20 이운산 수정
*
* </pre>
*/
@Slf4j
@Controller
@RequestMapping("/crm/mlg")
public class CrmMlgController {
/** WebClient 호출을 위한 wrapper */
@Autowired
private WnbtWebClientResponseHandler responseHandler;
@Autowired
private SendToResrc sendToResrc;
/**
* 마일리지 내역 폼 이동
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectMlgDtlsForm")
public String selectMlgDtlsForm(CrmCnsltVO cnsltVO , CrmMlgVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mlg/selectBOMlgManagePopupForm", vo),
model,
"resultMap"
);
model.addAttribute("cnsltVO",cnsltVO);
return "crm/mlg/MlgDtlsRForm";
}
/**
* 마일리지 내역 조회
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectMlgDtlsInqire")
public String selectMlgDtlsInqire(CrmMlgVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mlg/selectBOMlgListInqire", vo),
model,
"resultMap"
);
return "crm/mlg/MlgDtlsR";
}
/**
* 마일리지 팝업 목록 검색 폼
* @param mlgSrchVO
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectMlgManagePopupForm")
public String selectMlgManagePopupForm(ModelMap model,MlgSrchVO mlgSrchVO, @CookieValue(value = "authSopmalCd") String authSopmalCd){
mlgSrchVO.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mlg/selectBOMlgManagePopupForm", mlgSrchVO),
model,
"resultMap"
);
//BO 회원 목록조회 API 결과를 Map으로 변환하여 설정
model.addAttribute("mbrSrchVO",mlgSrchVO);
return "mngr/mbr/MlgManagePopupCForm";
}
/**
* 마일리지 팝업 내역 조회
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectMlgDtlsPopupInqire")
public String selectMlgDtlsPopupInqire(CrmMlgVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mlg/selectBOMlgListInqire", vo),
model,
"resultMap"
);
return "mngr/mbr/MlgManagePopupR";
}
/**
* CRM 마일리지 등록
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/insertCrmMlgMngrUpDn")
public ResponseEntity<WnbtResponse> insertCrmMlgMngrUp(CrmMlgVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
log.debug("CrmMlgVO {}", vo);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mlg/insertBOMlgMngrUpDn", vo),
ReplyFromResrc::getReply
);
}
/**
* CRM 마일리지 유효기간 수정
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updateCrmMlgUsePosblEndDt")
public ResponseEntity<WnbtResponse> updateCrmMlgUsePosblEndDt(CrmMlgVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
log.debug("CrmMlgVO {}", vo);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mlg/updateBOMlgUsePosblEndDt", vo),
ReplyFromResrc::getReply
);
}
/*****
* 포스 마일리지 테스트용 임시
******/
/**
* 포스 마일리지 테스트 페이지
* @param WithdrawalVO
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/goPosMlgTestForm")
public String goPosMlgTestForm(ModelMap model,MlgSrchVO mlgSrchVO, HttpSession session){
return "mngr/mbr/PosMlgTestForm";
}
/**
* 포스 마일리지 적립
* @param boMlgVO
* @return ResponseEntity<?>
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/insertPosMlgAdd")
public ResponseEntity<?> insertPosMlgAdd(@RequestBody PosReqVO vo) {
log.debug("마일리지 적용 파라미터 확인{}",vo);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mlg/insertBOPosMlgAdd", vo),
ReplyFromResrc::getReply
);
}
/**
* 포스 마일리지 환불 여부 확인
* @param boMlgVO
* @return ResponseEntity<?>
*/
@Policy(AuthPolicy.PUBLIC)
@RequestMapping(value = "/selectChkPosRefundable")
public ResponseEntity<?> selectChkPosRefundable(@RequestBody HashMap<String, Object> map, HttpSession session) {
log.debug("마일리지 적용 파라미터 확인{}",map);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mlg/selectBOPosChkRefundable", map),
ReplyFromResrc::getReply
);
}
/********
* 충전형 마일리지
********/
/**
* 충전형 마일리지 내역 폼 이동
*
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectCashDtlsForm")
public String selectCashDtlsForm(CrmCnsltVO cnsltVO, CrmMlgVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mlg/selectBOMlgManagePopupForm", vo),
model,
"resultMap"
);
model.addAttribute("cnsltVO", cnsltVO);
return "crm/mlg/CashDtlsRForm";
}
/**
* 충전형 마일리지 내역 조회
*
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectCashDtlsInqire")
public String selectCashDtlsInqire(CrmMlgVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/mbr/mlg/selectBOCashList", vo),
model,
"resultMap"
);
return "crm/mlg/CashDtlsR";
}
}

View File

@@ -0,0 +1,118 @@
package com.wb.domainserver.domain.crm.mlg.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
@Data
@EqualsAndHashCode(callSuper = false)
public class CrmMlgVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/**
* 마일리지 정보
*/
/** 마일리지 고유번호 */
private Integer mlgInnb;
/** 주문고유번호 */
private Integer ordrInnb;
/** 회원고유번호 */
private Integer mbrInnb;
/** 회원구분코드 */
private String mbrDvCd;
/** 쇼핑몰 코드 */
private String sopmalCd;
/** 게시글고유번호 */
private Integer bbscttInnb;
/** 주문코드 */
private String ordrCd;
/** 마일리지구분 */
private String mlgDvCd;
/** 마일리지적립구분 */
private String mlgAccmlDvCd;
/** 마일리지적용구분 */
/** 적립(지급) : 리뷰(일반,포토,한달),구매,이벤트, 관리자 사용(차감, 소멸) : 구매, 관리자, 기간만료 */
private String mlgApplcDvCd;
/** 마일리지적용사유 */
private String mlgApplcResn;
/** 적립금액 */
private BigDecimal accmlmnyAmt;
/** 잔액 */
private BigDecimal blce;
/** 손실 */
private BigDecimal loss;
/** 사용가능시작일시 */
private Date usePosblBgnDt;
/** 사용가능종료일시 */
@DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSX")
private Date usePosblEndDt;
/** 주문정보 */
private String ordrInfo;
/** 관리코드 */
private String manageCd;
/** 관리메모 */
private String manageMemo;
/** 만료여부 */
private String endAt;
/** 취소여부 */
private String canclAt;
/** 취소일시 */
private Date canclDt;
/** 소멸 배치 묶음 */
private String extshBatchBundle;
/** 온오프 구분 */
private String onlineOflneDvCd;
/** 매장고뷰번호 */
private Integer strInnb;
/** 매장코드 */
private String strCd;
/** 매장명 */
private Integer strnm;
/** 매장구분 */
private String strDvCd;
/** 포스코드 */
private String posCd;
/** 등록자구분 */
private String regusrDvCd;
/** 수정자구분 */
private String updusrDvCd;
/** 마일리지 유효기간 */
private Integer mlgValidPd;
/** 마일리지 유효기간 설정 여부 */
private String mlgValidPdAt;
/** 마일리지 유효기간 설정 여부*/
private String validAt;
// 검색
/** 검색_마일리지 적립 구분코드 */
private String srchMlgAccmlDvCd;
/** 검색_브랜드명 */
private String srchSopmalCd;
/** 검색_시작날짜 */
private String srchStartDate;
/** 검색_종료날짜 */
private String srchEndDate;
/** 검색_마일리지 적립 구분 */
private List<String> srchMlgAccmlDv;
/** 유효기간 수정_종료일자 */
private String usePosblEndDtStr;
/** 문자 입력 내용 */
private String mlgSmsCn;
/** 문자 발송 전화번호 */
private String mbtlnb;
/** 문자 발송 고객명 */
private String mbrNm;
}

View File

@@ -0,0 +1,114 @@
package com.wb.domainserver.domain.crm.mlg.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Date;
/**
*
* 마일리지 VO
* @author 추지훈
* @since 2024-02-05
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-02-05 추지훈 최초 생성
*
* </pre>
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class MlgVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/**
* 마일리지 정보
*/
/** 마일리지 고유번호 */
private BigInteger mlgInnb;
/** 주문고유번호 */
private BigInteger ordrInnb;
/** 회원고유번호 */
private Integer mbrInnb;
/** 회원구분코드 */
private String mbrDvCd;
/** 쇼핑몰 코드 */
private String sopmalCd;
/** 게시글고유번호 */
private Integer bbscttInnb;
/** 주문코드 */
private String ordrCd;
/** 마일리지구분 */
private String mlgDvCd;
/** 마일리지적립구분 */
private String mlgAccmlDvCd;
/** 마일리지적용구분 */
/** 적립(지급) : 리뷰(일반,포토,한달),구매,이벤트, 관리자 사용(차감, 소멸) : 구매, 관리자, 기간만료 */
private String mlgApplcDvCd;
/** 마일리지적용사유 */
private String mlgApplcResn;
/** 적립금액 */
private BigDecimal accmlmnyAmt;
/** 잔액 */
private BigDecimal blce;
/** 손실 */
private BigDecimal loss;
/** 사용가능시작일시 */
private Date usePosblBgnDt;
/** 사용가능종료일시 */
private Date usePosblEndDt;
/** 주문정보 */
private String ordrInfo;
/** 관리코드 */
private String manageCd;
/** 관리메모 */
private String manageMemo;
/** 만료여부 */
private String endAt;
/** 취소여부 */
private String canclAt;
/** 취소일시 */
private Date canclDt;
/** 소멸 배치 묶음 */
private String extshBatchBundle;
/** 온오프 구분 */
private String onlineOflneDvCd;
/** 매장고뷰번호 */
private Integer strInnb;
/** 매장코드 */
private String strCd;
/** 매장명 */
private String strnm;
/** 매장구분 */
private String strDvCd;
/** 포스코드 */
private String posCd;
/** 등록자구분 */
private String regusrDvCd;
/** 수정자구분 */
private String updusrDvCd;
/**
* db 없는 항목
*/
/** 마일리지 유효기간 */
private Integer mlgValidDt;
/** 사용쇼핑몰 코드 */
private String useSopmalCd;
/** 마일리지 유효기간 설정 여부*/
private String validAt;
}

View File

@@ -0,0 +1,62 @@
package com.wb.domainserver.domain.crm.mlg.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.HashMap;
import java.util.List;
/**
*
* 마일리지 VO
* @author 추지훈
* @since 2024-02-05
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-05-21 이운산 최초 생성
*
* </pre>
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class PosReqVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/**
* 포스 요청 정보
*/
/** 매장 코드 */
private String storecode;
/** 포스 코드 */
private String poscode;
/** cmd */
private String cmd;
/**회원 아이디 */
private String uid;
/**매출 코드 */
private String ocode;
/**실 결제 금액 (할인 금액 및 사용 마일리지 제외) */
private Integer amt;
/**프로모션 추가적립금액 */
private Integer promsaveamt;
/**구매한 상품정보 추가*/
private List<HashMap<String, Object>> detail_arr;
/** search_item (string) : uid(아이디), username(이름), cp(휴대폰 번호) */
private String searchItem;
/** 검색어 */
private String searchKey;
/** 나눌 갯수 */
private Integer limit;
/** 시작 위치 */
private Integer offset;
}

View File

@@ -0,0 +1,104 @@
package com.wb.domainserver.domain.crm.ordr.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class CrmGoodsVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/** 주문고유번호 */
private String ordrInnb;
/** 쇼핑몰 코드 */
private String sopmalCd;
/** 회원고유번호 */
private String mbrInnb;
/** 회원구분 */
private String mbrDvCd;
/** 상위 카테고리 */
private String upperCtgryId;
/** 카테고리 */
private String ctgryId;
/** 노출 코드 */
private String expsrCd;
/** 가격 구분 */
private String pricDv;
/** 시작 가격 */
private String startPric;
/** 종료 가격 */
private String endPric;
/** 판매 상태 */
private String[] goodsDftinfoSttus;
/** 일자 구분 */
private String dateDv;
/** 시작 일자 */
private String startDate;
/** 종료 일자 */
private String endDate;
/** 재고에따른 판매 */
private String goodsDftinfoInvntryPolicy;
/** 검색어 */
private String kwrd;
/** 판매상품 고유번호 */
private String goodsInnb;
/** 판매상품 유형 */
private String goodsKndCd;
/** 상품옵션 고유번호 */
private String goodsOptnInnb;
/** 상품옵션 고유번호 배열*/
private String[] goodsOptnInnbs;
/** 상품옵션 구분 */
private String goodsOptnDv;
/** 상품옵션 타입 */
private String optnTy;
/** 개수 */
private int qy;
/** 입력옵션 텍스트 */
private String inputOptn;
/** 입력옵션 텍스트 */
private String inputOptnText;
/** 쿠폰 고유번호 */
private String couponInnb;
/** 다운로드쿠폰 고유번호 */
private String dwldCouponInnb;
/** 중복할인여부 */
private String dplctDscntAt;
/** 타쿠폰동시사용여부 */
private String otrCouponSmtmUseAt;
/** 적용쿠폰 */
private String usedCoupons;
/** 옵션관계번호 배열 */
private String[] optnRelateNbs;
}

View File

@@ -0,0 +1,44 @@
package com.wb.domainserver.domain.crm.ordr.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 CrmOrdrVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/** 주소록 고유번호 */
private int adbkInnb;
/** 회원 고유번호 */
@NotBlank
private int mbrInnb;
/** 배송지설명내용 */
//private String dlvylcDcCn;
/** 받는사람명 */
@NotBlank(message = "받는사람명")
private String recpntNm;
/** 전화번호 */
//private String telnb;
/** 휴대폰번호 */
@NotBlank(message = "휴대폰번호")
private String mbtlnb;
/** 우편번호 */
@NotBlank(message = "우편번호")
private String zip;
/** 도로명,지번 구분 */
private String adresDv;
/** 지번주소 */
private String lnbAdres = "";
/** 도로명주소 */
private String rnmAdres = "";
/** 상세주소 */
@NotBlank(message = "상세주소")
private String dtlAdres;
/** 지번주소 */
private String dftDlvylcAt;
/** 기본배송지여부 */
private String recentDlvylcAt;
}

View File

@@ -0,0 +1,92 @@
package com.wb.domainserver.domain.crm.ordr.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class CrmPurchsrVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/** 쇼핑몰 코드 */
private String sopmalCd;
/** 회원고유번호 */
private String mbrInnb;
/** 회원구분코드 */
private String mbrDvCd;
/** 회원아이디 */
private String mbrId;
/** 회원명 */
private String mbrNm;
/** 회원명 email */
private String email;
/** 회원명 핸드폰번호 */
private String mbtlnb;
/** 검색어 */
private String kwrd;
/** 일자 구분 */
private String dateDv;
/** 시작 일자 */
private String startDate;
/** 종료 일자 */
private String endDate;
/** SMS 수신 동의 여부 */
private String smsRecptnAgreAt;
/** 이메일 수신 동의 여부 */
private String emailRecptnAgreAt;
/** 등급 */
private String mbrGradInnb;
/** 구매금액 시작 */
private String startPurchaseAmount;
/** 구매금액 종료 */
private String endPurchaseAmount;
/** 마일리지액 시작 */
private String startMlgAmt;
/** 마일리지액 */
private String endMlgAmt;
/** 주문 횟수 시작 */
private String startOrderCnt;
/** 주문 횟수 종료 */
private String endOrderCnt;
/** 리뷰 횟수 시작 */
private String startRvwCnt;
/** 리뷰 횟수 종료 */
private String endRvwCnt;
/** 방문 횟수 시작 */
private String startVisitCnt;
/** 방문 횟수 종료 */
private String endVisitCnt;
/** 주소록 고유번호 */
private String adbkInnb;
/** 주소록 고유번호 목록*/
private String[] adbkInnbs;
/** 기본배송지 여부 */
private String dftDlvylcAt;
}

View File

@@ -0,0 +1,5 @@
package com.wb.domainserver.domain.crm.ordr.vo;
public class CrmRefndVO {
}

View File

@@ -0,0 +1,214 @@
package com.wb.domainserver.domain.crm.ordr.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class PayVO extends AbstractVO {
/** 쇼핑몰코드 */
private String sopmalCd="";
/** 결제금액 */
private String amount;
/** 주문번호(토스/kcp) */
private String orderId;
/** 주문품목(토스) / 상품명(kcp) */
private String orderName="";
/** 회원고유번호 */
private String customerIdentityNumber;
/** 현금영수증종류 */
private String type;
/** 면세처리금액 */
private String taxFreeAmount;
/** 발급 혹은 취소 요청한 현금영수증 한 건을 특정하는 키 */
private String receiptKey;
/** 결제를 식별하는 키. 토스페이먼츠에서 발급. 결제 승인, 결제 조회, 결제 취소 등 운영에 필요한 값입니다. */
private String paymentKey;
/** 결제수단의 ID */
private String methodId;
//여기서부터 kcp
/** 현금영수증 거래번호 cash_no */
private String cashNo;
/** 현금영수증 거래번호 cash_no : 조회 > tno */
private String tno;
/** 현금영수증 거래번호 cash_no : 취소 > mod_value */
private String modValue;
/** 인증서정보(직렬화) */
private String kcpCertInfo;
/** 원거래 시각 */
private String tradTime;
/** 발행용도 */
private String trCode;
/** 휴대폰번호/현금영수증 카드/사업자번호 */
private String idInfo;
/** 거래금액 총합 */
private String amtTot;
/** 공급가액 */
private String amtSup;
/** 부가가치세 */
private String amtTax;
/** 사업장 구분 */
private String corpType="0";
/** 주문자명 */
private String buyrName="";
/** 주문자 E-MAIL */
private String buyrMail="";
/** 취소 요청 정보 */
private String modType;
/** 부분취소 요청 금액 */
private String modMny;
/** 부분취소 가능 금액 */
private String remMny;
/** 취소사유 */
private String modDesc;
/** kcp 결체승인시 필요한 암호값 (kcp발급) */
private String encInfo;
/** kcp 결체승인시 필요한 암호값 (kcp발급) */
private String encData;
/** KCP 거래 고유번호 (kcp발급) */
private String tranCd;
/** 결제수단 */
private String payMethod;
/** 결제통화 */
private String currency;
/** 결제금액 */
private String goodMny;
/** 에스크로 사용 여부 */
private String escwUsed;
/** 에스크로 결제처리 모드 : 에스크로: Y, 일반: N */
private String payMod;
/** 에스크로 수취인명 */
private String rcvrName;
/** 에스크로 수취인 연락처1 */
private String rcvrTel1;
/** 에스크로 수취인 휴대폰번호 */
private String rcvrTel2;
/** 에스크로 수취인 E-mail */
private String rcvrMail;
/** 에스크로 수취인 우편번호 */
private String rcvrZipx;
/** 에스크로 수취인 주소 */
private String rcvrAdd1;
/** 에스크로 수취인 상세주소 */
private String rcvrAdd2;
/** 에스크로 배송 소요일 */
private String deliTerm;
/** 에스크로 장바구니 상품 개수(종류수) */
private String baskCntx;
/** 에스크로 장바구니 상품 상세 정보 */
private String goodInfo;
/** 에스크로 상태변경 택배송장번호 */
private String deliNumb;
/** 에스크로 상태변경 배송 업체명 */
private String deliCorp;
//수기결제 공용
/** 수기결제 - 카드변호 */
private String cardNumber;
/** 수기결제 - 카드유효년월(YYMM) */
private String cardExpiration;
/** 수기결제 - 카드유효년도(YY) */
private String cardExpirationYear;
/** 수기결제 - 카드유효월(MM) */
private String cardExpirationMonth;
/** 수기결제 - 카드비밀번호 */
private String cardPassword;
/** 수기결제 - 고객생년월일 */
private String customerBirthday;
/** 수기결제 - 고객이름 */
private String customerName;
/** 수기결제 - 고객이메일 */
private String customerEmail;
/** 수기결제 - 고객전화번호 */
private String customerTel;
/** 수기결제 - 할부개월수 */
private String cardInstallmentPlan;
//결제정보
/** 결제정보 - PG회사명 */
private String pgCmpnyNm;
/** 결제정보 - 결제타입코드 */
private String setleTyCd;
/** 결제정보 - 결제자 */
private String setlerNm;
/** 결제정보 - 회원고유번호 */
private String mbrInnb;
/** 결제정보 - 회원ID */
private String mbrId;
/** 결제정보 - 회원구분코드 */
private String mbrDvCd;
/** 결제정보 - 코드 */
private String code;
/** 결제정보 - 모드구분 */
private String modGubun;
/** 세션 gcpay token */
private String sessionToken;
private String mbtlnb;
}