|
|
@@ -4591,23 +4591,14 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
|
|
|
.map(TradeOrderDO::getPayAmount)
|
|
|
.filter(Objects::nonNull)
|
|
|
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
- BigDecimal mergedOrderMoney = orderTotals.stream()
|
|
|
- .map(TradeOrderTotalDO::getOrderMoney)
|
|
|
- .filter(Objects::nonNull)
|
|
|
- .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
- BigDecimal mergedRealMoney = orderTotals.stream()
|
|
|
- .map(TradeOrderTotalDO::getRealMoney)
|
|
|
- .filter(Objects::nonNull)
|
|
|
- .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
- BigDecimal runningAmount = ObjectUtil.defaultIfNull(targetOrder.getPayAmount(), BigDecimal.ZERO);
|
|
|
+ List<TradeOrderDO> sourceOrders = new ArrayList<>();
|
|
|
|
|
|
for (Long sourceOrderId : orderIdSet) {
|
|
|
if (Objects.equals(sourceOrderId, targetOrder.getId())) {
|
|
|
continue;
|
|
|
}
|
|
|
TradeOrderDO sourceOrder = orderMap.get(sourceOrderId);
|
|
|
- BigDecimal sourceAmount = ObjectUtil.defaultIfNull(sourceOrder.getPayAmount(), BigDecimal.ZERO);
|
|
|
- runningAmount = runningAmount.add(sourceAmount);
|
|
|
+ sourceOrders.add(sourceOrder);
|
|
|
|
|
|
TradeOrderDO sourceUpdate = new TradeOrderDO();
|
|
|
sourceUpdate.setId(sourceOrder.getId());
|
|
|
@@ -4621,46 +4612,89 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
|
|
|
sourceTotalUpdate.setRealMoney(BigDecimal.ZERO);
|
|
|
tradeOrderTotalMapper.updateById(sourceTotalUpdate);
|
|
|
|
|
|
- insertMergeOrderLog(loginUser, targetOrder, sourceOrder, sourceAmount, runningAmount, true);
|
|
|
- insertMergeOrderLog(loginUser, sourceOrder, targetOrder, sourceAmount, BigDecimal.ZERO, false);
|
|
|
+ insertSourceMergeOrderLog(loginUser, sourceOrder, targetOrder);
|
|
|
}
|
|
|
|
|
|
TradeOrderDO targetUpdate = new TradeOrderDO();
|
|
|
targetUpdate.setId(targetOrder.getId());
|
|
|
- targetUpdate.setAmount(mergedAmount);
|
|
|
- targetUpdate.setPayAmount(mergedPayAmount);
|
|
|
+ targetUpdate.setAmount(reqVO.getMergedOrderAmount());
|
|
|
+ targetUpdate.setPayAmount(reqVO.getMergedPayAmount());
|
|
|
tradeOrderMapper.updateById(targetUpdate);
|
|
|
|
|
|
TradeOrderTotalDO targetTotalUpdate = new TradeOrderTotalDO();
|
|
|
targetTotalUpdate.setId(orderTotalMap.get(targetOrder.getId()).getId());
|
|
|
- targetTotalUpdate.setOrderMoney(mergedOrderMoney);
|
|
|
- targetTotalUpdate.setRealMoney(mergedRealMoney);
|
|
|
+ targetTotalUpdate.setOrderMoney(reqVO.getMergedOrderAmount());
|
|
|
+ targetTotalUpdate.setRealMoney(reqVO.getMergedPayAmount());
|
|
|
tradeOrderTotalMapper.updateById(targetTotalUpdate);
|
|
|
+
|
|
|
+ insertTargetMergeOrderLog(loginUser, targetOrder, sourceOrders, mergedAmount, mergedPayAmount,
|
|
|
+ reqVO.getMergedOrderAmount(), reqVO.getMergedPayAmount());
|
|
|
}
|
|
|
|
|
|
- private void insertMergeOrderLog(LoginUser loginUser, TradeOrderDO logOrder, TradeOrderDO relatedOrder,
|
|
|
- BigDecimal amount, BigDecimal newAmount, boolean targetLog) {
|
|
|
+ private void insertSourceMergeOrderLog(LoginUser loginUser, TradeOrderDO sourceOrder,
|
|
|
+ TradeOrderDO targetOrder) {
|
|
|
TradeOrderLogDO logDO = new TradeOrderLogDO();
|
|
|
logDO.setId(IdWorker.getId());
|
|
|
- logDO.setOrderId(logOrder.getId());
|
|
|
+ logDO.setOrderId(sourceOrder.getId());
|
|
|
logDO.setUserId(loginUser.getId());
|
|
|
logDO.setUserType(loginUser.getUserType());
|
|
|
- logDO.setBeforeStatus(logOrder.getOrderStatus());
|
|
|
- logDO.setAfterStatus(logOrder.getOrderStatus());
|
|
|
+ logDO.setBeforeStatus(sourceOrder.getOrderStatus());
|
|
|
+ logDO.setAfterStatus(sourceOrder.getOrderStatus());
|
|
|
logDO.setOperateType(TradeOrderOperateTypeEnum.ORDER_MERGE.getType());
|
|
|
- if (targetLog) {
|
|
|
- logDO.setContent(StrUtil.format(TradeOrderOperateTypeEnum.ORDER_MERGE.getContent(),
|
|
|
- MapUtil.<String, Object>builder()
|
|
|
- .put("orderId", relatedOrder.getOrderNo())
|
|
|
- .put("payAmount", amount)
|
|
|
- .put("newPayAmount", newAmount)
|
|
|
- .build()));
|
|
|
- } else {
|
|
|
- logDO.setContent("订单金额" + amount + "已合并至订单" + relatedOrder.getOrderNo() + ",合并后为" + newAmount);
|
|
|
- }
|
|
|
+ logDO.setContent("金额已合并至订单" + targetOrder.getOrderNo()
|
|
|
+ + ";合并前订单金额:" + defaultMoney(sourceOrder.getAmount())
|
|
|
+ + ",实际金额:" + defaultMoney(sourceOrder.getPayAmount())
|
|
|
+ + ";合并后订单金额:0,实际金额:0");
|
|
|
tradeOrderLogMapper.insert(logDO);
|
|
|
}
|
|
|
|
|
|
+ private void insertTargetMergeOrderLog(LoginUser loginUser, TradeOrderDO targetOrder,
|
|
|
+ List<TradeOrderDO> sourceOrders,
|
|
|
+ BigDecimal originalOrderAmount, BigDecimal originalPayAmount,
|
|
|
+ BigDecimal mergedOrderAmount, BigDecimal mergedPayAmount) {
|
|
|
+ TradeOrderLogDO logDO = new TradeOrderLogDO();
|
|
|
+ logDO.setId(IdWorker.getId());
|
|
|
+ logDO.setOrderId(targetOrder.getId());
|
|
|
+ logDO.setUserId(loginUser.getId());
|
|
|
+ logDO.setUserType(loginUser.getUserType());
|
|
|
+ logDO.setBeforeStatus(targetOrder.getOrderStatus());
|
|
|
+ logDO.setAfterStatus(targetOrder.getOrderStatus());
|
|
|
+ logDO.setOperateType(TradeOrderOperateTypeEnum.ORDER_MERGE.getType());
|
|
|
+ String sourceOrderDetails = sourceOrders.stream()
|
|
|
+ .map(order -> order.getOrderNo()
|
|
|
+ + "(订单金额:" + defaultMoney(order.getAmount())
|
|
|
+ + ",实际金额:" + defaultMoney(order.getPayAmount()) + ")")
|
|
|
+ .collect(Collectors.joining("、"));
|
|
|
+ StringBuilder content = new StringBuilder("合并订单金额")
|
|
|
+ .append(";目标订单合并前订单金额:").append(defaultMoney(targetOrder.getAmount()))
|
|
|
+ .append(",实际金额:").append(defaultMoney(targetOrder.getPayAmount()))
|
|
|
+ .append(";来源订单:").append(sourceOrderDetails)
|
|
|
+ .append(";合并总订单金额:").append(originalOrderAmount)
|
|
|
+ .append(",合并总实际金额:").append(originalPayAmount)
|
|
|
+ .append(";合并后订单金额:").append(mergedOrderAmount)
|
|
|
+ .append(",实际金额:").append(mergedPayAmount);
|
|
|
+ if (originalOrderAmount.compareTo(mergedOrderAmount) != 0
|
|
|
+ || originalPayAmount.compareTo(mergedPayAmount) != 0) {
|
|
|
+ content.append(";手动修改:");
|
|
|
+ if (originalOrderAmount.compareTo(mergedOrderAmount) != 0) {
|
|
|
+ content.append("订单金额由").append(originalOrderAmount).append("调整为").append(mergedOrderAmount);
|
|
|
+ }
|
|
|
+ if (originalOrderAmount.compareTo(mergedOrderAmount) != 0
|
|
|
+ && originalPayAmount.compareTo(mergedPayAmount) != 0) {
|
|
|
+ content.append(",");
|
|
|
+ }
|
|
|
+ if (originalPayAmount.compareTo(mergedPayAmount) != 0) {
|
|
|
+ content.append("实际金额由").append(originalPayAmount).append("调整为").append(mergedPayAmount);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ logDO.setContent(content.toString());
|
|
|
+ tradeOrderLogMapper.insert(logDO);
|
|
|
+ }
|
|
|
+
|
|
|
+ private BigDecimal defaultMoney(BigDecimal amount) {
|
|
|
+ return ObjectUtil.defaultIfNull(amount, BigDecimal.ZERO);
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
@TradeOrderLog(operateType = TradeOrderOperateTypeEnum.HAND_ORDER_REFUND)
|