下单时创建订单付费项,出厂时修改付费项

localizer
ljw 2025-10-29 10:53:19 +08:00
parent 4dedb2a61c
commit 5a95ce7441
1 changed files with 47 additions and 9 deletions

View File

@ -128,9 +128,9 @@ public class OrderInfoService extends ServiceImpl<OrderInfoMapper, OrderInfoEnti
.setAssignmentTransTime(transCompanyId == null ? null : LocalDateTime.now());
this.save(orderInfoEntity);
/*if (transCompanyId != null) {
settleForTransCompany(this.getById(orderInfoEntity.getId()), 0);
}*/
OrderGoodsEntity entity = orderGoodsService.getById(orderGoodsId);
// 添加付费项,计算费用,需要称重在更新
settleForTransCompany(this.getById(orderInfoEntity.getId()), entity, 0);
Long orderId = orderInfoEntity.getId();
OrderCategory orderCategory = addOrderInfoParam.getOrderCategory();
@ -725,9 +725,7 @@ public class OrderInfoService extends ServiceImpl<OrderInfoMapper, OrderInfoEnti
Assert.notNull(entity, () -> Exceptions.clierr("产品不存在"));
if (MoneyWay.IN.getVal().equals(entity.getMoneyWay())) {
// 当计费方式为入场计费时,并且是需要公司支付,我们需要再此次添加订单付费项,并计算好费用
settleForTransCompany(orderInfo, entity, 0);
// 入场付费无称重,不需要更新付费项
// 处理公司支付
handleCompanyPay(orderInfo, Boolean.TRUE);
}
@ -1069,8 +1067,8 @@ public class OrderInfoService extends ServiceImpl<OrderInfoMapper, OrderInfoEnti
Assert.notNull(entity, () -> Exceptions.clierr("产品不存在"));
// 出厂付费
if (MoneyWay.OUT.getVal().equals(entity.getMoneyWay())) {
// 计算费用
settleForTransCompany(orderInfoEntity, entity, settleWeight);
// 计算费用,出厂付费可能需要称重,需要更新付费项
updateOrderItems(orderInfoEntity.getId(), settleWeight);
// 扣费
handleCompanyPay(orderInfoEntity, Boolean.FALSE);
@ -1087,6 +1085,46 @@ public class OrderInfoService extends ServiceImpl<OrderInfoMapper, OrderInfoEnti
}
}
public void updateOrderItems(Long orderId, Integer settleWeight) {
List<OrderExpenseItemsEntity> extraItems = orderExpenseItemsService.list(Wrappers.lambdaQuery(OrderExpenseItemsEntity.class)
.eq(OrderExpenseItemsEntity::getOrderId, orderId)
.eq(OrderExpenseItemsEntity::getDeleted, Boolean.FALSE));
BigDecimal totalDiscountMoney = BigDecimal.ZERO;
BigDecimal totalReviseMoney = BigDecimal.ZERO;
BigDecimal totalSettleMoney = BigDecimal.ZERO;
BigDecimal totalTotalMoney = BigDecimal.ZERO;
for (OrderExpenseItemsEntity item : extraItems) {
item.setQuantity(MoneyStrategy.Che.getVal().equals(item.getMoneyStrategy()) ? 1 : settleWeight);
BigDecimal quantity = new BigDecimal(item.getQuantity() == null ? 0 : item.getQuantity());
// 如果计费策略是按吨数量需要除以1000
if (MoneyStrategy.Dun.getVal().equals(item.getMoneyStrategy())) {
quantity = quantity.divide(new BigDecimal("1000"), 6, BigDecimal.ROUND_HALF_UP);
}
BigDecimal totalMoney = item.getUnitPrice().multiply(quantity);
// settle_money = total_money + discount_money + revise_moneydiscount、revise 可为正负)
BigDecimal discount = item.getDiscountMoney() == null ? BigDecimal.ZERO : item.getDiscountMoney();
BigDecimal revise = item.getReviseMoney() == null ? BigDecimal.ZERO : item.getReviseMoney();
BigDecimal settle = totalMoney.add(discount).add(revise);
item.setTotalMoney(totalMoney).setSettleMoney(settle);
totalDiscountMoney = totalDiscountMoney.add(discount);
totalReviseMoney = totalReviseMoney.add(revise);
totalSettleMoney = totalSettleMoney.add(settle);
totalTotalMoney = totalTotalMoney.add(totalMoney);
orderExpenseItemsService.updateById(item);
}
// 更新订单表的优惠金额; 手动修正金额;结算金额;总金额;
this.lambdaUpdate()
.eq(OrderInfoEntity::getId, orderId)
.set(OrderInfoEntity::getDiscountMoney, totalDiscountMoney)
.set(OrderInfoEntity::getReviseMoney, totalReviseMoney)
.set(OrderInfoEntity::getSettleMoney, totalSettleMoney)
.set(OrderInfoEntity::getTotalMoney, totalTotalMoney)
.set(OrderInfoEntity::getPaymentStatus, PaymentStatus.WeiZhiFu)
.update();
}
/**
*
* 1. ExpenseItemCategory=ChanPin
@ -1152,7 +1190,7 @@ public class OrderInfoService extends ServiceImpl<OrderInfoMapper, OrderInfoEnti
.setBizObj(cfg.getBizObj())
.setCompanyIds(cfg.getCompanyIds())
.setTaxRate(cfg.getTaxRate())
.setQuantity("Che".equals(cfg.getMoneyStrategy()) ? 1 : settleWeight))
.setQuantity(MoneyStrategy.Che.getVal().equals(cfg.getMoneyStrategy()) ? 1 : settleWeight))
.collect(Collectors.toList());
// 第三步:合并集合并计算金额,然后批量落库