From db370adfdfff2072f15f793782b3c9620c399f1b Mon Sep 17 00:00:00 2001 From: ljw <706814450@qq.com> Date: Fri, 30 Jan 2026 14:54:23 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=98=E6=AC=BE=EF=BC=8C=E8=B5=84=E9=87=91?= =?UTF-8?q?=E6=98=8E=E7=BB=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cst/order/helper/PaymentRecordHelper.java | 229 ++++++++++++++++++ .../cst/order/pojo/entity/OrderEntity.java | 3 +- .../pojo/entity/OrderExpenseItemsEntity.java | 3 +- .../pojo/entity/OrderPaymentRecordEntity.java | 2 +- .../order/pojo/param/CreateOrderParam.java | 3 +- .../order/pojo/result/OrderTransResult.java | 8 +- .../cst/order/service/OrderService.java | 187 ++++++++------ .../service/TruckWeighingBusinessService.java | 218 ++++------------- .../finance/constant/ExpenseStrategy.java | 7 +- .../dispose/finance/constant/Unit.java | 26 ++ .../pojo/entity/ExpenseItemEntity.java | 3 +- .../pojo/param/AddExpenseItemParam.java | 3 +- .../pojo/param/ModifyExpenseItemParam.java | 3 +- .../pojo/result/SearchExpenseItemResult.java | 3 +- .../goods/pojo/param/AddGoodsParam.java | 3 +- .../goods/pojo/param/ModifyGoodsParam.java | 5 +- .../dispose/wh/pojo/entity/InOrderEntity.java | 3 +- .../wh/pojo/entity/InventoryEntity.java | 3 +- .../wh/pojo/entity/OutOrderEntity.java | 3 +- .../wh/pojo/entity/PurchaseOrderEntity.java | 3 +- .../wh/pojo/entity/SalesOrderEntity.java | 3 +- .../entity/WarehouseCheckDetailEntity.java | 3 +- .../wh/pojo/param/AddInOrderParam.java | 3 +- .../wh/pojo/param/AddInventoryParam.java | 3 +- .../wh/pojo/param/AddOutOrderParam.java | 3 +- .../wh/pojo/param/AddSalesOrderParam.java | 3 +- .../param/AddWarehouseCheckDetailParam.java | 3 +- .../wh/pojo/result/SearchInOrderResult.java | 3 +- .../wh/pojo/result/SearchInventoryResult.java | 3 +- .../wh/pojo/result/SearchOutOrderResult.java | 3 +- .../SearchWarehouseCheckDetailResult.java | 3 +- .../wh/service/PurchaseOrderService.java | 2 +- .../dispose/wh/service/SalesOrderService.java | 2 +- .../mapper/cst/order/OrderTransMapper.xml | 2 + 34 files changed, 476 insertions(+), 281 deletions(-) create mode 100644 njzscloud-svr/src/main/java/com/njzscloud/dispose/cst/order/helper/PaymentRecordHelper.java create mode 100644 njzscloud-svr/src/main/java/com/njzscloud/dispose/finance/constant/Unit.java diff --git a/njzscloud-svr/src/main/java/com/njzscloud/dispose/cst/order/helper/PaymentRecordHelper.java b/njzscloud-svr/src/main/java/com/njzscloud/dispose/cst/order/helper/PaymentRecordHelper.java new file mode 100644 index 0000000..99d4a28 --- /dev/null +++ b/njzscloud-svr/src/main/java/com/njzscloud/dispose/cst/order/helper/PaymentRecordHelper.java @@ -0,0 +1,229 @@ +package com.njzscloud.dispose.cst.order.helper; + +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.njzscloud.dispose.cst.customer.constant.SettlementWay; +import com.njzscloud.dispose.cst.order.constant.PaymentStatus; +import com.njzscloud.dispose.cst.order.pojo.entity.OrderExpenseItemsEntity; +import com.njzscloud.dispose.cst.order.pojo.entity.OrderPaymentRecordEntity; +import com.njzscloud.dispose.cst.order.service.OrderExpenseItemsService; +import com.njzscloud.dispose.cst.order.service.OrderPaymentRecordService; +import com.njzscloud.dispose.finance.constant.ExpenseStrategy; +import com.njzscloud.dispose.finance.constant.MoneyChangeCategory; +import com.njzscloud.dispose.finance.constant.Unit; +import com.njzscloud.dispose.finance.pojo.entity.MoneyAccountEntity; +import com.njzscloud.dispose.finance.pojo.entity.MoneyFlowEntity; +import com.njzscloud.dispose.finance.service.MoneyAccountService; +import com.njzscloud.dispose.finance.service.MoneyFlowService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.time.LocalDateTime; +import java.util.List; + +/** + * 付费记录业务处理帮助类 + * + * @author ljw + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class PaymentRecordHelper { + + private final OrderPaymentRecordService orderPaymentRecordService; + private final OrderExpenseItemsService orderExpenseItemsService; + private final MoneyAccountService moneyAccountService; + private final MoneyFlowService moneyFlowService; + + /** + * 更新付费记录的量,计算结算金额并支付 + * + * @param transId 运输记录ID + * @param settleWeight 净重(单位:千克) + * @param transDistance 运距(单位:米) + * @param orderSn 订单编号(用于资金流水) + * @param trainNum 车次(用于资金流水) + * @return 该运输记录下的所有付费记录是否都已完成(支付状态为免费或已支付) + */ + @Transactional(rollbackFor = Exception.class) + public boolean updatePaymentRecordQuantity(Long transId, Integer settleWeight, Integer transDistance, String orderSn, Integer trainNum) { + // 1. 通过运输信息ID查询付费记录 + List paymentRecords = orderPaymentRecordService.list( + Wrappers.lambdaQuery() + .eq(OrderPaymentRecordEntity::getTransId, transId)); + + if (paymentRecords.isEmpty()) { + return true; + } + + // 2. 遍历更新每条付费记录的量 + for (OrderPaymentRecordEntity record : paymentRecords) { + // 通过付费记录的订单收费项 Id 查询付费项 + OrderExpenseItemsEntity expenseItem = orderExpenseItemsService.getById(record.getExpenseItemId()); + Unit unit = expenseItem.getUnit(); + ExpenseStrategy expenseStrategy = expenseItem.getExpenseStrategy(); + + // 3. 根据单位计算量 + BigDecimal quantity = calculateQuantity(unit, settleWeight, transDistance); + if (quantity == null) { + // 单位为方,暂不处理 + continue; + } + + // 4. 计算总金额 + BigDecimal totalMoney = calculateTotalMoney(expenseStrategy, expenseItem, quantity); + + // 5. 计算结算金额(discountMoney、reviseMoney 可为正负,直接做加法) + BigDecimal discountMoney = record.getDiscountMoney() != null ? record.getDiscountMoney() : BigDecimal.ZERO; + BigDecimal reviseMoney = record.getReviseMoney() != null ? record.getReviseMoney() : BigDecimal.ZERO; + BigDecimal settleMoney = totalMoney.add(discountMoney).add(reviseMoney); + + // 6. 更新付费记录 + OrderPaymentRecordEntity updateRecord = new OrderPaymentRecordEntity(); + updateRecord.setId(record.getId()); + updateRecord.setQuantity(quantity); + updateRecord.setTotalMoney(totalMoney); + updateRecord.setSettleMoney(settleMoney); + orderPaymentRecordService.updateById(updateRecord); + + // 7. 处理支付完成 + if (ExpenseStrategy.MianFei.equals(expenseStrategy)) { + // 免费 + OrderPaymentRecordEntity payRecord = new OrderPaymentRecordEntity(); + payRecord.setId(record.getId()); + payRecord.setPaymentStatus(PaymentStatus.MianFei); + payRecord.setPayTime(LocalDateTime.now()); + orderPaymentRecordService.updateById(payRecord); + } else { + // 非免费,需要处理支付 + SettlementWay settlementWay = record.getSettlementWay(); + if (SettlementWay.YueJie.equals(settlementWay) || SettlementWay.YuE.equals(settlementWay)) { + // 月结/余额结算 + this.deductPayment(record, settleMoney, orderSn, trainNum); + OrderPaymentRecordEntity payRecord = new OrderPaymentRecordEntity(); + payRecord.setId(record.getId()); + payRecord.setPaymentStatus(PaymentStatus.YiZhiFu); + payRecord.setPayTime(LocalDateTime.now()); + orderPaymentRecordService.updateById(payRecord); + } + } + } + + // 8. 检查该运输记录下所有付费记录是否都已完成 + List updatedRecords = orderPaymentRecordService.list( + Wrappers.lambdaQuery() + .eq(OrderPaymentRecordEntity::getTransId, transId)); + + boolean allCompleted = updatedRecords.stream() + .allMatch(r -> PaymentStatus.MianFei.equals(r.getPaymentStatus()) || PaymentStatus.YiZhiFu.equals(r.getPaymentStatus())); + + log.info("运输记录 {} 的付费记录量更新完成,所有记录已完成: {}", transId, allCompleted); + return allCompleted; + } + + /** + * 扣减付款人资金账户并记录流水 + * + * @param record 付费记录 + * @param settleMoney 结算金额(支付金额) + * @param orderSn 订单编号 + * @param trainNum 车次 + */ + private void deductPayment(OrderPaymentRecordEntity record, BigDecimal settleMoney, String orderSn, Integer trainNum) { + Long moneyAccountId = record.getPayerMoneyAccountId(); + if (moneyAccountId == null) { + log.warn("付费记录 {} 缺少资金账户ID,无法扣款", record.getId()); + return; + } + + MoneyAccountEntity accountEntity = moneyAccountService.getById(moneyAccountId); + if (accountEntity == null) { + log.warn("资金账户 {} 不存在,无法扣款", moneyAccountId); + return; + } + + BigDecimal beforeBalance = accountEntity.getRecharge(); + BigDecimal afterBalance = beforeBalance.subtract(settleMoney); + + // 更新资金账户余额 + accountEntity.setRecharge(afterBalance); + moneyAccountService.updateById(accountEntity); + + // 记录资金流水 + MoneyFlowEntity flowEntity = new MoneyFlowEntity() + .setOrderId(record.getOrderId()) + .setOrderSn(orderSn) + .setTrainNum(trainNum) + .setMoneyAccountId(moneyAccountId) + .setBeforeBalance(beforeBalance) + .setDelta(settleMoney.negate()) // 支出为负 + .setAfterBalance(afterBalance) + .setMoneyChangeCategory(MoneyChangeCategory.ZhiFu) + .setMemo("订单支付"); + moneyFlowService.save(flowEntity); + + log.info("资金账户 {} 扣款成功,扣款前余额:{},扣款金额:{},扣款后余额:{}", + moneyAccountId, beforeBalance, settleMoney, afterBalance); + } + + /** + * 计算总金额 + * + * @param expenseStrategy 计费策略 + * @param expenseItem 付费项配置 + * @param quantity 量 + * @return 总金额 + */ + private BigDecimal calculateTotalMoney(ExpenseStrategy expenseStrategy, OrderExpenseItemsEntity expenseItem, BigDecimal quantity) { + return switch (expenseStrategy) { + case MianFei -> BigDecimal.ZERO; // 免费 + case TanXing -> { // 弹性计费 + BigDecimal initialPrice = expenseItem.getInitialPrice(); + Integer initialQuantity = expenseItem.getInitialQuantity(); + Integer everyQuantity = expenseItem.getEveryQuantity(); + BigDecimal unitPrice = expenseItem.getUnitPrice(); + + if (quantity.compareTo(BigDecimal.valueOf(initialQuantity)) <= 0) { + // 净重 <= 起步量,总价 = 起步价 + yield initialPrice; + } else { + // 净重 > 起步量,计算超出部分的档次 + BigDecimal exceededQuantity = quantity.subtract(BigDecimal.valueOf(initialQuantity)); + int tiers = (int) Math.ceil(exceededQuantity.doubleValue() / everyQuantity); + yield initialPrice.add(unitPrice.multiply(BigDecimal.valueOf(tiers))); + } + } + case GuDing -> expenseItem.getUnitPrice(); // 固定价格 + case DanJia -> expenseItem.getUnitPrice().multiply(quantity); // 单价计费 + }; + } + + /** + * 根据单位计算量 + * + * @param unit 单位 + * @param settleWeight 净重(单位:千克) + * @param transDistance 运距(单位:米) + * @return 量,单位为BigDecimal;返回null表示暂不处理(如方) + */ + private BigDecimal calculateQuantity(Unit unit, Integer settleWeight, Integer transDistance) { + if (unit == null) { + return null; + } + return switch (unit) { + case Che -> BigDecimal.ONE; // 车:量为1 + case Fang -> null; // 方:暂不处理 + case GongLi -> transDistance != null + ? BigDecimal.valueOf(transDistance).divide(BigDecimal.valueOf(1000), 2, RoundingMode.HALF_UP) // 公里:米转公里 + : null; + case Dun -> settleWeight != null + ? BigDecimal.valueOf(settleWeight).divide(BigDecimal.valueOf(1000), 2, RoundingMode.HALF_UP) // 吨:千克转吨 + : null; + }; + } + +} diff --git a/njzscloud-svr/src/main/java/com/njzscloud/dispose/cst/order/pojo/entity/OrderEntity.java b/njzscloud-svr/src/main/java/com/njzscloud/dispose/cst/order/pojo/entity/OrderEntity.java index 21422c9..ec6eaf6 100644 --- a/njzscloud-svr/src/main/java/com/njzscloud/dispose/cst/order/pojo/entity/OrderEntity.java +++ b/njzscloud-svr/src/main/java/com/njzscloud/dispose/cst/order/pojo/entity/OrderEntity.java @@ -3,6 +3,7 @@ package com.njzscloud.dispose.cst.order.pojo.entity; import com.baomidou.mybatisplus.annotation.*; import com.njzscloud.dispose.cst.order.constant.OrderCategory; import com.njzscloud.dispose.cst.order.constant.OrderStatus; +import com.njzscloud.dispose.finance.constant.Unit; import lombok.Getter; import lombok.Setter; import lombok.ToString; @@ -131,7 +132,7 @@ public class OrderEntity { /** * 计量单位;字典代码:unit */ - private String unit; + private Unit unit; /** * 客户备注 diff --git a/njzscloud-svr/src/main/java/com/njzscloud/dispose/cst/order/pojo/entity/OrderExpenseItemsEntity.java b/njzscloud-svr/src/main/java/com/njzscloud/dispose/cst/order/pojo/entity/OrderExpenseItemsEntity.java index 0322d74..9041ec2 100644 --- a/njzscloud-svr/src/main/java/com/njzscloud/dispose/cst/order/pojo/entity/OrderExpenseItemsEntity.java +++ b/njzscloud-svr/src/main/java/com/njzscloud/dispose/cst/order/pojo/entity/OrderExpenseItemsEntity.java @@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.njzscloud.dispose.finance.constant.ExpenseItemCategory; import com.njzscloud.dispose.finance.constant.ExpenseStrategy; +import com.njzscloud.dispose.finance.constant.Unit; import lombok.Getter; import lombok.Setter; import lombok.ToString; @@ -69,7 +70,7 @@ public class OrderExpenseItemsEntity { /** * 计量单位;字典代码:unit */ - private String unit; + private Unit unit; /** * 单价;单位:元,弹性模式-->每档价格 diff --git a/njzscloud-svr/src/main/java/com/njzscloud/dispose/cst/order/pojo/entity/OrderPaymentRecordEntity.java b/njzscloud-svr/src/main/java/com/njzscloud/dispose/cst/order/pojo/entity/OrderPaymentRecordEntity.java index 2ad3ff7..4af0303 100644 --- a/njzscloud-svr/src/main/java/com/njzscloud/dispose/cst/order/pojo/entity/OrderPaymentRecordEntity.java +++ b/njzscloud-svr/src/main/java/com/njzscloud/dispose/cst/order/pojo/entity/OrderPaymentRecordEntity.java @@ -55,7 +55,7 @@ public class OrderPaymentRecordEntity { /** * 量 */ - private Integer quantity; + private BigDecimal quantity; /** * 支付状态,MianFei-->免费、WeiZhiFu-->未支付、YiZhiFu-->已支付、YiTuiKuan-->已退款 diff --git a/njzscloud-svr/src/main/java/com/njzscloud/dispose/cst/order/pojo/param/CreateOrderParam.java b/njzscloud-svr/src/main/java/com/njzscloud/dispose/cst/order/pojo/param/CreateOrderParam.java index ca4ef73..f05ba86 100644 --- a/njzscloud-svr/src/main/java/com/njzscloud/dispose/cst/order/pojo/param/CreateOrderParam.java +++ b/njzscloud-svr/src/main/java/com/njzscloud/dispose/cst/order/pojo/param/CreateOrderParam.java @@ -2,6 +2,7 @@ package com.njzscloud.dispose.cst.order.pojo.param; import com.njzscloud.dispose.cst.order.constant.OrderCategory; import com.njzscloud.dispose.cst.order.constant.OrderStatus; +import com.njzscloud.dispose.finance.constant.Unit; import lombok.Data; import java.time.LocalDateTime; @@ -98,7 +99,7 @@ public class CreateOrderParam { /** * 计量单位;字典代码:unit */ - private String unit; + private Unit unit; /** * 客户备注 diff --git a/njzscloud-svr/src/main/java/com/njzscloud/dispose/cst/order/pojo/result/OrderTransResult.java b/njzscloud-svr/src/main/java/com/njzscloud/dispose/cst/order/pojo/result/OrderTransResult.java index 9e81502..1837798 100644 --- a/njzscloud-svr/src/main/java/com/njzscloud/dispose/cst/order/pojo/result/OrderTransResult.java +++ b/njzscloud-svr/src/main/java/com/njzscloud/dispose/cst/order/pojo/result/OrderTransResult.java @@ -6,6 +6,7 @@ import com.njzscloud.dispose.cst.order.constant.CheckStatus; import com.njzscloud.dispose.cst.order.constant.OrderCategory; import com.njzscloud.dispose.cst.order.constant.OrderStatus; import com.njzscloud.dispose.cst.order.constant.TransStatus; +import com.njzscloud.dispose.finance.constant.Unit; import lombok.Data; import java.time.LocalDateTime; @@ -177,6 +178,11 @@ public class OrderTransResult { */ private LocalDateTime outTime; + /** + * 订单号 + */ + private String sn; + /** * 运输组织 Id;cst_org.id */ @@ -245,7 +251,7 @@ public class OrderTransResult { /** * 单位 */ - private String unit; + private Unit unit; } diff --git a/njzscloud-svr/src/main/java/com/njzscloud/dispose/cst/order/service/OrderService.java b/njzscloud-svr/src/main/java/com/njzscloud/dispose/cst/order/service/OrderService.java index fa947d4..95daa12 100644 --- a/njzscloud-svr/src/main/java/com/njzscloud/dispose/cst/order/service/OrderService.java +++ b/njzscloud-svr/src/main/java/com/njzscloud/dispose/cst/order/service/OrderService.java @@ -9,22 +9,28 @@ import com.njzscloud.common.mp.support.PageParam; import com.njzscloud.common.mp.support.PageResult; import com.njzscloud.common.security.util.SecurityUtil; import com.njzscloud.common.sn.support.SnUtil; +import com.njzscloud.dispose.cst.customer.constant.IdentityCategory; +import com.njzscloud.dispose.cst.customer.constant.SettlementWay; import com.njzscloud.dispose.cst.customer.mapper.CustomerMapper; import com.njzscloud.dispose.cst.customer.pojo.entity.CustomerEntity; import com.njzscloud.dispose.cst.driver.mapper.DriverMapper; import com.njzscloud.dispose.cst.driver.pojo.entity.DriverEntity; import com.njzscloud.dispose.cst.order.constant.*; +import com.njzscloud.dispose.cst.order.helper.PaymentRecordHelper; import com.njzscloud.dispose.cst.order.mapper.OrderMapper; import com.njzscloud.dispose.cst.order.mapper.OrderTransMapper; import com.njzscloud.dispose.cst.order.pojo.entity.*; import com.njzscloud.dispose.cst.order.pojo.param.*; import com.njzscloud.dispose.cst.order.pojo.result.OrderTransResult; +import com.njzscloud.dispose.cst.station.mapper.StationMapper; +import com.njzscloud.dispose.cst.station.pojo.entity.StationEntity; import com.njzscloud.dispose.cst.truck.mapper.TruckMapper; import com.njzscloud.dispose.cst.truck.pojo.entity.TruckEntity; -import com.njzscloud.dispose.finance.constant.ExpenseStrategy; +import com.njzscloud.dispose.finance.constant.ExpenseItemCategory; import com.njzscloud.dispose.finance.mapper.MoneyAccountMapper; import com.njzscloud.dispose.finance.pojo.entity.ExpenseItemEntity; import com.njzscloud.dispose.finance.pojo.entity.MoneyAccountEntity; +import com.njzscloud.dispose.finance.pojo.result.MoneyAccountResult; import com.njzscloud.dispose.finance.service.ExpenseItemService; import com.njzscloud.dispose.sys.auth.pojo.result.MyResult; import lombok.RequiredArgsConstructor; @@ -33,10 +39,13 @@ import org.apache.commons.compress.utils.Lists; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.List; import java.util.Objects; -import java.util.stream.Collectors; + +import static com.njzscloud.dispose.event.SysMittEvent.PURCHASE_ORDER; +import static com.njzscloud.dispose.event.SysMittEvent.SALES_ORDER; /** * 收/销订单 @@ -57,6 +66,8 @@ public class OrderService extends ServiceImpl { private final OrderExpenseItemsService orderExpenseItemsService; private final OrderPaymentRecordService orderPaymentRecordService; private final MoneyAccountMapper moneyAccountMapper; + private final StationMapper stationMapper; + private final PaymentRecordHelper paymentRecordHelper; @Transactional(rollbackFor = Exception.class) public void add(CreateOrderParam param) { @@ -167,6 +178,21 @@ public class OrderService extends ServiceImpl { Assert.isNull(result.getDriverId(), () -> Exceptions.clierr("当前订单已分配司机,无需重复分配")); Assert.isTrue(TransStatus.DaiPaiDan.equals(result.getTransStatus()), () -> Exceptions.clierr("当前订单状态,无法分配司机")); + // 获取订单的所有运输记录 + List recordList = orderPaymentRecordService.list(Wrappers.lambdaQuery() + .eq(OrderPaymentRecordEntity::getTransId, result.getId())); + for (OrderPaymentRecordEntity record : recordList) { + if (SettlementWay.YuE.equals(record.getSettlementWay())) { + MoneyAccountResult accountResult = moneyAccountMapper.detail(record.getPayerMoneyAccountId()); + // 如果该笔订单支付方式为余额支付,需在分配之前查询当前付款账户余额是否充足, + // 不足则提示余额不足,不允许在派司机 + if (accountResult.getRecharge().compareTo(BigDecimal.ZERO) < 0) { + // 已经是负数,禁止再次支付 + throw Exceptions.clierr(accountResult.getAccountName() + "账户余额不足"); + } + } + } + DriverEntity driver = driverMapper.selectById(driverParam.getDriverId()); Assert.notNull(driver, () -> Exceptions.clierr("司机不存在")); @@ -339,36 +365,27 @@ public class OrderService extends ServiceImpl { transEntity.setOutTime(LocalDateTime.now()); orderTransMapper.updateById(transEntity); - // 更新付费记录的量 - this.updatePaymentRecordQuantity(transEntity.getId(), transEntity.getSettleWeight()); - } + // 更新付费记录的量,计算结算金额并支付 + boolean allCompleted = paymentRecordHelper.updatePaymentRecordQuantity( + transEntity.getId(), transEntity.getSettleWeight(), transEntity.getTransDistance(), + result.getSn(), result.getTrainNum()); - /** - * 更新付费记录的量 - * - * @param transId 运输记录ID - */ - private void updatePaymentRecordQuantity(Long transId, Integer settleWeight) { - // 1. 通过运输信息ID查询付费记录 - List paymentRecords = orderPaymentRecordService.list(Wrappers.lambdaQuery() - .eq(OrderPaymentRecordEntity::getTransId, transId)); + // 如果该运输记录下所有付费记录都已完成,更新运输状态为已完成 + if (allCompleted) { + OrderTransEntity updateTrans = new OrderTransEntity(); + updateTrans.setId(transEntity.getId()); + updateTrans.setTransStatus(TransStatus.YiWanCheng); + updateTrans.setFinishTime(LocalDateTime.now()); + orderTransMapper.updateById(updateTrans); + // 添加采购单或销售单 + if (OrderCategory.HuiShouYuYue.equals(result.getOrderCategory())) { + PURCHASE_ORDER.emit(updateTrans.getId()); + } else if (OrderCategory.XiaoShouYuYue.equals(result.getOrderCategory())) { + SALES_ORDER.emit(updateTrans.getId()); + } - if (paymentRecords.isEmpty()) { - return; - } - - // 2. 遍历更新每条付费记录的量 - for (OrderPaymentRecordEntity record : paymentRecords) { - // 通过付费记录的订单收费项 Id 查询付费项 - OrderExpenseItemsEntity expenseItem = orderExpenseItemsService.getById(record.getExpenseItemId()); - - // 3. 如果计费策略为Che,则量为1,否则为净重 - Integer quantity = ExpenseStrategy.Che.equals(expenseItem.getExpenseStrategy()) ? 1 : settleWeight; - - OrderPaymentRecordEntity updateRecord = new OrderPaymentRecordEntity(); - updateRecord.setId(record.getId()); - updateRecord.setQuantity(quantity); - orderPaymentRecordService.updateById(updateRecord); + // 检查订单下所有运输记录是否都完成 + this.checkAndUpdateOrderStatus(result.getId()); } } @@ -382,6 +399,30 @@ public class OrderService extends ServiceImpl { truckMapper.updateById(truck); } + /** + * 检查订单下所有运输记录是否都完成,如果都完成则更新订单状态 + * + * @param orderId 订单ID + */ + private void checkAndUpdateOrderStatus(Long orderId) { + List transList = orderTransMapper.selectList( + Wrappers.lambdaQuery() + .eq(OrderTransEntity::getOrderId, orderId) + .ne(OrderTransEntity::getTransStatus, TransStatus.YiQuXiao)); + + boolean allCompleted = transList.stream() + .allMatch(t -> TransStatus.YiWanCheng.equals(t.getTransStatus())); + + if (allCompleted) { + OrderEntity updateOrder = new OrderEntity(); + updateOrder.setId(orderId); + updateOrder.setOrderStatus(OrderStatus.YiWanCheng); + updateOrder.setFinishTime(LocalDateTime.now()); + this.updateById(updateOrder); + log.info("订单 {} 所有运输记录已完成,更新订单状态为已完成", orderId); + } + } + /** * 生成订单号 * @@ -401,61 +442,71 @@ public class OrderService extends ServiceImpl { * @param orderEntity 订单信息 */ public void createOrderExpenseItems(OrderEntity orderEntity) { + // 组织ids集合 + List orgIds = Lists.newArrayList(); + Long transOrgId = orderEntity.getTransOrgId(); + orgIds.add(transOrgId); + CustomerEntity customerEntity = customerMapper.selectOne(Wrappers.lambdaQuery() + .eq(CustomerEntity::getIdentityCategory, IdentityCategory.PingTai) + .eq(CustomerEntity::getManager, Boolean.TRUE) + .eq(CustomerEntity::getDeleted, Boolean.FALSE)); + orgIds.add(customerEntity.getOrgId()); + StationEntity station = stationMapper.selectById(orderEntity.getStationId()); + orgIds.add(station.getOrgId()); + // 读取启用的付费项配置,并按过滤 List itemEntityList = expenseItemService.list(Wrappers.lambdaQuery() + .in(ExpenseItemEntity::getOrgId, orgIds) .eq(ExpenseItemEntity::getCanuse, Boolean.TRUE) .eq(ExpenseItemEntity::getDeleted, Boolean.FALSE)); - Long transOrgId = orderEntity.getTransOrgId(); Long goodsId = orderEntity.getGoodsId(); - Long stationId = orderEntity.getStationId(); - List goodsItems = itemEntityList.stream().filter(item -> - item.getGoodsId().equals(goodsId)).toList(); + // 1. 查找产品付费项(goodsId + station.getOrgId() + ChanPin,只会匹配到一个) + ExpenseItemEntity firstGoodsItem = itemEntityList.stream() + .filter(item -> goodsId.equals(item.getGoodsId()) + && station.getOrgId().equals(item.getOrgId()) + && ExpenseItemCategory.ChanPin.equals(item.getExpenseItemCategory())) + .findFirst() + .orElse(null); - OrderExpenseItemsEntity goodsOrderItem = null; - if (!goodsItems.isEmpty()) { - goodsOrderItem = BeanUtil.copyProperties(goodsItems.getFirst(), OrderExpenseItemsEntity.class) - .setOrderId(orderEntity.getId()) - .setOriginExpenseItemsId(goodsItems.getFirst().getId()); - } + // 2. 查找运费付费项(YunFei + transOrgId,可能有多条) + List freightItems = itemEntityList.stream() + .filter(item -> transOrgId.equals(item.getOrgId()) + && ExpenseItemCategory.YunFei.equals(item.getExpenseItemCategory())) + .toList(); + // 3. 过滤其他付费项(排除产品、运费) List extraItems = itemEntityList.stream() - .filter(cfg -> { - Long userId = cfg.getUserId(); - Long customerId = cfg.getCustomerId(); - Long orgId = cfg.getOrgId(); - - // 判断用户归属范围 - boolean isUserTrue = userId == null || userId.equals(orderEntity.getUserId()); - - // 判断客户归属范围 - boolean isCustomerTrue = customerId == null || customerId.equals(orderEntity.getCustomerId()); - - // 判断组织归属范围 - boolean isOrgTrue = orgId == null || orgId.equals(orderEntity.getTransOrgId()); - - // 只有当三个条件都为true时,才返回true - return isUserTrue && isCustomerTrue && isOrgTrue; - }) - // 复制配置为订单付费项(数量口径与产品一致:按车=1,否则=settleWeight) + .filter(cfg -> !ExpenseItemCategory.ChanPin.equals(cfg.getExpenseItemCategory()) + && !ExpenseItemCategory.YunFei.equals(cfg.getExpenseItemCategory())) + // 复制配置为订单付费项 .map(cfg -> { OrderExpenseItemsEntity entity = BeanUtil.copyProperties(cfg, OrderExpenseItemsEntity.class); entity.setOrderId(orderEntity.getId()); entity.setOriginExpenseItemsId(cfg.getId()); return entity; }) - .collect(Collectors.toList()); + .toList(); - // 第三步:合并集合并计算金额,然后批量落库 - if (goodsOrderItem != null) { - extraItems.addFirst(goodsOrderItem); + // 第四步:合并集合并计算金额,然后批量落库 + List allItems = Lists.newArrayList(); + if (firstGoodsItem != null) { + allItems.add(BeanUtil.copyProperties(firstGoodsItem, OrderExpenseItemsEntity.class) + .setOrderId(orderEntity.getId()) + .setOriginExpenseItemsId(firstGoodsItem.getId())); } + // 添加所有运费付费项 + freightItems.forEach(item -> allItems.add( + BeanUtil.copyProperties(item, OrderExpenseItemsEntity.class) + .setOrderId(orderEntity.getId()) + .setOriginExpenseItemsId(item.getId()))); + allItems.addAll(extraItems); - if (extraItems.isEmpty()) { + if (allItems.isEmpty()) { return; } // 批量保存付费项 - orderExpenseItemsService.saveBatch(extraItems); + orderExpenseItemsService.saveBatch(allItems); // 获取订单的所有运输记录 List transList = orderTransMapper.selectList(Wrappers.lambdaQuery() @@ -463,7 +514,7 @@ public class OrderService extends ServiceImpl { List recordList = Lists.newArrayList(); for (OrderTransEntity transEntity : transList) { - List paymentRecords = extraItems.stream() + List paymentRecords = allItems.stream() .map(item -> { OrderPaymentRecordEntity record = new OrderPaymentRecordEntity() .setOrderId(orderEntity.getId()) @@ -473,11 +524,6 @@ public class OrderService extends ServiceImpl { // 根据归属字段获取结算方式和账户信息 Long customerId = item.getCustomerId(); - if (customerId == null) { - // 如果没有归属客户,尝试从订单获取 - customerId = orderEntity.getCustomerId(); - } - CustomerEntity customer = customerMapper.selectOne(Wrappers.lambdaQuery() .eq(CustomerEntity::getId, customerId)); if (customer != null && customer.getSettlementWay() != null) { @@ -497,7 +543,6 @@ public class OrderService extends ServiceImpl { } else { throw Exceptions.clierr("付款人资金账户不存在"); } - return record; }) .toList(); diff --git a/njzscloud-svr/src/main/java/com/njzscloud/dispose/cst/order/service/TruckWeighingBusinessService.java b/njzscloud-svr/src/main/java/com/njzscloud/dispose/cst/order/service/TruckWeighingBusinessService.java index 7a90adc..2de02b7 100644 --- a/njzscloud-svr/src/main/java/com/njzscloud/dispose/cst/order/service/TruckWeighingBusinessService.java +++ b/njzscloud-svr/src/main/java/com/njzscloud/dispose/cst/order/service/TruckWeighingBusinessService.java @@ -4,16 +4,15 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.njzscloud.common.core.tuple.Tuple2; import com.njzscloud.common.oss.util.AliOSS; import com.njzscloud.dispose.cst.order.constant.*; +import com.njzscloud.dispose.cst.order.helper.PaymentRecordHelper; +import com.njzscloud.dispose.cst.order.mapper.OrderMapper; import com.njzscloud.dispose.cst.order.mapper.OrderTransMapper; import com.njzscloud.dispose.cst.order.pojo.entity.OrderEntity; -import com.njzscloud.dispose.cst.order.pojo.entity.OrderExpenseItemsEntity; -import com.njzscloud.dispose.cst.order.pojo.entity.OrderPaymentRecordEntity; import com.njzscloud.dispose.cst.order.pojo.entity.OrderTransEntity; import com.njzscloud.dispose.cst.order.pojo.result.OrderTransResult; import com.njzscloud.dispose.dev.DiscoverTruckMsg; import com.njzscloud.dispose.dev.ObtainTruckDataResultMsg; import com.njzscloud.dispose.dev.WbsHandle; -import com.njzscloud.dispose.finance.constant.ExpenseStrategy; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -37,9 +36,9 @@ import java.util.List; public class TruckWeighingBusinessService { private final OrderService orderService; + private final OrderMapper orderMapper; private final OrderTransMapper orderTransMapper; - private final OrderPaymentRecordService orderPaymentRecordService; - private final OrderExpenseItemsService orderExpenseItemsService; + private final PaymentRecordHelper paymentRecordHelper; /** * 请求数据 - 处理车辆识别 @@ -173,11 +172,9 @@ public class TruckWeighingBusinessService { wbsHandle.playVoice(VoiceConstants.VOICE_PLEASE_PASS); wbsHandle.open(); } else if (TransStatus.YiJinChang.equals(orderTrans.getTransStatus())) { - // 出场:设置相应重量并计算净重、账目,等待支付完成后再开门 - handleTruckLeavingData(orderTrans, weight, image); + // 出场:设置相应重量并计算净重、账目,支付完成后开门 + handleTruckLeavingData(orderTrans, weight, image, wbsHandle); wbsHandle.playVoice(VoiceConstants.VOICE_WEIGH_COMPLETE); - // TODO: 触发算账流程,支付完成后调用 completePaymentAndOpenGate 方法开门 - processSettlementAndWaitForPayment(orderTrans, wbsHandle); } else { log.warn("运输订单 {} 状态 {} 不支持称重操作", orderTrans.getId(), orderTrans.getTransStatus()); wbsHandle.playVoice(VoiceConstants.VOICE_STATUS_ERROR); @@ -209,7 +206,7 @@ public class TruckWeighingBusinessService { /** * 处理出场称重数据 */ - private void handleTruckLeavingData(OrderTransResult orderTrans, Integer weight, String bodyPhoto) { + private void handleTruckLeavingData(OrderTransResult orderTrans, Integer weight, String bodyPhoto, WbsHandle wbsHandle) { OrderTransEntity transEntity = new OrderTransEntity(); transEntity.setId(orderTrans.getId()); transEntity.setTransStatus(TransStatus.YiChuChang); @@ -232,42 +229,28 @@ public class TruckWeighingBusinessService { log.info("车辆出场称重完成,订单ID: {}, 重量: {}kg, 净重: {}kg", orderTrans.getId(), weight, settleWeight); - // 更新付费记录的量 - this.updatePaymentRecordQuantity(orderTrans.getId(), settleWeight); - } + // 更新付费记录的量,计算结算金额并支付 + String orderSn = orderMapper.selectById(orderTrans.getOrderId()).getSn(); + boolean allCompleted = paymentRecordHelper.updatePaymentRecordQuantity( + orderTrans.getId(), settleWeight, orderTrans.getTransDistance(), + orderSn, orderTrans.getTrainNum()); - /** - * 更新付费记录的量 - * - * @param transId 运输记录ID - * @param settleWeight 净重 - */ - private void updatePaymentRecordQuantity(Long transId, Integer settleWeight) { - // 1. 通过运输信息ID查询付费记录 - List paymentRecords = orderPaymentRecordService.list(Wrappers.lambdaQuery() - .eq(OrderPaymentRecordEntity::getTransId, transId)); + // 如果该运输记录下所有付费记录都已完成,更新运输状态为已完成并开门 + if (allCompleted) { + OrderTransEntity updateTrans = new OrderTransEntity(); + updateTrans.setId(orderTrans.getId()); + updateTrans.setTransStatus(TransStatus.YiWanCheng); + updateTrans.setFinishTime(LocalDateTime.now()); + orderTransMapper.updateById(updateTrans); - if (paymentRecords.isEmpty()) { - return; + // 检查订单下所有运输记录是否都完成 + this.checkAndUpdateOrderStatus(orderTrans.getOrderId()); + + // 开门放行 + wbsHandle.playVoice(VoiceConstants.VOICE_PLEASE_PASS); + wbsHandle.open(); + log.info("运输记录 {} 支付完成,开门放行", orderTrans.getId()); } - - // 2. 遍历更新每条付费记录的量 - for (OrderPaymentRecordEntity record : paymentRecords) { - // 通过付费记录的订单收费项 Id 查询付费项 - OrderExpenseItemsEntity expenseItem = orderExpenseItemsService.getById(record.getExpenseItemId()); - if (expenseItem == null) { - continue; - } - - // 3. 如果计费策略为Che,则量为1,否则为净重 - Integer quantity = ExpenseStrategy.Che.equals(expenseItem.getExpenseStrategy()) ? 1 : settleWeight; - - OrderPaymentRecordEntity updateRecord = new OrderPaymentRecordEntity(); - updateRecord.setId(record.getId()); - updateRecord.setQuantity(quantity); - orderPaymentRecordService.updateById(updateRecord); - } - log.info("运输记录 {} 的付费记录量更新完成", transId); } /** @@ -395,141 +378,26 @@ public class TruckWeighingBusinessService { } /** - * 检查订单下所有运输记录是否都已完成 + * 检查订单下所有运输记录是否都完成,如果都完成则更新订单状态 + * + * @param orderId 订单ID */ - private boolean checkAllTransCompleted(Long orderId) { - try { - // 查询该订单下的所有运输记录 - List transList = orderTransMapper.selectList( - Wrappers.lambdaQuery() - .eq(OrderTransEntity::getOrderId, orderId) - ); + private void checkAndUpdateOrderStatus(Long orderId) { + List transList = orderTransMapper.selectList( + Wrappers.lambdaQuery() + .eq(OrderTransEntity::getOrderId, orderId) + .ne(OrderTransEntity::getTransStatus, TransStatus.YiQuXiao)); - if (transList.isEmpty()) { - log.warn("订单 {} 下没有找到运输记录", orderId); - return false; - } + boolean allCompleted = transList.stream() + .allMatch(t -> TransStatus.YiWanCheng.equals(t.getTransStatus())); - // 检查所有运输记录的状态是否都为已完成 - boolean allCompleted = transList.stream() - .allMatch(trans -> TransStatus.YiWanCheng.equals(trans.getTransStatus())); - - if (allCompleted) { - log.info("订单 {} 下所有 {} 条运输记录都已完成", orderId, transList.size()); - } else { - long completedCount = transList.stream() - .filter(trans -> TransStatus.YiWanCheng.equals(trans.getTransStatus())) - .count(); - log.info("订单 {} 下 {}/{} 条运输记录已完成", orderId, completedCount, transList.size()); - } - - return allCompleted; - - } catch (Exception e) { - log.error("检查订单 {} 运输完成状态异常", orderId, e); - // 出现异常时保守处理,返回false - return false; - } - } - - /** - * 处理结算并等待支付完成 - */ - private void processSettlementAndWaitForPayment(OrderTransResult orderTrans, WbsHandle wbsHandle) { - try { - log.info("开始处理订单 {} 的结算流程", orderTrans.getId()); - - // TODO: 执行算账逻辑 - // 这里应该调用财务结算服务,计算费用并生成支付订单 - // calculateSettlement(orderTrans); - - // 模拟支付完成通知(实际应该通过支付回调或消息队列处理) - // 在实际生产环境中,应该: - // 1. 调用财务服务计算费用 - // 2. 生成支付订单 - // 3. 等待支付完成的通知(通过消息队列或回调) - // 4. 支付完成后调用 completePaymentAndOpenGate 方法 - - log.info("订单 {} 结算流程启动,等待支付完成", orderTrans.getId()); - - // TODO: 在实际支付完成后调用以下方法 - // completePaymentAndOpenGate(orderTrans, wbsHandle); - - // 临时实现:直接完成(用于测试) - simulatePaymentCompletion(orderTrans, wbsHandle); - - } catch (Exception e) { - log.error("处理订单 {} 结算异常", orderTrans.getId(), e); - handleBusinessException(wbsHandle, "结算处理失败", e); - } - } - - /** - * 模拟支付完成(测试用) - */ - private void simulatePaymentCompletion(OrderTransResult orderTrans, WbsHandle wbsHandle) { - // 在实际应用中,这里应该通过消息队列或定时任务等待支付完成 - // 这里只是为了演示流程,实际应该移除 - try { - // 模拟支付处理时间 - Thread.sleep(2000); - completePaymentAndOpenGate(orderTrans, wbsHandle); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - log.error("模拟支付完成被中断", e); - } - } - - /** - * 支付完成并开门 - */ - @Transactional(rollbackFor = Exception.class) - public void completePaymentAndOpenGate(OrderTransResult orderTrans, WbsHandle wbsHandle) { - synchronized (this) { - try { - // 更新运输状态为已完成 - OrderTransEntity transEntity = new OrderTransEntity(); - transEntity.setId(orderTrans.getId()); - transEntity.setTransStatus(TransStatus.YiWanCheng); - transEntity.setFinishTime(LocalDateTime.now()); - orderTransMapper.updateById(transEntity); - - // 检查该订单下所有运输记录是否都已完成 - boolean allTransCompleted = checkAllTransCompleted(orderTrans.getOrderId()); - - if (allTransCompleted) { - // 更新订单状态为已完成 - OrderEntity orderEntity = new OrderEntity(); - orderEntity.setId(orderTrans.getOrderId()); - orderEntity.setOrderStatus(OrderStatus.YiWanCheng); - orderEntity.setFinishTime(LocalDateTime.now()); - orderService.updateById(orderEntity); - log.info("订单 {} 所有运输记录已完成,订单状态更新为已完成", orderTrans.getOrderId()); - } else { - log.info("订单 {} 还有未完成的运输记录,暂不更新订单状态", orderTrans.getOrderId()); - } - - // 开门放行 - wbsHandle.playVoice(VoiceConstants.VOICE_PLEASE_PASS); - wbsHandle.open(); - - log.info("运输记录 {} 支付完成,开门放行", orderTrans.getId()); - - } catch (Exception e) { - handleBusinessException(wbsHandle, "完成订单 " + orderTrans.getId() + " 支付并开门异常", e); - } - } - } - - /** - * 处理业务异常 - */ - private void handleBusinessException(WbsHandle wbsHandle, String message, Exception e) { - log.error("业务处理异常: {}", message, e); - try { - wbsHandle.playVoice(VoiceConstants.VOICE_SYSTEM_ERROR); - } catch (Exception voiceException) { - log.error("播放语音失败", voiceException); + if (allCompleted) { + OrderEntity updateOrder = new OrderEntity(); + updateOrder.setId(orderId); + updateOrder.setOrderStatus(OrderStatus.YiWanCheng); + updateOrder.setFinishTime(LocalDateTime.now()); + orderService.updateById(updateOrder); + log.info("订单 {} 所有运输记录已完成,更新订单状态为已完成", orderId); } } } diff --git a/njzscloud-svr/src/main/java/com/njzscloud/dispose/finance/constant/ExpenseStrategy.java b/njzscloud-svr/src/main/java/com/njzscloud/dispose/finance/constant/ExpenseStrategy.java index 522491a..dd08a5d 100644 --- a/njzscloud-svr/src/main/java/com/njzscloud/dispose/finance/constant/ExpenseStrategy.java +++ b/njzscloud-svr/src/main/java/com/njzscloud/dispose/finance/constant/ExpenseStrategy.java @@ -17,13 +17,8 @@ public enum ExpenseStrategy implements DictStr { GuDing("GuDing", "固定"), - Che("Che", "车"), + DanJia("DanJia", "单价"); - Fang("Fang", "方"), - - JuLi("JuLi", "距离"), - - ; private final String val; private final String txt; diff --git a/njzscloud-svr/src/main/java/com/njzscloud/dispose/finance/constant/Unit.java b/njzscloud-svr/src/main/java/com/njzscloud/dispose/finance/constant/Unit.java new file mode 100644 index 0000000..3d9b515 --- /dev/null +++ b/njzscloud-svr/src/main/java/com/njzscloud/dispose/finance/constant/Unit.java @@ -0,0 +1,26 @@ +package com.njzscloud.dispose.finance.constant; + +import com.njzscloud.common.core.ienum.DictStr; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +/** + * 字典代码:expense_strategy + * 字典名称:计费策略 + * @author ljw + */ +@Getter +@RequiredArgsConstructor +public enum Unit implements DictStr { + Che("Che", "车"), + + Fang("Fang", "方"), + + GongLi("GongLi", "公里"), + + Dun("Dun", "吨"); + + private final String val; + + private final String txt; +} diff --git a/njzscloud-svr/src/main/java/com/njzscloud/dispose/finance/pojo/entity/ExpenseItemEntity.java b/njzscloud-svr/src/main/java/com/njzscloud/dispose/finance/pojo/entity/ExpenseItemEntity.java index 1dd8483..911facb 100644 --- a/njzscloud-svr/src/main/java/com/njzscloud/dispose/finance/pojo/entity/ExpenseItemEntity.java +++ b/njzscloud-svr/src/main/java/com/njzscloud/dispose/finance/pojo/entity/ExpenseItemEntity.java @@ -8,6 +8,7 @@ import com.njzscloud.common.mp.support.handler.j.JsonTypeHandler; import com.njzscloud.dispose.common.pojo.entity.BaseEntity; import com.njzscloud.dispose.finance.constant.ExpenseItemCategory; import com.njzscloud.dispose.finance.constant.ExpenseStrategy; +import com.njzscloud.dispose.finance.constant.Unit; import lombok.Getter; import lombok.Setter; import lombok.ToString; @@ -51,7 +52,7 @@ public class ExpenseItemEntity extends BaseEntity { /** * 计量单位;字典代码:unit */ - private String unit; + private Unit unit; /** * 税率 diff --git a/njzscloud-svr/src/main/java/com/njzscloud/dispose/finance/pojo/param/AddExpenseItemParam.java b/njzscloud-svr/src/main/java/com/njzscloud/dispose/finance/pojo/param/AddExpenseItemParam.java index a0874ec..d622811 100644 --- a/njzscloud-svr/src/main/java/com/njzscloud/dispose/finance/pojo/param/AddExpenseItemParam.java +++ b/njzscloud-svr/src/main/java/com/njzscloud/dispose/finance/pojo/param/AddExpenseItemParam.java @@ -2,6 +2,7 @@ package com.njzscloud.dispose.finance.pojo.param; import com.njzscloud.dispose.finance.constant.ExpenseItemCategory; import com.njzscloud.dispose.finance.constant.ExpenseStrategy; +import com.njzscloud.dispose.finance.constant.Unit; import lombok.Getter; import lombok.Setter; import lombok.ToString; @@ -33,7 +34,7 @@ public class AddExpenseItemParam { /** * 计量单位;字典代码:unit */ - private String unit; + private Unit unit; /** * 税率 diff --git a/njzscloud-svr/src/main/java/com/njzscloud/dispose/finance/pojo/param/ModifyExpenseItemParam.java b/njzscloud-svr/src/main/java/com/njzscloud/dispose/finance/pojo/param/ModifyExpenseItemParam.java index 8febd1f..9ea29c6 100644 --- a/njzscloud-svr/src/main/java/com/njzscloud/dispose/finance/pojo/param/ModifyExpenseItemParam.java +++ b/njzscloud-svr/src/main/java/com/njzscloud/dispose/finance/pojo/param/ModifyExpenseItemParam.java @@ -2,6 +2,7 @@ package com.njzscloud.dispose.finance.pojo.param; import com.njzscloud.dispose.finance.constant.ExpenseItemCategory; import com.njzscloud.dispose.finance.constant.ExpenseStrategy; +import com.njzscloud.dispose.finance.constant.Unit; import lombok.Getter; import lombok.Setter; import lombok.ToString; @@ -37,7 +38,7 @@ public class ModifyExpenseItemParam { /** * 计量单位;字典代码:unit */ - private String unit; + private Unit unit; /** * 税率 diff --git a/njzscloud-svr/src/main/java/com/njzscloud/dispose/finance/pojo/result/SearchExpenseItemResult.java b/njzscloud-svr/src/main/java/com/njzscloud/dispose/finance/pojo/result/SearchExpenseItemResult.java index 32f9597..e3d68ae 100644 --- a/njzscloud-svr/src/main/java/com/njzscloud/dispose/finance/pojo/result/SearchExpenseItemResult.java +++ b/njzscloud-svr/src/main/java/com/njzscloud/dispose/finance/pojo/result/SearchExpenseItemResult.java @@ -2,6 +2,7 @@ package com.njzscloud.dispose.finance.pojo.result; import com.njzscloud.dispose.finance.constant.ExpenseItemCategory; import com.njzscloud.dispose.finance.constant.ExpenseStrategy; +import com.njzscloud.dispose.finance.constant.Unit; import lombok.Getter; import lombok.Setter; import lombok.ToString; @@ -43,7 +44,7 @@ public class SearchExpenseItemResult { /** * 计量单位;字典代码:unit */ - private String unit; + private Unit unit; /** * 税率 diff --git a/njzscloud-svr/src/main/java/com/njzscloud/dispose/goods/pojo/param/AddGoodsParam.java b/njzscloud-svr/src/main/java/com/njzscloud/dispose/goods/pojo/param/AddGoodsParam.java index 02a9fbf..197d7d5 100644 --- a/njzscloud-svr/src/main/java/com/njzscloud/dispose/goods/pojo/param/AddGoodsParam.java +++ b/njzscloud-svr/src/main/java/com/njzscloud/dispose/goods/pojo/param/AddGoodsParam.java @@ -5,6 +5,7 @@ import com.njzscloud.common.core.ienum.DictKey; import com.njzscloud.dispose.finance.constant.ExpenseItemCategory; import com.njzscloud.dispose.finance.constant.ExpenseStrategy; import com.njzscloud.dispose.finance.constant.Payer; +import com.njzscloud.dispose.finance.constant.Unit; import com.njzscloud.dispose.finance.pojo.entity.ScopeStrategyConfig; import lombok.Getter; import lombok.Setter; @@ -94,7 +95,7 @@ public class AddGoodsParam { /** * 计量单位;字典代码:unit */ - private String unit; + private Unit unit; /** * 税率 diff --git a/njzscloud-svr/src/main/java/com/njzscloud/dispose/goods/pojo/param/ModifyGoodsParam.java b/njzscloud-svr/src/main/java/com/njzscloud/dispose/goods/pojo/param/ModifyGoodsParam.java index 4fe75b0..3f15dfe 100644 --- a/njzscloud-svr/src/main/java/com/njzscloud/dispose/goods/pojo/param/ModifyGoodsParam.java +++ b/njzscloud-svr/src/main/java/com/njzscloud/dispose/goods/pojo/param/ModifyGoodsParam.java @@ -3,6 +3,7 @@ package com.njzscloud.dispose.goods.pojo.param; import com.njzscloud.dispose.finance.constant.ExpenseItemCategory; import com.njzscloud.dispose.finance.constant.ExpenseStrategy; import com.njzscloud.dispose.finance.constant.Payer; +import com.njzscloud.dispose.finance.constant.Unit; import com.njzscloud.dispose.finance.pojo.entity.ScopeStrategyConfig; import lombok.Getter; import lombok.Setter; @@ -54,7 +55,7 @@ public class ModifyGoodsParam { /** * 计量单位;字典代码:unit */ - private String unit; + private Unit unit; /** * 排序 @@ -100,7 +101,7 @@ public class ModifyGoodsParam { /** * 计量单位;字典代码:unit */ - private String unit; + private Unit unit; /** * 税率 diff --git a/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/pojo/entity/InOrderEntity.java b/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/pojo/entity/InOrderEntity.java index 2c4e537..1dc34f7 100644 --- a/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/pojo/entity/InOrderEntity.java +++ b/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/pojo/entity/InOrderEntity.java @@ -1,6 +1,7 @@ package com.njzscloud.dispose.wh.pojo.entity; import com.baomidou.mybatisplus.annotation.*; +import com.njzscloud.dispose.finance.constant.Unit; import lombok.Getter; import lombok.Setter; import lombok.ToString; @@ -93,7 +94,7 @@ public class InOrderEntity { /** * 计量单位;字典代码:unit */ - private String unit; + private Unit unit; /** * 备注 diff --git a/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/pojo/entity/InventoryEntity.java b/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/pojo/entity/InventoryEntity.java index 7e9ced0..cad5f1d 100644 --- a/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/pojo/entity/InventoryEntity.java +++ b/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/pojo/entity/InventoryEntity.java @@ -1,6 +1,7 @@ package com.njzscloud.dispose.wh.pojo.entity; import com.baomidou.mybatisplus.annotation.*; +import com.njzscloud.dispose.finance.constant.Unit; import lombok.Getter; import lombok.Setter; import lombok.ToString; @@ -62,7 +63,7 @@ public class InventoryEntity { /** * 计量单位;字典代码:unit */ - private String unit; + private Unit unit; /** * 创建人 Id;sys_user.id diff --git a/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/pojo/entity/OutOrderEntity.java b/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/pojo/entity/OutOrderEntity.java index 5a9b7a3..db55fa2 100644 --- a/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/pojo/entity/OutOrderEntity.java +++ b/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/pojo/entity/OutOrderEntity.java @@ -1,6 +1,7 @@ package com.njzscloud.dispose.wh.pojo.entity; import com.baomidou.mybatisplus.annotation.*; +import com.njzscloud.dispose.finance.constant.Unit; import lombok.Getter; import lombok.Setter; import lombok.ToString; @@ -93,7 +94,7 @@ public class OutOrderEntity { /** * 计量单位;字典代码:unit */ - private String unit; + private Unit unit; /** * 备注 diff --git a/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/pojo/entity/PurchaseOrderEntity.java b/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/pojo/entity/PurchaseOrderEntity.java index 55c9d8f..c30a4b0 100644 --- a/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/pojo/entity/PurchaseOrderEntity.java +++ b/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/pojo/entity/PurchaseOrderEntity.java @@ -1,6 +1,7 @@ package com.njzscloud.dispose.wh.pojo.entity; import com.baomidou.mybatisplus.annotation.*; +import com.njzscloud.dispose.finance.constant.Unit; import com.njzscloud.dispose.wh.constant.PurchaseOrderStatus; import lombok.Getter; import lombok.Setter; @@ -96,7 +97,7 @@ public class PurchaseOrderEntity { /** * 计量单位;字典代码:unit */ - private String unit; + private Unit unit; /** * 总金额;单位:元 diff --git a/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/pojo/entity/SalesOrderEntity.java b/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/pojo/entity/SalesOrderEntity.java index 6206875..d3f4929 100644 --- a/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/pojo/entity/SalesOrderEntity.java +++ b/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/pojo/entity/SalesOrderEntity.java @@ -1,6 +1,7 @@ package com.njzscloud.dispose.wh.pojo.entity; import com.baomidou.mybatisplus.annotation.*; +import com.njzscloud.dispose.finance.constant.Unit; import com.njzscloud.dispose.wh.constant.SalesOrderStatus; import lombok.Getter; import lombok.Setter; @@ -96,7 +97,7 @@ public class SalesOrderEntity { /** * 计量单位;字典代码:unit */ - private String unit; + private Unit unit; /** * 总金额;单位:元 diff --git a/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/pojo/entity/WarehouseCheckDetailEntity.java b/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/pojo/entity/WarehouseCheckDetailEntity.java index 52baa3f..24c9033 100644 --- a/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/pojo/entity/WarehouseCheckDetailEntity.java +++ b/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/pojo/entity/WarehouseCheckDetailEntity.java @@ -1,6 +1,7 @@ package com.njzscloud.dispose.wh.pojo.entity; import com.baomidou.mybatisplus.annotation.*; +import com.njzscloud.dispose.finance.constant.Unit; import lombok.Getter; import lombok.Setter; import lombok.ToString; @@ -72,7 +73,7 @@ public class WarehouseCheckDetailEntity { /** * 计量单位;字典代码:unit */ - private String unit; + private Unit unit; /** * 处理建议 diff --git a/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/pojo/param/AddInOrderParam.java b/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/pojo/param/AddInOrderParam.java index f345d40..b207978 100644 --- a/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/pojo/param/AddInOrderParam.java +++ b/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/pojo/param/AddInOrderParam.java @@ -1,5 +1,6 @@ package com.njzscloud.dispose.wh.pojo.param; +import com.njzscloud.dispose.finance.constant.Unit; import lombok.Getter; import lombok.Setter; import lombok.ToString; @@ -74,7 +75,7 @@ public class AddInOrderParam { /** * 计量单位;字典代码:unit */ - private String unit; + private Unit unit; /** * 备注 diff --git a/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/pojo/param/AddInventoryParam.java b/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/pojo/param/AddInventoryParam.java index ede7cef..be838e1 100644 --- a/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/pojo/param/AddInventoryParam.java +++ b/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/pojo/param/AddInventoryParam.java @@ -1,5 +1,6 @@ package com.njzscloud.dispose.wh.pojo.param; +import com.njzscloud.dispose.finance.constant.Unit; import lombok.Getter; import lombok.Setter; import lombok.ToString; @@ -51,5 +52,5 @@ public class AddInventoryParam { /** * 计量单位;字典代码:unit */ - private String unit; + private Unit unit; } diff --git a/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/pojo/param/AddOutOrderParam.java b/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/pojo/param/AddOutOrderParam.java index aea947a..4b80d8a 100644 --- a/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/pojo/param/AddOutOrderParam.java +++ b/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/pojo/param/AddOutOrderParam.java @@ -1,5 +1,6 @@ package com.njzscloud.dispose.wh.pojo.param; +import com.njzscloud.dispose.finance.constant.Unit; import lombok.Getter; import lombok.Setter; import lombok.ToString; @@ -73,7 +74,7 @@ public class AddOutOrderParam { /** * 计量单位;字典代码:unit */ - private String unit; + private Unit unit; /** * 备注 diff --git a/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/pojo/param/AddSalesOrderParam.java b/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/pojo/param/AddSalesOrderParam.java index df90f79..c8b8f43 100644 --- a/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/pojo/param/AddSalesOrderParam.java +++ b/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/pojo/param/AddSalesOrderParam.java @@ -1,5 +1,6 @@ package com.njzscloud.dispose.wh.pojo.param; +import com.njzscloud.dispose.finance.constant.Unit; import com.njzscloud.dispose.wh.constant.SalesOrderStatus; import lombok.Getter; import lombok.Setter; @@ -87,7 +88,7 @@ public class AddSalesOrderParam { /** * 计量单位;字典代码:unit */ - private String unit; + private Unit unit; /** * 总金额;单位:元 diff --git a/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/pojo/param/AddWarehouseCheckDetailParam.java b/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/pojo/param/AddWarehouseCheckDetailParam.java index a877a35..a8355e4 100644 --- a/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/pojo/param/AddWarehouseCheckDetailParam.java +++ b/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/pojo/param/AddWarehouseCheckDetailParam.java @@ -1,5 +1,6 @@ package com.njzscloud.dispose.wh.pojo.param; +import com.njzscloud.dispose.finance.constant.Unit; import lombok.Getter; import lombok.Setter; import lombok.ToString; @@ -63,7 +64,7 @@ public class AddWarehouseCheckDetailParam { /** * 计量单位;字典代码:unit */ - private String unit; + private Unit unit; /** * 处理建议 diff --git a/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/pojo/result/SearchInOrderResult.java b/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/pojo/result/SearchInOrderResult.java index f467557..40f1362 100644 --- a/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/pojo/result/SearchInOrderResult.java +++ b/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/pojo/result/SearchInOrderResult.java @@ -2,6 +2,7 @@ package com.njzscloud.dispose.wh.pojo.result; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; +import com.njzscloud.dispose.finance.constant.Unit; import lombok.Getter; import lombok.Setter; import lombok.ToString; @@ -104,7 +105,7 @@ public class SearchInOrderResult { /** * 计量单位;字典代码:unit */ - private String unit; + private Unit unit; /** * 备注 diff --git a/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/pojo/result/SearchInventoryResult.java b/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/pojo/result/SearchInventoryResult.java index c6cfd29..a649575 100644 --- a/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/pojo/result/SearchInventoryResult.java +++ b/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/pojo/result/SearchInventoryResult.java @@ -2,6 +2,7 @@ package com.njzscloud.dispose.wh.pojo.result; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; +import com.njzscloud.dispose.finance.constant.Unit; import lombok.Getter; import lombok.Setter; import lombok.ToString; @@ -63,7 +64,7 @@ public class SearchInventoryResult { /** * 计量单位;字典代码:unit */ - private String unit; + private Unit unit; /** * 创建人 Id;sys_user.id diff --git a/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/pojo/result/SearchOutOrderResult.java b/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/pojo/result/SearchOutOrderResult.java index c3294a7..368cc35 100644 --- a/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/pojo/result/SearchOutOrderResult.java +++ b/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/pojo/result/SearchOutOrderResult.java @@ -2,6 +2,7 @@ package com.njzscloud.dispose.wh.pojo.result; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; +import com.njzscloud.dispose.finance.constant.Unit; import lombok.Getter; import lombok.Setter; import lombok.ToString; @@ -103,7 +104,7 @@ public class SearchOutOrderResult { /** * 计量单位;字典代码:unit */ - private String unit; + private Unit unit; /** * 备注 diff --git a/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/pojo/result/SearchWarehouseCheckDetailResult.java b/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/pojo/result/SearchWarehouseCheckDetailResult.java index 8162090..804c21f 100644 --- a/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/pojo/result/SearchWarehouseCheckDetailResult.java +++ b/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/pojo/result/SearchWarehouseCheckDetailResult.java @@ -2,6 +2,7 @@ package com.njzscloud.dispose.wh.pojo.result; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; +import com.njzscloud.dispose.finance.constant.Unit; import lombok.Getter; import lombok.Setter; import lombok.ToString; @@ -72,7 +73,7 @@ public class SearchWarehouseCheckDetailResult { /** * 计量单位;字典代码:unit */ - private String unit; + private Unit unit; /** * 处理建议 diff --git a/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/service/PurchaseOrderService.java b/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/service/PurchaseOrderService.java index e2bff18..8a03730 100644 --- a/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/service/PurchaseOrderService.java +++ b/njzscloud-svr/src/main/java/com/njzscloud/dispose/wh/service/PurchaseOrderService.java @@ -66,7 +66,7 @@ public class PurchaseOrderService extends ServiceImpl + @@ -82,6 +83,7 @@ cot.out_body_photo AS out_body_photo, cot.in_time AS in_time, cot.out_time AS out_time, + co.sn, co.trans_org_id AS trans_org_id, co.trans_customer_id AS trans_customer_id, co.assignment_trans_time AS assignment_trans_time,