Преглед изворни кода

修改维修回调添加销售订单

周箭河 пре 5 година
родитељ
комит
6c7c351967

+ 32 - 10
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java

@@ -900,22 +900,44 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
             List<StudentPaymentOrderDetail> orderDetails = studentPaymentOrderDetailService.getOrderDetail(studentPaymentOrder.getId());
             if (orderDetails.size() > 0) {
                 List<SellOrder> sellOrders = new ArrayList<>();
-                BigDecimal remitFee = studentPaymentOrder.getRemitFee() != null ? studentPaymentOrder.getRemitFee() : BigDecimal.ZERO;
-                BigDecimal balancePaymentAmount = studentPaymentOrder.getBalancePaymentAmount() != null ? studentPaymentOrder.getBalancePaymentAmount() : BigDecimal.ZERO;
+                //总余额支付
+                BigDecimal totalBalance = studentPaymentOrder.getBalancePaymentAmount() != null ? studentPaymentOrder.getBalancePaymentAmount() : BigDecimal.ZERO;
                 //总价格
                 BigDecimal totalPrice = studentPaymentOrder.getExpectAmount();
+                //商品总付款
+                BigDecimal detailTotalPrice = orderDetails.stream().map(StudentPaymentOrderDetail::getPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+                //商品销售占的余额
+                BigDecimal detailTotalBalance = detailTotalPrice.multiply(totalBalance).divide(totalPrice,2,BigDecimal.ROUND_HALF_UP);
+
+                int i = 1;
+                BigDecimal detailRouteBalance = BigDecimal.ZERO;
                 for (StudentPaymentOrderDetail orderDetail : orderDetails) {
+                    BigDecimal detailBalance = orderDetail.getPrice().multiply(detailTotalBalance).divide(detailTotalPrice,2,BigDecimal.ROUND_HALF_UP);
+                    if(i == orderDetails.size()){
+                        detailBalance = detailTotalBalance.subtract(detailRouteBalance);
+                    }
+                    detailRouteBalance = detailRouteBalance.add(detailBalance);
+                    i++;
+
                     if (orderDetail.getType().equals(OrderDetailTypeEnum.MUSICAL) && orderDetail.getKitGroupPurchaseType().equals(KitGroupPurchaseTypeEnum.LEASE)) {
                         continue;
                     }
-                    if (orderDetail.getType().equals(OrderDetailTypeEnum.MUSICAL) && orderDetail.getKitGroupPurchaseType().equals(KitGroupPurchaseTypeEnum.GROUP)) {
-                        orderDetail.setPrice(orderDetail.getPrice().subtract(remitFee));
-                    }
 
                     BigDecimal goodsTotalPrice = orderDetail.getGoodsList().stream().map(Goods::getGroupPurchasePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+                    BigDecimal routePrice = BigDecimal.ZERO;
+                    BigDecimal routeBalance = BigDecimal.ZERO;
+                    int j = 1;
                     for (Goods goods : orderDetail.getGoodsList()) {
-                        BigDecimal actualAmount = goods.getGroupPurchasePrice().multiply(orderDetail.getPrice()).multiply(studentPaymentOrder.getActualAmount()).divide(goodsTotalPrice.multiply(totalPrice), 2, BigDecimal.ROUND_HALF_UP);
-                        BigDecimal balance = goods.getGroupPurchasePrice().multiply(orderDetail.getPrice()).multiply(balancePaymentAmount).divide(goodsTotalPrice.multiply(totalPrice), 2, BigDecimal.ROUND_HALF_UP);
+                        BigDecimal expectAmount = goods.getGroupPurchasePrice().multiply(orderDetail.getPrice()).divide(goodsTotalPrice, 2, BigDecimal.ROUND_HALF_UP);
+                        BigDecimal balance = goods.getGroupPurchasePrice().multiply(detailBalance).divide(goodsTotalPrice, 2, BigDecimal.ROUND_HALF_UP);
+                        if(j==orderDetail.getGoodsList().size()){
+                            expectAmount  = orderDetail.getPrice().subtract(routePrice);
+                            balance  = orderDetail.getPrice().subtract(routeBalance);
+                        }
+                        routePrice = routePrice.add(expectAmount);
+                        routeBalance = routeBalance.add(balance);
+                        j++;
+
                         SellOrder sellOrder = new SellOrder();
                         Map<String, BigDecimal> CostMap = new HashMap<>();
                         CostMap.put("sellCost",goods.getDiscountPrice());
@@ -927,9 +949,9 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
                         sellOrder.setTransNo(studentPaymentOrder.getTransNo());
                         sellOrder.setOrderId(studentPaymentOrder.getId());
                         sellOrder.setOrderNo(studentPaymentOrder.getOrderNo());
-                        sellOrder.setActualAmount(actualAmount);
-                        sellOrder.setBalanceAmount(balancePaymentAmount);
-                        sellOrder.setExpectAmount(actualAmount.add(balance));
+                        sellOrder.setActualAmount(expectAmount.subtract(balance));
+                        sellOrder.setBalanceAmount(balance);
+                        sellOrder.setExpectAmount(expectAmount);
                         sellOrder.setSellCost(goods.getDiscountPrice());
                         sellOrder.setSellCost2(JSON.toJSONString(CostMap));
                         sellOrder.setNum(1);

+ 96 - 15
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRepairServiceImpl.java

@@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dao.SellOrderDao;
 import com.ym.mec.biz.dal.dao.StudentDao;
 import com.ym.mec.biz.dal.dao.StudentRepairDao;
 import com.ym.mec.biz.dal.dao.SysConfigDao;
@@ -65,6 +66,8 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
     private StudentPaymentRouteOrderService studentPaymentRouteOrderService;
     @Autowired
     private SellOrderService sellOrderService;
+    @Autowired
+    private SellOrderDao sellOrderDao;
 
     @Override
     public BaseDAO<Integer, StudentRepair> getDAO() {
@@ -107,10 +110,10 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
         }
         Integer studentId = sysUser.getId();
         String goodsId = goodsSellDto.getGoodsId();
-        if(StringUtils.isEmpty(goodsId)){
+        if (StringUtils.isEmpty(goodsId)) {
             throw new BizException("请选择需要购买的商品");
         }
-        if(studentId == null){
+        if (studentId == null) {
             throw new BizException("请指定学员");
         }
         studentDao.lockUser(studentId);
@@ -133,7 +136,7 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
 
         Map<GoodsType, List<Goods>> collect = goods.stream().collect(Collectors.groupingBy(Goods::getType));
         List<StudentPaymentOrderDetail> studentPaymentOrderDetailList = new ArrayList<>();
-        goods.forEach(e->{
+        goods.forEach(e -> {
             StudentPaymentOrderDetail studentPaymentOrderDetail = new StudentPaymentOrderDetail();
             studentPaymentOrderDetail.setRemitFee(BigDecimal.ZERO);
             OrderDetailTypeEnum type = null;
@@ -225,11 +228,11 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
         repairInfo.setCreateTime(date);
         repairInfo.setUpdateTime(date);
         String goodsJson = repairInfo.getGoodsJson();
-        if(StringUtils.isNotEmpty(goodsJson)){
+        if (StringUtils.isNotEmpty(goodsJson)) {
             List<RepairGoodsDto> repairGoodsDtos = JSONObject.parseArray(goodsJson, RepairGoodsDto.class);
             List<Integer> goodsIds = repairGoodsDtos.stream().map(e -> e.getId()).collect(Collectors.toList());
             Map<Integer, BigDecimal> map = getMap("goods", "id_", "group_purchase_price_", goodsIds, Integer.class, BigDecimal.class);
-            repairGoodsDtos.forEach(e->{
+            repairGoodsDtos.forEach(e -> {
                 e.setGroupPurchasePrice(map.get(e.getId()));
             });
             repairInfo.setGoodsJson(JSONObject.toJSONString(repairGoodsDtos));
@@ -241,13 +244,13 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
             return repairInfoMap;
         }
 
-        if(StringUtils.isNoneBlank(repairInfo.getGoodsJson())){
+        if (StringUtils.isNoneBlank(repairInfo.getGoodsJson())) {
             JSONArray goods = JSON.parseArray(repairInfo.getGoodsJson());
             for (Object good : goods) {
-                JSONObject goodObject= (JSONObject) good;
+                JSONObject goodObject = (JSONObject) good;
                 BigDecimal groupPurchasePrice = goodObject.getBigDecimal("groupPurchasePrice");
-                if(Objects.nonNull(groupPurchasePrice)){
-                    amount=amount.add(groupPurchasePrice);
+                if (Objects.nonNull(groupPurchasePrice)) {
+                    amount = amount.add(groupPurchasePrice);
                 }
             }
         }
@@ -396,7 +399,7 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
         studentDao.lockUser(studentRepair.getStudentId());
         BigDecimal amount = studentRepair.getAmount();
         String goodsJson = studentRepair.getGoodsJson();
-        if(StringUtils.isNotEmpty(goodsJson)){
+        if (StringUtils.isNotEmpty(goodsJson)) {
             List<RepairGoodsDto> repairGoodsDtos = JSONObject.parseArray(goodsJson, RepairGoodsDto.class);
             BigDecimal reduce = repairGoodsDtos.stream().map(e -> e.getGroupPurchasePrice()).reduce(BigDecimal.ZERO, BigDecimal::add);
             amount = amount.add(reduce);
@@ -545,7 +548,84 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
                 rechargeDetail.setPerAmount(studentPaymentOrder.getPerAmount().negate());
             }
             sysUserCashAccountDetailService.insert(paymentDetail);
-        }else if(studentPaymentOrder.getStatus() == DealStatusEnum.CLOSE || studentPaymentOrder.getStatus() == DealStatusEnum.FAILED){
+            //生成销售订单
+            List<StudentPaymentOrderDetail> orderDetails = studentPaymentOrderDetailService.getOrderDetail(studentPaymentOrder.getId());
+            if (orderDetails.size() > 0) {
+                List<SellOrder> sellOrders = new ArrayList<>();
+                //总余额支付
+                BigDecimal totalBalance = studentPaymentOrder.getBalancePaymentAmount() != null ? studentPaymentOrder.getBalancePaymentAmount() : BigDecimal.ZERO;
+                //总价格
+                BigDecimal totalPrice = studentPaymentOrder.getExpectAmount();
+                //商品总付款
+                BigDecimal detailTotalPrice = orderDetails.stream().map(StudentPaymentOrderDetail::getPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+                //商品销售占的余额
+                BigDecimal detailTotalBalance = detailTotalPrice.multiply(totalBalance).divide(totalPrice, 2, BigDecimal.ROUND_HALF_UP);
+
+                int i = 1;
+                BigDecimal detailRouteBalance = BigDecimal.ZERO;
+                for (StudentPaymentOrderDetail orderDetail : orderDetails) {
+                    BigDecimal detailBalance = orderDetail.getPrice().multiply(detailTotalBalance).divide(detailTotalPrice, 2, BigDecimal.ROUND_HALF_UP);
+                    if (i == orderDetails.size()) {
+                        detailBalance = detailTotalBalance.subtract(detailRouteBalance);
+                    }
+                    detailRouteBalance = detailRouteBalance.add(detailBalance);
+                    i++;
+
+                    if (orderDetail.getType().equals(OrderDetailTypeEnum.MUSICAL) && orderDetail.getKitGroupPurchaseType().equals(KitGroupPurchaseTypeEnum.LEASE)) {
+                        continue;
+                    }
+
+                    BigDecimal goodsTotalPrice = orderDetail.getGoodsList().stream().map(Goods::getGroupPurchasePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+                    BigDecimal routePrice = BigDecimal.ZERO;
+                    BigDecimal routeBalance = BigDecimal.ZERO;
+                    int j = 1;
+                    for (Goods goods : orderDetail.getGoodsList()) {
+                        BigDecimal expectAmount = goods.getGroupPurchasePrice().multiply(orderDetail.getPrice()).divide(goodsTotalPrice, 2, BigDecimal.ROUND_HALF_UP);
+                        BigDecimal balance = goods.getGroupPurchasePrice().multiply(detailBalance).divide(goodsTotalPrice, 2, BigDecimal.ROUND_HALF_UP);
+                        if (j == orderDetail.getGoodsList().size()) {
+                            expectAmount = orderDetail.getPrice().subtract(routePrice);
+                            balance = orderDetail.getPrice().subtract(routeBalance);
+                        }
+                        routePrice = routePrice.add(expectAmount);
+                        routeBalance = routeBalance.add(balance);
+                        j++;
+
+                        SellOrder sellOrder = new SellOrder();
+                        Map<String, BigDecimal> CostMap = new HashMap<>();
+                        CostMap.put("sellCost", goods.getDiscountPrice());
+                        if (goods.getAgreeCostPrice() != null) {
+                            CostMap.put("SellCost2", goods.getAgreeCostPrice());
+                        }
+                        sellOrder.setOrganId(studentPaymentOrder.getOrganId());
+                        sellOrder.setTransNo(studentPaymentOrder.getTransNo());
+                        sellOrder.setOrderId(studentPaymentOrder.getId());
+                        sellOrder.setOrderNo(studentPaymentOrder.getOrderNo());
+                        sellOrder.setActualAmount(expectAmount.subtract(balance));
+                        sellOrder.setBalanceAmount(balance);
+                        sellOrder.setExpectAmount(expectAmount);
+                        sellOrder.setSellCost(goods.getDiscountPrice());
+                        sellOrder.setSellCost2(JSON.toJSONString(CostMap));
+                        sellOrder.setNum(1);
+                        sellOrder.setUserId(studentPaymentOrder.getUserId());
+                        sellOrder.setPaymentChannel(studentPaymentOrder.getPaymentChannel());
+                        sellOrder.setMerNo(studentPaymentOrder.getMerNos());
+                        sellOrder.setSellTime(studentPaymentOrder.getCreateTime());
+                        sellOrder.setCreateIme(new Date());
+                        sellOrder.setUpdateTime(new Date());
+                        if (goods.getType().equals(GoodsType.INSTRUMENT)) {
+                            sellOrder.setType(SellTypeEnum.INSTRUMENT);
+                        } else if (goods.getType().equals(GoodsType.ACCESSORIES)) {
+                            sellOrder.setType(SellTypeEnum.ACCESSORIES);
+                        } else {
+                            sellOrder.setType(SellTypeEnum.OTHER);
+                        }
+                        sellOrders.add(sellOrder);
+                    }
+                }
+                sellOrderDao.batchInsert(sellOrders);
+            }
+
+        } else if (studentPaymentOrder.getStatus() == DealStatusEnum.CLOSE || studentPaymentOrder.getStatus() == DealStatusEnum.FAILED) {
             if (studentPaymentOrder.getBalancePaymentAmount() != null && studentPaymentOrder.getBalancePaymentAmount().compareTo(BigDecimal.ZERO) > 0) {
                 sysUserCashAccountService.updateBalance(studentPaymentOrder.getUserId(), studentPaymentOrder.getBalancePaymentAmount(), PlatformCashAccountDetailTypeEnum.REFUNDS, "乐器维修支付失败");
             }
@@ -567,7 +647,7 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
         if (repairInfo == null) {
             throw new BizException("维修单不存在");
         }
-        if(repairInfo.getPayStatus().equals(2)){
+        if (repairInfo.getPayStatus().equals(2)) {
             return true;
         }
 
@@ -621,13 +701,14 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
             sysUserCashAccountDetailService.insert(paymentDetail);
             //生成销售订单
             List<Integer> goodsIds = new ArrayList<>();
-            if(StringUtils.isNotBlank(repairInfo.getGoodsJson())){
+            if (StringUtils.isNotBlank(repairInfo.getGoodsJson())) {
                 List<Goods> goods = JSONObject.parseArray(repairInfo.getGoodsJson(), Goods.class);
                 goodsIds = goods.stream().map(Goods::getId).collect(Collectors.toList());
+                if (goodsIds.size() > 0) {
+                    sellOrderService.addSellOrder(studentPaymentOrder.getId(), repairInfo.getMusicGroupId(), goodsIds, studentPaymentOrder.getExpectAmount(), studentPaymentOrder.getBalancePaymentAmount());
+                }
             }
 
-            sellOrderService.addSellOrder(studentPaymentOrder.getId(),repairInfo.getMusicGroupId(),goodsIds,studentPaymentOrder.getExpectAmount(),studentPaymentOrder.getBalancePaymentAmount());
-
             String imContent = repairInfo.getStudentName() + "学员您好,您的乐器维修已受理,我们会尽快完成保养维修";
 
             if (repairInfo.getType().equals(1)) { //线上