배송비 계산 수정(1)

This commit is contained in:
김현욱
2026-02-10 16:41:51 +09:00
parent 12ae420a48
commit 1097660b22
10 changed files with 279 additions and 44 deletions

View File

@@ -177,6 +177,7 @@ public class BOPurchsService {
public DataMap selectDftDlvylc(BOPurchsrVO purchsrVO) {
DataMap dftDlvylc = new DataMap();
//기본배송지여부
purchsrVO.setDftDlvylcAt("Y");
List<DataMap> dlvylcAdresList = mapper.selectDlvylcList(purchsrVO);
@@ -1854,6 +1855,8 @@ public class BOPurchsService {
}};
String defaultAdressAt = "";
String dlvylcAreaCd = (String) param.get("dlvylcAreaCd");
String prefcd = (String) param.get("prefcd");
List<LinkedHashMap> goodsList = (List<LinkedHashMap>) param.get("goodsList");
@@ -1922,7 +1925,7 @@ public class BOPurchsService {
if (dlvylc.get("dlvyAmt") != null) {
dlvyAmtBydlvylc = dlvyAmtBydlvylc + castAmt(dlvylc, "dlvyAmt");
} else {
dlvyAmtMap = getDlvyAmt(goodsList, sopmalCd, defaultAdressAt);
dlvyAmtMap = getDlvyAmt(goodsList, sopmalCd, defaultAdressAt, dlvylcAreaCd, prefcd);
if (!CollectionUtils.isEmpty(dlvyAmtMap)) {
dlvyAmtBydlvylc = ((BigDecimal) dlvyAmtMap.get("dlvyAmt")).intValue();
@@ -1947,7 +1950,7 @@ public class BOPurchsService {
if (dlvylcMap.get("dlvyAmt") != null) {
dlvyAmtBydlvylc = dlvyAmtBydlvylc + castAmt(dlvylcMap, "dlvyAmt");
} else {
dlvyAmtMap = getDlvyAmt(goodsList, sopmalCd, defaultAdressAt);
dlvyAmtMap = getDlvyAmt(goodsList, sopmalCd, defaultAdressAt, dlvylcAreaCd, prefcd);
if (!CollectionUtils.isEmpty(dlvyAmtMap)) {
dlvyAmtBydlvylc = ((BigDecimal) dlvyAmtMap.get("dlvyAmt")).intValue();
@@ -1958,7 +1961,7 @@ public class BOPurchsService {
dlvyAmt = new BigDecimal(dlvyAmtBydlvylc);
}
} else {
dlvyAmtMap = getDlvyAmt(goodsList, sopmalCd, defaultAdressAt);
dlvyAmtMap = getDlvyAmt(goodsList, sopmalCd, defaultAdressAt, dlvylcAreaCd, prefcd);
if (!CollectionUtils.isEmpty(dlvyAmtMap)) {
dlvyAmt = (BigDecimal) dlvyAmtMap.get("dlvyAmt");
@@ -2104,9 +2107,10 @@ public class BOPurchsService {
* @param goodsList
* @return List<DataMap>
*/
public DataMap getDlvyAmt(List<LinkedHashMap> goodsList, String sopmalCd, String defaultAdressAt) {
public DataMap getDlvyAmt(List<LinkedHashMap> goodsList, String sopmalCd, String defaultAdressAt, String dlvylcAreaCd, String prefcd) {
DataMap dlvyAmtMap = null;
log.debug("우편번호 확인 : {}", defaultAdressAt);
log.debug("getDlvyAmt-goodsList : {}", goodsList);
BigDecimal rlDlvyAmt = new BigDecimal(0); // 실 최종 배송비
@@ -2171,45 +2175,65 @@ public class BOPurchsService {
DataMap shippingGrouping = mapper.selectShippingGrouping(param);
//"KR".equals(dlvylcAreaCd)인 경우
String dlvyGroupDvCd = (String) shippingGrouping.get("dlvyGroupDvCd");
BigDecimal dftDlvyAmt = (BigDecimal) shippingGrouping.get("dftDlvyAmt"); // 기본배송비
BigDecimal dlvyAmt = dftDlvyAmt; // 배송비
String dlvyAreaAditAt = (String) shippingGrouping.get("dlvyAreaAditAt"); // 도서산간 추가 배송비 조건
BigDecimal areaAditDlvyAmt = (BigDecimal) shippingGrouping.get("areaAditDlvyAmt"); // 도서산간 추가 배송비
String amtCndUseAt = (String) shippingGrouping.get("amtCndUseAt"); // 금액조건
BigDecimal amtCndAditAmt = (BigDecimal) shippingGrouping.get("amtCndAditAmt");
String cntCndUseAt = (String) shippingGrouping.get("cntCndUseAt"); // 수량조건
BigDecimal cntCndAditAmt = (BigDecimal) shippingGrouping.get("cntCndAditAmt"); // 수량
if("JP".equals(dlvylcAreaCd)){
// dlvyGroupDvCd = (String) shippingGrouping.get("dlvyGroupDvCd2");
dftDlvyAmt = (BigDecimal) shippingGrouping.get("dftDlvyAmt2"); // 기본배송비
dlvyAmt = dftDlvyAmt; // 배송비
dlvyAreaAditAt = (String) shippingGrouping.get("dlvyAreaAditAt2"); // 도서산간 추가 배송비 조건
areaAditDlvyAmt = (BigDecimal) shippingGrouping.get("areaAditDlvyAmt2"); // 도서산간 추가 배송비
amtCndUseAt = (String) shippingGrouping.get("amtCndUseAt2"); // 금액조건
amtCndAditAmt = (BigDecimal) shippingGrouping.get("amtCndAditAmt");
cntCndUseAt = (String) shippingGrouping.get("cntCndUseAt2"); // 수량조건
cntCndAditAmt = (BigDecimal) shippingGrouping.get("cntCndAditAmt2"); // 수량
}
// 무료배송(조건부)
if ("01".equals(dlvyGroupDvCd)) {
// 조건(적용상품이 1건일 경우)
String amtCndUseAt = (String) shippingGrouping.get("amtCndUseAt"); // 금액조건
String cntCndUseAt = (String) shippingGrouping.get("cntCndUseAt"); // 수량조건
// String amtCndUseAt = (String) shippingGrouping.get("amtCndUseAt"); // 금액조건
// String cntCndUseAt = (String) shippingGrouping.get("cntCndUseAt"); // 수량조건
for (DataMap goodsMap : goodsByDlvyGroupList) {
BigDecimal qy = (BigDecimal) goodsMap.get("qy"); // 수량
// BigDecimal qy = (BigDecimal) goodsMap.get("qy"); // 수량
// 금액 조건
if ("Y".equals(amtCndUseAt)) {
BigDecimal amtCndAditAmt = (BigDecimal) shippingGrouping.get("amtCndAditAmt"); // 금액조건 추가금액
// BigDecimal amtCndAditAmt = (BigDecimal) shippingGrouping.get("amtCndAditAmt"); // 금액조건 추가금액
BigDecimal slepric = (BigDecimal) goodsMap.get("subSlepric"); // 판매가 * 수량
if (slepric.compareTo(amtCndAditAmt) > 0) {
dlvyAmt = new BigDecimal(0);
} else {
//배송비 합(같은상품 수량당 배송비 책정)
dlvyAmt = dlvyAmt.multiply(qy);
}
// else {
// //배송비 합(같은상품 수량당 배송비 책정)
// dlvyAmt = dlvyAmt.multiply(qy);
// }
}
// 수량 조건
if ("Y".equals(cntCndUseAt)) {
BigDecimal cntCndAditAmt = (BigDecimal) shippingGrouping.get("cntCndAditAmt"); // 금액조건 추가금액
// BigDecimal cntCndAditAmt = (BigDecimal) shippingGrouping.get("cntCndAditAmt"); // 금액조건 추가금액
BigDecimal qy = (BigDecimal) goodsMap.get("qy"); // 수량
if (qy.compareTo(cntCndAditAmt) > 0) {
dlvyAmt = new BigDecimal(0);
} else {
//배송비 합(같은상품 수량당 배송비 책정)
dlvyAmt = dlvyAmt.multiply(qy);
}
// else {
// //배송비 합(같은상품 수량당 배송비 책정)
// dlvyAmt = dlvyAmt.multiply(qy);
// }
}
}
@@ -2268,29 +2292,66 @@ public class BOPurchsService {
} else if ("03".equals(dlvyGroupDvCd)) { // 유료배송
BigDecimal goodsQy = new BigDecimal(0);
// 유료배송비 합(같은상품 수량당 배송비 책정)
for (DataMap goodsMap : goodsByDlvyGroupList) {
goodsQy = (BigDecimal) goodsMap.get("qy");
dlvyAmt = dlvyAmt.multiply(goodsQy);
if("KR".equals(dlvylcAreaCd) || "JP".equals(dlvylcAreaCd)) {
paidDlvyAmt = paidDlvyAmt.add(dlvyAmt);
}
// 유료배송비 합(같은상품 묶음 처리)
//paidDlvyAmt = paidDlvyAmt.add(dlvyAmt);
BigDecimal goodsQy = new BigDecimal(0);
if (!StringUtils.isEmpty(dlvyAreaAditAt) && "Y".equals(dlvyAreaAditAt)) {
if (!StringUtils.isEmpty(defaultAdressAt) && "Y".equals(defaultAdressAt)) {
addPaidDlvyAmt = addPaidDlvyAmt.add(areaAditDlvyAmt); // 유료 배송 도서산간 추가 배송비
}
for (DataMap goodsMap : goodsByDlvyGroupList) {
BigDecimal qy = (BigDecimal) goodsMap.get("qy"); // 수량
// 수량 조건
if ("Y".equals(cntCndUseAt)) {
qy = (BigDecimal) goodsMap.get("qy"); // 수량
if (qy.compareTo(cntCndAditAmt) > 0) {
goodsQy = qy.divide(cntCndAditAmt, 0, RoundingMode.CEILING);
//배송비 합(같은상품 수량당 배송비 책정)
BigDecimal multidlvyAmt = dlvyAmt.multiply(goodsQy);
paidDlvyAmt = paidDlvyAmt.add(multidlvyAmt);
// 추가배송비 계산 (MUL)
if (!StringUtils.isEmpty(dlvyAreaAditAt) && "Y".equals(dlvyAreaAditAt)) {
if (!StringUtils.isEmpty(defaultAdressAt) && "Y".equals(defaultAdressAt)) {
addPaidDlvyAmt = addPaidDlvyAmt.add(areaAditDlvyAmt.multiply(goodsQy)); // 유료 배송 도서산간 추가 배송비
}
}
} else {
// 수량당 배송비가 1인경우
paidDlvyAmt = paidDlvyAmt.add(dlvyAmt);
// 추가배송비 계산
if (!StringUtils.isEmpty(dlvyAreaAditAt) && "Y".equals(dlvyAreaAditAt)) {
if (!StringUtils.isEmpty(defaultAdressAt) && "Y".equals(defaultAdressAt)) {
addPaidDlvyAmt = addPaidDlvyAmt.add(areaAditDlvyAmt); // 유료 배송 도서산간 추가 배송비
}
}
}
} 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);
}
}
BigDecimal finalDlvyAmt = dlvyAmt;
BigDecimal amtCndAditAmt = (BigDecimal) shippingGrouping.get("amtCndAditAmt"); // 금액조건 추가금액
BigDecimal finalDftDlvyAmt = dftDlvyAmt;
// BigDecimal amtCndAditAmt = (BigDecimal) shippingGrouping.get("amtCndAditAmt"); // 금액조건 추가금액
DataMap dlvyGroupMap = new DataMap(){{
put("dlvyGroupInnb", dlvyGroupInnb);
put("dftDlvyAmt", dftDlvyAmt);
put("dftDlvyAmt", finalDftDlvyAmt);
put("dlvyAmt", finalDlvyAmt);
}};

View File

@@ -89,4 +89,11 @@ public class BOPurchsrVO extends AbstractVO {
/** 기본배송지 여부 */
private String dftDlvylcAt;
/** 도도부현 코드(일본) */
private String prefcd;
/**배송지역코드*/
private String dlvylcAreaCd;
}

View File

@@ -767,6 +767,8 @@ public interface BOOrdrMapper {
*/
public String selectBODefaultAdressAtInqire(DataMap vo);
public String selectBODefaultAdressAtInqire2(DataMap vo);
/**
* 주문 상품 옵션별 정보와 배송그룹 정보

View File

@@ -2824,7 +2824,7 @@ public class BOOrdrService{
cashVO.setSopmalCd(ordrVO.getSopmalCd());
cashVO.setMbrDvCd(ordrVO.getMbrDvCd());
cashVO.setMbrInnb(String.valueOf(ordrVO.getMbrInnb()));
//구매자조회
DataMap purchsrMap = purchsService.selectPurchsr(purchsrVO);
if (!CollectionUtils.isEmpty(purchsrMap)) {
@@ -3003,6 +3003,8 @@ public class BOOrdrService{
public Map<String, Object> selectSetleExpectAmt(DataMap param) throws Exception {
Map<String, Object> content = new HashMap<>();
log.debug("selectSetleExpectAmt-param : {}", param);
LinkedHashMap setleExpectAmtMap = new LinkedHashMap() {{
put("goodsAmt", 0);
put("dlvyAmt", 0);
@@ -3377,9 +3379,12 @@ public class BOOrdrService{
// ############################################## 배송지별 배송비 계산 START ##############################################
String ordrAdressZip = StringUtil.isNullToString(param.get("dlvylcZip"));
String dlvylcAreaCd = (String) param.get("dlvylcAreaCd");
String prefcd = (String) param.get("prefcd");
DataMap defaultAdressVO = new DataMap() {{ //
put("sopmalCd", sopmalCd); // 쇼핑몰 코드
put("zip", ordrAdressZip); // 우편번호
put("prefcd", prefcd); // 도도부현코드
}};
String defaultAdressAt = "N"; // 내가 제2권역 주소인지 여부
@@ -3411,15 +3416,21 @@ public class BOOrdrService{
dlvyCouponDscntAmt = dlvyCouponDscntAmt.add(new BigDecimal(applyDlvylcCouponDscntAmt));
}
defaultAdressVO.put("zip", StringUtil.isNullToString(dlvylcMapMulti.get("dlvylcZip")));
log.debug("defaultAdressVO : {}", defaultAdressVO);
defaultAdressAt = mapper.selectBODefaultAdressAtInqire(defaultAdressVO);
if("KR".equals(dlvylcAreaCd)){
defaultAdressVO.put("zip", StringUtil.isNullToString(dlvylcMapMulti.get("dlvylcZip")));
log.debug("defaultAdressVO-KR : {}", defaultAdressVO);
defaultAdressAt = mapper.selectBODefaultAdressAtInqire(defaultAdressVO);
}
if("JP".equals(dlvylcAreaCd)){
defaultAdressVO.put("prefcd", StringUtil.isNullToString(dlvylcMapMulti.get("prefcd")));
log.debug("defaultAdressVO-JP : {}", defaultAdressVO);
defaultAdressAt = mapper.selectBODefaultAdressAtInqire2(defaultAdressVO);
}
List<LinkedHashMap> goodsListMulti = (List<LinkedHashMap>) dlvylcMapMulti.get("goodsList");
log.debug("goodsListMulti : {}", goodsListMulti);
if (!CollectionUtils.isEmpty(goodsListMulti)) {
dlvyAmtMapMulti = purchsService.getDlvyAmt(goodsListMulti, sopmalCd, defaultAdressAt);
dlvyAmtMapMulti = purchsService.getDlvyAmt(goodsListMulti, sopmalCd, defaultAdressAt, dlvylcAreaCd, prefcd);
if (!CollectionUtils.isEmpty(dlvyAmtMapMulti)) {
if (dlvylcMapMulti.get("mngrFreeDlvyUseAt") != null && "Y".equals(dlvylcMapMulti.get("mngrFreeDlvyUseAt").toString())) {
@@ -3443,8 +3454,68 @@ public class BOOrdrService{
}
} else { // 일반 주문
// DataMap dlvyAmtMapMulti = null;
//
// LinkedHashMap<String, Object> multiOrdrDlvylcMap = (LinkedHashMap) param.get("multiOrdrDlvylc");
//
// log.debug("multiOrdrDlvylcMap : {}", multiOrdrDlvylcMap);
// if (!CollectionUtils.isEmpty(multiOrdrDlvylcMap)) {
//
// List<LinkedHashMap<String, Object>> dlvylcListMulti = (List<LinkedHashMap<String, Object>>) multiOrdrDlvylcMap.get("dlvylc");
//
// if (!CollectionUtils.isEmpty(dlvylcListMulti)) {
//
// int dlvyAmtIndex = 0; // 배송지 rownum 체크
// for (LinkedHashMap<String, Object> dlvylcMapMulti : dlvylcListMulti) {
// int dlvyAmtBydlvylc = 0;
//
// LinkedHashMap dlvylcDscntDtlsMulti = (LinkedHashMap) dlvylcMapMulti.get("dlvylcDscntDtls");
//
// if (!CollectionUtils.isEmpty(dlvylcDscntDtlsMulti)) {
// int applyDlvylcCouponDscntAmt = (int) dlvylcDscntDtlsMulti.get("dscntAmt");
//
// dlvyCouponDscntAmt = dlvyCouponDscntAmt.add(new BigDecimal(applyDlvylcCouponDscntAmt));
// }
//
//
// defaultAdressVO.put("zip", StringUtil.isNullToString(dlvylcMapMulti.get("dlvylcZip")));
// log.debug("defaultAdressVO : {}", defaultAdressVO);
// defaultAdressAt = mapper.selectBODefaultAdressAtInqire(defaultAdressVO);
//
// List<LinkedHashMap> goodsListMulti = (List<LinkedHashMap>) dlvylcMapMulti.get("goodsList");
// log.debug("goodsListMulti : {}", goodsListMulti);
// if (!CollectionUtils.isEmpty(goodsListMulti)) {
// dlvyAmtMapMulti = purchsService.getDlvyAmt(goodsListMulti, sopmalCd, defaultAdressAt, dlvylcAreaCd, prefcd);
//
// if (!CollectionUtils.isEmpty(dlvyAmtMapMulti)) {
// if (dlvylcMapMulti.get("mngrFreeDlvyUseAt") != null && "Y".equals(dlvylcMapMulti.get("mngrFreeDlvyUseAt").toString())) {
// log.debug("관리자 무료배송 체크 'Y'");
// dlvyAmt = dlvyAmt.add(new BigDecimal(0));
// } else {
// dlvyAmt = dlvyAmt.add((BigDecimal) dlvyAmtMapMulti.get("dlvyAmt"));
// }
// dlvyAmtMulti.put("shippingDlvyAmt" + dlvyAmtIndex, new BigDecimal(String.valueOf(dlvyAmtMapMulti.get("dlvyAmt"))));
//
// dftDlvyAmt = dftDlvyAmt.add((BigDecimal) dlvyAmtMapMulti.get("dftDlvyAmt"));
// dlvyAmtMulti.put("shippingDftDlvyAmt" + dlvyAmtIndex, new BigDecimal(String.valueOf(dlvyAmtMapMulti.get("dftDlvyAmt"))));
//
// dlvyAmtIndex += 1; // 배송지 rownum ++
// }
// }
// }
//
// }
//
// }
defaultAdressAt = mapper.selectBODefaultAdressAtInqire(defaultAdressVO);
if("KR".equals(dlvylcAreaCd)){
log.debug("defaultAdressVO-KR : {}", defaultAdressVO);
defaultAdressAt = mapper.selectBODefaultAdressAtInqire(defaultAdressVO);
}
if("JP".equals(dlvylcAreaCd)){
log.debug("defaultAdressVO-JP : {}", defaultAdressVO);
defaultAdressAt = mapper.selectBODefaultAdressAtInqire2(defaultAdressVO);
}
LinkedHashMap<String, Object> dlvylcMap = (LinkedHashMap) param.get("dlvylc");
@@ -3472,18 +3543,18 @@ public class BOOrdrService{
if (dlvylcMap.get("dlvyAmt") != null) {
log.debug("배송비 객체 : {}", dlvylcMap);
if (dlvylcMap.get("mngrFreeDlvyUseAt") != null && "N".equals(dlvylcMap.get("mngrFreeDlvyUseAt").toString())) {
dlvyAmtMap = purchsService.getDlvyAmt(goodsList, sopmalCd, defaultAdressAt);
dlvyAmtMap = purchsService.getDlvyAmt(goodsList, sopmalCd, defaultAdressAt, dlvylcAreaCd, prefcd);
} else if (dlvylcMap.get("mngrFreeDlvyUseAt") != null && "Y".equals(dlvylcMap.get("mngrFreeDlvyUseAt").toString())) {
log.debug("관리자 무료배송 체크 'Y'");
} else {
dlvyAmtMap = purchsService.getDlvyAmt(goodsList, sopmalCd, defaultAdressAt);
dlvyAmtMap = purchsService.getDlvyAmt(goodsList, sopmalCd, defaultAdressAt, dlvylcAreaCd, prefcd);
}
if (!CollectionUtils.isEmpty(dlvyAmtMap)) {
dlvyAmtBydlvylc = ((BigDecimal) dlvyAmtMap.get("dlvyAmt")).intValue();
}
} else {
dlvyAmtMap = purchsService.getDlvyAmt(goodsList, sopmalCd, defaultAdressAt);
dlvyAmtMap = purchsService.getDlvyAmt(goodsList, sopmalCd, defaultAdressAt, dlvylcAreaCd, prefcd);
if (!CollectionUtils.isEmpty(dlvyAmtMap)) {
dlvyAmtBydlvylc = ((BigDecimal) dlvyAmtMap.get("dlvyAmt")).intValue();
@@ -3492,7 +3563,7 @@ public class BOOrdrService{
dlvyAmt = new BigDecimal(dlvyAmtBydlvylc);
} else {
dlvyAmtMap = purchsService.getDlvyAmt(goodsList, sopmalCd, defaultAdressAt);
dlvyAmtMap = purchsService.getDlvyAmt(goodsList, sopmalCd, defaultAdressAt, dlvylcAreaCd, prefcd);
if (!CollectionUtils.isEmpty(dlvyAmtMap)) {
dlvyAmt = (BigDecimal) dlvyAmtMap.get("dlvyAmt");