초기소스

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,255 @@
package com.wb.domainserver.domain.mngr.goods.banner.controller;
import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.domain.mngr.goods.banner.vo.BannerVO;
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.ReplyFromResrc;
import com.wb.domainserver.util.communicate.SendToResrc;
import com.wb.domainserver.util.communicate.ValidateResultConverter;
import com.wb.domainserver.util.file.FileMngUtil;
import com.wb.domainserver.util.file.service.FileStorageService;
import jakarta.servlet.http.HttpServletRequest;
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.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import java.util.HashMap;
import java.util.List;
@Slf4j
@Controller
@RequestMapping("/mngr/goods/banner")
public class BannerController {
@Autowired
private SendToResrc sendToResrc;
@Autowired
private GconeMessageSource gconeMessageSource;
@Autowired
private FileMngUtil fileMngUtil;
@Value("${mngrfo.common.fileupload.uploaddirs.goods}")
private String uploadFilePath;
@Value("${mngrfo.common.fileupload.extensions.images}")
private String whiteListFileUploadExtensions;
@Autowired
private FileStorageService filestore;
@Autowired
private WnbtWebClientResponseHandler responseHandler;
/**
* 배너목록조회
* @param vo
* @param model
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectBannerListR")
public String selectBannerListR(BannerVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/banner/selectBOBannerList", vo),
model,
"resultMap"
);
return "mngr/goods/banner/BannerListR";
}
/**
* 배너등록페이지이동
* @param vo
* @param model
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectBannerRegistForm")
public String selectBannerRegistForm(BannerVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/banner/selectBOBannerRegistForm", vo),
model,
"resultMap"
);
return "mngr/goods/banner/BannerC";
}
/**
* 배너 등록
* @param vo
* @param model
* @param bindingResult
* @param request
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/insertBanner" , method = RequestMethod.POST)
public ResponseEntity<?> insertBanner(@Validated BannerVO vo, BindingResult bindingResult,
HttpServletRequest request,
@CookieValue(value = "authSopmalCd") String authSopmalCd){
if(bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
vo.setSopmalCd(authSopmalCd);
request.setAttribute("shopCd", vo.getSopmalCd());
request.setAttribute("pathGubun", "ETCM");
request.setAttribute("subPathId", "");
request.setAttribute("validExp", "");
List<HashMap<String, Object>> ulpladFileMap;
try {
ulpladFileMap = filestore.fileUpload(request);
vo.setFileInfo(ulpladFileMap);
} catch (WnbtRestException wre){
throw new WnbtRestException("파일 업로드에 실패했습니다."+ wre.getMessage());
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/banner/insertBOBanner", vo),
ReplyFromResrc::getReply
);
}
/**
* 배너수정페이지 및 상세조회
* @param vo
* @param model
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectBannerDtlForm" , method = RequestMethod.POST)
public String selectBannerDtlForm(BannerVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/banner/selectBOBannerDtlForm", vo),
model,
"resultMap"
);
return "mngr/goods/banner/BannerDtlU";
}
/**
* 배너 수정
* @param vo
* @param model
* @param bindingResult
* @param request
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/updateBannerDtl")
public ResponseEntity<?> updateBannerDtl(@Validated BannerVO vo, BindingResult bindingResult, HttpServletRequest request, @CookieValue(value = "authSopmalCd") String authSopmalCd){
if(bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
vo.setSopmalCd(authSopmalCd);
request.setAttribute("shopCd", vo.getSopmalCd());
request.setAttribute("pathGubun", "ETCM");
request.setAttribute("subPathId", "");
request.setAttribute("validExp", "");
List<HashMap<String, Object>> ulpladFileMap;
try {
ulpladFileMap = filestore.fileUpload(request);
vo.setFileInfo(ulpladFileMap);
} catch (WnbtRestException wre){
throw new WnbtRestException("파일 업로드에 실패했습니다."+wre.getMessage());
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/banner/updateBOBannerDtl", vo),
ReplyFromResrc::getReply
);
}
/**
* 배너삭제
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/deleteBanner" , method = RequestMethod.POST)
public ResponseEntity<?> deleteBanner(BannerVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/banner/deleteBOBanner", vo),
ReplyFromResrc::getReply
);
}
/**
* 배너 순서 지정 팝업
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectBannerOrdrPopup" , method = RequestMethod.POST)
public String selectBannerOrdrPopup(BannerVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/banner/selectBOBannerOrdrPopup", vo),
model,
"resultMap"
);
return "mngr/goods/banner/BannerOrdrPopupR";
}
/**
* 배너 순서 수정
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/updateBannerOrdr" , method = RequestMethod.POST)
public ResponseEntity<?> updateBannerOrdr( @RequestBody List<BannerVO> vo,
@CookieValue(value = "authSopmalCd") String authSopmalCd){
for(BannerVO bannerVO : vo){
bannerVO.setSopmalCd(authSopmalCd);
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/banner/updateBOBannerOrdr", vo),
ReplyFromResrc::getReply
);
}
}

View File

@@ -0,0 +1,97 @@
package com.wb.domainserver.domain.mngr.goods.banner.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 BannerVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/** table name : fm_goods_banner */
/** 배너 key */
private Integer bannerInnb;
/** 쇼핑몰코드 */
private String sopmalCd;
/** 배너 명 */
@NotBlank(message = "배너명")
private String bannerNm;
/** 노출위치구분 */
private String expsrlcDv;
/** 노출구분 */
private String expsrlcDvCd;
/** 배너 경로 */
private String bannerUrl;
/** 노출시작일시 */
private String expsrBgnDt;
/** 노출종료일시 */
private String expsrEndDt;
/** 원본파일명 */
private String orginlFilNm;
/** 시스템파일명 */
private String sysFilNm;
/** 파일용량 */
private String filMg;
/** 파일타입 */
private String filTy;
/** 파일경로 */
private String filCours;
/** 파일정보 */
private List<HashMap<String, Object>> fileInfo;
/** 추가 항목 */
/** 상품리스트 */
private String[] goodsIds;
/** 상품 갯수 */
private String goodsCnt;
/** 파일 사용 상태값 */
private String fileUse;
/** 노출 예약 시작 날짜 */
private String expsrBgnYmd;
/** 노출 예약 종료 날짜 */
private String expsrEndYmd;
/** 노출 예약 시작 시각 */
private String expsrBgnTime;
/** 노출 예약 종료 시각 */
private String expsrEndTime;
// 이벤트 적용 상품
/** 상품 적용 구분 코드 */
private String goodsApplcDvCd;
/** 선택한 카테고리 */
private String[] reprsntCtgryId;
/** 선택한 상품 */
private String[] relatedGoodsId;
/** 상품 고유번호 */
private String goodsInnb;
/** 이벤트 적용상품 고유번호 */
private Integer evtApplcGoodsInnb;
/** 상품적용구분 */
private String goodsApplcDv;
/** 판매상품 고유번호 */
private Integer sleGoodsInnb;
/** 혜택 적용 판매상품 고유번호 리스트 */
private List<Integer> sleGoodsInnbList;
/** 혜택 제외 판매상품 고유번호 리스트 */
private List<Integer> ExclSleGoodsInnbList;
/** 카테고리 ID */
private String ctgryId;
/** 혜택 적용 카테고리 ID 리스트 */
private List<Integer> ctgryIdList;
/** 혜택 제외 카테고리 ID 리스트 */
private List<Integer> ExclCtgryIdList;
/** 상위 카테고리 */
private String upperCtgryId;
/*배너순서*/
private String bannerOrdr;
}

