zouxuan 3 년 전
부모
커밋
5f0ed5dd28

+ 6 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/SubjectChangeService.java

@@ -80,5 +80,10 @@ public interface SubjectChangeService extends BaseService<Integer, SubjectChange
      * @param balance
      * @param balance
      * @return
      * @return
      */
      */
-    List<SellOrder> addSellOrder(Long orderId, String musicGroupId, List<Integer> goodsIds, BigDecimal totalAmount, BigDecimal balance,KitGroupPurchaseTypeEnum kitGroupPurchaseType);
+    List<SellOrder> addSellOrder(Long orderId,
+                                 String musicGroupId,
+                                 List<Integer> goodsIds,
+                                 BigDecimal totalAmount,
+                                 BigDecimal balance,
+                                 KitGroupPurchaseTypeEnum kitGroupPurchaseType,BigDecimal couponRemitAmount);
 }
 }

+ 42 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SubjectChangeServiceImpl.java

@@ -375,7 +375,12 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
             if (StringUtils.isNotBlank(goodsIds)) {
             if (StringUtils.isNotBlank(goodsIds)) {
                 List<Integer> goodsIdList = Arrays.stream(goodsIds.split(",")).map(Integer::parseInt).collect(Collectors.toList());
                 List<Integer> goodsIdList = Arrays.stream(goodsIds.split(",")).map(Integer::parseInt).collect(Collectors.toList());
                 //添加新订单
                 //添加新订单
-                this.addSellOrder(studentPaymentOrder.getId(), subjectChange.getMusicGroupId(), goodsIdList, BigDecimal.ZERO, BigDecimal.ZERO, subjectChange.getKitGroupPurchaseType());
+                this.addSellOrder(studentPaymentOrder.getId(),
+                        subjectChange.getMusicGroupId(),
+                        goodsIdList,
+                        BigDecimal.ZERO,
+                        BigDecimal.ZERO,
+                        subjectChange.getKitGroupPurchaseType(),BigDecimal.ZERO);
             }
             }
             //乐保处理
             //乐保处理
             studentInstrumentService.subjectChangeUpdateInstrument(subjectChange);
             studentInstrumentService.subjectChangeUpdateInstrument(subjectChange);
@@ -625,7 +630,12 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
                 	sellOrderService.refundByOrderId(subjectChange.getOriginalOrderId().longValue(), false);
                 	sellOrderService.refundByOrderId(subjectChange.getOriginalOrderId().longValue(), false);
                 }
                 }
                 //添加新订单
                 //添加新订单
-                List<SellOrder> sellOrders = this.addSellOrder(studentPaymentOrder.getId(), subjectChange.getMusicGroupId(), goodsIdList, studentPaymentOrder.getExpectAmount(), studentPaymentOrder.getBalancePaymentAmount(), subjectChange.getKitGroupPurchaseType());
+                List<SellOrder> sellOrders = this.addSellOrder(studentPaymentOrder.getId(),
+                        subjectChange.getMusicGroupId(),
+                        goodsIdList,
+                        studentPaymentOrder.getExpectAmount(),
+                        studentPaymentOrder.getBalancePaymentAmount(),
+                        subjectChange.getKitGroupPurchaseType(),studentPaymentOrder.getCouponRemitFee());
                 if(sellOrders != null && sellOrders.size() > 0){
                 if(sellOrders != null && sellOrders.size() > 0){
                     SubjectChange change = subjectChangeDao.get(subjectChange.getId());
                     SubjectChange change = subjectChangeDao.get(subjectChange.getId());
                     BigDecimal instrumentAmount = sellOrders.stream().filter(e -> e.getType() == SellTypeEnum.INSTRUMENT).map(e -> e.getExpectAmount()).reduce(BigDecimal.ZERO, BigDecimal::add);
                     BigDecimal instrumentAmount = sellOrders.stream().filter(e -> e.getType() == SellTypeEnum.INSTRUMENT).map(e -> e.getExpectAmount()).reduce(BigDecimal.ZERO, BigDecimal::add);
@@ -742,7 +752,12 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
 
 
     @Override
     @Override
     @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
     @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
-    public List<SellOrder> addSellOrder(Long orderId, String musicGroupId, List<Integer> goodsIds, BigDecimal totalAmount, BigDecimal balance, KitGroupPurchaseTypeEnum kitGroupPurchaseType) {
+    public List<SellOrder> addSellOrder(Long orderId,
+                                        String musicGroupId,
+                                        List<Integer> goodsIds,
+                                        BigDecimal totalAmount,
+                                        BigDecimal balance,
+                                        KitGroupPurchaseTypeEnum kitGroupPurchaseType,BigDecimal couponRemitAmount) {
         if (goodsIds == null || goodsIds.size() <= 0) {
         if (goodsIds == null || goodsIds.size() <= 0) {
             return null;
             return null;
         }
         }
@@ -865,7 +880,30 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
                 }
                 }
             }
             }
         }
         }
-        sellOrderDao.batchInsert(sellOrderList);
+        if (sellOrderList.size() > 0) {
+            //如果有优惠券金额
+            if (couponRemitAmount.compareTo(BigDecimal.ZERO) > 0) {
+                BigDecimal reduce = sellOrderList.stream().map(e -> e.getExpectAmount()).reduce(BigDecimal.ZERO, BigDecimal::add);
+                List<SellOrder> sellOrders = sellOrderList.stream().filter(e -> e.getExpectAmount().compareTo(BigDecimal.ZERO) > 0).collect(Collectors.toList());
+                //可用优惠券金额
+                BigDecimal subCouponMarketAmount = couponRemitAmount;
+                for (int j = 0; j < sellOrders.size(); j++) {
+                    SellOrder sellOrder = sellOrders.get(j);
+                    //如果是最后一件商品
+                    if (j == sellOrders.size() - 1) {
+                        sellOrder.setCouponRemitAmount(subCouponMarketAmount);
+                    } else {
+                        //获取比例
+                        BigDecimal ratioAmount = sellOrder.getExpectAmount().divide(reduce, 6, BigDecimal.ROUND_HALF_UP);
+                        //获取分配的减免金额
+                        BigDecimal multiply = couponRemitAmount.multiply(ratioAmount).setScale(2, BigDecimal.ROUND_HALF_UP);
+                        subCouponMarketAmount = subCouponMarketAmount.subtract(multiply);
+                        sellOrder.setCouponRemitAmount(multiply);
+                    }
+                }
+            }
+            sellOrderService.batchInsert(sellOrderList);
+        }
         return sellOrderList;
         return sellOrderList;
     }
     }
 }
 }