환율적용 원화 결제 적용(1)

This commit is contained in:
김현욱
2026-03-11 17:41:19 +09:00
parent c0410a82f6
commit da578da9e0
10 changed files with 358 additions and 18 deletions

View File

@@ -27,6 +27,7 @@ import java.math.BigInteger;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.util.*;
import java.util.stream.Collectors;
@Service
@Slf4j
@@ -100,6 +101,313 @@ 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<>();
@@ -169,7 +477,6 @@ public class BOOrderService {
}
}
if ("03".equals(itemDlvyGroupDvCd) && "Y".equals(itemCntCndUseAt)) {
// BigDecimal qy = (BigDecimal) goodsList.get(i).get("qy"); // 수량
@@ -271,7 +578,7 @@ public class BOOrderService {
dlvylcListMulti.add(dlvyMap);
}
}
} // for
// 배송지가 1개 이상이면 여러곳 배송으로 변경
if(dlvylcListMulti.size() > 1) {
@@ -1111,11 +1418,13 @@ public class BOOrderService {
BOOrderSetleVO setleVO = new BOOrderSetleVO();
BigDecimal rlSetleAmt = new BigDecimal((String) setle.get("rlSetleAmt"));
BigDecimal wonRlSetleAmt = new BigDecimal((String) setle.get("wonRlSetleAmt"));
setleVO.setSopmalCd(sopmalCd);
setleVO.setOrdrInnb(ordrInnb);
setleVO.setGoodsNm(goodsNm);
setleVO.setSetleAmt(rlSetleAmt);
setleVO.setWonSetleAmt(wonRlSetleAmt);
String pgCmpnyNm = (String) setle.get("pgCmpnyNm");
String setleTyCd = (String) setle.get("setleTyCd");
@@ -1679,6 +1988,17 @@ public class BOOrderService {
orderVO.setRlSetleAmt(new BigDecimal(rlSetleAmt));
}
String wonRlSetleAmt = (String) setle.get("wonRlSetleAmt"); // 실결제금액(원화)
if (StringUtils.hasText(wonRlSetleAmt)) {
orderVO.setWonRlSetleAmt(new BigDecimal(wonRlSetleAmt));
}
DataMap paramMap = new DataMap();
paramMap.put("sopmalCd", orderVO.getSopmalCd());
BigDecimal buyRate = boOrdrMapper.selectBuyRate(paramMap); // 살때환율
orderVO.setBuyRate(buyRate);
String setleTyCd = (String) setle.get("setleTyCd");
if ("02".equals(setleTyCd)) { //|| "04".equals(setleTyCd) || "05".equals(setleTyCd)) { // KCP 무통장, 가상계좌, 가상계좌(에스크로) leeks

View File

@@ -20,6 +20,8 @@ public class BOOrderSetleVO extends AbstractVO {
private BigDecimal setleAmt;
private BigDecimal wonSetleAmt;
private String pgCmpnyNm;
private String setleTyCd;

View File

@@ -40,7 +40,11 @@ public class BOOrderVO extends AbstractVO {
private BigDecimal rlSetleAmt = new BigDecimal("0");
private BigDecimal enuriAmt = new BigDecimal("0");;
private BigDecimal enuriAmt = new BigDecimal("0");
private BigDecimal wonRlSetleAmt = new BigDecimal("0");
private BigDecimal buyRate = new BigDecimal("0");
private String ordrrNm;