浏览代码

update 支付回调增加,sellorder处理

周箭河 4 年之前
父节点
当前提交
515fe9854d

+ 65 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ReplacementInstrumentActivityServiceImpl.java

@@ -34,6 +34,7 @@ import org.springframework.util.CollectionUtils;
 
 import java.math.BigDecimal;
 import java.util.*;
+import java.util.stream.Collectors;
 
 @Service
 public class ReplacementInstrumentActivityServiceImpl extends BaseServiceImpl<Integer, ReplacementInstrumentActivity> implements ReplacementInstrumentActivityService {
@@ -71,6 +72,12 @@ public class ReplacementInstrumentActivityServiceImpl extends BaseServiceImpl<In
     private ReplacementInstrumentCooperationDao replacementInstrumentCooperationDao;
     @Autowired
     private GoodsDao goodsDao;
+    @Autowired
+    private GoodsService goodsService;
+    @Autowired
+    private SysPaymentConfigService sysPaymentConfigService;
+    @Autowired
+    private SellOrderDao sellOrderDao;
 
     private final Logger logger = LoggerFactory.getLogger(this.getClass());
 
@@ -178,6 +185,10 @@ public class ReplacementInstrumentActivityServiceImpl extends BaseServiceImpl<In
         ReplacementInstrumentActivity replacementInstrumentActivity = replacementInstrumentActivityDao.getLock(replacementPayDto.getId());
         Integer userId = replacementInstrumentActivity.getUserId();
 
+        if (replacementInstrumentActivity.getGoodsId() == null) {
+            throw new BizException("数据维护中,请稍后再支付");
+        }
+
         //处理关闭订单
         if (replacementInstrumentActivity.getPayStatus().equals(1) && replacementPayDto.getRePay()) {
             StudentPaymentOrder oldOrder = studentPaymentOrderService.getUserReplacementIngOrder(userId, replacementInstrumentActivity.getId());
@@ -338,6 +349,8 @@ public class ReplacementInstrumentActivityServiceImpl extends BaseServiceImpl<In
                 rechargeDetail.setChannel(studentPaymentOrder.getPaymentChannel());
                 sysUserCashAccountDetailService.insert(paymentDetail);
             }
+            //添加sell_order
+            addSellOrder(studentPaymentOrder, replacementInstrumentActivity);
             try {
                 contractService.transferProduceContract(userId, null);
             } catch (Exception e) {
@@ -394,4 +407,56 @@ public class ReplacementInstrumentActivityServiceImpl extends BaseServiceImpl<In
         pageInfo.setRows(dataList);
         return pageInfo;
     }
+
+    private List<SellOrder> addSellOrder(StudentPaymentOrder order, ReplacementInstrumentActivity replacementInstrumentActivity) {
+        if (replacementInstrumentActivity.getGoodsId() == null) {
+            return null;
+        }
+        List<Goods> goodies = new ArrayList<>();
+        Goods goods = goodsDao.get(replacementInstrumentActivity.getInstrumentsId());
+        goodies.add(goods);
+        if (goods.getComplementGoodsIdList() != null) {
+            goodies = goodsDao.findGoodsByIds(goods.getComplementGoodsIdList());
+        }
+        Map<Integer, BigDecimal> groupPurchasePriceMap = goodies.stream().collect(Collectors.toMap(Goods::getId, Goods::getGroupPurchasePrice));
+        BigDecimal goodsTotalPrice = goodies.stream().map(Goods::getGroupPurchasePrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+
+        AccountType accountType = sysPaymentConfigService.checkAccountType(PaymentChannelEnum.valueOf(order.getPaymentChannel()), order.getMerNos());
+
+        List<Integer> goodsIds = new ArrayList<>();
+        List<SellOrder> sellOrders = goodsService.subtractStock(goodsIds, accountType);
+
+        BigDecimal hasRouteSellOrderExpectAmount = BigDecimal.ZERO; //已分配预计金额
+        BigDecimal hasRouteSellOrderBalance = BigDecimal.ZERO; //已分配余额
+
+        int i = 1;
+        for (SellOrder sellOrder : sellOrders) {
+            BigDecimal sellOrderExpectAmount = order.getExpectAmount().compareTo(BigDecimal.ZERO) <= 0 ? BigDecimal.ZERO : groupPurchasePriceMap.get(sellOrder.getGoodsId()).multiply(order.getExpectAmount()).divide(goodsTotalPrice, 2, BigDecimal.ROUND_DOWN);
+            BigDecimal sellOrderBalance = order.getExpectAmount().compareTo(BigDecimal.ZERO) <= 0 ? BigDecimal.ZERO : groupPurchasePriceMap.get(sellOrder.getGoodsId()).multiply(order.getBalancePaymentAmount()).divide(goodsTotalPrice, 2, BigDecimal.ROUND_DOWN);
+            if (i == sellOrders.size()) {
+                sellOrderExpectAmount = order.getExpectAmount().subtract(hasRouteSellOrderExpectAmount);
+                sellOrderBalance = order.getBalancePaymentAmount().subtract(hasRouteSellOrderBalance);
+            }
+            sellOrder.setOrganId(order.getOrganId());
+            sellOrder.setTransNo(order.getTransNo());
+            sellOrder.setOrderId(order.getId());
+            sellOrder.setCooperationOrganId(replacementInstrumentActivity.getCooperationOrganId());
+            sellOrder.setOrderNo(order.getOrderNo());
+            sellOrder.setActualAmount(sellOrderExpectAmount.subtract(sellOrderBalance));
+            sellOrder.setBalanceAmount(sellOrderBalance);
+            sellOrder.setExpectAmount(sellOrderExpectAmount);
+            sellOrder.setNum(1);
+            sellOrder.setUserId(order.getUserId());
+            sellOrder.setPaymentChannel(order.getPaymentChannel());
+            sellOrder.setMerNo(order.getMerNos());
+            sellOrder.setSellTime(order.getCreateTime());
+            sellOrder.setCreateIme(new Date());
+            sellOrder.setUpdateTime(new Date());
+            i++;
+        }
+        if (sellOrders.size() > 0) {
+            sellOrderDao.batchInsert(sellOrders);
+        }
+        return sellOrders;
+    }
 }