일반주문 할인 및 배송비 계산 수정(1)

This commit is contained in:
김현욱
2026-03-23 15:35:42 +09:00
parent 9a7386a08c
commit ef4f5f473c
4 changed files with 248 additions and 373 deletions

View File

@@ -2,7 +2,6 @@ package com.wb.domainserver.domain.gcone.goods.purchs.service;
import com.nimbusds.jose.shaded.gson.Gson;
import com.wb.domainserver.domain.admin.instcSle.mtng.service.BOMaMtngService;
import com.wb.domainserver.domain.admin.instcSle.mtng.vo.BOInstcSleVO;
import com.wb.domainserver.domain.gcone.bbs.cnslt.service.BOCnsltService;
import com.wb.domainserver.domain.gcone.bbs.cnslt.vo.BOCnsltVO;
import com.wb.domainserver.domain.gcone.common.service.BOCommonService;
@@ -12,7 +11,6 @@ import com.wb.domainserver.domain.gcone.ordr.ordr.mapper.BOOrdrMapper;
import com.wb.domainserver.domain.gcone.ordr.ordr.vo.BOOrderRestAmtVO;
import com.wb.domainserver.exception.WnbtRestException;
import com.wb.domainserver.security.authentication.AnonymousUser;
import com.wb.domainserver.security.authentication.MemberJwtToken;
import com.wb.domainserver.util.dataaccess.DataMap;
import com.wb.domainserver.util.string.StringUtil;
import lombok.extern.slf4j.Slf4j;
@@ -25,7 +23,6 @@ import org.springframework.util.StringUtils;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.util.*;
import java.util.stream.Collectors;
@@ -98,6 +95,7 @@ public class BOOrderService {
}
String ordrTyCd = (String) param.get("ordrTyCd");
String bfOrdrTyCd = (String) param.get("ordrTyCd");
log.debug("insertMngrOrdrRegist-param : {}", param);
@@ -105,313 +103,6 @@ public class BOOrderService {
0. 배송 정책에 따른 배송지 세팅
***************************** */
// /** 여러곳 배송 배송지 세팅 시작 */
// LinkedHashMap<String, Object> multiOrdrDlvylcMap = new LinkedHashMap<>();
// List<LinkedHashMap<String, Object>> dlvylcListMulti = new ArrayList<>();
//
// multiOrdrDlvylcMap = (LinkedHashMap) param.get("multiOrdrDlvylc");
// log.debug("multiOrdrDlvylcMap : {}", multiOrdrDlvylcMap);
//
// // DlvyGroupList 조회
// List<DataMap> DlvyGroupList = new ArrayList<>();
//
// goodsList.forEach(goods -> {
// DataMap item = new DataMap();
//
// item.put("goodsInnb", new BigInteger(String.valueOf(goods.get("goodsInnb"))));
// item.put("goodsOptnInnb", new BigInteger(String.valueOf(goods.get("goodsOptnInnb"))));
// item.put("dlvyGroupInnb", new BigInteger(String.valueOf(goods.get("dlvyGroupInnb"))));
// item.put("subSlepric", new BigDecimal(String.valueOf(( (int) goods.get("slepric") * (int) goods.get("qy")) - (int) goods.get("dscntAmt") )));
// item.put("qy", new BigDecimal(String.valueOf((int) goods.get("qy"))));
// item.put("mbrInnb", String.valueOf(goods.get("mbrInnb")));
//
// DlvyGroupList.add(item);
// });
//
// DlvyGroupList.sort(Comparator.comparing((DataMap map) -> (BigInteger) map.get("goodsInnb")).thenComparing((DataMap map) -> (BigInteger) map.get("goodsOptnInnb")) .thenComparing((DataMap map) -> (BigInteger) map.get("dlvyGroupInnb"))); // 정렬
//
// // 배송그룹고유번호별 상품목록
// Map<BigInteger, List<DataMap>> goodsByDlvyGroupMap = DlvyGroupList.stream().collect(Collectors.groupingBy(m -> ((BigInteger) m.get("dlvyGroupInnb")), HashMap::new, Collectors.toList()));
//
// String dlvylcAreaCd = (String) shipping.get("dlvylcAreaCd");
// String ordrAdressZip = StringUtil.isNullToString(shipping.get("dlvylcZip"));
// String prefcd = (String) shipping.get("prefcd");
// String defaultAdressAt = "N";
// String sopmalCode = sopmalCd;
//
// DataMap defaultAdressVO = new DataMap() {{ //
// put("sopmalCd", sopmalCode); // 쇼핑몰 코드
// put("zip", ordrAdressZip); // 우편번호
// put("prefcd", prefcd); // 도도부현코드
// }};
//
// if("KR".equals(dlvylcAreaCd)){
// defaultAdressAt = boOrdrMapper.selectBODefaultAdressAtInqire(defaultAdressVO);
// }
// if("JP".equals(dlvylcAreaCd)){
// defaultAdressAt = boOrdrMapper.selectBODefaultAdressAtInqire2(defaultAdressVO);
// }
//
//
// List<DataMap> dlvyAmtByDlvyGroupList = new ArrayList<>();
//
// for (Map.Entry<BigInteger, List<DataMap>> dlvyGroupEtry : goodsByDlvyGroupMap.entrySet()) {
// int dlvyGroupInnb = dlvyGroupEtry.getKey().intValue();
// List<DataMap> goodsByDlvyGroupList = dlvyGroupEtry.getValue();
//
// DataMap shippingParam = new DataMap() {{
// put("dlvyGroupInnb", dlvyGroupInnb);
// put("sopmalCd", sopmalCode);
// }};
//
// DataMap shippingGrouping = mapper.selectShippingGrouping(shippingParam);
//
// // "KR".equals(dlvylcAreaCd)인 경우
// String itemDlvyGroupDvCd = (String) shippingGrouping.get("dlvyGroupDvCd");
// BigDecimal itemDftDlvyAmt = (BigDecimal) shippingGrouping.get("dftDlvyAmt"); // 기본배송비
// BigDecimal itemDlvyAmt = itemDftDlvyAmt; // 배송비
// String itemDlvyAreaAditAt = (String) shippingGrouping.get("dlvyAreaAditAt"); // 도서산간 추가 배송비 조건
// BigDecimal itemAreaAditDlvyAmt = (BigDecimal) shippingGrouping.get("areaAditDlvyAmt"); // 도서산간 추가 배송비
// String itemAmtCndUseAt = (String) shippingGrouping.get("amtCndUseAt"); // 금액조건
// BigDecimal itemAmtCndAditAmt = (BigDecimal) shippingGrouping.get("amtCndAditAmt");
// String itemCntCndUseAt = (String) shippingGrouping.get("cntCndUseAt"); // 수량조건
// BigDecimal itemCntCndAditAmt = (BigDecimal) shippingGrouping.get("cntCndAditAmt"); // 수량
//
// if("JP".equals(dlvylcAreaCd)){
// itemDftDlvyAmt = (BigDecimal) shippingGrouping.get("dftDlvyAmt2"); // 기본배송비
// itemDlvyAmt = itemDftDlvyAmt; // 배송비
// itemDlvyAreaAditAt = (String) shippingGrouping.get("dlvyAreaAditAt2"); // 도서산간 추가 배송비 조건
// itemAreaAditDlvyAmt = (BigDecimal) shippingGrouping.get("areaAditDlvyAmt2"); // 도서산간 추가 배송비
// itemAmtCndUseAt = (String) shippingGrouping.get("amtCndUseAt2"); // 금액조건
// itemAmtCndAditAmt = (BigDecimal) shippingGrouping.get("amtCndAditAmt");
// itemCntCndUseAt = (String) shippingGrouping.get("cntCndUseAt2"); // 수량조건
// itemCntCndAditAmt = (BigDecimal) shippingGrouping.get("cntCndAditAmt2"); // 수량
// }
//
// if ("01".equals(ordrTyCd) || "03".equals(ordrTyCd) || "04".equals(ordrTyCd) || "06".equals(ordrTyCd)) { // 일반주문, 회원 개인결제, 정기배송
//
// // 무료배송(조건부)
// if ("01".equals(itemDlvyGroupDvCd)) {
//
// // 추가배송비 계산 (MUL)
// if (!StringUtils.isEmpty(itemDlvyAreaAditAt) && "Y".equals(itemDlvyAreaAditAt)) {
// if (!StringUtils.isEmpty(defaultAdressAt) && "Y".equals(defaultAdressAt)) {
// itemDlvyAmt = itemDlvyAmt.add(itemAreaAditDlvyAmt); // 유료 배송 도서산간 추가 배송비
// }
// }
//
// } else if ("02".equals(itemDlvyGroupDvCd)) { // 무료 배송일 경우
//
// // 추가배송비 계산 (MUL)
// if (!StringUtils.isEmpty(itemDlvyAreaAditAt) && "Y".equals(itemDlvyAreaAditAt)) {
// if (!StringUtils.isEmpty(defaultAdressAt) && "Y".equals(defaultAdressAt)) {
// itemDlvyAmt = itemDlvyAmt.add(itemAreaAditDlvyAmt); // 유료 배송 도서산간 추가 배송비
// }
// }
//
// } else if ("03".equals(itemDlvyGroupDvCd)) { // 유료배송
// // 수량 조건
// if ("Y".equals(itemCntCndUseAt) && itemCntCndAditAmt.compareTo(BigDecimal.ZERO) > 0) {
//
// for (DataMap goodsMap : goodsByDlvyGroupList) {
//
// BigDecimal qy = (BigDecimal) goodsMap.get("qy"); // 수량
// BigDecimal unitQy = qy.divide(itemCntCndAditAmt, 0, RoundingMode.CEILING); // 단위수량
//
// int goodsQy = unitQy.intValue();
//
// // cntCndAditAmt(설정수량)보다 qy가 큰 경우
// if (qy.compareTo(itemCntCndAditAmt) > 0) {
//
// } else {
// // 수량당 배송비가 1인경우
// }
// } // for
//
// } else {
//
// for (DataMap goodsMap : goodsByDlvyGroupList) {
// BigDecimal qy = (BigDecimal) goodsMap.get("qy"); // 수량
//
// }
//
//
//
// List<LinkedHashMap> itemGoodsList = new ArrayList<>();
// itemGoodsList.add(goodsList.get(i));
// for (LinkedHashMap<String, Object> itemGoodsMap : itemGoodsList) {
// itemGoodsMap.put("qy", qy.intValue());
// }
//
// List<LinkedHashMap> itempPrsntList = new ArrayList<>();
// if(!prsntList.isEmpty()){
// itempPrsntList.add(prsntList.get(i));
// for (LinkedHashMap<String, Object> itemPrsntMap : itempPrsntList) {
// itemPrsntMap.put("qy", qy.intValue());
// }
// }
//
// LinkedHashMap<String, Object> dlvyMap = new LinkedHashMap<>();
//
// dlvyMap.put("dftDlvyAmt", itemDftDlvyAmt.intValue());
// dlvyMap.put("dlvyAmt", itemDlvyAmt.intValue());
// dlvyMap.put("couponInnb", 0);
// dlvyMap.put("dwldCouponInnb", 0);
// dlvyMap.put("dplctDscntAt", "");
// dlvyMap.put("otrCouponSmtmUseAt", "");
// dlvyMap.put("mngrFreeDlvyUseAt", "N");
// dlvyMap.put("dlvylcAreaCd", shipping.get("dlvylcAreaCd"));
// dlvyMap.put("cstmclerCd", shipping.get("cstmclerCd"));
// dlvyMap.put("dlvylcZip", shipping.get("dlvylcZip"));
// dlvyMap.put("prefcd", shipping.get("prefcd"));
// dlvyMap.put("recpntNm", shipping.get("recpntNm"));
// dlvyMap.put("recpntMbtlnb", shipping.get("recpntMbtlnb"));
// dlvyMap.put("dlvylcAdresDvCd", shipping.get("dlvylcAdresDvCd"));
// dlvyMap.put("dlvylcLnbAdres", shipping.get("dlvylcLnbAdres"));
// dlvyMap.put("dlvylcRnmAdres", shipping.get("dlvylcRnmAdres"));
// dlvyMap.put("dlvylcAdresDtl", shipping.get("dlvylcAdresDtl"));
// dlvyMap.put("dlvyMssageCn", shipping.get("dlvyMssageCn"));
// dlvyMap.put("goodsList", itemGoodsList);
// dlvyMap.put("prsntList", itempPrsntList); //prsntList.get(i));
//
// dlvylcListMulti.add(dlvyMap);
//
// // 추가배송비 계산 (MUL)
// if (!StringUtils.isEmpty(itemDlvyAreaAditAt) && "Y".equals(itemDlvyAreaAditAt)) {
// if (!StringUtils.isEmpty(defaultAdressAt) && "Y".equals(defaultAdressAt)) {
// itemDlvyAmt = itemDlvyAmt.add(itemAreaAditDlvyAmt); // 유료 배송 도서산간 추가 배송비
// }
// }
// }
//
// }
//
//
// for(DataMap goodsMap : goodsByDlvyGroupList) {
//// BigDecimal goodsQy = (int) goodsMap.get("qy"); // 수량
// BigDecimal qy = (BigDecimal) goodsMap.get("qy"); // 수량
//
// if ("03".equals(itemDlvyGroupDvCd) && "Y".equals(itemCntCndUseAt)) {
//
//// BigDecimal qy = (BigDecimal) goodsList.get(i).get("qy"); // 수량
//// BigDecimal qy = new BigDecimal(String.valueOf(goodsList.get(i).get("qy"))); // 수량
// BigDecimal unitQy = qy.divide(itemCntCndAditAmt, 0, RoundingMode.CEILING); // 단위수량
//
// int goodsQy = unitQy.intValue();
//
// for(int j=0;j<goodsQy;j++) {
//
// List<LinkedHashMap> itemGoodsList = new ArrayList<>();
// itemGoodsList.add(goodsList.get(i));
// for (LinkedHashMap<String, Object> itemGoodsMap : itemGoodsList) {
// if((goodsQy-j) > 1){
// itemGoodsMap.put("qy", itemCntCndAditAmt.intValue());
// } else {
// itemGoodsMap.put("qy", qy.intValue() - (itemCntCndAditAmt.intValue() * j));
// }
// }
//
// List<LinkedHashMap> itempPrsntList = new ArrayList<>();
// if(!prsntList.isEmpty()){
// itempPrsntList.add(prsntList.get(i));
// for (LinkedHashMap<String, Object> itemPrsntMap : itempPrsntList) {
// if((goodsQy-j) > 1){
// itemPrsntMap.put("qy", itemCntCndAditAmt.intValue());
// } else {
// itemPrsntMap.put("qy", qy.intValue() - (itemCntCndAditAmt.intValue() * j));
// }
// }
// }
//
// LinkedHashMap<String, Object> dlvyMap = new LinkedHashMap<>();
//
// dlvyMap.put("dftDlvyAmt", itemDftDlvyAmt.intValue());
// dlvyMap.put("dlvyAmt", itemDlvyAmt.intValue());
// dlvyMap.put("couponInnb", 0);
// dlvyMap.put("dwldCouponInnb", 0);
// dlvyMap.put("dplctDscntAt", "");
// dlvyMap.put("otrCouponSmtmUseAt", "");
// dlvyMap.put("mngrFreeDlvyUseAt", "N");
// dlvyMap.put("dlvylcAreaCd", shipping.get("dlvylcAreaCd"));
// dlvyMap.put("cstmclerCd", shipping.get("cstmclerCd"));
// dlvyMap.put("dlvylcZip", shipping.get("dlvylcZip"));
// dlvyMap.put("prefcd", shipping.get("prefcd"));
// dlvyMap.put("recpntNm", shipping.get("recpntNm"));
// dlvyMap.put("recpntMbtlnb", shipping.get("recpntMbtlnb"));
// dlvyMap.put("dlvylcAdresDvCd", shipping.get("dlvylcAdresDvCd"));
// dlvyMap.put("dlvylcLnbAdres", shipping.get("dlvylcLnbAdres"));
// dlvyMap.put("dlvylcRnmAdres", shipping.get("dlvylcRnmAdres"));
// dlvyMap.put("dlvylcAdresDtl", shipping.get("dlvylcAdresDtl"));
// dlvyMap.put("dlvyMssageCn", shipping.get("dlvyMssageCn"));
// dlvyMap.put("goodsList", itemGoodsList);
// dlvyMap.put("prsntList", itempPrsntList); //prsntList.get(i));
//
// dlvylcListMulti.add(dlvyMap);
// }
// } else {
//
// BigDecimal qy = new BigDecimal(String.valueOf(goodsList.get(i).get("qy"))); // 수량
//
// List<LinkedHashMap> itemGoodsList = new ArrayList<>();
// itemGoodsList.add(goodsList.get(i));
// for (LinkedHashMap<String, Object> itemGoodsMap : itemGoodsList) {
// itemGoodsMap.put("qy", qy.intValue());
// }
//
// List<LinkedHashMap> itempPrsntList = new ArrayList<>();
// if(!prsntList.isEmpty()){
// itempPrsntList.add(prsntList.get(i));
// for (LinkedHashMap<String, Object> itemPrsntMap : itempPrsntList) {
// itemPrsntMap.put("qy", qy.intValue());
// }
// }
//
// LinkedHashMap<String, Object> dlvyMap = new LinkedHashMap<>();
//
// dlvyMap.put("dftDlvyAmt", itemDftDlvyAmt.intValue());
// dlvyMap.put("dlvyAmt", itemDlvyAmt.intValue());
// dlvyMap.put("couponInnb", 0);
// dlvyMap.put("dwldCouponInnb", 0);
// dlvyMap.put("dplctDscntAt", "");
// dlvyMap.put("otrCouponSmtmUseAt", "");
// dlvyMap.put("mngrFreeDlvyUseAt", "N");
// dlvyMap.put("dlvylcAreaCd", shipping.get("dlvylcAreaCd"));
// dlvyMap.put("cstmclerCd", shipping.get("cstmclerCd"));
// dlvyMap.put("dlvylcZip", shipping.get("dlvylcZip"));
// dlvyMap.put("prefcd", shipping.get("prefcd"));
// dlvyMap.put("recpntNm", shipping.get("recpntNm"));
// dlvyMap.put("recpntMbtlnb", shipping.get("recpntMbtlnb"));
// dlvyMap.put("dlvylcAdresDvCd", shipping.get("dlvylcAdresDvCd"));
// dlvyMap.put("dlvylcLnbAdres", shipping.get("dlvylcLnbAdres"));
// dlvyMap.put("dlvylcRnmAdres", shipping.get("dlvylcRnmAdres"));
// dlvyMap.put("dlvylcAdresDtl", shipping.get("dlvylcAdresDtl"));
// dlvyMap.put("dlvyMssageCn", shipping.get("dlvyMssageCn"));
// dlvyMap.put("goodsList", itemGoodsList);
// dlvyMap.put("prsntList", itempPrsntList); //prsntList.get(i));
//
// dlvylcListMulti.add(dlvyMap);
// }
//
// } // for
//
// // 배송지가 1개 이상이면 여러곳 배송으로 변경
// if(dlvylcListMulti.size() > 1) {
// ordrTyCd = "05";
// }
//
// } else if ("05".equals(ordrTyCd)) { // 여러곳 배송, 선물하기
// if (!CollectionUtils.isEmpty(multiOrdrDlvylcMap)) {
// // 배송지 리스트
// dlvylcListMulti = (List<LinkedHashMap<String, Object>>) multiOrdrDlvylcMap.get("dlvylc");
// log.debug("dlvylcListMulti : {}", dlvylcListMulti);
// }
// }
// /** 여러곳 배송 배송지 세팅 종료 */
//
//// dlvyAmtByDlvyGroupList.add(dlvyGroupMap); // 배송그룹별 배송비 목록
// } // for : dlvyGroupEtry
/** 여러곳 배송 배송지 세팅 시작 */
LinkedHashMap<String, Object> multiOrdrDlvylcMap = new LinkedHashMap<>();
List<LinkedHashMap<String, Object>> dlvylcListMulti = new ArrayList<>();
@@ -423,13 +114,15 @@ public class BOOrderService {
String ordrAdressZip = StringUtil.isNullToString(shipping.get("dlvylcZip"));
String prefcd = (String) shipping.get("prefcd");
String defaultAdressAt = "N";
String finalSopmalCd = sopmalCd;
String sopmalCode = sopmalCd;
DataMap defaultAdressVO = new DataMap() {{ //
put("sopmalCd", finalSopmalCd); // 쇼핑몰 코드
put("sopmalCd", sopmalCode); // 쇼핑몰 코드
put("zip", ordrAdressZip); // 우편번호
put("prefcd", prefcd); // 도도부현코드
}};
// 추가 배송비 여부 조회
if("KR".equals(dlvylcAreaCd)){
defaultAdressAt = boOrdrMapper.selectBODefaultAdressAtInqire(defaultAdressVO);
}
@@ -437,13 +130,45 @@ public class BOOrderService {
defaultAdressAt = boOrdrMapper.selectBODefaultAdressAtInqire2(defaultAdressVO);
}
// DlvyGroupList 조회
List<DataMap> DlvyGroupList = new ArrayList<>();
goodsList.forEach(goods -> {
DataMap item = new DataMap();
item.put("goodsInnb", new BigInteger(String.valueOf(goods.get("goodsInnb"))));
item.put("goodsOptnInnb", new BigInteger(String.valueOf(goods.get("goodsOptnInnb"))));
item.put("dlvyGroupInnb", new BigInteger(String.valueOf(goods.get("dlvyGroupInnb"))));
item.put("qy", new BigInteger(String.valueOf((int) goods.get("qy"))));
item.put("dscntApplyAmt", new BigInteger(String.valueOf((int) goods.get("dscntApplyAmt"))));
item.put("slepric", new BigInteger(String.valueOf((int) goods.get("slepric"))));
item.put("subSlepric", new BigInteger(String.valueOf((int) goods.get("subSlepric"))));
item.put("dscntAmt", new BigInteger(String.valueOf((int) goods.get("dscntAmt"))));
// dscntApplyAmt 4500
// slepric 5000
// subSlepric 5000
// dscntAmt 500
item.put("mbrInnb", new BigInteger(String.valueOf(goods.get("mbrInnb"))));
item.put("mbrDvCd", String.valueOf(goods.get("mbrDvCd")));
item.put("sopmalCd", String.valueOf(goods.get("sopmalCd")));
DlvyGroupList.add(item);
});
DlvyGroupList.sort(Comparator.comparing((DataMap map) -> (BigInteger) map.get("goodsInnb")).thenComparing((DataMap map) -> (BigInteger) map.get("goodsOptnInnb")) .thenComparing((DataMap map) -> (BigInteger) map.get("dlvyGroupInnb"))); // 정렬
// 배송그룹고유번호별 상품목록
Map<BigInteger, List<DataMap>> goodsByDlvyGroupMap = DlvyGroupList.stream().collect(Collectors.groupingBy(m -> ((BigInteger) m.get("dlvyGroupInnb")), HashMap::new, Collectors.toList()));
List<DataMap> dlvyAmtByDlvyGroupList = new ArrayList<>();
if ("01".equals(ordrTyCd) || "03".equals(ordrTyCd) || "04".equals(ordrTyCd) || "06".equals(ordrTyCd)) { // 일반주문, 회원 개인결제, 정기배송
for(int i=0;i<goodsList.size();i++) {
int goodsQy = (int) goodsList.get(i).get("qy");
int dlvyGroupInnb = (int) goodsList.get(i).get("dlvyGroupInnb");
String sopmalCode = sopmalCd;
for (Map.Entry<BigInteger, List<DataMap>> dlvyGroupEtry : goodsByDlvyGroupMap.entrySet()) {
int dlvyGroupInnb = dlvyGroupEtry.getKey().intValue();
List<DataMap> goodsByDlvyGroupList = dlvyGroupEtry.getValue();
DataMap shippingParam = new DataMap() {{
put("dlvyGroupInnb", dlvyGroupInnb);
@@ -474,44 +199,155 @@ public class BOOrderService {
itemCntCndAditAmt = (BigDecimal) shippingGrouping.get("cntCndAditAmt2"); // 수량
}
// 추가배송비 계산 (MUL)
if (!StringUtils.isEmpty(itemDlvyAreaAditAt) && "Y".equals(itemDlvyAreaAditAt)) {
if (!StringUtils.isEmpty(defaultAdressAt) && "Y".equals(defaultAdressAt)) {
itemDlvyAmt = itemDlvyAmt.add(itemAreaAditDlvyAmt); // 유료 배송 도서산간 추가 배송비
// // 무료배송(조건부)
// if ("01".equals(itemDlvyGroupDvCd)) {
//
// // 추가배송비 계산 (MUL)
// if (!StringUtils.isEmpty(itemDlvyAreaAditAt) && "Y".equals(itemDlvyAreaAditAt)) {
// if (!StringUtils.isEmpty(defaultAdressAt) && "Y".equals(defaultAdressAt)) {
// itemDlvyAmt = itemDlvyAmt.add(itemAreaAditDlvyAmt); // 유료 배송 도서산간 추가 배송비
// }
// }
//
// } else if ("02".equals(itemDlvyGroupDvCd)) { // 무료 배송일 경우
//
// // 추가배송비 계산 (MUL)
// if (!StringUtils.isEmpty(itemDlvyAreaAditAt) && "Y".equals(itemDlvyAreaAditAt)) {
// if (!StringUtils.isEmpty(defaultAdressAt) && "Y".equals(defaultAdressAt)) {
// itemDlvyAmt = itemDlvyAmt.add(itemAreaAditDlvyAmt); // 유료 배송 도서산간 추가 배송비
// }
// }
//
// } else if ("03".equals(itemDlvyGroupDvCd)) { // 유료배송
if ("03".equals(itemDlvyGroupDvCd)) { // 유료배송
// 추가배송비 계산 (MUL)
if (!StringUtils.isEmpty(itemDlvyAreaAditAt) && "Y".equals(itemDlvyAreaAditAt)) {
if (!StringUtils.isEmpty(defaultAdressAt) && "Y".equals(defaultAdressAt)) {
itemDlvyAmt = itemDlvyAmt.add(itemAreaAditDlvyAmt); // 유료 배송 도서산간 추가 배송비
}
}
}
if ("03".equals(itemDlvyGroupDvCd) && "Y".equals(itemCntCndUseAt)) {
// 유료배송 + 수량 조건
if ("Y".equals(itemCntCndUseAt) && itemCntCndAditAmt.compareTo(BigDecimal.ZERO) > 0) {
// 수량 조건 있을 경우
for (DataMap goodsMap : goodsByDlvyGroupList) {
// BigDecimal qy = (BigDecimal) goodsList.get(i).get("qy"); // 수량
BigDecimal qy = new BigDecimal(String.valueOf(goodsList.get(i).get("qy"))); // 수량
BigDecimal unitQy = qy.divide(itemCntCndAditAmt, 0, RoundingMode.CEILING); // 단위수량
BigDecimal qy = new BigDecimal(String.valueOf(goodsMap.get("qy"))); // 수량
BigDecimal unitQy = qy.divide(itemCntCndAditAmt, 0, RoundingMode.CEILING); // 단위수량
BigDecimal goodsDscntAmt = new BigDecimal(String.valueOf(goodsMap.get("dscntAmt")));
BigInteger unitDscntAmt = BigInteger.valueOf(goodsDscntAmt.intValue());
goodsQy = unitQy.intValue();
int goodsQy = unitQy.intValue();
for(int j=0;j<goodsQy;j++) {
// cntCndAditAmt(설정수량)으로 배송 나누기
for (int j = 0; j < goodsQy; j++) {
goodsMap.put("goodsInnb", new BigInteger(String.valueOf(goodsMap.get("goodsInnb"))).intValue());
goodsMap.put("goodsOptnInnb", new BigInteger(String.valueOf(goodsMap.get("goodsOptnInnb"))).intValue());
goodsMap.put("dlvyGroupInnb", new BigInteger(String.valueOf(goodsMap.get("dlvyGroupInnb"))).intValue());
goodsMap.put("slepric", new BigInteger(String.valueOf(goodsMap.get("slepric"))).intValue());
goodsMap.put("mbrInnb", new BigInteger(String.valueOf(goodsMap.get("mbrInnb"))).intValue());
// cntCndAditAmt(설정수량)단위로 으로 goodsList qy(수량) 설정
if ((goodsQy - j) > 1) {
goodsMap.put("qy", itemCntCndAditAmt.intValue());
} else {
goodsMap.put("qy", qy.intValue() - (itemCntCndAditAmt.intValue() * j));
}
// goodsDscntAmt(할인금액)이 있을 경우
if (goodsDscntAmt.compareTo(BigDecimal.ZERO) > 0) {
unitDscntAmt = new BigInteger(String.valueOf(goodsDscntAmt.divide(qy, 0, RoundingMode.DOWN))); // 소수점이하 나머지 버림
goodsMap.put("dscntAmt", unitDscntAmt.intValueExact());
goodsMap.put("subSlepric", new BigInteger(String.valueOf(((int) goodsMap.get("slepric") * (int) goodsMap.get("qy")))).intValueExact());
goodsMap.put("dscntApplyAmt", new BigInteger(String.valueOf(((int) goodsMap.get("slepric") * (int) goodsMap.get("qy")) - (int) goodsMap.get("dscntAmt"))).intValueExact());
} else {
// goodsDscntAmt(할인금액)이 0일 경우
goodsMap.put("dscntAmt", unitDscntAmt.intValueExact());
goodsMap.put("subSlepric", new BigInteger(String.valueOf(((int) goodsMap.get("slepric") * (int) goodsMap.get("qy")))).intValueExact());
goodsMap.put("dscntApplyAmt", new BigInteger(String.valueOf(((int) goodsMap.get("slepric") * (int) goodsMap.get("qy")) - (int) goodsMap.get("dscntAmt"))).intValueExact());
}
// item.put("subSlepric", new BigDecimal(String.valueOf(( (int) goods.get("slepric") * (int) goods.get("qy")) - (int) goods.get("dscntAmt") )));
// GoodsList에 추가
List<LinkedHashMap> itemGoodsList = new ArrayList<>();
itemGoodsList.add(new LinkedHashMap<>(goodsMap));
List<LinkedHashMap> itempPrsntList = new ArrayList<>();
// if(!prsntList.isEmpty()){
// itempPrsntList.add(prsntList.get(i));
// for (LinkedHashMap<String, Object> itemPrsntMap : itempPrsntList) {
// if((goodsQy-j) > 1){
// itemPrsntMap.put("qy", itemCntCndAditAmt.intValue());
// } else {
// itemPrsntMap.put("qy", qy.intValue() - (itemCntCndAditAmt.intValue() * j));
// }
// }
// }
LinkedHashMap<String, Object> dlvyMap = new LinkedHashMap<>();
dlvyMap.put("dftDlvyAmt", itemDftDlvyAmt.intValue());
dlvyMap.put("dlvyAmt", itemDlvyAmt.intValue());
dlvyMap.put("couponInnb", 0);
dlvyMap.put("dwldCouponInnb", 0);
dlvyMap.put("dplctDscntAt", "");
dlvyMap.put("otrCouponSmtmUseAt", "");
dlvyMap.put("mngrFreeDlvyUseAt", "N");
dlvyMap.put("dlvylcAreaCd", shipping.get("dlvylcAreaCd"));
dlvyMap.put("cstmclerCd", shipping.get("cstmclerCd"));
dlvyMap.put("dlvylcZip", shipping.get("dlvylcZip"));
dlvyMap.put("prefcd", shipping.get("prefcd"));
dlvyMap.put("recpntNm", shipping.get("recpntNm"));
dlvyMap.put("recpntMbtlnb", shipping.get("recpntMbtlnb"));
dlvyMap.put("dlvylcAdresDvCd", shipping.get("dlvylcAdresDvCd"));
dlvyMap.put("dlvylcLnbAdres", shipping.get("dlvylcLnbAdres"));
dlvyMap.put("dlvylcRnmAdres", shipping.get("dlvylcRnmAdres"));
dlvyMap.put("dlvylcAdresDtl", shipping.get("dlvylcAdresDtl"));
dlvyMap.put("dlvyMssageCn", shipping.get("dlvyMssageCn"));
dlvyMap.put("goodsList", itemGoodsList);
dlvyMap.put("prsntList", itempPrsntList); //prsntList.get(i));
dlvylcListMulti.add(dlvyMap);
} // for j
} // for goodsByDlvyGroupList
} else {
// 수량 조건 없을 경우
List<LinkedHashMap> itemGoodsList = new ArrayList<>();
itemGoodsList.add(goodsList.get(i));
for (LinkedHashMap<String, Object> itemGoodsMap : itemGoodsList) {
if((goodsQy-j) > 1){
itemGoodsMap.put("qy", itemCntCndAditAmt.intValue());
} else {
itemGoodsMap.put("qy", qy.intValue() - (itemCntCndAditAmt.intValue() * j));
}
for (DataMap goodsMap : goodsByDlvyGroupList) {
// BigDecimal qy = (BigDecimal) goodsMap.get("qy"); // 수량
goodsMap.put("goodsInnb", new BigInteger(String.valueOf(goodsMap.get("goodsInnb"))).intValue());
goodsMap.put("goodsOptnInnb", new BigInteger(String.valueOf(goodsMap.get("goodsOptnInnb"))).intValue());
goodsMap.put("dlvyGroupInnb", new BigInteger(String.valueOf(goodsMap.get("dlvyGroupInnb"))).intValue());
goodsMap.put("qy", new BigInteger(String.valueOf(goodsMap.get("qy"))).intValue());
goodsMap.put("dscntApplyAmt", new BigInteger(String.valueOf(goodsMap.get("dscntApplyAmt"))).intValue());
goodsMap.put("slepric", new BigInteger(String.valueOf(goodsMap.get("slepric"))).intValue());
goodsMap.put("subSlepric", new BigInteger(String.valueOf(goodsMap.get("subSlepric"))).intValue());
goodsMap.put("dscntAmt", new BigInteger(String.valueOf(goodsMap.get("dscntAmt"))).intValue());
goodsMap.put("mbrInnb", new BigInteger(String.valueOf(goodsMap.get("mbrInnb"))).intValue());
itemGoodsList.add(new LinkedHashMap<>(goodsMap));
}
List<LinkedHashMap> itempPrsntList = new ArrayList<>();
if(prsntList != null && !prsntList.isEmpty()){
itempPrsntList.add(prsntList.get(i));
for (LinkedHashMap<String, Object> itemPrsntMap : itempPrsntList) {
if((goodsQy-j) > 1){
itemPrsntMap.put("qy", itemCntCndAditAmt.intValue());
} else {
itemPrsntMap.put("qy", qy.intValue() - (itemCntCndAditAmt.intValue() * j));
}
}
}
// if(!prsntList.isEmpty()){
// itempPrsntList.add(prsntList.get(i));
// for (LinkedHashMap<String, Object> itemPrsntMap : itempPrsntList) {
// itemPrsntMap.put("qy", qy.intValue());
// }
// }
LinkedHashMap<String, Object> dlvyMap = new LinkedHashMap<>();
@@ -538,23 +374,43 @@ public class BOOrderService {
dlvylcListMulti.add(dlvyMap);
}
} else {
BigDecimal qy = new BigDecimal(String.valueOf(goodsList.get(i).get("qy"))); // 수량
// } // DlvyGroupDvCd 무료배송, 유료배송
} else { // 조건부 무료 or 무료 배송일 경우
// 추가배송비 계산 (MUL)
if (!StringUtils.isEmpty(itemDlvyAreaAditAt) && "Y".equals(itemDlvyAreaAditAt)) {
if (!StringUtils.isEmpty(defaultAdressAt) && "Y".equals(defaultAdressAt)) {
itemDlvyAmt = itemDlvyAmt.add(itemAreaAditDlvyAmt); // 유료 배송 도서산간 추가 배송비
}
}
List<LinkedHashMap> itemGoodsList = new ArrayList<>();
itemGoodsList.add(goodsList.get(i));
for (LinkedHashMap<String, Object> itemGoodsMap : itemGoodsList) {
itemGoodsMap.put("qy", qy.intValue());
for (DataMap goodsMap : goodsByDlvyGroupList) {
// BigDecimal qy = (BigDecimal) goodsMap.get("qy"); // 수량
goodsMap.put("goodsInnb", new BigInteger(String.valueOf(goodsMap.get("goodsInnb"))).intValue());
goodsMap.put("goodsOptnInnb", new BigInteger(String.valueOf(goodsMap.get("goodsOptnInnb"))).intValue());
goodsMap.put("dlvyGroupInnb", new BigInteger(String.valueOf(goodsMap.get("dlvyGroupInnb"))).intValue());
goodsMap.put("qy", new BigInteger(String.valueOf(goodsMap.get("qy"))).intValue());
goodsMap.put("dscntApplyAmt", new BigInteger(String.valueOf(goodsMap.get("dscntApplyAmt"))).intValue());
goodsMap.put("slepric", new BigInteger(String.valueOf(goodsMap.get("slepric"))).intValue());
goodsMap.put("subSlepric", new BigInteger(String.valueOf(goodsMap.get("subSlepric"))).intValue());
goodsMap.put("dscntAmt", new BigInteger(String.valueOf(goodsMap.get("dscntAmt"))).intValue());
goodsMap.put("mbrInnb", new BigInteger(String.valueOf(goodsMap.get("mbrInnb"))).intValue());
itemGoodsList.add(new LinkedHashMap<>(goodsMap));
}
List<LinkedHashMap> itempPrsntList = new ArrayList<>();
if(prsntList != null && !prsntList.isEmpty()){
itempPrsntList.add(prsntList.get(i));
for (LinkedHashMap<String, Object> itemPrsntMap : itempPrsntList) {
itemPrsntMap.put("qy", qy.intValue());
}
}
// if(!prsntList.isEmpty()){
// itempPrsntList.add(prsntList.get(i));
// for (LinkedHashMap<String, Object> itemPrsntMap : itempPrsntList) {
// itemPrsntMap.put("qy", qy.intValue());
// }
// }
LinkedHashMap<String, Object> dlvyMap = new LinkedHashMap<>();
@@ -580,9 +436,10 @@ public class BOOrderService {
dlvyMap.put("prsntList", itempPrsntList); //prsntList.get(i));
dlvylcListMulti.add(dlvyMap);
}
} // for
}
// dlvyAmtByDlvyGroupList.add(dlvyGroupMap); // 배송그룹별 배송비 목록
} // for : dlvyGroupEtry
// 배송지가 1개 이상이면 여러곳 배송으로 변경
if(dlvylcListMulti.size() > 1) {
@@ -599,7 +456,6 @@ public class BOOrderService {
/** 여러곳 배송 배송지 세팅 종료 */
/* *****************************
1. 주문등록(GC_ORDER)
***************************** */
@@ -1166,6 +1022,9 @@ public class BOOrderService {
***************************************** */
BOOrderSetleVO setleVO = insertSetle(orderVO, setle, insertedGoodsList, enuri, purchsr); // 결제 정보 등록
// 결제금액 원화로 변경
// setleVO.setSetleAmt(setleVO.getWonSetleAmt());
content.put("ordr", orderVO);
content.put("setle", setleVO);
content.put("shipping", shippingEscrowVO);

View File

@@ -2298,15 +2298,16 @@ public class BOPurchsService {
BigDecimal goodsQy = new BigDecimal(0);
for (DataMap goodsMap : goodsByDlvyGroupList) {
// 수량 조건
if ("Y".equals(cntCndUseAt) && cntCndAditAmt.compareTo(BigDecimal.ZERO) > 0) {
BigDecimal qy = (BigDecimal) goodsMap.get("qy"); // 수량
for (DataMap goodsMap : goodsByDlvyGroupList) {
// 수량 조건
if ("Y".equals(cntCndUseAt)) {
BigDecimal qy = (BigDecimal) goodsMap.get("qy"); // 수량
qy = (BigDecimal) goodsMap.get("qy"); // 수량
// cntCndAditAmt(설정수량)보다 qy가 큰 경우
if (qy.compareTo(cntCndAditAmt) > 0) {
goodsQy = qy.divide(cntCndAditAmt, 0, RoundingMode.CEILING);
//배송비 합(같은상품 수량당 배송비 책정)
@@ -2330,17 +2331,19 @@ public class BOPurchsService {
}
}
}
} else {
//수량 조건 없는 경우
paidDlvyAmt = paidDlvyAmt.add(dlvyAmt); // 유료배송비 합
// 추가배송비 계산
if (!StringUtils.isEmpty(dlvyAreaAditAt) && "Y".equals(dlvyAreaAditAt)) {
if (!StringUtils.isEmpty(defaultAdressAt) && "Y".equals(defaultAdressAt)) {
addPaidDlvyAmt = addPaidDlvyAmt.add(areaAditDlvyAmt); // 유료 배송 도서산간 추가 배송비
}
} //for
} else {
//수량 조건 없는 경우
paidDlvyAmt = paidDlvyAmt.add(dlvyAmt); // 유료배송비 합
// 추가배송비 계산
if (!StringUtils.isEmpty(dlvyAreaAditAt) && "Y".equals(dlvyAreaAditAt)) {
if (!StringUtils.isEmpty(defaultAdressAt) && "Y".equals(defaultAdressAt)) {
addPaidDlvyAmt = addPaidDlvyAmt.add(areaAditDlvyAmt); // 유료 배송 도서산간 추가 배송비
}
}
} //for
}
} else {
dlvyAmt = new BigDecimal(0);
dftDlvyAmt = new BigDecimal(0);

View File

@@ -3310,9 +3310,11 @@ public class OrdrController {
try {
//계산결과 총결제금액
String resultSetleAmt = "";
String resultWonSetleAmt = "";
//주문요청 총결제금액
//회원/비회원 총결제금액
String reqSetleAmt = StringUtil.isNullToString(setle.get("rlSetleAmt"));
String reqWonSetleAmt = StringUtil.isNullToString(setle.get("wonRlSetleAmt"));
//재계산된 총결제금액관련정보
Map<String, Object> resultAmt;
if(isSubsvc) {
@@ -3326,6 +3328,9 @@ public class OrdrController {
if(setleExpectAmt.containsKey("setleAmt")){
resultSetleAmt = StringUtil.isNullToString(setleExpectAmt.get("setleAmt"));
}
if(setleExpectAmt.containsKey("setleAmtKr")){
resultWonSetleAmt = StringUtil.isNullToString(setleExpectAmt.get("setleAmtKr"));
}
//주문요청의 총결제금액과 계산된 총결제금액이 서로 다를 경우
if(!resultSetleAmt.equals(reqSetleAmt)
@@ -3334,6 +3339,13 @@ public class OrdrController {
content.put("result", "Y");
content.put("message", PurchsValidCode.purchsValidMsg("setleAmt"));
}
if(!resultWonSetleAmt.equals(reqWonSetleAmt)
&& StringUtils.hasText(reqWonSetleAmt)
&& StringUtils.hasText(resultWonSetleAmt)){
content.put("result", "Y");
content.put("message", PurchsValidCode.purchsValidMsg("setleAmt"));
}
}
} catch (WnbtRestException wre) {
log.error(wre.getMessage());