From 006d3f5a09ec0ec67f86e88dd1d385c47eb64659 Mon Sep 17 00:00:00 2001 From: jazz Date: Fri, 6 Feb 2026 16:22:16 +0900 Subject: [PATCH] =?UTF-8?q?fix=20:=20=EA=B4=80=EB=A6=AC=EC=9E=90=20?= =?UTF-8?q?=EA=B5=AC=EB=8F=85=EC=84=9C=EB=B9=84=EC=8A=A4=20=EC=83=81?= =?UTF-8?q?=ED=92=88=EC=A4=80=EB=B9=84=20=EA=B4=80=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../subsvc/mapper/BOSubsvcOrdrMapper.java | 46 ++ .../subsvc/service/BOSubsvcOrdrService.java | 169 ++++++ .../gcone/ordr/subsvc/vo/BOSubsvcOrderVO.java | 70 +++ .../subsvc/controller/SubsvcController.java | 20 +- .../controller/SubsvcOrdrController.java | 251 +++++++++ .../gcone/goods/goods/BOGoodsMapper.xml | 3 + .../gcone/ordr/subsvc/BOSubsvcOrdrMapper.xml | 240 ++++++++ .../views/mngr/goods/goodsmngr/GoodsDtlU.jsp | 3 +- .../goods/goodsmngr/GoodsSrchPopupListR.jsp | 10 + .../views/mngr/goods/subsvc/SubsvcList.jsp | 10 +- .../mngr/goods/subsvc/SubsvcListForm.jsp | 14 +- .../ordr/subsvc/SubsvcOrdrDlvyListPop.jsp | 124 +++++ .../views/mngr/ordr/subsvc/SubsvcOrdrList.jsp | 130 +++++ .../mngr/ordr/subsvc/SubsvcOrdrListForm.jsp | 513 ++++++++++++++++++ 14 files changed, 1581 insertions(+), 22 deletions(-) create mode 100644 src/main/java/com/wb/domainserver/domain/gcone/ordr/subsvc/mapper/BOSubsvcOrdrMapper.java create mode 100644 src/main/java/com/wb/domainserver/domain/gcone/ordr/subsvc/service/BOSubsvcOrdrService.java create mode 100644 src/main/java/com/wb/domainserver/domain/gcone/ordr/subsvc/vo/BOSubsvcOrderVO.java create mode 100644 src/main/java/com/wb/domainserver/domain/mngr/ordr/subsvc/controller/SubsvcOrdrController.java create mode 100644 src/main/resources/mybatis/xml/mapper/gcone/ordr/subsvc/BOSubsvcOrdrMapper.xml create mode 100644 src/main/webapp/WEB-INF/views/mngr/ordr/subsvc/SubsvcOrdrDlvyListPop.jsp create mode 100644 src/main/webapp/WEB-INF/views/mngr/ordr/subsvc/SubsvcOrdrList.jsp create mode 100644 src/main/webapp/WEB-INF/views/mngr/ordr/subsvc/SubsvcOrdrListForm.jsp diff --git a/src/main/java/com/wb/domainserver/domain/gcone/ordr/subsvc/mapper/BOSubsvcOrdrMapper.java b/src/main/java/com/wb/domainserver/domain/gcone/ordr/subsvc/mapper/BOSubsvcOrdrMapper.java new file mode 100644 index 00000000..a51682d2 --- /dev/null +++ b/src/main/java/com/wb/domainserver/domain/gcone/ordr/subsvc/mapper/BOSubsvcOrdrMapper.java @@ -0,0 +1,46 @@ +package com.wb.domainserver.domain.gcone.ordr.subsvc.mapper; + +import com.wb.domainserver.domain.gcone.ordr.subsvc.vo.BOSubsvcOrderVO; +import com.wb.domainserver.util.dataaccess.DataMap; +import org.apache.ibatis.annotations.Mapper; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** +* +* 구독서비스 주문 BO mapper +* @author jazz +* @since 2026-02-04 +* @version 1.0 +* @see +* +*
+* == (Modification Information) == 개정이력
+*
+* 수정일 수정자 수정내용
+* ------- -------- ---------------------------
+* 2026-02-04 jazz 최초 생성
+*
+* 
+*/ +@Mapper +@Repository +public interface BOSubsvcOrdrMapper { + + /** 구독서비스 상품준비 관리 목록*/ + List selectBOSubsvcOrderList(BOSubsvcOrderVO vo); + /** 구독서비스 상품준비 관리 목록 배송내역 팝업 배송내역목록*/ + List selectBOSubsvcOrderDlvyList(BOSubsvcOrderVO vo); + /** 구독서비스 상품준비 관리 상품매칭 - 1. GC_ORDER update*/ + int updateBOSubsvcGoodsMappgOrdr(BOSubsvcOrderVO vo); + /** 구독서비스 상품준비 관리 상품매칭 - 2. GC_ORDER_ITEM update*/ + int updateBOSubsvcGoodsMappgOrdrItem(BOSubsvcOrderVO vo); + /** 구독서비스 상품준비 관리 상품매칭 - 3. GC_ORDER_ITEM_OPTION update*/ + int updateBOSubsvcGoodsMappgOrdrItemOptn(BOSubsvcOrderVO vo); + /** 구독서비스 상품준비 관리 상품매칭 - 4. GC_ORDER_SHIPPING update*/ + int updateBOSubsvcGoodsMappgShipping(BOSubsvcOrderVO vo); + /** 구독서비스 상품준비 관리 상품매칭 - 5. GC_SUBSVC update*/ + int updateBOSubsvcGoodsMappgSubsvc(BOSubsvcOrderVO vo); + +} diff --git a/src/main/java/com/wb/domainserver/domain/gcone/ordr/subsvc/service/BOSubsvcOrdrService.java b/src/main/java/com/wb/domainserver/domain/gcone/ordr/subsvc/service/BOSubsvcOrdrService.java new file mode 100644 index 00000000..f71a16cf --- /dev/null +++ b/src/main/java/com/wb/domainserver/domain/gcone/ordr/subsvc/service/BOSubsvcOrdrService.java @@ -0,0 +1,169 @@ +package com.wb.domainserver.domain.gcone.ordr.subsvc.service; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.nimbusds.jose.shaded.gson.Gson; +import com.wb.domainserver.common.prop.PropertyService; +import com.wb.domainserver.domain.admin.instcSle.mtng.mapper.BOMaMtngMapper; +import com.wb.domainserver.domain.admin.store.sopmal.mapper.BOMaSopmalMapper; +import com.wb.domainserver.domain.admin.sys.comncd.service.BOMaComncdService; +import com.wb.domainserver.domain.admin.sys.comncd.vo.BOMaComncdVO; +import com.wb.domainserver.domain.gcone.goods.goods.service.BOGoodsService; +import com.wb.domainserver.domain.gcone.goods.purchs.mapper.BOPurchsMapper; +import com.wb.domainserver.domain.gcone.goods.purchs.service.BOOrderNoService; +import com.wb.domainserver.domain.gcone.goods.purchs.service.BOOrderService; +import com.wb.domainserver.domain.gcone.goods.purchs.service.BOPurchsService; +import com.wb.domainserver.domain.gcone.goods.purchs.vo.*; +import com.wb.domainserver.domain.gcone.goods.subsvc.vo.BOSubsvcVO; +import com.wb.domainserver.domain.gcone.mbr.mbr.mapper.BOMbrMapper; +import com.wb.domainserver.domain.gcone.mbr.mbr.service.BOMbrService; +import com.wb.domainserver.domain.gcone.mbr.mbr.vo.BOMbrAppnVO; +import com.wb.domainserver.domain.gcone.mbr.mbr.vo.BOMbrVO; +import com.wb.domainserver.domain.gcone.mbr.mlg.service.BOMlgService; +import com.wb.domainserver.domain.gcone.mbr.mlg.vo.BOCashVO; +import com.wb.domainserver.domain.gcone.mbr.mlg.vo.BOMlgVO; +import com.wb.domainserver.domain.gcone.ntcn.mssage.service.BOMssageService; +import com.wb.domainserver.domain.gcone.ordr.ordr.mapper.BOOrdrMapper; +import com.wb.domainserver.domain.gcone.ordr.ordr.service.BOOrderCommonService; +import com.wb.domainserver.domain.gcone.ordr.ordr.service.BOOrdrLogService; +import com.wb.domainserver.domain.gcone.ordr.ordr.vo.*; +import com.wb.domainserver.domain.gcone.ordr.pay.service.BOPayService; +import com.wb.domainserver.domain.gcone.ordr.pay.vo.BOPayVO; +import com.wb.domainserver.domain.gcone.ordr.rtngudrefnd.mapper.BORtngudrefndMapper; +import com.wb.domainserver.domain.gcone.ordr.rtngudrefnd.service.BORtngudrefndService; +import com.wb.domainserver.domain.gcone.ordr.rtngudrefnd.vo.BORtngudrefndVO; +import com.wb.domainserver.domain.gcone.ordr.selngpruf.service.BOSelngprufService; +import com.wb.domainserver.domain.gcone.ordr.selngpruf.vo.BOSelngprufVO; +import com.wb.domainserver.domain.gcone.ordr.subsvc.mapper.BOSubsvcOrdrMapper; +import com.wb.domainserver.domain.gcone.ordr.subsvc.vo.BOSubsvcOrderVO; +import com.wb.domainserver.domain.gcone.promtn.coupon.service.BOCouponService; +import com.wb.domainserver.domain.gcone.promtn.coupon.vo.BODwldCouponVO; +import com.wb.domainserver.domain.gcone.setup.site.service.BOSiteService; +import com.wb.domainserver.domain.gcone.setup.site.vo.BOGoodsgrpVO; +import com.wb.domainserver.domain.gcone.setup.site.vo.BOSiteVO; +import com.wb.domainserver.exception.WnbtException; +import com.wb.domainserver.exception.WnbtRestException; +import com.wb.domainserver.security.authentication.AnonymousUser; +import com.wb.domainserver.security.authentication.MemberJwtContextHolder; +import com.wb.domainserver.util.dataaccess.DataMap; +import com.wb.domainserver.util.string.StringUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; +import org.springframework.util.ObjectUtils; +import org.springframework.util.StringUtils; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.math.RoundingMode; +import java.time.LocalDateTime; +import java.time.OffsetDateTime; +import java.time.ZoneOffset; +import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; +import java.util.*; +import java.util.stream.Collectors; + +/** + * + * 구독서비스주문 BO service + * @author jazz + * @since 2026-02-05 + * @version 1.0 + * @see + * + *
+ * == (Modification Information) == 개정이력
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2026-02-05 jazz 최초 생성
+ *
+ * 
+ */ +@Service +@Slf4j +public class BOSubsvcOrdrService { + @Autowired + private BOSubsvcOrdrMapper mapper; + + /** + * 구독서비스 상품준비 관리 목록 + * @param + * @return List + */ + public List selectBOSubsvcOrderList(BOSubsvcOrderVO vo) { + List dataList = new ArrayList<>(); + + try { + dataList = mapper.selectBOSubsvcOrderList(vo); + }catch(Exception e){ + e.printStackTrace(); + throw e; + } + if(dataList == null || dataList.isEmpty()){ + vo.getPaginationInfo().setTotalRecordCount(0); + }else{ + vo.getPaginationInfo().setTotalRecordCount(((Long)dataList.get(0).get("totCnt")).intValue()); + } + + return dataList; + } + + /** + * 구독서비스 상품준비 관리 목록 배송내역 팝업 배송내역목록 + * @param + * @return List + */ + public List selectBOSubsvcOrderDlvyList(BOSubsvcOrderVO vo) { + List dataList = new ArrayList<>(); + dataList = mapper.selectBOSubsvcOrderDlvyList(vo); + return dataList; + } + + + /** + * 선택대상 상품준비 일괄처리 + * 구독서비스 상품준비 일괄처리 + * 1. GC_ORDER 주문상태를 결제확인(25)만 상품준비중(35)로 변경(25가 아니면 UPDT_DT만 변경) + * 2. GC_ORDER_ITEM의 상품고유번호(GOODS_INNB), 상품이지지경로(GOODS_IMG_COURS), 상품명(GOODS_NM)를 변경 + * 3. GC_ORDER_ITEM_OPTION의 상품옵셥 고유번호(GOODS_OPTN_INNB), 주문상태(GOODS_STTUS_CD)를 결제확인(25)=>상품준비중(35), 옵션명1(OPTN_NM_1) 부터 GC_GOODS_OPTION과 동일한 컬럼 매칭 + * 4. GC_ORDER_SHIPPING의 주문배송고유번호(ORDR_DLVY_INNB)가 같은 대상의 주문상태(GOODS_STTUS_CD)를 결제확인(25)=>상품준비중(35) + * 5. GC_SUBSVC의 최종처리차수(LAST_PROCS_DGR)를 수정 (주문상품옵션에 주문별 처리차수중 가능 큰처리차수(35~75까지 COUNT해서 가장 큰수)를 등록) + * */ + @Transactional(rollbackFor = Exception.class) + public String updateSubsvcOrdrReady(BOSubsvcOrderVO vo) { + String message = "success"; + /*1. GC_ORDER*/ + int result = mapper.updateBOSubsvcGoodsMappgOrdr(vo); + if (!(result > 0)) { + log.error("GC_ORDER UPDATE 오류"); + throw new WnbtException("500","GC_ORDER UPDATE 오류"); + } + result = mapper.updateBOSubsvcGoodsMappgOrdrItem(vo); + if (!(result > 0)) { + log.error("GC_ORDER_ITEM UPDATE 오류"); + throw new WnbtException("500","GC_ORDER_ITEM UPDATE 오류"); + } + result = mapper.updateBOSubsvcGoodsMappgOrdrItemOptn(vo); + if (!(result > 0)) { + log.error("GC_ORDER_ITEM_OPTION UPDATE 오류"); + throw new WnbtException("500","GC_ORDER_ITEM_OPTION UPDATE 오류"); + } + result = mapper.updateBOSubsvcGoodsMappgShipping(vo); + if (!(result > 0)) { + log.error("GC_ORDER_SHIPPING UPDATE 오류"); + throw new WnbtException("500","GC_ORDER_SHIPPING UPDATE 오류"); + } + result = mapper.updateBOSubsvcGoodsMappgSubsvc(vo); + if (!(result > 0)) { + log.error("GC_SUBSVC 처리중 오류"); + throw new WnbtException("500","GC_SUBSVC 처리중 오류"); + } + return message; + } + +} diff --git a/src/main/java/com/wb/domainserver/domain/gcone/ordr/subsvc/vo/BOSubsvcOrderVO.java b/src/main/java/com/wb/domainserver/domain/gcone/ordr/subsvc/vo/BOSubsvcOrderVO.java new file mode 100644 index 00000000..ab6aa140 --- /dev/null +++ b/src/main/java/com/wb/domainserver/domain/gcone/ordr/subsvc/vo/BOSubsvcOrderVO.java @@ -0,0 +1,70 @@ +package com.wb.domainserver.domain.gcone.ordr.subsvc.vo; + +import com.wb.domainserver.domain.comm.vo.AbstractVO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +@Data +@EqualsAndHashCode(callSuper = false) +public class BOSubsvcOrderVO extends AbstractVO { + +private static final long serialVersionUID = 1L; + + /** 구독서비스고유번호 */ + private String subsvcInnb; + /** 쇼핑몰코드 */ + private String sopmalCd; + /** 구독서비스명 */ + private String subsvcNm; + /** 구독기간 */ + private String subPd; + /** 구독서비스기수 */ + private String subsvcGnr; + /** 구독서비스명 다음기수 */ + private String subsvcNextGnr; + /** 구독서비스기수명 */ + private String subsvcGnrNm; + /** 주문고유번호 */ + private String ordrInnb; + /** 주문상품고유번호 */ + private String ordrGoodsInnb; + /** 주문상품옵션고유번호 */ + private String ordrGoodsOptnInnb; + + + /** 출고상품고유번호*/ + private String goodsInnb; + /** 출고상품옵션고유번호*/ + private String goodsOptnInnb; + /** 출고상품옵션구분*/ + private String optnTy; + + /** 상품준비대상*/ + private List arrCheck; + /** 상품준비대상 주문고유번호*/ + private List arrOrdrInnb; + /** 상품준비대상 주문상품고유번호*/ + private List arrOrdrGoodsInnb; + /** 상품준비대상 주문상품옵션고유번호*/ + private List arrOrdrGoodsOptnInnb; + /** 상품준비대상 주문고유번호*/ + private List arrOrdrDlvyInnb; + + /** 검색조건 */ + /** 구독서비스명 selectbox*/ + private String srchSelSubsvcNm; + /** 구독서비스명 */ + private String srchSubsvcNm; + /** 구독서비스기수 select */ + private String srchSelSubsvcGnr; + /** 구독서비스기수명 */ + private String srchSubsvcGnrNm; + /** 정렬구분 */ + private String sortDv; + /** 배열 구독서비스고유번호 */ + private List arrSubsvcInnb; + /**당월제외*/ + private String srchCurMonExclude; +} diff --git a/src/main/java/com/wb/domainserver/domain/mngr/goods/subsvc/controller/SubsvcController.java b/src/main/java/com/wb/domainserver/domain/mngr/goods/subsvc/controller/SubsvcController.java index cc6b63db..2b5becbc 100644 --- a/src/main/java/com/wb/domainserver/domain/mngr/goods/subsvc/controller/SubsvcController.java +++ b/src/main/java/com/wb/domainserver/domain/mngr/goods/subsvc/controller/SubsvcController.java @@ -86,7 +86,7 @@ public class SubsvcController { @Value("${mngrfo.common.subsvc.dft-goods-optn-innb}") private String dftGoodsOptnInnb; @Autowired - private BOSubsvcService service; + private BOSubsvcService boSubsvcService; @Autowired private BOCommonService commonService; @Autowired @@ -112,7 +112,7 @@ public class SubsvcController { content.put("paramVO", vo); // 조회조건 구독서비스 - List SrchSubsvcList = service.selectBOMngrSrchSubsvcList(vo); + List SrchSubsvcList = boSubsvcService.selectBOMngrSrchSubsvcList(vo); content.put("srchSubsvcList", SrchSubsvcList); //조회조건 판매상태 @@ -148,7 +148,7 @@ public class SubsvcController { content.put("paramVO", vo); // 구독서비스 상세조회 - DataMap subsvcDtl = service.selectBOSubsvcDetail(vo); + DataMap subsvcDtl = boSubsvcService.selectBOSubsvcDetail(vo); content.put("subsvcDtl", subsvcDtl); //판매상태 @@ -210,7 +210,7 @@ public class SubsvcController { //파일 업로드 관련 END Map message = new HashMap<>(); - String result = service.updateBOMngrSubsvc(vo); + String result = boSubsvcService.updateBOMngrSubsvc(vo); message.put("message",result); return ResponseEntity.ok( @@ -238,7 +238,7 @@ public class SubsvcController { content.put("paramVO", vo); // 구독서비스 상세조회 - DataMap subsvcDtl = service.selectBOSubsvcDetail(vo); + DataMap subsvcDtl = boSubsvcService.selectBOSubsvcDetail(vo); content.put("subsvcDtl", subsvcDtl); //판매상태 @@ -303,7 +303,7 @@ public class SubsvcController { vo.setDftGoodsOptnInnb(dftGoodsOptnInnb); Map message = new HashMap<>(); - String result = service.insertBOMngrSubsvc(vo); + String result = boSubsvcService.insertBOMngrSubsvc(vo); message.put("message",result); return ResponseEntity.ok( @@ -345,7 +345,7 @@ public class SubsvcController { } // 목록 조회 - List list = service.selectBOMngrSubsvcList(vo); + List list = boSubsvcService.selectBOMngrSubsvcList(vo); Map content = new HashMap<>(); content.put("paramVO", vo); @@ -373,7 +373,7 @@ public class SubsvcController { } DataMap message = new DataMap(); - String result = service.selectBOMngrSubsvcNmDupCheck(vo); + String result = boSubsvcService.selectBOMngrSubsvcNmDupCheck(vo); message.put("message", result); return ResponseEntity.ok( @@ -401,7 +401,7 @@ public class SubsvcController { } DataMap message = new DataMap(); - String result = service.deleteBOMngrSubsvc(vo); + String result = boSubsvcService.deleteBOMngrSubsvc(vo); message.put("message", result); return ResponseEntity.ok( @@ -429,7 +429,7 @@ public class SubsvcController { Map content = new HashMap<>(); // 조회조건 구독서비스 - List SrchSubsvcGnrList = service.selectBOMngrSrchSubsvcGnrList(vo); + List SrchSubsvcGnrList = boSubsvcService.selectBOMngrSrchSubsvcGnrList(vo); content.put("srchSubsvcGnrList", SrchSubsvcGnrList); return ResponseEntity.ok( diff --git a/src/main/java/com/wb/domainserver/domain/mngr/ordr/subsvc/controller/SubsvcOrdrController.java b/src/main/java/com/wb/domainserver/domain/mngr/ordr/subsvc/controller/SubsvcOrdrController.java new file mode 100644 index 00000000..bd514aa2 --- /dev/null +++ b/src/main/java/com/wb/domainserver/domain/mngr/ordr/subsvc/controller/SubsvcOrdrController.java @@ -0,0 +1,251 @@ +package com.wb.domainserver.domain.mngr.ordr.subsvc.controller; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.wb.domainserver.common.msg.GconeMessageSource; +import com.wb.domainserver.common.mvc.tags.ui.pagination.PaginationInfo; +import com.wb.domainserver.common.prop.PaginationProperties; +import com.wb.domainserver.domain.admin.store.sopmal.service.BOMaSopmalService; +import com.wb.domainserver.domain.admin.sys.comncd.service.BOMaComncdService; +import com.wb.domainserver.domain.admin.sys.comncd.vo.BOMaComncdVO; +import com.wb.domainserver.domain.gcone.common.service.BOCommonService; +import com.wb.domainserver.domain.gcone.goods.purchs.service.BOOrderService; +import com.wb.domainserver.domain.gcone.goods.purchs.vo.BOOrderLogVO; +import com.wb.domainserver.domain.gcone.goods.subsvc.service.BOSubsvcService; +import com.wb.domainserver.domain.gcone.goods.subsvc.vo.BOSubsvcVO; +import com.wb.domainserver.domain.gcone.ordr.ordr.service.BOOrdrService; +import com.wb.domainserver.domain.gcone.ordr.ordr.vo.*; +import com.wb.domainserver.domain.gcone.ordr.pay.vo.BOPayVO; +import com.wb.domainserver.domain.gcone.ordr.subsvc.service.BOSubsvcOrdrService; +import com.wb.domainserver.domain.gcone.ordr.subsvc.vo.BOSubsvcOrderVO; +import com.wb.domainserver.domain.gcone.setup.dlvygrp.service.BODlvygrpService; +import com.wb.domainserver.domain.gcone.setup.nbkk.service.BONbkkService; +import com.wb.domainserver.domain.gcone.setup.nbkk.vo.BOSetupNbkkVO; +import com.wb.domainserver.domain.mngr.ordr.ordrmngr.vo.DwldItmVO; +import com.wb.domainserver.domain.mngr.ordr.ordrmngr.vo.OrdrShippingVO; +import com.wb.domainserver.domain.mngr.ordr.ordrmngr.vo.OrdrSrchVO; +import com.wb.domainserver.exception.WnbtRestException; +import com.wb.domainserver.exception.code.ErrorCode; +import com.wb.domainserver.response.WnbtResponse; +import com.wb.domainserver.response.WnbtResponseBody; +import com.wb.domainserver.response.WnbtWebClientResponseHandler; +import com.wb.domainserver.security.authentication.AnonymousUser; +import com.wb.domainserver.security.authentication.MemberJwtContextHolder; +import com.wb.domainserver.security.authorization.annotation.AuthPolicy; +import com.wb.domainserver.security.authorization.annotation.Policy; +import com.wb.domainserver.util.communicate.SendToResrc; +import com.wb.domainserver.util.communicate.ValidateResultConverter; +import com.wb.domainserver.util.dataaccess.DataMap; +import com.wb.domainserver.util.excel.ExcelDownloadUtil; +import io.micrometer.common.util.StringUtils; +import jakarta.servlet.http.HttpServletResponse; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; +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 java.io.IOException; +import java.math.BigInteger; +import java.util.*; + +/** + * 구독서비스 주문 관리 Controller + * + * @author jazz + * @since 2026-02-05 + * @version 1.0 + * @see + * + *
+ * == (Modification Information) == 개정이력
+ *
+ * 수정일 수정자 수정내용
+ * ------- -------- ---------------------------
+ * 2026-02-05 jazz 최초 생성
+ *
+ * 
+ */ + +@Controller +@RequestMapping("/mngr/ordr/subsvc") +@Slf4j +public class SubsvcOrdrController { + + /** WebClient 호출을 위한 wrapper */ + @Autowired + private WnbtWebClientResponseHandler responseHandler; + + /** WebClient 호출을 위한 wrapper */ + @Autowired + private SendToResrc sendToResrc; + /** 공통 메시지 처리를 위한 메시지 객체 */ + @Autowired + private GconeMessageSource gconeMessageSource; + + @Autowired + private BOSubsvcOrdrService boSubsvcOrdrService; + + @Autowired + private BOSubsvcService boSubsvcService; + + @Autowired + private PaginationProperties paginationProperties; + + + /** + * 구독서비스 상품준비 조회 폼 + * @param subsvcVO,subsvcOrderVO,model,authSopmalCd + * @return SubsvcOrdrListForm.jsp + */ + @Policy(AuthPolicy.RESTRICTED) + @RequestMapping(value="/selectSubsvcOrdrListForm") + public String selectSubsvcListForm(BOSubsvcVO subsvcVO, BOSubsvcOrderVO subsvcOrderVO, ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) { + subsvcVO.setSopmalCd(authSopmalCd); + subsvcOrderVO.setSopmalCd(authSopmalCd); + AnonymousUser user = MemberJwtContextHolder.getMemberInfo(); + if("01".equals(user.getSysDvCd())){ + subsvcVO.setSopmalCd(user.getSopmalCd()); + subsvcOrderVO.setSopmalCd(user.getSopmalCd()); + } + + Map content = new HashMap<>(); + content.put("paramVO", subsvcOrderVO); + + // 조회조건 구독서비스 + List SrchSubsvcList = boSubsvcService.selectBOMngrSrchSubsvcList(subsvcVO); + content.put("srchSubsvcList", SrchSubsvcList); + + model.addAttribute("resultMap", content); + return "mngr/ordr/subsvc/SubsvcOrdrListForm"; + } + + /** + * 구독서비스 상품준비 목록 조회 리스트 + * @param subsvcOrderVO + * @param model + * @return SubsvcOrdrList.jsp + */ + @Policy(AuthPolicy.RESTRICTED) + @RequestMapping(value = "/selectSubsvcOrdrList") + public String selectSubsvcList(BOSubsvcOrderVO subsvcOrderVO,ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) { + subsvcOrderVO.setSopmalCd(authSopmalCd); + AnonymousUser user = MemberJwtContextHolder.getMemberInfo(); + if("01".equals(user.getSysDvCd())){ + subsvcOrderVO.setSopmalCd(user.getSopmalCd()); + } + + // 페이징 객체 생성 & 페이징정보 할당 + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(subsvcOrderVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(subsvcOrderVO.getPageUnit()); + paginationInfo.setPageSize(paginationProperties.getPageSize()); + + subsvcOrderVO.setPaginationInfo(paginationInfo); + subsvcOrderVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + subsvcOrderVO.setLastIndex(paginationInfo.getLastRecordIndex()); + subsvcOrderVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + if(StringUtils.isEmpty(subsvcOrderVO.getSortDv())){ + //정렬기준 초기값 셋팅 + subsvcOrderVO.setSortDv("subsvcGnrAsc"); + } + + // 목록 조회 + List list = boSubsvcOrdrService.selectBOSubsvcOrderList(subsvcOrderVO); + + Map content = new HashMap<>(); + content.put("paramVO", subsvcOrderVO); + + content.put("list", list); + content.put("paginationInfo", subsvcOrderVO.getPaginationInfo()); + + model.addAttribute("resultMap", content); + + return "mngr/ordr/subsvc/SubsvcOrdrList"; + } + + + /** + * 구독서비스 상품준비 일괄처리 + * @param subsvcOrderVO + * @return ResponseEntity + */ + @Policy(AuthPolicy.RESTRICTED) + @RequestMapping(value = "/updateSubsvcOrdrReady", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity updateSubsvcOrdrReady(BOSubsvcOrderVO subsvcOrderVO, @CookieValue(value = "authSopmalCd") String authSopmalCd) { + subsvcOrderVO.setSopmalCd(authSopmalCd); + AnonymousUser user = MemberJwtContextHolder.getMemberInfo(); + + if("01".equals(user.getSysDvCd())){ + subsvcOrderVO.setSopmalCd(user.getSopmalCd()); + } + /** + * 체크대상정보 파싱 + * 형태 : 주문고유번호@주문상품고유번호@주문상품옵션고유번호@주문배송고유번호 + * */ + subsvcOrderVO.setArrOrdrInnb(new ArrayList()); + subsvcOrderVO.setArrOrdrGoodsInnb(new ArrayList()); + subsvcOrderVO.setArrOrdrGoodsOptnInnb(new ArrayList()); + subsvcOrderVO.setArrOrdrDlvyInnb(new ArrayList()); + ArrayList arrCheck = (ArrayList)subsvcOrderVO.getArrCheck(); + + ((ArrayList)subsvcOrderVO.getArrCheck()).forEach(check -> { + String[] innb = check.split("@"); + subsvcOrderVO.getArrOrdrInnb().add(innb[0]); + subsvcOrderVO.getArrOrdrGoodsInnb().add(innb[1]); + subsvcOrderVO.getArrOrdrGoodsOptnInnb().add(innb[2]); + subsvcOrderVO.getArrOrdrDlvyInnb().add(innb[3]); + }); + + DataMap message = new DataMap(); + String result = ""; + + try{ + result = boSubsvcOrdrService.updateSubsvcOrdrReady(subsvcOrderVO); + }catch(Exception e){ + log.error(e.getMessage()); + result = "fail"; + } + + message.put("message", result); + + return ResponseEntity.ok( + WnbtResponse.builder() + .resBody(new WnbtResponseBody(message)) + .build() + ); + } + + /** + * 구독서비스 상품준비 배송내역 목록 팝업 + * @param subsvcOrderVO + * @param model + * @return SubsvcOrdrList.jsp + */ + @Policy(AuthPolicy.RESTRICTED) + @RequestMapping(value = "/selectSubsvcOrdrDlvyListPop") + public String selectSubsvcOrdrDlvyListPop(BOSubsvcOrderVO subsvcOrderVO,ModelMap model, @CookieValue(value = "authSopmalCd") String authSopmalCd) { + subsvcOrderVO.setSopmalCd(authSopmalCd); + AnonymousUser user = MemberJwtContextHolder.getMemberInfo(); + if("01".equals(user.getSysDvCd())){ + subsvcOrderVO.setSopmalCd(user.getSopmalCd()); + } + // 목록 조회 + List list = boSubsvcOrdrService.selectBOSubsvcOrderDlvyList(subsvcOrderVO); + + Map content = new HashMap<>(); + content.put("paramVO", subsvcOrderVO); + + content.put("list", list); + + model.addAttribute("resultMap", content); + + return "mngr/ordr/subsvc/SubsvcOrdrDlvyListPop"; + } + +} diff --git a/src/main/resources/mybatis/xml/mapper/gcone/goods/goods/BOGoodsMapper.xml b/src/main/resources/mybatis/xml/mapper/gcone/goods/goods/BOGoodsMapper.xml index 4c9e0c4a..33b80b41 100644 --- a/src/main/resources/mybatis/xml/mapper/gcone/goods/goods/BOGoodsMapper.xml +++ b/src/main/resources/mybatis/xml/mapper/gcone/goods/goods/BOGoodsMapper.xml @@ -343,6 +343,8 @@ , CAST(@ROWNUM:=@ROWNUM + 1 AS UNSIGNED) AS RNUM FROM ( SELECT FG.GOODS_INNB + , FGO.GOODS_OPTN_INNB + , FGO.OPTN_TY , FG.DLVY_GROUP_INNB , FG.SOPMAL_CD , FG.GOODS_NM @@ -378,6 +380,7 @@ , FGO.CNSMRPRIC , FGO.SLEPRIC , FGO.SOPMAL_CD + , FGO.OPTN_TY FROM GC_GOODS_OPTION FGO WHERE FGO.OPTN_EXPSR_AT = 'Y' AND FGO.STDR_DV_AT = 'Y' diff --git a/src/main/resources/mybatis/xml/mapper/gcone/ordr/subsvc/BOSubsvcOrdrMapper.xml b/src/main/resources/mybatis/xml/mapper/gcone/ordr/subsvc/BOSubsvcOrdrMapper.xml new file mode 100644 index 00000000..1c8939e2 --- /dev/null +++ b/src/main/resources/mybatis/xml/mapper/gcone/ordr/subsvc/BOSubsvcOrdrMapper.xml @@ -0,0 +1,240 @@ + + + + + + + + + + + + UPDATE GC_ORDER + SET ORDR_STTUS_CD = (CASE WHEN ORDR_STTUS_CD = '25' THEN '35' ELSE ORDR_STTUS_CD END) + , UPDT_DT = NOW() + WHERE SOPMAL_CD = #{sopmalCd} + AND ORDR_INNB = #{ordrInnb} + + + + + + UPDATE GC_ORDER_ITEM GOI, (SELECT GG.GOODS_INNB, GG.GOODS_NM, GGI.IMG + FROM GC_GOODS GG + JOIN GC_GOODS_IMAGE GGI ON GGI.SOPMAL_CD = GG.SOPMAL_CD AND GGI.GOODS_INNB = GG.GOODS_INNB AND GGI.CUT_NB = 1 AND GGI.IMG_KND = '02' + WHERE GG.GOODS_INNB = #{goodsInnb} + LIMIT 1) G + SET GOI.GOODS_INNB = G.GOODS_INNB + , GOI.GOODS_NM = G.GOODS_NM + , GOI.GOODS_IMG_COURS = G.IMG + WHERE SOPMAL_CD = #{sopmalCd} + AND GOI.ORDR_GOODS_INNB = #{ordrGoodsInnb} + + + + + + UPDATE GC_ORDER_ITEM_OPTION GOIO, (SELECT GOODS_OPTN_INNB + , OPTN_TY + , OPTN_NM_1 + , OPTN_NM_2 + , OPTN_NM_3 + , OPTN_NM_4 + , OPTN_VAL_1 + , OPTN_VAL_2 + , OPTN_VAL_3 + , OPTN_VAL_4 + , OPTN_CD_1 + , OPTN_CD_2 + , OPTN_CD_3 + , OPTN_CD_4 + , OPTN_INFO + , CNSMRPRIC + , SLEPRIC + , GG.TAX_AT + FROM GC_GOODS_OPTION GGO + JOIN GC_GOODS GG ON GG.SOPMAL_CD = GGO.SOPMAL_CD AND GG.GOODS_INNB = GGO.GOODS_INNB + WHERE GGO.GOODS_OPTN_INNB = #{goodsOptnInnb} + AND GGO.OPTN_TY = #{optnTy} + LIMIT 1) G + SET GOIO.GOODS_OPTN_INNB = G.GOODS_OPTN_INNB + , GOIO.OPTN_TY = G.OPTN_TY + , GOIO.OPTN_NM_1 = G.OPTN_NM_1 + , GOIO.OPTN_NM_2 = G.OPTN_NM_2 + , GOIO.OPTN_NM_3 = G.OPTN_NM_3 + , GOIO.OPTN_NM_4 = G.OPTN_NM_4 + , GOIO.OPTN_VAL_1 = G.OPTN_VAL_1 + , GOIO.OPTN_VAL_2 = G.OPTN_VAL_2 + , GOIO.OPTN_VAL_3 = G.OPTN_VAL_3 + , GOIO.OPTN_VAL_4 = G.OPTN_VAL_4 + , GOIO.OPTN_CD_1 = G.OPTN_CD_1 + , GOIO.OPTN_CD_2 = G.OPTN_CD_2 + , GOIO.OPTN_CD_3 = G.OPTN_CD_3 + , GOIO.OPTN_CD_4 = G.OPTN_CD_4 + , GOIO.OPTN_INFO = G.OPTN_INFO + , GOIO.CNSMRPRIC = G.CNSMRPRIC + , GOIO.SLEPRIC = G.SLEPRIC + , GOIO.TAX_AT = G.TAX_AT + , GOIO.STEP85 = 0 + , GOIO.STEP35 = GOIO.ORDR_QY + , GOIO.STEP45 = 0 + , GOIO.STEP55 = 0 + , GOIO.STEP65 = 0 + , GOIO.STEP75 = 0 + , GOIO.ORDR_STTUS_CD = '35' + , GOIO.UPDT_DT = NOW() + WHERE GOIO.SOPMAL_CD = #{sopmalCd} + AND GOIO.ORDR_GOODS_OPTN_INNB = #{ordrGoodsOptnInnb} + + + + + + UPDATE GC_ORDER_SHIPPING + SET ORDR_STTUS_CD = '35' + , UPDT_DT = NOW() + WHERE SOPMAL_CD = #{sopmalCd} + AND ORDR_DLVY_INNB = #{ordrDlvyInnb} + + + + + UPDATE GC_SUBSVC GS, ( SELECT SOPMAL_CD, SUBSVC_INNB, MAX(LAST_PROCS_ODR) LAST_PROCS_ODR + FROM ( + SELECT GOIO.SOPMAL_CD, GO.SUBSVC_INNB, SUM(CASE WHEN GOIO.ORDR_STTUS_CD BETWEEN '35' AND '75' THEN 1 ELSE 0 END) OVER(PARTITION BY GO.SOPMAL_CD, GO.ORDR_INNB) AS LAST_PROCS_ODR + FROM GC_ORDER GO + JOIN GC_ORDER_ITEM GOI ON GOI.SOPMAL_CD = GO.SOPMAL_CD AND GOI.ORDR_INNB = GO.ORDR_INNB + JOIN GC_ORDER_ITEM_OPTION GOIO ON GOIO.SOPMAL_CD = GOI.SOPMAL_CD AND GOI.ORDR_GOODS_INNB = GOIO.ORDR_GOODS_INNB + WHERE GO.SUBSVC_AT = 'Y' + AND GO.SOPMAL_CD = #{sopmalCd} + AND GO.SUBSVC_INNB IN (SELECT DISTINCT SUBSVC_INNB + FROM GC_ORDER + WHERE SOPMAL_CD = #{sopmalCd} + AND ORDR_INNB IN + + #{ordrInnb} + + ) + ) M + GROUP BY SOPMAL_CD, SUBSVC_INNB + ) MAIN + SET GS.LAST_PROCS_ODR = MAIN.LAST_PROCS_ODR + , UPDT_DT = NOW() + WHERE GS.SOPMAL_CD = MAIN.SOPMAL_CD + AND GS.SUBSVC_INNB = MAIN.SUBSVC_INNB + + + + diff --git a/src/main/webapp/WEB-INF/views/mngr/goods/goodsmngr/GoodsDtlU.jsp b/src/main/webapp/WEB-INF/views/mngr/goods/goodsmngr/GoodsDtlU.jsp index 16f04bff..c17b3151 100644 --- a/src/main/webapp/WEB-INF/views/mngr/goods/goodsmngr/GoodsDtlU.jsp +++ b/src/main/webapp/WEB-INF/views/mngr/goods/goodsmngr/GoodsDtlU.jsp @@ -2977,6 +2977,7 @@ +
@@ -5071,7 +5072,7 @@

-

원

+

${curUnit}

diff --git a/src/main/webapp/WEB-INF/views/mngr/goods/goodsmngr/GoodsSrchPopupListR.jsp b/src/main/webapp/WEB-INF/views/mngr/goods/goodsmngr/GoodsSrchPopupListR.jsp index 3dd4f33a..1ac3f685 100644 --- a/src/main/webapp/WEB-INF/views/mngr/goods/goodsmngr/GoodsSrchPopupListR.jsp +++ b/src/main/webapp/WEB-INF/views/mngr/goods/goodsmngr/GoodsSrchPopupListR.jsp @@ -23,6 +23,8 @@ $('#appendList tr').each(function() { const goodsId = $(this).attr('id').replace('choiseListId', ''); + const goodsOptnInnb = $(this).find('input[name="goodsOptnInnb"]').val(); + const optnTy = $(this).find('input[name="optnTy"]').val(); const goodsImg = $(this).find('input[name="goodsImgCours"]').val(); const goodsNm = $(this).find('input[name="goodsNm"]').val(); const goodsPrice = $(this).find('input[name="slepric"]').val(); @@ -32,6 +34,8 @@ if (goodsId) { selectedGoods.push({ goodsId: goodsId, + goodsOptnInnb: goodsOptnInnb, + optnTy: optnTy, goodsImg: goodsImg, goodsNm: goodsNm, goodsPrice: goodsPrice, @@ -46,6 +50,8 @@ var copyTr = $(this).clone(); var goodsId = $(this).find('input[name="goodsInnb"]').val(); + var goodsOptnInnb = $(this).find('input[name="goodsOptnInnb"]').val(); + var optnTy = $(this).find('input[name="optnTy"]').val(); var goodsImg = $(this).find('input[name="goodsImgCours"]').val(); var goodsNm = $(this).find('input[name="goodsNm"]').val(); var goodsPrice = $(this).find('input[name="slepric"]').val(); @@ -75,6 +81,8 @@ selectedGoods.push({ goodsId: goodsId, + goodsOptnInnb: goodsOptnInnb, + optnTy: optnTy, goodsImg: goodsImg, goodsNm: goodsNm, goodsPrice: goodsPrice, @@ -151,6 +159,8 @@ "/> + "/> + "/> "/> "/> "/> diff --git a/src/main/webapp/WEB-INF/views/mngr/goods/subsvc/SubsvcList.jsp b/src/main/webapp/WEB-INF/views/mngr/goods/subsvc/SubsvcList.jsp index ed080758..7ce8dbe9 100644 --- a/src/main/webapp/WEB-INF/views/mngr/goods/subsvc/SubsvcList.jsp +++ b/src/main/webapp/WEB-INF/views/mngr/goods/subsvc/SubsvcList.jsp @@ -7,13 +7,13 @@ <%@ taglib prefix="f" uri="/WEB-INF/tlds/f.tld" %> <%-- - Class Name : GoodsListR.jsp - Description : 상품 목록 조회 리스트 + Class Name : SubsvcList.jsp + Description : 구독서비스 목록 조회 리스트 Modification Information 수정일 수정자 수정내용 ------- -------- --------------------------- - 2024-03-20 리브가 최초 생성 + 2026-02-05 jazz 최초 생성 --%>
@@ -46,7 +46,7 @@
- +
@@ -74,7 +74,7 @@ -