View File

@@ -0,0 +1,165 @@
package com.wb.domainserver.domain.mngr.goods.cmnuse.controller;
import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.domain.mngr.goods.cmnuse.vo.CmnuseVO;
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 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.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
/**
* Cmnuse Controller Class (front)
*
* @author
* @since 2024-02-10
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2023-12-10 최초 생성
*
* </pre>
*/
@Controller
@Slf4j
@RequestMapping("/mngr/goods/cmnuse")
public class CmnuseController {
/** WebClient 호출을 위한 wrapper */
@Autowired
private SendToResrc sendToResrc;
/** 공통 메시지 처리를 위한 메시지 객체 */
@Autowired
private GconeMessageSource gconeMessageSource;
@Autowired
private WnbtWebClientResponseHandler responseHandler;
/**
* 공용 정보 목록 조회
* @param CmnuseVO
* @param model 모델객체
* @return String JSP 경로
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectCmnuseInfoList")
public String selectCmnuseInfoList(CmnuseVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/cmnuse/selectBOCmnuseInfoList", vo),
model,
"resultMap"
);
return "mngr/goods/cmnuse/CmnuseInfoListR";
}
/**
* 공용 정보 등록
* @param CmnuseVO
* @return ResponseEntity
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/insertCmnuseInfo" , method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> insertCmnuseInfo(CmnuseVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/cmnuse/insertBOCmnuseInfo", vo),
ReplyFromResrc::getReply
);
}
/**
* 공용 정보 등록 화면 조회
* @param CmnuseVO
* @param model 모델객체
* @return String JSP 경로
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectCmnuseInfoForm")
public String selectCmnuseInfoForm(CmnuseVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
return "mngr/goods/cmnuse/CmnuseInfoFormR";
}
/**
* 공용 정보 수정
* @param CmnuseVO
* @return ResponseEntity
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/updateCmnuseInfoDtl", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updateCmnuseInfoDtl(CmnuseVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/cmnuse/updateBOCmnuseInfoDtl", vo),
ReplyFromResrc::getReply
);
}
/**
* 공용 정보 수정 화면 조회
* @param CmnuseVO
* @param model 모델객체
* @return String JSP 경로
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectCmnuseInfoDtlForm")
public String selectCmnuseInfoDtlForm(CmnuseVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/cmnuse/selectBOCmnuseInfoDtlForm", vo),
model,
"resultMap"
);
return "mngr/goods/cmnuse/CmnuseInfoDtlFormR";
}
/**
* 공용 정보 삭제
* @param CmnuseVO
* @return ResponseEntity
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/deleteCmnuseInfo", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> deleteCmnuseInfo(CmnuseVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/cmnuse/deleteBOCmnuseInfo", vo),
ReplyFromResrc::getReply
);
}
}

View File

@@ -0,0 +1,28 @@
package com.wb.domainserver.domain.mngr.goods.cmnuse.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class CmnuseVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/** 공용정보 고유번호 */
private String cmnuseInfoInnb;
/** 버전번호 */
private String verNb;
/** 사업자 고유번호 */
private String bsnmInnb;
/** 공용정보 타이틀 */
private String cmnuseInfoSj;
/** 정보내용 */
private String infoCn;
/** 사용여부 */
private String useAt;
/** 쇼핑몰 코드 */
private String sopmalCd;
}

View File

@@ -0,0 +1,180 @@
package com.wb.domainserver.domain.mngr.goods.goodsinfo.controller;
import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.domain.mngr.goods.goodsinfo.vo.GoodsInfoVO;
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;
/**
* GoodsInfoController Controller Class (front)
*
* @author
* @since 2023-12-12
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2023-12-12 최범식 최초 생성
* 2024-02-14 이운산 상품정보수정선택 수정
*
* </pre>
*/
@Slf4j
@Controller
@RequestMapping("/mngr/goods/goodsinfo")
public class GoodsInfoController {
/** WebClient 호출을 위한 wrapper */
@Autowired
private SendToResrc sendToResrc;
/** 공통 메시지 처리를 위한 메시지 객체 */
@Autowired
private GconeMessageSource gconeMessageSource;
@Autowired
private WnbtWebClientResponseHandler responseHandler;
/**
* 상품 정보 목록 조회
* @param GoodsInfoVO
* @return GoodsInfoListR.jsp
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectGoodsInfoList")
public String selectBbsListInqire(GoodsInfoVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goodsinfo/selectBOGoodsInfoList", vo),
model,
"resultMap"
);
return "mngr/goods/goodsinfo/GoodsInfoListR";
}
/**
* 상품 정보 등록화면
* @param GoodsInfoVO
* @return GoodsInfoFormR.jsp
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectGoodsInfoForm")
public String selectGoodsInfoForm(GoodsInfoVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
model.addAttribute("goodsExpsrInfoInnb", vo.getGoodsExpsrInfoInnb());
return "mngr/goods/goodsinfo/GoodsInfoFormR";
}
/**
* 상품 정보 등록
* @param GoodsInfoVO
* @param bindingResult 바인딩 및 정합성 점검결과 객체
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/insertGoodsInfo", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> insertGoodsInfo(@Validated GoodsInfoVO vo, BindingResult bindingResult,
@CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
if(bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goodsinfo/insertBOGoodsInfo", vo),
ReplyFromResrc::getReply
);
}
/**
* 상품 정보 수정화면
* @param GoodsInfoVO
* @param model 모델객체
* @return GoodsInfoDtlFormR.jsp
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectGoodsInfoDtlForm")
public String selectGoodsInfoDtlForm(GoodsInfoVO vo, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goodsinfo/selectBOGoodsInfoDtlForm", vo),
model,
"resultMap"
);
return "mngr/goods/goodsinfo/GoodsInfoDtlFormR";
}
/**
* 상품 정보 수정
* @param GoodsInfoVO
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/updateGoodsInfoDtl")
public ResponseEntity<WnbtResponse> updateGoodsInfoDtl(@Validated GoodsInfoVO vo, BindingResult bindingResult, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
if(bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goodsinfo/updateBOGoodsInfoDtl", vo),
ReplyFromResrc::getReply
);
}
/**
* 상품 정보 삭제
* @param GoodsInfoVO
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/deleteGoodsInfo")
public ResponseEntity<WnbtResponse> deleteGoodsInfo(GoodsInfoVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goodsinfo/updateBOGoodsInfoDel", vo),
ReplyFromResrc::getReply
);
}
}

View File

@@ -0,0 +1,53 @@
package com.wb.domainserver.domain.mngr.goods.goodsinfo.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import jakarta.validation.constraints.NotBlank;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@AllArgsConstructor
@EqualsAndHashCode(callSuper = false)
public class GoodsInfoVO extends AbstractVO {
private static final long serialVersionUID = 1L;
/** 상품노출정보 고유번호 */
private String goodsExpsrInfoInnb;
/** 쇼핑몰코드 */
private String sopmalCd;
/** 상품정보설정 제목 */
@NotBlank(message = "상품 정보명")
private String goodsInfoSetupSj;
/** 상품명노출여부 */
private String goodsNmExpsrAt;
/** 상품명노출순서 */
private String goodsNmExpsrOrdr;
/** 대표설명노출여부 */
private String reprsntDcExpsrAt;
/** 대표설명노출순서 */
private String reprsntDcExpsrOrdr;
/** 가격노출여부 */
private String pricExpsrAt;
/** 가격노출순서 */
private String pricExpsrOrdr;
/** 배송노출여부 */
private String dlvyExpsrAt;
/** 배송노출순서 */
private String dlvyExpsrOrdr;
/** 리뷰 평점 노출여부 */
private String rvwEvlScreExpsrAt;
/** 리뷰 평점 노출순서 */
private String rvwEvlScreExpsrOrdr;
/** 아이콘 노출여부 */
private String iconExpsrAt;
/** 아이콘 노출순서 */
private String iconExpsrOrdr;
/** 사용여부 */
private String useAt;
/** 순서 DB 저장용도 아님*/
private String[] sortOrdr;
}

