|
|
@@ -135,261 +135,271 @@ public class TsaOcmService {
|
|
|
* TscOrderService.createPreOrder 참조
|
|
|
* 샵링커 주문수집으로 외부몰주문등록된 건 중 '대기'상태인 것들에 대해 주문등록처리를 한다.
|
|
|
*/
|
|
|
- @Transactional("shopTxnManager")
|
|
|
public void createShoplinkerOrder(String uploadGb) {
|
|
|
-
|
|
|
Collection<ExtmallOrder> orderList = this.sortOrderList(uploadGb);
|
|
|
|
|
|
if (orderList != null && !orderList.isEmpty()) {
|
|
|
for( ExtmallOrder order : orderList ) {
|
|
|
+ createShoplinkerOrderSub(order);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- String ordCheckMsg = this.orderValidationCheck(order);
|
|
|
-
|
|
|
- // ALL_SUCCESS 전체성공, ALL_FAIL 전체실패, PART_SUCCESS 일부성공, NOT 이미 등록된 주문건
|
|
|
- if("ALL_SUCCESS".equals(ordCheckMsg) || "PART_SUCCESS".equals(ordCheckMsg)) {
|
|
|
- // 일부 또는 전체 성공
|
|
|
-
|
|
|
- // 1. 주문기본정보등록
|
|
|
- ocmDao.createOrder(order);
|
|
|
-
|
|
|
- // 2. 주문배송정보등록
|
|
|
- ocmDao.createDeliveryAddr(order);
|
|
|
-
|
|
|
- // 3. 주문배송비정보등록
|
|
|
- ocmDao.createDeliveryFee(order);
|
|
|
-
|
|
|
- // 4. 주문상세정보등록
|
|
|
- String dtlNos = ""; // 주문상세번호
|
|
|
- String cancelGoodsNms = ""; // 콤마로 구분
|
|
|
- int cancelAmt = 0;
|
|
|
- int payAmt = 0;
|
|
|
- GagaMap vdMap;
|
|
|
- for( ExtmallOrder orderDetail : order.getOrderDetailList()) {
|
|
|
-
|
|
|
- vdMap = this.saveGoodsInfo(orderDetail);
|
|
|
-
|
|
|
- orderDetail.setOrdNo(order.getOrdNo());
|
|
|
- orderDetail.setDelvAddrSq(order.getDelvAddrSq());
|
|
|
-
|
|
|
-
|
|
|
- if (!"SUCCESS".equals(vdMap.get("message").toString())) {
|
|
|
- cancelGoodsNms += orderDetail.getGoodsNm()+",";
|
|
|
- cancelAmt += orderDetail.getOrdAmt();
|
|
|
-
|
|
|
- orderDetail.setUploadStat(TsaConstants.ExtmallUploadStat.FAIL.value()); // 실패
|
|
|
- orderDetail.setOrdNo(null);
|
|
|
- orderDetail.setUploadFailCd(vdMap.getString("uploadFailCd"));
|
|
|
- orderDetail.setUploadFailReason(vdMap.getString("message"));
|
|
|
- ocmDao.updateExtmallOrder(orderDetail);
|
|
|
-
|
|
|
- }else {
|
|
|
-
|
|
|
- orderDetail.setOrdNo(order.getOrdNo());
|
|
|
- orderDetail.setDelvAddrSq(order.getDelvAddrSq());
|
|
|
-
|
|
|
- // TODO 총알배송, 구매대행상품여부 체크
|
|
|
- ocmDao.createOrderDetail(orderDetail); // 주문상세정보등록
|
|
|
-
|
|
|
- ocmDao.createOrderDetailHst(orderDetail); // 주문상세이력정보등록
|
|
|
-
|
|
|
- Collection<ExtmallOrder> orderDetailItemList = ocmDao.getOrderDetailItem(orderDetail); // 주문상세단품정보조회
|
|
|
-
|
|
|
- // 주문상세단품단위 금액 등록
|
|
|
- int length = orderDetailItemList.size();
|
|
|
- int index = 1;
|
|
|
- int leftOrdAmt = orderDetail.getOrdAmt();
|
|
|
- int leftCpn1DcAmt = orderDetail.getCpn1DcAmt();
|
|
|
- int leftTmtb1DcAmt = orderDetail.getTmtb1DcAmt();
|
|
|
- int leftTmtb2DcAmt = orderDetail.getTmtb2DcAmt();
|
|
|
- int leftGoodsCpnDcAmt = orderDetail.getGoodsCpnDcAmt();
|
|
|
- int leftCartCpnDcAmt = orderDetail.getCartCpnDcAmt();
|
|
|
- int leftPntDcAmt = orderDetail.getPntDcAmt();
|
|
|
- int leftPrePntDcAmt = orderDetail.getPrePntDcAmt();
|
|
|
- int leftSavePntAmt = orderDetail.getSavePntAmt();
|
|
|
- int leftRealOrdAmt = orderDetail.getRealOrdAmt();
|
|
|
- int leftGfcdUseAmt = orderDetail.getGfcdUseAmt();
|
|
|
-
|
|
|
- for (ExtmallOrder orderDetailItem : orderDetailItemList) {
|
|
|
- int itemPrice = orderDetailItem.getItemPrice();
|
|
|
- int optAddPrice = orderDetailItem.getOptAddPrice();
|
|
|
- int itemQty = orderDetailItem.getItemQty();
|
|
|
- double currPrice = orderDetailItem.getCurrPrice();
|
|
|
- double itemOrdAmt = (itemPrice + optAddPrice) * itemQty;
|
|
|
- double tempDivD = (itemOrdAmt / currPrice) * 100;
|
|
|
- int tempDiv = Integer.parseInt(String.valueOf(Math.round(tempDivD)));
|
|
|
-
|
|
|
- if (index == length) {
|
|
|
- orderDetailItem.setOrdAmt(leftOrdAmt);
|
|
|
- orderDetailItem.setCpn1DcAmt(leftCpn1DcAmt);
|
|
|
- orderDetailItem.setTmtb1DcAmt(leftTmtb1DcAmt);
|
|
|
- orderDetailItem.setTmtb2DcAmt(leftTmtb2DcAmt);
|
|
|
- orderDetailItem.setGoodsCpnDcAmt(leftGoodsCpnDcAmt);
|
|
|
- orderDetailItem.setCartCpnDcAmt(leftCartCpnDcAmt);
|
|
|
- orderDetailItem.setPntDcAmt(leftPntDcAmt);
|
|
|
- orderDetailItem.setPrePntDcAmt(leftPrePntDcAmt);
|
|
|
- orderDetailItem.setSavePntAmt(leftSavePntAmt);
|
|
|
- orderDetailItem.setRealOrdAmt(leftRealOrdAmt);
|
|
|
- orderDetailItem.setGfcdUseAmt(leftGfcdUseAmt);
|
|
|
- } else {
|
|
|
- orderDetailItem.setOrdAmt((orderDetail.getOrdAmt() * tempDiv) / 100);
|
|
|
- orderDetailItem.setCpn1DcAmt((orderDetail.getCpn1DcAmt() * tempDiv) / 100);
|
|
|
- orderDetailItem.setTmtb1DcAmt((orderDetail.getTmtb1DcAmt() * tempDiv) / 100);
|
|
|
- orderDetailItem.setTmtb2DcAmt((orderDetail.getTmtb2DcAmt() * tempDiv) / 100);
|
|
|
- orderDetailItem.setGoodsCpnDcAmt((orderDetail.getGoodsCpnDcAmt() * tempDiv) / 100);
|
|
|
- orderDetailItem.setCartCpnDcAmt((orderDetail.getCartCpnDcAmt() * tempDiv) / 100);
|
|
|
- orderDetailItem.setPntDcAmt((orderDetail.getPntDcAmt() * tempDiv) / 100);
|
|
|
- orderDetailItem.setPrePntDcAmt((orderDetail.getPrePntDcAmt() * tempDiv) / 100);
|
|
|
- orderDetailItem.setSavePntAmt((orderDetail.getSavePntAmt() * tempDiv) / 100);
|
|
|
- orderDetailItem.setRealOrdAmt((orderDetail.getRealOrdAmt() * tempDiv) / 100);
|
|
|
- orderDetailItem.setGfcdUseAmt((orderDetail.getGfcdUseAmt() * tempDiv) / 100);
|
|
|
-
|
|
|
- leftOrdAmt = leftOrdAmt - ((orderDetail.getOrdAmt() * tempDiv) / 100);
|
|
|
- leftCpn1DcAmt = leftCpn1DcAmt - ((orderDetail.getCpn1DcAmt() * tempDiv) / 100);
|
|
|
- leftTmtb1DcAmt = leftTmtb1DcAmt - ((orderDetail.getTmtb1DcAmt() * tempDiv) / 100);
|
|
|
- leftTmtb2DcAmt = leftTmtb2DcAmt - ((orderDetail.getTmtb2DcAmt() * tempDiv) / 100);
|
|
|
- leftGoodsCpnDcAmt = leftGoodsCpnDcAmt - ((orderDetail.getGoodsCpnDcAmt() * tempDiv) / 100);
|
|
|
- leftCartCpnDcAmt = leftCartCpnDcAmt - ((orderDetail.getCartCpnDcAmt() * tempDiv) / 100);
|
|
|
- leftPntDcAmt = leftPntDcAmt - ((orderDetail.getPntDcAmt() * tempDiv) / 100);
|
|
|
- leftPrePntDcAmt = leftPrePntDcAmt - ((orderDetail.getPrePntDcAmt() * tempDiv) / 100);
|
|
|
- leftSavePntAmt = leftSavePntAmt - ((orderDetail.getSavePntAmt() * tempDiv) / 100);
|
|
|
- leftRealOrdAmt = leftRealOrdAmt - ((orderDetail.getRealOrdAmt() * tempDiv) / 100);
|
|
|
- leftGfcdUseAmt = leftGfcdUseAmt - ((orderDetail.getGfcdUseAmt() * tempDiv) / 100);
|
|
|
- }
|
|
|
-
|
|
|
- // 2021.05.06 옵션금액 단품 추가
|
|
|
- orderDetailItem.setOptAddPrice(optAddPrice);
|
|
|
- orderDetailItem.setCustNo(order.getCustNo());
|
|
|
-
|
|
|
- ocmDao.createOrderDetailItem(orderDetailItem); // 주문상세단품정보등록
|
|
|
-
|
|
|
- ocmDao.createOrderDetailItemHst(orderDetailItem); // 주문상세단품이력정보등록
|
|
|
-
|
|
|
- index++;
|
|
|
-
|
|
|
-
|
|
|
- // 5. 재고등록(샵링커 주문목록을 보면 동일한 몰 주문번호에 동일한 상품(sku)이 수량이 아닌 개별로 있는 데이터가 존재하므로 > 주문번호로 한번에 처리가 아닌 개별로 처리 함)
|
|
|
- orderDetail.setSellGb(TscConstants.SellGb.ORDER.value()); // 판매구분(10:주문(-),
|
|
|
- ocmDao.createSellQty(orderDetail);
|
|
|
-
|
|
|
- // 외부몰 정보 업데이트
|
|
|
- orderDetail.setUploadStat(TsaConstants.ExtmallUploadStat.SUCC.value()); // 성공
|
|
|
- ocmDao.updateExtmallOrder(orderDetail);
|
|
|
-
|
|
|
- dtlNos += orderDetail.getOrdDtlNo()+",";
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- // 6. 주문사은품정보등록
|
|
|
- dtlNos = dtlNos.substring(0, dtlNos.length()-1);
|
|
|
- String [] dtlNdsArr = dtlNos.split(","); // 주문상세번호
|
|
|
- order.setItemCdArr(dtlNdsArr);
|
|
|
- order.setOrdDtlStat(TscConstants.OrderDetailStat.PAYMENT_COMPLETE.value()); //주문상세상태 - 결제완료처리
|
|
|
- GagaMap giftMap = this.getOrderFreegift(order);
|
|
|
-
|
|
|
- if( null != giftMap) {
|
|
|
- if( null != giftMap.get("freegiftList")) {
|
|
|
- if( !"".equals(giftMap.get("freegiftList"))) {
|
|
|
-
|
|
|
- // 상품코드
|
|
|
- String dtlGoodsCds = ""; // 사은품관련 상품코드. 콤마로구분
|
|
|
- String[] dtlGoodsCdsArr;
|
|
|
- Collection<ExtmallOrder> freegiftApplyAmtList = (Collection<ExtmallOrder>) giftMap.get("freegiftApplyAmtList");
|
|
|
-
|
|
|
- for(ExtmallOrder ftMap : freegiftApplyAmtList ) {
|
|
|
- dtlGoodsCds += ftMap.getGoodsCd() +",";
|
|
|
- }
|
|
|
-
|
|
|
- dtlGoodsCds = dtlGoodsCds.substring(0, dtlGoodsCds.length()-1);
|
|
|
- dtlGoodsCdsArr = dtlGoodsCds.split(",");
|
|
|
- order.setFreegiftGoodsArr(dtlGoodsCdsArr);
|
|
|
-
|
|
|
- Collection<ExtmallOrder> freegiftList = (Collection<ExtmallOrder>) giftMap.get("freegiftList");
|
|
|
- ArrayList<Integer> fitValSqArr = new ArrayList<Integer>();
|
|
|
- for(ExtmallOrder ftMap : freegiftList ) {
|
|
|
- fitValSqArr.add(ftMap.getFreegiftValSq());
|
|
|
- }
|
|
|
- int[] freegiftValArr = new int[fitValSqArr.size()];
|
|
|
- for( int i=0; i<fitValSqArr.size(); i++) {
|
|
|
- freegiftValArr[i] = fitValSqArr.get(i);
|
|
|
- }
|
|
|
-
|
|
|
- order.setFreegiftValArr(freegiftValArr);
|
|
|
- order.setCustNo(0);
|
|
|
- if(order.getFreegiftValArr() != null && order.getFreegiftValArr().length > 0) {
|
|
|
- ocmDao.createOrdFreegift(order);
|
|
|
-
|
|
|
- // 6. 주문사은품 상품 정보 등록
|
|
|
- ocmDao.createOrdFreegiftVal(order);
|
|
|
-
|
|
|
- // 7. 주문사은품 주문상세정보 등록
|
|
|
- for(ExtmallOrder ftMap : freegiftApplyAmtList ) {
|
|
|
- order.setFreegiftSq(ftMap.getFreegiftSq());
|
|
|
- order.setGoodsCd(ftMap.getGoodsCd());
|
|
|
- ocmDao.createOrdFreegiftDtl(order);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- // 14. 사은품 수량 차감 로직 TB_FREEGIFT_VAL LEFT_QTY
|
|
|
- ocmDao.updateFreegiftValLeftQty(order);
|
|
|
-
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- // 7. 결제 TB_PAYMENT
|
|
|
- Payment payment = new Payment();
|
|
|
- payment.setOrdNo(order.getOrdNo());
|
|
|
- payment.setPayMeans(TscConstants.PayMeans.EXTMALL.value()); // 결제수단
|
|
|
- payAmt = order.getRealOrdSumAmt() + order.getDelvFee() - cancelAmt; // 결제금액 = 실결제금액 + 배송비 - 취소금액
|
|
|
- payment.setPayAmt(payAmt);
|
|
|
- payment.setPgCpnAmt(0); // PG쿠폰금액
|
|
|
- payment.setNpayPntAmt(0); // 네이버페이포인트금액
|
|
|
- payment.setPayGb("O"); // 결제구분(O:주문시결제, D:배송시결제, E:에러(강제 결제 태울 때 또는 에러일 때)
|
|
|
- payment.setPayStat(TscConstants.PaymentStat.PAYMENT_COMPLETE.value()); // 결제상태 - 결제완료
|
|
|
- payment.setRegNo(0);
|
|
|
- payment.setUpdNo(0);
|
|
|
-
|
|
|
- ocmDao.insertPayment(payment);
|
|
|
-
|
|
|
-
|
|
|
- // 8. 알림톡 발송
|
|
|
- if( 0 == cancelAmt ) {
|
|
|
- // 전체성공
|
|
|
- System.out.println(" ###### :: 전체성공 !! ");
|
|
|
-
|
|
|
- }else {
|
|
|
- // 부분품절 - 제휴몰에서 자동 취소 문자 발송을 하지 않는 경우에만 발송
|
|
|
- // coupang, WEMAPE, ST11TH, GMARKET, AUCTION, Fashion Plus, 판다코리아, 예스24, 홈플러스, LOTTE ON
|
|
|
- cancelGoodsNms = cancelGoodsNms.substring(0, cancelGoodsNms.length()-1);
|
|
|
- System.out.println(" ###### :: 부분성공 (실패 상품명 : "+cancelGoodsNms);
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- }else {
|
|
|
- System.out.println("### 전체실패 :: "+ordCheckMsg);
|
|
|
- if( "ALL_FAIL".equals(ordCheckMsg) ) { // NOT = 이미 등록된 주문건
|
|
|
- // 전체실패 일때만 알림톡 발송
|
|
|
- // 제휴몰에서 자동 취소 문자 발송을 하지 않는 경우에만 발송
|
|
|
- // coupang, WEMAPE, ST11TH, GMARKET, AUCTION, Fashion Plus, 판다코리아, 예스24, 홈플러스, LOTTE ON
|
|
|
- }
|
|
|
-
|
|
|
- // 외부몰 주문등록 상태 업데이트
|
|
|
- GagaMap vdMap;
|
|
|
- for( ExtmallOrder orderDetail : order.getOrderDetailList()) {
|
|
|
- System.out.println("### 전체실패2 :: "+ordCheckMsg);
|
|
|
- vdMap = this.saveGoodsInfo(orderDetail);
|
|
|
- orderDetail.setUploadStat(TsaConstants.ExtmallUploadStat.FAIL.value()); // 실패
|
|
|
- orderDetail.setOrdNo(vdMap.getInt("ordNo")); // 실패
|
|
|
- orderDetail.setUploadFailCd(vdMap.getString("uploadFailCd"));
|
|
|
- orderDetail.setUploadFailReason(vdMap.getString("message"));
|
|
|
+ @SuppressWarnings("unchecked")
|
|
|
+ @Transactional("shopTxnManager")
|
|
|
+ public void createShoplinkerOrderSub(ExtmallOrder order) {
|
|
|
+
|
|
|
+ GagaMap result = this.orderValidationCheck(order);
|
|
|
+
|
|
|
+ // validation 체크 값
|
|
|
+ Collection<ExtmallOrder> newOrderDetailList = (Collection<ExtmallOrder>) result.get("orderDetailList");
|
|
|
+
|
|
|
+ if ("SUCCESS".equals(result.get("message").toString())) {
|
|
|
+ // 1. 주문기본정보등록
|
|
|
+ ocmDao.createOrder(order);
|
|
|
+
|
|
|
+ // 2. 주문배송정보등록
|
|
|
+ ocmDao.createDeliveryAddr(order);
|
|
|
+
|
|
|
+ // 3. 주문배송비정보등록
|
|
|
+ ocmDao.createDeliveryFee(order);
|
|
|
+
|
|
|
+ // 4. 주문상세정보등록
|
|
|
+ String dtlNos = ""; // 주문상세번호
|
|
|
+ String cancelGoodsNms = ""; // 콤마로 구분
|
|
|
+ int cancelAmt = 0;
|
|
|
+ int payAmt = 0;
|
|
|
+ GagaMap vdMap;
|
|
|
+ for( ExtmallOrder orderDetail : newOrderDetailList) {
|
|
|
+
|
|
|
+ //vdMap = this.checkGoodsInfo(orderDetail);
|
|
|
+ orderDetail.setOrdNo(order.getOrdNo());
|
|
|
+ orderDetail.setDelvAddrSq(order.getDelvAddrSq());
|
|
|
+
|
|
|
+
|
|
|
+ if (!"SUCCESS".equals(orderDetail.getUploadFailReason())){
|
|
|
+ cancelGoodsNms += orderDetail.getGoodsNm()+",";
|
|
|
+ cancelAmt += orderDetail.getOrdAmt();
|
|
|
+
|
|
|
+ orderDetail.setUploadStat(TsaConstants.ExtmallUploadStat.FAIL.value()); // 실패
|
|
|
+ orderDetail.setOrdNo(null);
|
|
|
+ orderDetail.setUploadFailCd(orderDetail.getUploadFailCd());
|
|
|
+ orderDetail.setUploadFailReason(orderDetail.getUploadFailReason());
|
|
|
+ ocmDao.updateExtmallOrder(orderDetail);
|
|
|
+
|
|
|
+ }else {
|
|
|
+
|
|
|
+ orderDetail.setOrdNo(order.getOrdNo());
|
|
|
+ orderDetail.setDelvAddrSq(order.getDelvAddrSq());
|
|
|
+
|
|
|
+ // TODO 총알배송, 구매대행상품여부 체크
|
|
|
+ ocmDao.createOrderDetail(orderDetail); // 주문상세정보등록
|
|
|
+
|
|
|
+ ocmDao.createOrderDetailHst(orderDetail); // 주문상세이력정보등록
|
|
|
+
|
|
|
+ Collection<ExtmallOrder> orderDetailItemList = ocmDao.getOrderDetailItem(orderDetail); // 주문상세단품정보조회
|
|
|
+
|
|
|
+ // 주문상세단품단위 금액 등록
|
|
|
+ int length = orderDetailItemList.size();
|
|
|
+ int index = 1;
|
|
|
+ int leftOrdAmt = orderDetail.getOrdAmt();
|
|
|
+ int leftCpn1DcAmt = orderDetail.getCpn1DcAmt();
|
|
|
+ int leftTmtb1DcAmt = orderDetail.getTmtb1DcAmt();
|
|
|
+ int leftTmtb2DcAmt = orderDetail.getTmtb2DcAmt();
|
|
|
+ int leftGoodsCpnDcAmt = orderDetail.getGoodsCpnDcAmt();
|
|
|
+ int leftCartCpnDcAmt = orderDetail.getCartCpnDcAmt();
|
|
|
+ int leftPntDcAmt = orderDetail.getPntDcAmt();
|
|
|
+ int leftPrePntDcAmt = orderDetail.getPrePntDcAmt();
|
|
|
+ int leftSavePntAmt = orderDetail.getSavePntAmt();
|
|
|
+ int leftRealOrdAmt = orderDetail.getRealOrdAmt();
|
|
|
+ int leftGfcdUseAmt = orderDetail.getGfcdUseAmt();
|
|
|
+
|
|
|
+ for (ExtmallOrder orderDetailItem : orderDetailItemList) {
|
|
|
+ int itemPrice = orderDetailItem.getItemPrice();
|
|
|
+ int optAddPrice = orderDetailItem.getOptAddPrice();
|
|
|
+ int itemQty = orderDetailItem.getItemQty();
|
|
|
+ double currPrice = orderDetailItem.getCurrPrice();
|
|
|
+ double itemOrdAmt = (itemPrice + optAddPrice) * itemQty;
|
|
|
+ double tempDivD = (itemOrdAmt / currPrice) * 100;
|
|
|
+ int tempDiv = Integer.parseInt(String.valueOf(Math.round(tempDivD)));
|
|
|
+
|
|
|
+ if (index == length) {
|
|
|
+ orderDetailItem.setOrdAmt(leftOrdAmt);
|
|
|
+ orderDetailItem.setCpn1DcAmt(leftCpn1DcAmt);
|
|
|
+ orderDetailItem.setTmtb1DcAmt(leftTmtb1DcAmt);
|
|
|
+ orderDetailItem.setTmtb2DcAmt(leftTmtb2DcAmt);
|
|
|
+ orderDetailItem.setGoodsCpnDcAmt(leftGoodsCpnDcAmt);
|
|
|
+ orderDetailItem.setCartCpnDcAmt(leftCartCpnDcAmt);
|
|
|
+ orderDetailItem.setPntDcAmt(leftPntDcAmt);
|
|
|
+ orderDetailItem.setPrePntDcAmt(leftPrePntDcAmt);
|
|
|
+ orderDetailItem.setSavePntAmt(leftSavePntAmt);
|
|
|
+ orderDetailItem.setRealOrdAmt(leftRealOrdAmt);
|
|
|
+ orderDetailItem.setGfcdUseAmt(leftGfcdUseAmt);
|
|
|
+ } else {
|
|
|
+ orderDetailItem.setOrdAmt((orderDetail.getOrdAmt() * tempDiv) / 100);
|
|
|
+ orderDetailItem.setCpn1DcAmt((orderDetail.getCpn1DcAmt() * tempDiv) / 100);
|
|
|
+ orderDetailItem.setTmtb1DcAmt((orderDetail.getTmtb1DcAmt() * tempDiv) / 100);
|
|
|
+ orderDetailItem.setTmtb2DcAmt((orderDetail.getTmtb2DcAmt() * tempDiv) / 100);
|
|
|
+ orderDetailItem.setGoodsCpnDcAmt((orderDetail.getGoodsCpnDcAmt() * tempDiv) / 100);
|
|
|
+ orderDetailItem.setCartCpnDcAmt((orderDetail.getCartCpnDcAmt() * tempDiv) / 100);
|
|
|
+ orderDetailItem.setPntDcAmt((orderDetail.getPntDcAmt() * tempDiv) / 100);
|
|
|
+ orderDetailItem.setPrePntDcAmt((orderDetail.getPrePntDcAmt() * tempDiv) / 100);
|
|
|
+ orderDetailItem.setSavePntAmt((orderDetail.getSavePntAmt() * tempDiv) / 100);
|
|
|
+ orderDetailItem.setRealOrdAmt((orderDetail.getRealOrdAmt() * tempDiv) / 100);
|
|
|
+ orderDetailItem.setGfcdUseAmt((orderDetail.getGfcdUseAmt() * tempDiv) / 100);
|
|
|
+
|
|
|
+ leftOrdAmt = leftOrdAmt - ((orderDetail.getOrdAmt() * tempDiv) / 100);
|
|
|
+ leftCpn1DcAmt = leftCpn1DcAmt - ((orderDetail.getCpn1DcAmt() * tempDiv) / 100);
|
|
|
+ leftTmtb1DcAmt = leftTmtb1DcAmt - ((orderDetail.getTmtb1DcAmt() * tempDiv) / 100);
|
|
|
+ leftTmtb2DcAmt = leftTmtb2DcAmt - ((orderDetail.getTmtb2DcAmt() * tempDiv) / 100);
|
|
|
+ leftGoodsCpnDcAmt = leftGoodsCpnDcAmt - ((orderDetail.getGoodsCpnDcAmt() * tempDiv) / 100);
|
|
|
+ leftCartCpnDcAmt = leftCartCpnDcAmt - ((orderDetail.getCartCpnDcAmt() * tempDiv) / 100);
|
|
|
+ leftPntDcAmt = leftPntDcAmt - ((orderDetail.getPntDcAmt() * tempDiv) / 100);
|
|
|
+ leftPrePntDcAmt = leftPrePntDcAmt - ((orderDetail.getPrePntDcAmt() * tempDiv) / 100);
|
|
|
+ leftSavePntAmt = leftSavePntAmt - ((orderDetail.getSavePntAmt() * tempDiv) / 100);
|
|
|
+ leftRealOrdAmt = leftRealOrdAmt - ((orderDetail.getRealOrdAmt() * tempDiv) / 100);
|
|
|
+ leftGfcdUseAmt = leftGfcdUseAmt - ((orderDetail.getGfcdUseAmt() * tempDiv) / 100);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 2021.05.06 옵션금액 단품 추가
|
|
|
+ orderDetailItem.setOptAddPrice(optAddPrice);
|
|
|
+ orderDetailItem.setCustNo(order.getCustNo());
|
|
|
+
|
|
|
+ ocmDao.createOrderDetailItem(orderDetailItem); // 주문상세단품정보등록
|
|
|
+
|
|
|
+ ocmDao.createOrderDetailItemHst(orderDetailItem); // 주문상세단품이력정보등록
|
|
|
+
|
|
|
+ index++;
|
|
|
+
|
|
|
+
|
|
|
+ // 5. 재고등록(샵링커 주문목록을 보면 동일한 몰 주문번호에 동일한 상품(sku)이 수량이 아닌 개별로 있는 데이터가 존재하므로 > 주문번호로 한번에 처리가 아닌 개별로 처리 함)
|
|
|
+ orderDetail.setSellGb(TscConstants.SellGb.ORDER.value()); // 판매구분(10:주문(-),
|
|
|
+ ocmDao.createSellQty(orderDetail);
|
|
|
+
|
|
|
+ // 외부몰 정보 업데이트
|
|
|
+ orderDetail.setUploadStat(TsaConstants.ExtmallUploadStat.SUCC.value()); // 성공
|
|
|
ocmDao.updateExtmallOrder(orderDetail);
|
|
|
- }
|
|
|
|
|
|
- }
|
|
|
+ dtlNos += orderDetail.getOrdDtlNo()+",";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ // 6. 주문사은품정보등록
|
|
|
+ dtlNos = dtlNos.substring(0, dtlNos.length()-1);
|
|
|
+ String [] dtlNdsArr = dtlNos.split(","); // 주문상세번호
|
|
|
+ order.setItemCdArr(dtlNdsArr);
|
|
|
+ order.setOrdDtlStat(TscConstants.OrderDetailStat.PAYMENT_COMPLETE.value()); //주문상세상태 - 결제완료처리
|
|
|
+ GagaMap giftMap = this.getOrderFreegift(order);
|
|
|
+
|
|
|
+ if( null != giftMap) {
|
|
|
+ if( null != giftMap.get("freegiftList")) {
|
|
|
+ if( !"".equals(giftMap.get("freegiftList"))) {
|
|
|
+
|
|
|
+ // 상품코드
|
|
|
+ String dtlGoodsCds = ""; // 사은품관련 상품코드. 콤마로구분
|
|
|
+ String[] dtlGoodsCdsArr;
|
|
|
+ Collection<ExtmallOrder> freegiftApplyAmtList = (Collection<ExtmallOrder>) giftMap.get("freegiftApplyAmtList");
|
|
|
+
|
|
|
+ for(ExtmallOrder ftMap : freegiftApplyAmtList ) {
|
|
|
+ dtlGoodsCds += ftMap.getGoodsCd() +",";
|
|
|
+ }
|
|
|
+
|
|
|
+ dtlGoodsCds = dtlGoodsCds.substring(0, dtlGoodsCds.length()-1);
|
|
|
+ dtlGoodsCdsArr = dtlGoodsCds.split(",");
|
|
|
+ order.setFreegiftGoodsArr(dtlGoodsCdsArr);
|
|
|
+
|
|
|
+ Collection<ExtmallOrder> freegiftList = (Collection<ExtmallOrder>) giftMap.get("freegiftList");
|
|
|
+ ArrayList<Integer> fitValSqArr = new ArrayList<Integer>();
|
|
|
+ for(ExtmallOrder ftMap : freegiftList ) {
|
|
|
+ fitValSqArr.add(ftMap.getFreegiftValSq());
|
|
|
+ }
|
|
|
+ int[] freegiftValArr = new int[fitValSqArr.size()];
|
|
|
+ for( int i=0; i<fitValSqArr.size(); i++) {
|
|
|
+ freegiftValArr[i] = fitValSqArr.get(i);
|
|
|
+ }
|
|
|
+
|
|
|
+ order.setFreegiftValArr(freegiftValArr);
|
|
|
+ order.setCustNo(0);
|
|
|
+ if(order.getFreegiftValArr() != null && order.getFreegiftValArr().length > 0) {
|
|
|
+ ocmDao.createOrdFreegift(order);
|
|
|
+
|
|
|
+ // 6. 주문사은품 상품 정보 등록
|
|
|
+ ocmDao.createOrdFreegiftVal(order);
|
|
|
+
|
|
|
+ // 7. 주문사은품 주문상세정보 등록
|
|
|
+ for(ExtmallOrder ftMap : freegiftApplyAmtList ) {
|
|
|
+ order.setFreegiftSq(ftMap.getFreegiftSq());
|
|
|
+ order.setGoodsCd(ftMap.getGoodsCd());
|
|
|
+ ocmDao.createOrdFreegiftDtl(order);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 14. 사은품 수량 차감 로직 TB_FREEGIFT_VAL LEFT_QTY
|
|
|
+ ocmDao.updateFreegiftValLeftQty(order);
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
+
|
|
|
+ // 7. 결제 TB_PAYMENT
|
|
|
+ Payment payment = new Payment();
|
|
|
+ payment.setOrdNo(order.getOrdNo());
|
|
|
+ payment.setPayMeans(TscConstants.PayMeans.EXTMALL.value()); // 결제수단
|
|
|
+ payAmt = order.getRealOrdSumAmt() + order.getDelvFee() - cancelAmt; // 결제금액 = 실결제금액 + 배송비 - 취소금액
|
|
|
+ payment.setPayAmt(payAmt);
|
|
|
+ payment.setPgCpnAmt(0); // PG쿠폰금액
|
|
|
+ payment.setNpayPntAmt(0); // 네이버페이포인트금액
|
|
|
+ payment.setPayGb("O"); // 결제구분(O:주문시결제, D:배송시결제, E:에러(강제 결제 태울 때 또는 에러일 때)
|
|
|
+ payment.setPayStat(TscConstants.PaymentStat.PAYMENT_COMPLETE.value()); // 결제상태 - 결제완료
|
|
|
+ payment.setRegNo(0);
|
|
|
+ payment.setUpdNo(0);
|
|
|
+
|
|
|
+ ocmDao.insertPayment(payment);
|
|
|
+
|
|
|
+ }else {
|
|
|
+
|
|
|
+ // 주문등록 전체실패시 상태 업데이트
|
|
|
+ GagaMap vdMap;
|
|
|
+ for( ExtmallOrder orderDetail : order.getOrderDetailList()) {
|
|
|
+ vdMap = this.checkGoodsInfo(orderDetail);
|
|
|
+ orderDetail.setUploadStat(TsaConstants.ExtmallUploadStat.FAIL.value()); // 실패
|
|
|
+ orderDetail.setOrdNo(vdMap.getInt("ordNo")); // 실패
|
|
|
+ orderDetail.setUploadFailCd(vdMap.getString("uploadFailCd"));
|
|
|
+ orderDetail.setUploadFailReason(vdMap.getString("message"));
|
|
|
+ ocmDao.updateExtmallOrder(orderDetail);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ // 8. 알림톡발송 (임시 히스토리 쌓음.)
|
|
|
+ if( !"style".equals(env.getProperty("spring.profiles.active").toLowerCase())){
|
|
|
+ ExtmallOrder testNoti = new ExtmallOrder();
|
|
|
+ testNoti.setExtmallId(order.getExtmallId());
|
|
|
+ testNoti.setExtmallOrderId(order.getExtmallOrderId());
|
|
|
+ if( "ALL_FAIL".equals(result.getString("sendNotiType"))) {
|
|
|
+ // 전체실패 알림톡발송
|
|
|
+ testNoti.setSku("미할당 전체품절 > 실패 총 "+result.getString("failCnt")+"건 / 재고실패 "+result.getString("stockFailCnt")+"건 ("+result.getString("failGoods")+")");
|
|
|
+ }else if( "ALL_SUCCESS".equals(result.getString("sendNotiType"))) {
|
|
|
+ // 전체성공 알림톡발송
|
|
|
+ testNoti.setSku("전체성공");
|
|
|
+ }else if( "PART_SUCCESS".equals(result.getString("sendNotiType"))) {
|
|
|
+
|
|
|
+ if( !"".equals(result.getString("failGoods"))) {
|
|
|
+ // 부분성공 알림톡발송
|
|
|
+ testNoti.setSku("부분결품 품절 > 실패 총 "+result.getString("failCnt")+"건 / 재고실패 "+result.getString("stockFailCnt")+"건 ("+result.getString("failGoods")+")");
|
|
|
+ }else {
|
|
|
+ // 전체성공알림톡
|
|
|
+ testNoti.setSku("성공 > 실패한건이 있지만, 재고로인한건이 아님.");
|
|
|
+ }
|
|
|
+
|
|
|
+ }else {
|
|
|
+ // "NOT" 알림톡 발송안함. 이미 발송한건
|
|
|
+ testNoti.setSku("알림톡 발송안함. 동일수집건 ");
|
|
|
+ }
|
|
|
+ ocmDao.insertTestNotiInfo(testNoti);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -475,44 +485,71 @@ public class TsaOcmService {
|
|
|
* @author jsh77b
|
|
|
* @since 2021. 03. 09
|
|
|
*/
|
|
|
- public String orderValidationCheck(ExtmallOrder order) {
|
|
|
- String resultStr = "SUCCESS";
|
|
|
+ public GagaMap orderValidationCheck(ExtmallOrder order) {
|
|
|
+ GagaMap result = new GagaMap();
|
|
|
+ String failGoods = "";
|
|
|
|
|
|
// 1. 주문상세체크
|
|
|
Collection<ExtmallOrder> orderDetailList = order.getOrderDetailList();
|
|
|
|
|
|
int dtlCnt = orderDetailList.size();
|
|
|
int succCnt = 0;
|
|
|
+ int stockFailCnt = 0;
|
|
|
for (ExtmallOrder orderDetail : orderDetailList) {
|
|
|
|
|
|
- GagaMap resultMap = this.saveGoodsInfo(orderDetail);
|
|
|
+ GagaMap resultMap = this.checkGoodsInfo(orderDetail);
|
|
|
+
|
|
|
+ orderDetail.setUploadFailCd(resultMap.getString("uploadFailCd"));
|
|
|
+ orderDetail.setUploadFailReason(resultMap.getString("message"));
|
|
|
|
|
|
if ("SUCCESS".equals(resultMap.get("message").toString())) {
|
|
|
succCnt ++;
|
|
|
+ }else {
|
|
|
+ // 알림톡 발송 할 목록
|
|
|
+ if("Y".equals(resultMap.get("sendNotiYn"))){
|
|
|
+ failGoods += resultMap.get("goodsNm") + ",";
|
|
|
+ stockFailCnt ++;
|
|
|
+ }
|
|
|
}
|
|
|
+ }
|
|
|
|
|
|
- // 동일한 주문건이 있을경우, 전체 중지 (이미 알림톡 결과발송을 했으므로)
|
|
|
- if (ExtmallUploadFailStat.ORDER.value().equals(resultMap.get("uploadFailCd").toString())) {
|
|
|
- succCnt = -1; // 알림톡 발송도 안함.
|
|
|
- break;
|
|
|
- }
|
|
|
+ result.set("orderDetailList", orderDetailList);
|
|
|
+
|
|
|
+ // 주문생성 여부
|
|
|
+ if( 0 < succCnt ) {
|
|
|
+ // 주문등록
|
|
|
+ result.put("message", "SUCCESS");
|
|
|
+ }else {
|
|
|
+ // 주문등록 안함.
|
|
|
+ result.put("message", "FAIL");
|
|
|
}
|
|
|
|
|
|
+ // 알림톡 발송타입
|
|
|
if( succCnt < 0 ) {
|
|
|
- // 전체실패 - 알림톡발송 안함
|
|
|
- resultStr = "NOT";
|
|
|
+ result.put("sendNotiType", "NOT"); // 알림톡 미발송-이미처리된 건(동일날짜 주문수집시)
|
|
|
+ }else if( 0 == succCnt ) { // 전체실패
|
|
|
+
|
|
|
+ if( 0 == stockFailCnt ) {
|
|
|
+ result.put("sendNotiType", "NOT"); // 알림톡 미발송- 일반실패 또는 이미처리된 건(동일날짜 주문수집시)
|
|
|
+ }else if(dtlCnt == stockFailCnt) {
|
|
|
+ result.put("sendNotiType", "ALL_FAIL"); // 알림톡발송 - 재고관련 전체실패
|
|
|
+ }else {
|
|
|
+ result.put("sendNotiType", "PART_SUCCESS"); // 알림톡발송 - 부분성공
|
|
|
+ }
|
|
|
|
|
|
- }else if( 0 == succCnt ) {
|
|
|
- // 전체실패
|
|
|
- resultStr = "ALL_FAIL";
|
|
|
}else if( dtlCnt == succCnt ) {
|
|
|
- // 전체성공
|
|
|
- resultStr = "ALL_SUCCESS";
|
|
|
+ result.put("sendNotiType", "ALL_SUCCESS"); // 알림톡발송 - 전체성공
|
|
|
}else {
|
|
|
- // 일부성공
|
|
|
- resultStr = "PART_SUCCESS";
|
|
|
+ result.put("sendNotiType", "PART_SUCCESS"); // 알림톡발송 - 부분성공
|
|
|
}
|
|
|
- return resultStr;
|
|
|
+
|
|
|
+ // 실패상품목록
|
|
|
+ if( 0 < failGoods.length()) failGoods = failGoods.substring(0, failGoods.length()-1);
|
|
|
+ result.put("failGoods", failGoods); // 실패상품목록
|
|
|
+ result.put("failCnt", dtlCnt - succCnt ); // 총 실패건수
|
|
|
+ result.put("stockFailCnt", stockFailCnt ); // 재고로인한 실패건수
|
|
|
+
|
|
|
+ return result;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -521,8 +558,7 @@ public class TsaOcmService {
|
|
|
* 세트 : goodsCd,
|
|
|
* @param params
|
|
|
*/
|
|
|
- @Transactional("shopTxnManager")
|
|
|
- public GagaMap saveGoodsInfo(ExtmallOrder param) {
|
|
|
+ public GagaMap checkGoodsInfo(ExtmallOrder param) {
|
|
|
GagaMap result = new GagaMap();
|
|
|
result.put("message", "SUCCESS");
|
|
|
|
|
|
@@ -530,37 +566,52 @@ public class TsaOcmService {
|
|
|
ExtmallOrder dtlOrd = ocmDao.getExtmallOrderInfo(param);
|
|
|
|
|
|
if( null == dtlOrd) {
|
|
|
+ result.put("sendNotiYn", "N"); // 알림톡발송 x
|
|
|
result.put("uploadFailCd", ExtmallUploadFailStat.ETC.value()); // 값이 무조건 존재해야함
|
|
|
result.put("message", "오류입니다. 관리자확인요청>"+param.getAgentOrderId());
|
|
|
return result;
|
|
|
|
|
|
}else if( null != dtlOrd.getOrdNo() ){
|
|
|
+ result.put("sendNotiYn", "N"); // 알림톡발송 x
|
|
|
result.put("uploadFailCd", ExtmallUploadFailStat.ORDER.value());
|
|
|
result.put("ordNo", dtlOrd.getOrdNo());
|
|
|
result.put("message", "동일한 주문건이 존재합니다.");
|
|
|
return result;
|
|
|
|
|
|
+ }else if( 0 < dtlOrd.getStockFailHstCnt() ){
|
|
|
+ result.put("sendNotiYn", "N"); // 알림톡발송 x
|
|
|
+ result.put("uploadFailCd", ExtmallUploadFailStat.STOCK.value());
|
|
|
+ result.put("message", "이미 재고 부족으로 인한 고객 알림 발송이 완료된 건입니다.(동일수집 실패)");
|
|
|
+ return result;
|
|
|
+
|
|
|
} else if( null == dtlOrd.getExtmallId()) {
|
|
|
+ result.put("sendNotiYn", "N"); // 알림톡발송 x
|
|
|
result.put("uploadFailCd", ExtmallUploadFailStat.STORE.value());
|
|
|
result.put("message", "제휴몰ID 정보가 잘못되었습니다.");
|
|
|
return result;
|
|
|
|
|
|
} else if( null == dtlOrd.getGoodsCd()) {
|
|
|
+ result.put("sendNotiYn", "N"); // 알림톡발송 x
|
|
|
result.put("uploadFailCd", ExtmallUploadFailStat.GOODS.value());
|
|
|
result.put("message", "상품코드가 잘못되었습니다.");
|
|
|
return result;
|
|
|
|
|
|
} else if( null == dtlOrd.getOptCd()) {
|
|
|
+ result.put("sendNotiYn", "N"); // 알림톡발송 x
|
|
|
result.put("uploadFailCd", ExtmallUploadFailStat.SIZE.value());
|
|
|
result.put("message", "옵션코드가 잘못되었습니다.");
|
|
|
return result;
|
|
|
|
|
|
} else if (TscConstants.GoodsStat.SOLDOUT.value().equals(dtlOrd.getGoodsStat())) {
|
|
|
+ result.put("goodsNm", dtlOrd.getGoodsNm());
|
|
|
+ result.put("sendNotiYn", "Y"); // 알림톡발송 o
|
|
|
result.put("uploadFailCd", ExtmallUploadFailStat.STOCK.value());
|
|
|
result.put("message", "품절입니다.");
|
|
|
return result;
|
|
|
|
|
|
} else if (!TscConstants.GoodsStat.SOLDOUT.value().equals(dtlOrd.getGoodsStat()) && !TscConstants.GoodsStat.APPR.value().equals(dtlOrd.getGoodsStat())) {
|
|
|
+ result.put("goodsNm", dtlOrd.getGoodsNm());
|
|
|
+ result.put("sendNotiYn", "Y"); // 알림톡발송 o
|
|
|
result.put("uploadFailCd", ExtmallUploadFailStat.STOCK.value());
|
|
|
result.put("message", "판매중인 상품이 아닙니다.");
|
|
|
return result;
|
|
|
@@ -576,6 +627,8 @@ public class TsaOcmService {
|
|
|
String stockResult = this.getCheckStock(checkParam);
|
|
|
|
|
|
if (!"SUCCESS".equals(stockResult)) {
|
|
|
+ result.put("goodsNm", dtlOrd.getGoodsNm());
|
|
|
+ result.put("sendNotiYn", "Y"); // 알림톡발송 o
|
|
|
result.put("uploadFailCd", ExtmallUploadFailStat.STOCK.value());
|
|
|
result.put("message", stockResult);
|
|
|
return result;
|