zouxuan 2 tahun lalu
induk
melakukan
b9b9c7959e

+ 3 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/GoodsOrderItemVO.java

@@ -2,6 +2,8 @@ package com.ym.mec.biz.dal.dto;
 
 import lombok.Data;
 
+import java.math.BigDecimal;
+
 @Data
 public class GoodsOrderItemVO {
     private double couponAmount; // 优惠券金额
@@ -25,6 +27,6 @@ public class GoodsOrderItemVO {
     private long productSkuId; // 商品 SKU 的唯一标识符
     private double promotionAmount; // 促销金额
     private String promotionName; // 促销名称
-    private double realAmount; // 实际支付金额
+    private BigDecimal realAmount; // 实际支付金额
     private int returnStatus; // 退货状态
 }

+ 1 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/OrderDetailTypeEnum.java

@@ -9,6 +9,7 @@ public enum OrderDetailTypeEnum implements BaseEnum<String, OrderDetailTypeEnum>
     MUSICAL("MUSICAL", "乐器"),
     ACCESSORIES("ACCESSORIES", "辅件"),
     TEACHING("TEACHING", "教谱"),
+    STAFF("STAFF", "曲谱"),
     OTHER("OTHER", "其他"),
     COURSE("COURSE", "乐团课"),
     HIGH_ONLINE_COURSE("HIGH_ONLINE_COURSE", "线上基础技能课"),

+ 78 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java

@@ -120,6 +120,8 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
     private TenantConfigService tenantConfigService;
     @Autowired
     private GoodsProcurementDao goodsProcurementDao;
+    @Autowired
+    private SysPaymentConfigService sysPaymentConfigService;
 
     @Lazy
     @Autowired
@@ -1346,6 +1348,11 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
             } catch (Exception e) {
                 logger.error("产品协议生成失败", e);
             }