View File

@@ -0,0 +1,686 @@
package com.wb.domainserver.domain.mngr.goods.goodsmngr.controller;
import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.domain.mngr.goods.goodsmngr.vo.GoodsmngrVO;
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.file.service.FileStorageService;
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.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
/**
* GoodsmngrController Controller Class (front)
*
* @author
* @since 2024-03-19
* @version 1.0
* @see
*
* <pre>
* == (Modification Information) == 개정이력
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2024-03-19 리브가 최초 생성
* -
*
* </pre>
*/
@Controller
@Slf4j
@RequestMapping("/mngr/goods/goodsmngr")
public class GoodsmngrController {
/** WebClient 호출을 위한 wrapper */
@Autowired
private SendToResrc sendToResrc;
/** 공통 메시지 처리를 위한 메시지 객체 */
@Autowired
private GconeMessageSource gconeMessageSource;
/** 파일 업로드 */
@Autowired
private FileStorageService filestore;
@Autowired
private WnbtWebClientResponseHandler responseHandler;
/**
* 상품 목록 조회 폼
* @param vo
* @param model
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectGoodsListForm")
public String selectGoodsListForm(GoodsmngrVO vo,
ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setUpperCtgryId("1");
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/selectBOGoodsListForm", vo),
model,
"resultMap"
);
return "mngr/goods/goodsmngr/GoodsListRForm";
}
/**
* 상품 목록 조회 리스트
* @param vo
* @param model
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectGoodsList")
public String selectGoodsList(GoodsmngrVO vo,
ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/selectBOGoodsList", vo),
model,
"resultMap"
);
return "mngr/goods/goodsmngr/GoodsListR";
}
/**
* 카테고리별 상품 목록 조회 폼
* @param vo
* @param model
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectCtgryGoodsListForm")
public String selectCtgryGoodsListForm(GoodsmngrVO vo,
ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setUpperCtgryId("1");
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/selectBOGoodsListForm", vo),
model,
"resultMap"
);
return "mngr/goods/goodsmngr/CtgryGoodsListRForm";
}
/**
* 카테고리별 상품 목록 조회 리스트
* @param vo
* @param model
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectCtgryGoodsList")
public String selectCtgryGoodsList(GoodsmngrVO vo,
ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/selectBOCtgryGoodsList", vo),
model,
"resultMap"
);
return "mngr/goods/goodsmngr/CtgryGoodsListR";
}
/**
* 카테고리별 상품 목록 순서 수정
* @param vo
* @param model
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updateCtgryGoodsList")
public ResponseEntity<WnbtResponse> updateCtgryGoodsList(@RequestBody GoodsmngrVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/updateBOCtgryGoodsList", vo),
ReplyFromResrc::getReply
);
}
/**
* 상품 등록 폼 조회
* @param vo
* @param model
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectGoodsRegistForm")
public String selectGoodsRegistForm(GoodsmngrVO vo,
ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
vo.setUpperCtgryId("1");
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/selectBOGoodsListForm", vo),
model,
"resultMap"
);
return "mngr/goods/goodsmngr/GoodsC";
}
/**
* 상품 등록
* @param vo
* @param request
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/insertGoodsInfo", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> insertGoodsInfo(GoodsmngrVO vo, HttpServletRequest request, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
//파일 업로드 관련 START
List<HashMap<String, Object>> ulpladFileMap = new ArrayList<HashMap<String, Object>>();
request.setAttribute("shopCd", vo.getSopmalCd());
request.setAttribute("pathGubun","GDIG"); //이미지구분코드 - 상품
try {
ulpladFileMap = filestore.fileUpload(request);
vo.setFileInfo(ulpladFileMap);
} catch (WnbtRestException wre){
throw new WnbtRestException("파일 업로드에 실패했습니다."+ wre.getMessage());
} catch (Exception e) {
log.error(e.getMessage(), e);
}
//파일 업로드 관련 END
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/insertBOGoods", vo),
ReplyFromResrc::getReply
);
}
/**
* 상품 삭제
* @param vo
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/deleteGoods", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> deleteGoods(GoodsmngrVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/deleteBOGoods", vo),
ReplyFromResrc::getReply
);
}
/**
* 상품 상세 폼
* @param vo
* @param model
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectGoodsDtlForm")
public String selectGoodsDtlForm( GoodsmngrVO vo,
ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/selectBOGoodsDtl", vo),
model,
"resultMap"
);
return "mngr/goods/goodsmngr/GoodsDtlU";
}
/**
* 상품 수정(카테고리)
* @param vo
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updateGoodsDtlCtgryLink", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updateGoodsDtlCtgryLink(HttpServletRequest request, GoodsmngrVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
if(request.getAttribute("LoggingClientIp") != null) {
vo.setIp(request.getAttribute("LoggingClientIp").toString());
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/updateBOGoodsDtlCtgryLink", vo),
ReplyFromResrc::getReply
);
}
/**
* 상품 수정(기본정보)
* @param vo
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updateGoodsDtlBscInfo", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updateGoodsDtlBscInfo(HttpServletRequest request, GoodsmngrVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
if(request.getAttribute("LoggingClientIp") != null) {
vo.setIp(request.getAttribute("LoggingClientIp").toString());
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/updateBOGoodsDtlBscInfo", vo),
ReplyFromResrc::getReply
);
}
/**
* 상품 수정(판매정보)
* @param vo
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updateGoodsDtlSelInfo", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updateGoodsDtlSelInfo(HttpServletRequest request, GoodsmngrVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
if(request.getAttribute("LoggingClientIp") != null) {
vo.setIp(request.getAttribute("LoggingClientIp").toString());
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/updateBOGoodsDtlSelInfo", vo),
ReplyFromResrc::getReply
);
}
/**
* 상품 수정(판매정보 - 재고정책 수정에 따른 옵션 수량 변경)
* @param vo
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updateGoodsDtlInvntryPolicyInfo", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updateGoodsDtlInvntryPolicyInfo(HttpServletRequest request, GoodsmngrVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
if(request.getAttribute("LoggingClientIp") != null) {
vo.setIp(request.getAttribute("LoggingClientIp").toString());
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/updateBOGoodsDtlInvntryPolicyInfo", vo),
ReplyFromResrc::getReply
);
}
/**
* 상품 수정(구매대상자 제한 팝업)
* @param vo
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updateGoodsDtlTrgterLmtt", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updateGoodsDtlTrgterLmtt(HttpServletRequest request, GoodsmngrVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
if(request.getAttribute("LoggingClientIp") != null) {
vo.setIp(request.getAttribute("LoggingClientIp").toString());
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/updateBOGoodsDtlTrgterLmtt", vo),
ReplyFromResrc::getReply
);
}
/**
* 상품 수정(상품옵션정보)
* @param vo
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updateGoodsDtlOptnInfo", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updateGoodsDtlOptnInfo(HttpServletRequest request, GoodsmngrVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
if(request.getAttribute("LoggingClientIp") != null) {
vo.setIp(request.getAttribute("LoggingClientIp").toString());
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/updateBOGoodsDtlOptnInfo", vo),
ReplyFromResrc::getReply
);
}
/**
* 상품 수정(상품이미지)
* @param vo
* @param request
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updateGoodsDtlImg", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updateGoodsDtlImg(GoodsmngrVO vo, HttpServletRequest request, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
//파일 업로드 관련 START
List<HashMap<String, Object>> ulpladFileMap = new ArrayList<HashMap<String, Object>>();
request.setAttribute("shopCd", vo.getSopmalCd());
request.setAttribute("pathGubun","GDIG"); //이미지구분코드 - 상품
if(request.getAttribute("LoggingClientIp") != null) {
vo.setIp(request.getAttribute("LoggingClientIp").toString());
}
try {
ulpladFileMap = filestore.fileUpload(request);
vo.setFileInfo(ulpladFileMap);
} catch (WnbtRestException wre){
throw new WnbtRestException("파일 업로드에 실패했습니다."+ wre.getMessage());
} catch (Exception e) {
log.error(e.getMessage(), e);
}
//파일 업로드 관련 END
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/updateBOGoodsDtlImg", vo),
ReplyFromResrc::getReply
);
}
/**
* 상품 수정(기타정보)
* @param vo
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updateGoodsDtlEtcInfo", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updateGoodsDtlEtcInfo(HttpServletRequest request, GoodsmngrVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
if(request.getAttribute("LoggingClientIp") != null) {
vo.setIp(request.getAttribute("LoggingClientIp").toString());
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/updateBOGoodsDtlEtcInfo", vo),
ReplyFromResrc::getReply
);
}
/**
* 상품 수정(관련상품)
* @param vo
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updateGoodsDtlRelateGoods", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updateGoodsDtlRelateGoods(HttpServletRequest request, GoodsmngrVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
if(request.getAttribute("LoggingClientIp") != null) {
vo.setIp(request.getAttribute("LoggingClientIp").toString());
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/updateBOGoodsDtlRelateGoods", vo),
ReplyFromResrc::getReply
);
}
/**
* 관리자 > 상품 구매대상자 제한 설정 팝업 폼
* @param vo
* @param model
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping("/selectGoodsPurchaseLimttPopupC")
public String selectGoodsPurchaseLimttPopupC(GoodsmngrVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd,
ModelMap model) {
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/selectGoodsPurchaseLimttPopupForm", vo),
model,
"resultMap"
);
return "mngr/goods/goodsmngr/GoodsPurchaseLimttPopupC";
}
/**
* 관리자 > 상품 구매대상자 제한 설정 팝업 상세 폼
* @param vo
* @param model
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping("/selectGoodsPurchaseLimttPopupR")
public String selectGoodsPurchaseLimttPopupR(GoodsmngrVO vo,
ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/selectGoodsPurchaseLimttPopupFormR", vo),
model,
"resultMap"
);
return "mngr/goods/goodsmngr/GoodsPurchaseLimttPopupR";
}
/**
* 상품 검색 팝업 폼
* @param vo
* @param model
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectGoodsSrchPopupForm")
public String selectGoodsSrchPopupForm(GoodsmngrVO vo,
ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/selectBOGoodsListForm", vo),
model,
"resultMap"
);
model.addAttribute("paramVO", vo);
return "mngr/goods/goodsmngr/GoodsSrchPopupForm";
}
/**
* 상품 검색 팝업 리스트
* @param vo
* @param model
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectGoodsSrchPopupList")
public String selectGoodsSrchPopupList(GoodsmngrVO vo,
ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/selectBOGoodsList", vo),
model,
"resultMap"
);
return "mngr/goods/goodsmngr/GoodsSrchPopupListR";
}
/**
* 재고 확인 팝업
* @param vo
* @param model
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectGoodsInvntryPopup")
public String selectGoodsInvntryPopup(GoodsmngrVO vo,
ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/selectGoodsInvntry", vo),
model,
"resultMap"
);
return "mngr/goods/goodsmngr/GoodsInvntryPopup";
}
/**
* 관리자 변경이력 조회 (수정로그)
* @param vo
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectGoodsLogDtl", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> selectGoodsLogDtl(@RequestBody GoodsmngrVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/selectBOGoodsLogDtl", vo),
ReplyFromResrc::getReply
);
}
/**
* 상품 복사 등록 폼
* @param vo
* @param model
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectGoodsCopyForm")
public String selectGoodsCopyForm(GoodsmngrVO vo,
ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/selectBOGoodsCopyForm", vo),
model,
"resultMap"
);
return "mngr/goods/goodsmngr/GoodsCopyC";
}
/**
* 상품 일괄 업데이트 폼
* @param vo
* @param model
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/selectBndeUpdtForm")
public String selectBndeUpdtForm(GoodsmngrVO vo,
ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/selectBOBndeUpdtForm", vo),
model,
"resultMap"
);
return "mngr/goods/goodsmngr/BndeUpdtU";
}
/**
* 상품 일괄 업데이트
* @param vo
* @return
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value = "/updateBndeUpdt", method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updateBndeUpdt(GoodsmngrVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd) {
vo.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/updateBOBndeUpdt", vo),
ReplyFromResrc::getReply
);
}
}

View File

@@ -0,0 +1,24 @@
package com.wb.domainserver.domain.mngr.goods.goodsmngr.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class CategoryLinkVO extends AbstractVO {
/** 카테고리연결상품고유번호 */
private long ctgryGoodsEsntlNb;
/** 상품고유번호 */
private long goodsInnb;
/** 쇼핑몰코드 */
private String sopmalCd;
/** 카테고리ID */
private long ctgryId;
/** 대표카테고리여부 */
private String reprsntCtgryAt;
/** 상품순서 */
private long goodsOrdr;
}

View File

@@ -0,0 +1,30 @@
package com.wb.domainserver.domain.mngr.goods.goodsmngr.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
@Data
@EqualsAndHashCode(callSuper = false)
public class GoodsAdditionVO extends AbstractVO {
/** 상품추가정보 고유번호 */
private long goodsAditInfoInnb;
/** 상품고유번호 */
private long goodsInnb;
/** 쇼핑몰코드 */
private String sopmalCd;
/** 추가정보제목 */
private String infoSj;
/** 추가정보내용 */
private String infoCn;
/** 사용여부 */
private String useAt;
/** 노출시작일시 */
private Date expsrBgnDt;
/** 노출종료일시 */
private Date expsrEndDt;
}

View File

@@ -0,0 +1,21 @@
package com.wb.domainserver.domain.mngr.goods.goodsmngr.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class GoodsIconVO extends AbstractVO {
/** 상품아이콘 고유번호*/
private long goodsIconInnb;
/** 쇼핑몰코드 */
private String sopmalCd;
/** 상품고유번호*/
private long goodsInnb;
/** 아이콘코드*/
private String iconCd;
}

View File

@@ -0,0 +1,27 @@
package com.wb.domainserver.domain.mngr.goods.goodsmngr.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class GoodsImageVO extends AbstractVO {
/** 상품이미지 고유번호 */
private long goodsImgInnb;
/** 상품고유번호 */
private long goodsInnb;
/** 쇼핑몰코드 */
private String sopmalCd;
/** 이미지종류 */
private String imgKnd;
/** 컷번호 */
private long cutNb;
/** 이미지경로 */
private String img;
/** 삭제 대상 이미지 고유번호 */
private long delGoodsImgInnb;
}