+            Long paymentOrderId = studentPaymentOrder.getId();
+            Integer organId = studentPaymentOrder.getOrganId();
+            String transNo = studentPaymentOrder.getTransNo();
+            String orderNo = studentPaymentOrder.getOrderNo();
+            BigDecimal balancePaymentAmount = studentPaymentOrder.getBalancePaymentAmount();
             //解析student_goods_sell字段goodsJson,生成订单详情和sellOrder
             StudentGoodsSellDto studentGoodsSellDto = studentGoodsSellDao.getStudentGoodsSellDto(studentPaymentOrder.getOrderNo());
             if(Objects.nonNull(studentGoodsSellDto)){
@@ -1358,8 +1365,77 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
                         //如果有空的商品货号,不处理
                         if(count == 0l){
                             List<String> productSns = goodsOrderItemVOS.stream().map(e -> e.getProductSn()).distinct().collect(Collectors.toList());
-                            for (GoodsOrderItemVO goodsVo : goodsOrderItemVOS) {
-
+                            List<Goods> goodsList = goodsDao.findBySns(productSns);
+                            //如果有不匹配的商品货号,不处理
+                            if(CollectionUtils.isEmpty(goodsList) || goodsList.size() < productSns.size()){
+                                return;
+                            }
+                            Map<String, Goods> goodsSnMap = goodsList.stream().collect(Collectors.groupingBy(e -> e.getSn(),
+                                    Collectors.collectingAndThen(Collectors.toList(), v -> v.get(0))));
+                            List<StudentPaymentOrderDetail> orderDetails = new ArrayList<>();
+                            List<SellOrder> sellOrders = new ArrayList<>();
+                            BigDecimal subjectBalance = balancePaymentAmount;
+                            for (int i = 0; i < goodsOrderItemVOS.size(); i++) {
+                                GoodsOrderItemVO goodsVo = goodsOrderItemVOS.get(i);
+                                Goods goods = goodsSnMap.get(goodsVo.getProductSn());
+                                StudentPaymentOrderDetail detail = new StudentPaymentOrderDetail();
+                                detail.setType(OrderDetailTypeEnum.valueOf(goods.getType().getCode()));
+                                detail.setGoodsIdList(goods.getId().toString());
+                                detail.setPrice(goodsVo.getRealAmount());
+                                detail.setRemitFee(BigDecimal.ZERO);
+                                detail.setPaymentOrderId(paymentOrderId);
+                                orderDetails.add(detail);
+
+                                SellOrder sellOrder = new SellOrder();
+                                sellOrder.setOrganId(organId);
+                                sellOrder.setTransNo(transNo);
+                                sellOrder.setOrderId(paymentOrderId);
+                                sellOrder.setOrderNo(orderNo);
+                                BigDecimal totalAmount = goodsVo.getRealAmount().multiply(new BigDecimal(goodsVo.getProductQuantity()));
+                                sellOrder.setExpectAmount(goodsVo.getRealAmount());
+                                if(goodsOrderItemVOS.size() - 1 == i){
+                                    sellOrder.setBalanceAmount(subjectBalance);
+                                }else {
+                                    //获取比例
+                                    BigDecimal ratioAmount = totalAmount.divide(studentGoodsSellDto.getExpectAmount(), 6, BigDecimal.ROUND_HALF_UP);
+                                    BigDecimal multiply = balancePaymentAmount.multiply(ratioAmount).setScale(2, BigDecimal.ROUND_HALF_UP);
+                                    sellOrder.setBalanceAmount(multiply);
+                                }
+                                sellOrder.setActualAmount(totalAmount.subtract(sellOrder.getBalanceAmount()));
+
+                                AccountType accountType = sysPaymentConfigService.checkAccountType(PaymentChannelEnum.valueOf(studentPaymentOrder.getPaymentChannel()), studentPaymentOrder.getMerNos(), studentPaymentOrder.getTenantId());
+                                GoodsProcurement goodsProcurement = null;
+                                if(StockType.INTERNAL.equals(goods.getStockType())||(StockType.ALL.equals(goods.getStockType())&&AccountType.INTERNAL.equals(accountType))){
+                                    goodsProcurement = goodsProcurementDao.getWithStockSurplusProcurement(goods.getId());
+                                    if(Objects.nonNull(goodsProcurement)){
+                                        goodsProcurement.setStockSoldNum(new AtomicInteger(goodsProcurement.getStockSoldNum()).incrementAndGet());
+                                    }
+                                }else if(StockType.EXTERNAL.equals(goods.getStockType())||(StockType.ALL.equals(goods.getStockType())&&AccountType.EXTERNAL.equals(accountType))){
+                                    goodsProcurement = goodsProcurementDao.getWithTaxStockSurplusProcurement(goods.getId());
+                                    if(Objects.nonNull(goodsProcurement)){
+                                        goodsProcurement.setTaxStockSoldNum(new AtomicInteger(goodsProcurement.getTaxStockSoldNum()).incrementAndGet());
+                                    }
+                                }
+
+                                //如果有采购清单,初始化总部成本价
+                                if(Objects.nonNull(goodsProcurement)){
+                                    goodsProcurementDao.update(goodsProcurement);
+                                    sellOrder.setBatchNo(goodsProcurement.getBatchNo());
+                                    sellOrder.setSellCost(goodsProcurement.getDiscountPrice());
+                                    Map<String, BigDecimal> CostMap = new HashMap<>();
+                                    CostMap.put("sellCost", goodsProcurement.getDiscountPrice());
+                                    if (Objects.nonNull(goodsProcurement.getAgreeCostPrice())) {
+                                        CostMap.put("SellCost2", goodsProcurement.getAgreeCostPrice());
+                                    }
+                                    sellOrder.setSellCost2(JSON.toJSONString(CostMap));
+                                    sellOrder.setBatchNo(goodsProcurement.getBatchNo());
+                                }
+                                sellOrder.setNum(goodsVo.getProductQuantity());
+                                sellOrder.setUserId(userId);
+                                sellOrder.setPaymentChannel(studentPaymentOrder.getPaymentChannel());
+                                sellOrder.setMerNo(studentPaymentOrder.getMerNos());
+
+                                sellOrders.add(sellOrder);
                             }
                         }
                     }