View File

@@ -0,0 +1,81 @@
package com.wb.domainserver.domain.mngr.goods.goodsmngr.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class GoodsOptionVO extends AbstractVO {
/** 상품옵션 고유번호 */
private Integer goodsOptnInnb;
/** 옵션 유형 */
private String optnTy;
/** 쇼핑몰코드 */
private String sopmalCd;
/** 상품고유번호 */
private long goodsInnb;
/** 상품옵션그룹번호 */
private Integer optnGroupNb;
/** 옵션명 1 */
private String optnNm1;
/** 옵션명 2 */
private String optnNm2;
/** 옵션명 3 */
private String optnNm3;
/** 옵션명 4 */
private String optnNm4;
/** 옵션값 1 */
private String optnVal1;
/** 옵션값 2 */
private String optnVal2;
/** 옵션값 3 */
private String optnVal3;
/** 옵션값 4 */
private String optnVal4;
/** 옵션코드 1 */
private String optnCd1;
/** 옵션코드 2 */
private String optnCd2;
/** 옵션코드 3 */
private String optnCd3;
/** 옵션코드 4 */
private String optnCd4;
/** 옵션정보 */
private String optnInfo;
/** 재고수량 */
private String invntryQy;
/** 판매재고수량 */
private String usefulInvntryQy;
/** 소비자가 */
private Integer cnsmrpric;
/** 판매가 */
private Integer slepric;
/**마일리정책코드*/
private String mlgPolicyCd;
/** 마일리지적립구분코드 */
private String mlgAccmlCd;
/** 마일리지 적립금액 */
private Integer mlgAccmlAmt;
/** 마일리지 유효월수*/
private Integer mlgValidMtCnt;
/** 옵션관계번호 */
private String optnRelateNb;
/** 추가구성옵션 > 옵션관계여부 */
private String optnRelateAt;
/** 옵션노출여부 */
private String optnExpsrAt;
/** 기준구분여부 */
private String stdrDvAt;
/** 재고품절시 노출여부*/
private String invntrySldoutExpsrAt;
/** 옵션순서*/
private Integer optnOrdr;
/** 옵션필수여부 */
private char optnEssntlAt;
/*복수할인여부*/
private String compnbDscntAt;
/*구간할인여부*/
private String sctnDscntAt;
}

View File

@@ -0,0 +1,20 @@
package com.wb.domainserver.domain.mngr.goods.goodsmngr.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class GoodsRelateVO extends AbstractVO {
/** 관련상품 고유번호 */
private long relateGoodsInnb;
/** 상품 고유번호 */
private long goodsInnb;
/** 쇼핑몰코드 */
private String sopmalCd;
/** 관련 판매상품 고유번호 */
private String relateSleGoodsInnb;
}

View File

@@ -0,0 +1,42 @@
package com.wb.domainserver.domain.mngr.goods.goodsmngr.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class GoodsTrgterLmttVO extends AbstractVO {
/** 구매대상자제한 고유번호 */
private long goodsTrgterLmttInnb;
/** 상품고유번호 */
private long goodsInnb;
/** 쇼핑몰코드 */
private String sopmalCd;
/** 구매대상자제한 구분코드 */
private String goodsTrgterDvCd;
/** 회원등급 고유번호 */
private long mbrGradInnb;
/** 가격대체문구사용여부 */
private String pricRplcWordsUseAt;
/** 가격대체문구 */
private String pricRplcWords;
/** 가격대체문구링크URL */
private String pricRplcLink;
/** 가격대체문구링크 구분코드*/
private String pricRplcLinkDvCd;
/** 가격대체문구링크 연결창구분코드 */
private String pricRplcLinkBrwsrDvCd;
/** 버튼대체문구사용여부 */
private String buttonRplcWordsUseAt;
/** 버튼대체문구 */
private String buttonRplcWords;
/** 버튼대체문구링크URL */
private String buttonRplcLink;
/** 버튼대체문구링크 구분코드*/
private String buttonRplcLinkDvCd;
/** 버튼대체문구링크 연결창구분코드 */
private String buttonRplcLinkBrwsrDvCd;
}

View File

@@ -0,0 +1,523 @@
package com.wb.domainserver.domain.mngr.goods.goodsmngr.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 GoodsmngrVO extends AbstractVO {
/*************************************
* 상품 GOODS START
* **********************************/
/** 상품고유번호 */
private String goodsInnb;
/** 쇼핑몰코드 */
private String sopmalCd;
/** 배송그룹 고유번호 */
private String dlvyGroupInnb;
/** 공용정보 고유번호 */
private String cmnuseInfoInnb;
/** 버전번호 */
private long verNb;
/** 사업자 고유번호 */
private long bsnmInnb;
/** 상품종류 */
private String goodsKndCd;
/** 상품코드 */
private String goodsCd;
/** 대표상품코드 */
private String reprsntGoodsCd;
/** 상품명 */
@NotBlank(message = "상품명")
private String goodsNm;
/** 입점상품명 */
private String tentMarktGoodsNm;
/** 부가세 */
private String taxAt;
/** 상품상태 */
private String goodsSttusCd;
/*판매중지상태시 사용자 문구변경여부*/
private String selStpgeCustomWordsAt;
/*판매중지상태시 사용자 변경문구*/
private String selStpgeCustomWords;
/** 재고정책 */
private String invntryPolicyCd;
/** 가용재고제한수량 */
private String avlinvLmttQy;
/** 짧은설명 */
private String srtDc;
/** 키워드 */
private String kwrd;
/** 브랜드 */
private String brandCd;
/** 상품설명 */
private String goodsDc;
/** 모바일상품설명 */
private String mblGoodsDc;
/** 모바일상품설명 PC 동일여부 */
private String mblGoodsDcPcSameAt;
/** 구매수량 제한구분코드 */
private String purchsQyLmttDvCd;
/** 구매수량 유형 */
private String purchsQyTyCd;
/** 최소구매수량 */
private String mummPurchsQy;
/** 최대구매수량 */
private String mxmmPurchsQy;
/** 결제수단설정 */
private String setleMnSetupCd;
/** 상품노출유형 */
private String goodsExpsrTyCd;
/** 노출구분 */
private String expsrDvCd;
/** 노출시작일시 */
private String expsrBgnDt;
/** 노출종료 */
private String expsrEndDt;
/** 노출설정앞문구 */
private String expsrSetupFwords;
/** 리뷰그룹번호 */
private String rvwGroupNb;
/** 리뷰작성가능여부 */
private String rvwWritngPosblAt;
/** 입점마케팅 네이버 연동여부 */
private String naverEpIntrlckAt;
/** 입점마케팅 구글 연동여부 */
private String googleEpIntrlckAt;
/** 입점마케팅 메타 연동여부 */
private String metaEpIntrlckAt;
/** 입점마케팅 모비온 연동여부 */
private String mobionEpIntrlckAt;
/** 예약상품배송일자 */
private String resveGoodsDlvyDe;
/** 예약상품안내문구내용 */
private String resveGoodsGuidanceWordsCn;
/** 배송안내문구내용 */
private String dlvyGuidanceWordsCn;
/** 청약철회가능여부 */
private String subscrptWthdrawPosblAt;
/** 개별취소가능여부 */
private String indvdlzCanclPosblAt;
/** 개별출고가능여부 */
private String indvdlzDlivyPosblAt;
/** 개별반품교환가능여부 */
private String indvdlzReturnExchngPosblAt;
/** 대표설명 */
private String reprsntDc;
/** 한달리뷰작성가능여부 */
private String mtRvwWritngPosblAt;
/** 구매대상자제한구분코드 */
private String purchsTrgterLmttDvCd;
/*일반 상품 일괄 업데이트 여부*/
/*추가정보 수정여부*/
private String goodsAdditionUptAt;
/*
Y 현재정보 유지하면서 업데이트
N 현재 추가정보 삭제 후 업데이트
*/
private String goodsAdditionDeleteAt;
/*판매상태 수정여부*/
private String goodsSttusUptAt;
/*노출여부 수정여부*/
private String ExpsrDvUptAt;
/*공용정보 수정여부*/
private String cmnuseInfoUptAt;
/*배송그룹 수정여부*/
private String dlvyGroupUptAt;
/*배송 안내 문구 수정여부*/
private String dlvyGuidanceWordsCnUptAt;
/*입점마케팅 연동여부 수정여부 */
private String epIntrlckUptAt;
/*전체 상품 선택*/
private String goodsChoiceAll;
/*선택 상품 고유번호*/
private String[] goodsInnbs;
/*관리자 상품 검색 - 대표카테고리기준*/
private String reprsntCtgryAtY;
/*관리자 상품 검색 - 카테고리 미등록*/
private String ctgryNoRegAtY;
/*판매수량 초기화여부*/
private String usefulInvntryQyInit;
/*************************************
* 상품 GOODS END
* **********************************/
/*************************************
* 옵션 GOODS_OPTION START
* **********************************/
/** 입력옵션 */
private List<GoodsOptionVO> goodsInputOptionVOList;
private List<GoodsOptionVO> delGoodsInputOptionVOList;
/** 일반옵션 */
private List<GoodsOptionVO> goodsNormalOptionVOList;
private List<GoodsOptionVO> delGoodsNormalOptionVOList;
/** 추가구성옵션 */
private List<GoodsOptionVO> goodsAddedOptionVOList;
private List<GoodsOptionVO> delGoodsAddedOptionVOList;
/** 재고옵션 */
private List<GoodsOptionVO> goodsInvntryOptionVOList;
private List<GoodsOptionVO> delGoodsInvntryOptionVOList;
/** 상품옵션 고유번호 */
private String goodsOptnInnb;
/** 옵션 유형 */
private String optnTy;
// /** 쇼핑몰코드 */
// private String sopmalCd;
// /** 상품고유번호 */
// private long goodsInnb;
/** 옵션명 1 */
private String optnNm1;
/** 옵션명 2 */
private String optnNm2;
/** 옵션명 3 */
private String optnNm3;
/** 옵션명 4 */
private String optnNm4;
/** 옵션값 1 */
private String optnVal1;
/** 옵션값 2 */
private String optnVal2;
/** 옵션값 3 */
private String optnVal3;
/** 옵션값 4 */
private String optnVal4;
/** 옵션코드 1 */
private String optnCd1;
/** 옵션코드 2 */
private String optnCd2;
/** 옵션코드 3 */
private String optnCd3;
/** 옵션코드 4 */
private String optnCd4;
/** 옵션정보 */
private String optnInfo;
/** 재고수량 */
private Integer invntryQy;
/** 가용재고수량 */
private Integer usefulInvntryQy;
/** 공급가 */
private Integer splpric;
/** 소비자가 */
private Integer cnsmrpric;
/** 판매가 */
private Integer slepric;
/** 마일리지적립구분코드 */
private String mlgAccmlCd;
/** 마일리지 적립금액 */
private Integer mlgAccmlAmt;
/** 옵션관계번호 */
private long optnRelateNb;
/** 옵션노출여부 */
private String optnExpsrAt;
/** 기준구분여부 */
private String stdrDvAt;
/*************************************
* 옵션 GOODS_OPTION END
* **********************************/
/*************************************
* 관련상품(추천상품) GOODS_RELATE START
* **********************************/
/** 관련상품(추천상품) */
private List<GoodsRelateVO> goodsRelateVOList;
/** 관련상품 고유번호 */
private long relateGoodsInnb;
// /** 상품 고유번호 */
// private long goodsInnb;
/** 관련 판매상품 고유번호 */
// private long relateSleGoodsInnb;
/*************************************
* 관련상품 GOODS_RELATE END
* **********************************/
/*************************************
* 추가정보 GOODS_ADDITION START
* **********************************/
/** 추가정보 */
private List<GoodsAdditionVO> goodsAdditionVOList;
private List<GoodsAdditionVO> deleteAdditionVOList;
/*************************************
* 추가정보 GOODS_ADDITION END
* **********************************/
/*************************************
* 할인(프로모션) SHOP_GOODS_DSCNT START
* **********************************/
/** 판매상품할인정책고유번호 */
private long sleGoodsDscntInnb;
// /** 상품고유번호 */
// private long goodsInnb;
// /** 쇼핑몰코드 */
// private String sopmalCd;
/** 할인시작구매수량 */
private long dscntBgnPurchsQy;
/** 할인종료구매수량 */
private long dscntEndPurchsQy;
/** 할인구분코드 */
private String dscntDvCd;
/** 할인금액 */
private double dscntAmt;
/*************************************
* 할인(프로모션) SHOP_GOODS_DSCNT END
* **********************************/
/*************************************
* 아이콘 GOODS_ICON START
* **********************************/
/** 아이콘 */
private String goodsIconCd;
/** 상품아이콘 고유번호*/
// private long goodsIconInnb;
// /** 상품고유번호*/
// private long goodsInnb;
/** 아이콘코드*/
// private String iconCd;
/*************************************
* 아이콘 GOODS_ICON END
* **********************************/
/*************************************
* 이미지 GOODS_IMAGE START
* **********************************/
/** 상품이미지 고유번호 */
private long goodsImgInnb;
// /** 상품고유번호 */
// private long goodsInnb;
// /** 쇼핑몰코드 */
// private String sopmalCd;
/** 이미지종류 */
private String imgKnd;
/** 컷번호 */
private long cutNb;
/** 이미지경로 */
private String img;
//이미지정보
private List<GoodsImageVO> goodsImageVOList;
//삭제할 이미지 정보
private List<GoodsImageVO> delGoodsImageVOList;
/*************************************
* 이미지 GOODS_IMAGE END
* **********************************/
/*************************************
* 카테고리연결 CATEGORY_LINK START
* **********************************/
/** 카테고리 */
private List<CategoryLinkVO> goodsCategoryLinkVOList;
/** 카테고리연결상품고유번호 */
// private long ctgryGoodsEsntlNb;
// /** 상품고유번호 */
// private long goodsInnb;
/** 카테고리ID */
private String ctgryId;
/** 대표카테고리여부 */
// private String reprsntCtgryAt;
/** 상품순서 */
// private double goodsOrdr;
/*************************************
* 카테고리연결 CATEGORY_LINK END
* **********************************/
/*************************************
* 상품수정로그 FM_GOODS_ADMIN_LOG START
* **********************************/
/** 상품수정로그 고유번호 */
private long goodsUpdtLogInnb;
/** 항목명 */
private String itmNm;
/** 변경전값 */
private String chngBfeVal;
/** 변경후값 */
private String chngAfeVal;
/** 수정자 이름 */
private String regusrNm;
/** 회차 */
private double round;
/** 아이피 */
private String ip;
/*************************************
* 상품수정로그 FM_GOODS_ADMIN_LOG END
* **********************************/
/*************************************
* 상품 구매대상자제한 FM_GOODS_TRGTER_LMTT START
* **********************************/
/** 구매대상자 제한 > 회원 등급별 */
private List<GoodsTrgterLmttVO> goodsTrgterLmttMemGradVOList;
/** 구매대상자 제한 > 모든등급 */
private GoodsTrgterLmttVO goodsTrgterLmttMemAllVOList;
/** 구매대상자 제한 > 비회원 */
private GoodsTrgterLmttVO goodsTrgterLmttNoneVOList;
// private long goodsTrgterLmttInnb;
// private long goodsInnb;
// private String sopmalCd;
// private String goodsTrgterDvCd;
// private long mbrGradInnb;
// private String pricRplcWordsUseAt;
// private String pricRplcWords;
// private String pricRplcLink;
// private String pricRplcLinkDvCd;
// private String pricRplcLinkBrwsrDvCd;
// private String buttonRplcWordsUseAt;
// private String buttonRplcWords;
// private String buttonRplcLink;
// private String buttonRplcLinkDvCd;
// private String buttonRplcLinkBrwsrDvCd;
/*************************************
* 상품 구매대상자제한 FM_GOODS_TRGTER_LMTT END
* **********************************/
/** 주문고유번호 */
private String ordrInnb;
/** 회원고유번호 */
private String mbrInnb;
/** 회원구분 */
private String mbrDvCd;
/** 상위 카테고리 */
private String upperCtgryId;
/** 노출 코드 */
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[] goodsOptnInnbs;
/** 상품옵션 구분 */
private String goodsOptnDv;
/** 개수 */
private int qy;
/** 입력옵션 텍스트 */
private String inputOptn;
/** 이벤트 고유번호 배열*/
private String[] evtInnbs;
/** 이벤트 고유번호 */
private String evtInnb;
/** 이벤트 구분 */
private String evtDv;
/** 쿠폰 고유번호 */
private String couponInnb;
/** 다운로드쿠폰 고유번호 */
private String dwldCouponInnb;
/** 쿠폰 혜택구분 */
private String bnefDv;
/** 중복할인여부 */
private String dplctDscntAt;
/** 타쿠폰동시사용여부 */
private String otrCouponSmtmUseAt;
/** 적용쿠폰 */
private String usedCoupons;
/** 검색_정렬구분 */
private String sortDv;
/** 검색 타입 */
private String srchType;
/** 검색어 */
private String srchStr;
/** 선택 삭제 */
private List<HashMap<String, Object>> delInnbArr;
/** 이미지 파일 업로드 */
private List<HashMap<String, Object>> fileInfo;
//실시간 수량배너 노출 설정
/** 실시간 수량배너 노출여부*/
private String rltmQyBannerExpsrAt;
/** 실시간수량배너 구분*/
private String rltmQyBannerDvCd;
/** 실시간 수량배너 이벤트 실판매 실재고수량*/
private Integer rltmRlQy;
/** 실시간 수량배너 이벤트 실판매 실재고판매수량*/
private Integer rltmRlSleQy;
/** 실시간 수량배너 이벤트 가판매 가재고수량*/
private Integer rltmVirtlQy;
/** 실시간 수량배너 이벤트가판매 가수량차감기준일시 */
private String rltmQyDdctStdrDt;
/** 실시간 수량배너 이벤트가판매 가수량차감시간*/
private Integer rltmQyDdctTme;
/** 실시간 수량배너 이벤트가판매 가수량차감수량*/
private Integer rltmDdctQy;
/** 실시간 수량배너 이벤트가판매 가차감제한수량 */
private Integer rltmDdctLimitQy;
/** 상품 목록을 퍼올릴 영역 */
private String selectedArea;
/*상품 순서 수정 리스트 */
private List<String> goodsOrdrList;
}

View File

@@ -0,0 +1,16 @@
package com.wb.domainserver.domain.mngr.goods.goodsmngr.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class ShopGoodsBannerVO extends AbstractVO {
/** 상품고유번호*/
private long goodsInnb;
/** 배너고유번호*/
private long bannerInnb;
}

View File

@@ -0,0 +1,27 @@
package com.wb.domainserver.domain.mngr.goods.goodsmngr.vo;
import com.wb.domainserver.domain.comm.vo.AbstractVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class ShopGoodsDscntVO extends AbstractVO {
/** 판매상품할인정책고유번호 */
private long sleGoodsDscntInnb;
/** 상품고유번호 */
private long goodsInnb;
/** 쇼핑몰코드 */
private String sopmalCd;
/** 할인시작구매수량 */
private long dscntBgnPurchsQy;
/** 할인종료구매수량 */
private long dscntEndPurchsQy;
/** 할인구분코드 */
private String dscntDvCd;
/** 할인금액 */
private double dscntAmt;
}

View File

@@ -0,0 +1,223 @@
package com.wb.domainserver.domain.mngr.goods.prsnt.controller;
import com.wb.domainserver.common.msg.GconeMessageSource;
import com.wb.domainserver.domain.mngr.goods.goodsmngr.vo.GoodsmngrVO;
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.file.service.FileStorageService;
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.HashMap;
import java.util.List;
@Controller
@RequestMapping("/mngr/goods/prsnt")
@Slf4j
public class PrsntController {
/** WebClient 호출을 위한 wrapper */
@Autowired
private SendToResrc sendToResrc;
/** 공통 메시지 처리를 위한 메시지 객체 */
@Autowired
private GconeMessageSource gconeMessageSource;
/** 파일 업로드 */
@Autowired
private FileStorageService filestore;
@Autowired
private WnbtWebClientResponseHandler responseHandler;
/**
* 사은품 목록 조회 폼
* @param prsntSrchVO
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectPrsntListForm")
public String selectPrsntListForm(ModelMap model, GoodsmngrVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/selectBOPrsntListForm", vo),
model,
"resultMap"
);
return "mngr/goods/prsnt/PrsntListRForm";
}
/**
* 사은품 목록 조회
* @param prsntSrchVO
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectPrsntList")
public String selectPrsntList(ModelMap model,GoodsmngrVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/selectBOPrsntList", vo),
model,
"resultMap"
);
return "mngr/goods/prsnt/PrsntListR";
}
/**
* 사은품 등록 폼
* @param prsntSrchVO
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/insertPrsntForm")
public String insertPrsntForm(ModelMap model,GoodsmngrVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/selectBOGoodsListForm", vo),
model,
"resultMap"
);
return "mngr/goods/prsnt/PrsntC";
}
/**
* 사은품 등록
* @param prsntVO
* @return ResponseEntity
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/insertPrsnt" , method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> insertPrsnt(@Validated GoodsmngrVO vo, BindingResult bindingResult , HttpServletRequest request, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
if(bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
List<HashMap<String, Object>> ulpladFileMap = new ArrayList<HashMap<String, Object>>();
request.setAttribute("shopCd", vo.getSopmalCd());
request.setAttribute("pathGubun","GDIG"); //이미지구분코드 - 상품
try {
ulpladFileMap = filestore.fileUpload(request);
vo.setFileInfo(ulpladFileMap);
} catch (WnbtRestException wre){
throw new WnbtRestException("파일 업로드에 실패했습니다."+ wre.getMessage());
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/insertBOPrsnt", vo),
ReplyFromResrc::getReply
);
}
/**
* 사은품 상세조회
* @param prsntVO
* @return String
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/selectPrsntDtlForm")
public String selectPrsntDtlForm(ModelMap model,GoodsmngrVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/selectBOPrsntDtl", vo),
model,
"resultMap"
);
return "mngr/goods/prsnt/PrsntDtlU";
}
/**
* 사은품 수정
* @param prsntVO
* @return ResponseEntity
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/updatePrsntDtl" , method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> updatePrsntDtl(@Validated GoodsmngrVO vo, BindingResult bindingResult , HttpServletRequest request, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
if(bindingResult.hasErrors()) {
throw new WnbtRestException(ValidateResultConverter.convert(bindingResult, gconeMessageSource));
}
List<HashMap<String, Object>> ulpladFileMap = new ArrayList<HashMap<String, Object>>();
request.setAttribute("shopCd", vo.getSopmalCd());
request.setAttribute("pathGubun","GDIG"); //이미지구분코드 - 상품
try {
ulpladFileMap = filestore.fileUpload(request);
vo.setFileInfo(ulpladFileMap);
} catch (WnbtRestException wre){
throw new WnbtRestException("파일 업로드에 실패했습니다."+ wre.getMessage());
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/updateBOPrsnt", vo),
ReplyFromResrc::getReply
);
}
/**
* 사은품 삭제
* @param prsntVO
* @return ResponseEntity
*/
@Policy(AuthPolicy.RESTRICTED)
@RequestMapping(value="/deletePrsnt" , method = RequestMethod.POST)
public ResponseEntity<WnbtResponse> deletePrsnt(GoodsmngrVO vo, @CookieValue(value = "authSopmalCd") String authSopmalCd){
vo.setSopmalCd(authSopmalCd);
return responseHandler.handleResponse(
sendToResrc.ofPost(RESRC.GCONEBO, "/gcone/goods/goods/deleteBOGoods", vo),
ReplyFromResrc::getReply
);
}
}

View File

@@ -0,0 +1,5 @@
package com.wb.domainserver.domain.mngr.goods.prsnt.vo;
public class PrsntSrchVO {
}

View File

@@ -0,0 +1,5 @@
package com.wb.domainserver.domain.mngr.goods.prsnt.vo;
public class PrsntVO {
}