Compare commits
No commits in common. "3bdb6185b6237b107ec62254ccd73153fc59e0f1" and "12754a7015ed92c04732aaba5b404e7015d031ca" have entirely different histories.
3bdb6185b6
...
12754a7015
|
|
@ -1,229 +0,0 @@
|
||||||
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<OrderPaymentRecordEntity> paymentRecords = orderPaymentRecordService.list(
|
|
||||||
Wrappers.<OrderPaymentRecordEntity>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<OrderPaymentRecordEntity> updatedRecords = orderPaymentRecordService.list(
|
|
||||||
Wrappers.<OrderPaymentRecordEntity>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;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -3,7 +3,6 @@ package com.njzscloud.dispose.cst.order.pojo.entity;
|
||||||
import com.baomidou.mybatisplus.annotation.*;
|
import com.baomidou.mybatisplus.annotation.*;
|
||||||
import com.njzscloud.dispose.cst.order.constant.OrderCategory;
|
import com.njzscloud.dispose.cst.order.constant.OrderCategory;
|
||||||
import com.njzscloud.dispose.cst.order.constant.OrderStatus;
|
import com.njzscloud.dispose.cst.order.constant.OrderStatus;
|
||||||
import com.njzscloud.dispose.finance.constant.Unit;
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
import lombok.ToString;
|
import lombok.ToString;
|
||||||
|
|
@ -132,7 +131,7 @@ public class OrderEntity {
|
||||||
/**
|
/**
|
||||||
* 计量单位;字典代码:unit
|
* 计量单位;字典代码:unit
|
||||||
*/
|
*/
|
||||||
private Unit unit;
|
private String unit;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 客户备注
|
* 客户备注
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,6 @@ import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
import com.njzscloud.dispose.finance.constant.ExpenseItemCategory;
|
import com.njzscloud.dispose.finance.constant.ExpenseItemCategory;
|
||||||
import com.njzscloud.dispose.finance.constant.ExpenseStrategy;
|
import com.njzscloud.dispose.finance.constant.ExpenseStrategy;
|
||||||
import com.njzscloud.dispose.finance.constant.Unit;
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
import lombok.ToString;
|
import lombok.ToString;
|
||||||
|
|
@ -70,7 +69,7 @@ public class OrderExpenseItemsEntity {
|
||||||
/**
|
/**
|
||||||
* 计量单位;字典代码:unit
|
* 计量单位;字典代码:unit
|
||||||
*/
|
*/
|
||||||
private Unit unit;
|
private String unit;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 单价;单位:元,弹性模式-->每档价格
|
* 单价;单位:元,弹性模式-->每档价格
|
||||||
|
|
|
||||||
|
|
@ -55,7 +55,7 @@ public class OrderPaymentRecordEntity {
|
||||||
/**
|
/**
|
||||||
* 量
|
* 量
|
||||||
*/
|
*/
|
||||||
private BigDecimal quantity;
|
private Integer quantity;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 支付状态,MianFei-->免费、WeiZhiFu-->未支付、YiZhiFu-->已支付、YiTuiKuan-->已退款
|
* 支付状态,MianFei-->免费、WeiZhiFu-->未支付、YiZhiFu-->已支付、YiTuiKuan-->已退款
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,6 @@ package com.njzscloud.dispose.cst.order.pojo.param;
|
||||||
|
|
||||||
import com.njzscloud.dispose.cst.order.constant.OrderCategory;
|
import com.njzscloud.dispose.cst.order.constant.OrderCategory;
|
||||||
import com.njzscloud.dispose.cst.order.constant.OrderStatus;
|
import com.njzscloud.dispose.cst.order.constant.OrderStatus;
|
||||||
import com.njzscloud.dispose.finance.constant.Unit;
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
|
@ -99,7 +98,7 @@ public class CreateOrderParam {
|
||||||
/**
|
/**
|
||||||
* 计量单位;字典代码:unit
|
* 计量单位;字典代码:unit
|
||||||
*/
|
*/
|
||||||
private Unit unit;
|
private String unit;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 客户备注
|
* 客户备注
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,6 @@ import com.njzscloud.dispose.cst.order.constant.CheckStatus;
|
||||||
import com.njzscloud.dispose.cst.order.constant.OrderCategory;
|
import com.njzscloud.dispose.cst.order.constant.OrderCategory;
|
||||||
import com.njzscloud.dispose.cst.order.constant.OrderStatus;
|
import com.njzscloud.dispose.cst.order.constant.OrderStatus;
|
||||||
import com.njzscloud.dispose.cst.order.constant.TransStatus;
|
import com.njzscloud.dispose.cst.order.constant.TransStatus;
|
||||||
import com.njzscloud.dispose.finance.constant.Unit;
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
|
@ -178,11 +177,6 @@ public class OrderTransResult {
|
||||||
*/
|
*/
|
||||||
private LocalDateTime outTime;
|
private LocalDateTime outTime;
|
||||||
|
|
||||||
/**
|
|
||||||
* 订单号
|
|
||||||
*/
|
|
||||||
private String sn;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 运输组织 Id;cst_org.id
|
* 运输组织 Id;cst_org.id
|
||||||
*/
|
*/
|
||||||
|
|
@ -251,7 +245,7 @@ public class OrderTransResult {
|
||||||
/**
|
/**
|
||||||
* 单位
|
* 单位
|
||||||
*/
|
*/
|
||||||
private Unit unit;
|
private String unit;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,28 +9,22 @@ import com.njzscloud.common.mp.support.PageParam;
|
||||||
import com.njzscloud.common.mp.support.PageResult;
|
import com.njzscloud.common.mp.support.PageResult;
|
||||||
import com.njzscloud.common.security.util.SecurityUtil;
|
import com.njzscloud.common.security.util.SecurityUtil;
|
||||||
import com.njzscloud.common.sn.support.SnUtil;
|
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.mapper.CustomerMapper;
|
||||||
import com.njzscloud.dispose.cst.customer.pojo.entity.CustomerEntity;
|
import com.njzscloud.dispose.cst.customer.pojo.entity.CustomerEntity;
|
||||||
import com.njzscloud.dispose.cst.driver.mapper.DriverMapper;
|
import com.njzscloud.dispose.cst.driver.mapper.DriverMapper;
|
||||||
import com.njzscloud.dispose.cst.driver.pojo.entity.DriverEntity;
|
import com.njzscloud.dispose.cst.driver.pojo.entity.DriverEntity;
|
||||||
import com.njzscloud.dispose.cst.order.constant.*;
|
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.OrderMapper;
|
||||||
import com.njzscloud.dispose.cst.order.mapper.OrderTransMapper;
|
import com.njzscloud.dispose.cst.order.mapper.OrderTransMapper;
|
||||||
import com.njzscloud.dispose.cst.order.pojo.entity.*;
|
import com.njzscloud.dispose.cst.order.pojo.entity.*;
|
||||||
import com.njzscloud.dispose.cst.order.pojo.param.*;
|
import com.njzscloud.dispose.cst.order.pojo.param.*;
|
||||||
import com.njzscloud.dispose.cst.order.pojo.result.OrderTransResult;
|
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.mapper.TruckMapper;
|
||||||
import com.njzscloud.dispose.cst.truck.pojo.entity.TruckEntity;
|
import com.njzscloud.dispose.cst.truck.pojo.entity.TruckEntity;
|
||||||
import com.njzscloud.dispose.finance.constant.ExpenseItemCategory;
|
import com.njzscloud.dispose.finance.constant.ExpenseStrategy;
|
||||||
import com.njzscloud.dispose.finance.mapper.MoneyAccountMapper;
|
import com.njzscloud.dispose.finance.mapper.MoneyAccountMapper;
|
||||||
import com.njzscloud.dispose.finance.pojo.entity.ExpenseItemEntity;
|
import com.njzscloud.dispose.finance.pojo.entity.ExpenseItemEntity;
|
||||||
import com.njzscloud.dispose.finance.pojo.entity.MoneyAccountEntity;
|
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.finance.service.ExpenseItemService;
|
||||||
import com.njzscloud.dispose.sys.auth.pojo.result.MyResult;
|
import com.njzscloud.dispose.sys.auth.pojo.result.MyResult;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
|
@ -39,13 +33,10 @@ import org.apache.commons.compress.utils.Lists;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
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;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 收/销订单
|
* 收/销订单
|
||||||
|
|
@ -66,8 +57,6 @@ public class OrderService extends ServiceImpl<OrderMapper, OrderEntity> {
|
||||||
private final OrderExpenseItemsService orderExpenseItemsService;
|
private final OrderExpenseItemsService orderExpenseItemsService;
|
||||||
private final OrderPaymentRecordService orderPaymentRecordService;
|
private final OrderPaymentRecordService orderPaymentRecordService;
|
||||||
private final MoneyAccountMapper moneyAccountMapper;
|
private final MoneyAccountMapper moneyAccountMapper;
|
||||||
private final StationMapper stationMapper;
|
|
||||||
private final PaymentRecordHelper paymentRecordHelper;
|
|
||||||
|
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void add(CreateOrderParam param) {
|
public void add(CreateOrderParam param) {
|
||||||
|
|
@ -178,21 +167,6 @@ public class OrderService extends ServiceImpl<OrderMapper, OrderEntity> {
|
||||||
Assert.isNull(result.getDriverId(), () -> Exceptions.clierr("当前订单已分配司机,无需重复分配"));
|
Assert.isNull(result.getDriverId(), () -> Exceptions.clierr("当前订单已分配司机,无需重复分配"));
|
||||||
Assert.isTrue(TransStatus.DaiPaiDan.equals(result.getTransStatus()), () -> Exceptions.clierr("当前订单状态,无法分配司机"));
|
Assert.isTrue(TransStatus.DaiPaiDan.equals(result.getTransStatus()), () -> Exceptions.clierr("当前订单状态,无法分配司机"));
|
||||||
|
|
||||||
// 获取订单的所有运输记录
|
|
||||||
List<OrderPaymentRecordEntity> recordList = orderPaymentRecordService.list(Wrappers.<OrderPaymentRecordEntity>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());
|
DriverEntity driver = driverMapper.selectById(driverParam.getDriverId());
|
||||||
Assert.notNull(driver, () -> Exceptions.clierr("司机不存在"));
|
Assert.notNull(driver, () -> Exceptions.clierr("司机不存在"));
|
||||||
|
|
||||||
|
|
@ -365,27 +339,36 @@ public class OrderService extends ServiceImpl<OrderMapper, OrderEntity> {
|
||||||
transEntity.setOutTime(LocalDateTime.now());
|
transEntity.setOutTime(LocalDateTime.now());
|
||||||
orderTransMapper.updateById(transEntity);
|
orderTransMapper.updateById(transEntity);
|
||||||
|
|
||||||
// 更新付费记录的量,计算结算金额并支付
|
// 更新付费记录的量
|
||||||
boolean allCompleted = paymentRecordHelper.updatePaymentRecordQuantity(
|
this.updatePaymentRecordQuantity(transEntity.getId(), transEntity.getSettleWeight());
|
||||||
transEntity.getId(), transEntity.getSettleWeight(), transEntity.getTransDistance(),
|
|
||||||
result.getSn(), result.getTrainNum());
|
|
||||||
|
|
||||||
// 如果该运输记录下所有付费记录都已完成,更新运输状态为已完成
|
|
||||||
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());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 检查订单下所有运输记录是否都完成
|
/**
|
||||||
this.checkAndUpdateOrderStatus(result.getId());
|
* 更新付费记录的量
|
||||||
|
*
|
||||||
|
* @param transId 运输记录ID
|
||||||
|
*/
|
||||||
|
private void updatePaymentRecordQuantity(Long transId, Integer settleWeight) {
|
||||||
|
// 1. 通过运输信息ID查询付费记录
|
||||||
|
List<OrderPaymentRecordEntity> paymentRecords = orderPaymentRecordService.list(Wrappers.<OrderPaymentRecordEntity>lambdaQuery()
|
||||||
|
.eq(OrderPaymentRecordEntity::getTransId, transId));
|
||||||
|
|
||||||
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -399,30 +382,6 @@ public class OrderService extends ServiceImpl<OrderMapper, OrderEntity> {
|
||||||
truckMapper.updateById(truck);
|
truckMapper.updateById(truck);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 检查订单下所有运输记录是否都完成,如果都完成则更新订单状态
|
|
||||||
*
|
|
||||||
* @param orderId 订单ID
|
|
||||||
*/
|
|
||||||
private void checkAndUpdateOrderStatus(Long orderId) {
|
|
||||||
List<OrderTransEntity> transList = orderTransMapper.selectList(
|
|
||||||
Wrappers.<OrderTransEntity>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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 生成订单号
|
* 生成订单号
|
||||||
*
|
*
|
||||||
|
|
@ -442,71 +401,61 @@ public class OrderService extends ServiceImpl<OrderMapper, OrderEntity> {
|
||||||
* @param orderEntity 订单信息
|
* @param orderEntity 订单信息
|
||||||
*/
|
*/
|
||||||
public void createOrderExpenseItems(OrderEntity orderEntity) {
|
public void createOrderExpenseItems(OrderEntity orderEntity) {
|
||||||
// 组织ids集合
|
|
||||||
List<Long> orgIds = Lists.newArrayList();
|
|
||||||
Long transOrgId = orderEntity.getTransOrgId();
|
|
||||||
orgIds.add(transOrgId);
|
|
||||||
CustomerEntity customerEntity = customerMapper.selectOne(Wrappers.<CustomerEntity>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<ExpenseItemEntity> itemEntityList = expenseItemService.list(Wrappers.<ExpenseItemEntity>lambdaQuery()
|
List<ExpenseItemEntity> itemEntityList = expenseItemService.list(Wrappers.<ExpenseItemEntity>lambdaQuery()
|
||||||
.in(ExpenseItemEntity::getOrgId, orgIds)
|
|
||||||
.eq(ExpenseItemEntity::getCanuse, Boolean.TRUE)
|
.eq(ExpenseItemEntity::getCanuse, Boolean.TRUE)
|
||||||
.eq(ExpenseItemEntity::getDeleted, Boolean.FALSE));
|
.eq(ExpenseItemEntity::getDeleted, Boolean.FALSE));
|
||||||
|
Long transOrgId = orderEntity.getTransOrgId();
|
||||||
Long goodsId = orderEntity.getGoodsId();
|
Long goodsId = orderEntity.getGoodsId();
|
||||||
// 1. 查找产品付费项(goodsId + station.getOrgId() + ChanPin,只会匹配到一个)
|
Long stationId = orderEntity.getStationId();
|
||||||
ExpenseItemEntity firstGoodsItem = itemEntityList.stream()
|
List<ExpenseItemEntity> goodsItems = itemEntityList.stream().filter(item ->
|
||||||
.filter(item -> goodsId.equals(item.getGoodsId())
|
item.getGoodsId().equals(goodsId)).toList();
|
||||||
&& station.getOrgId().equals(item.getOrgId())
|
|
||||||
&& ExpenseItemCategory.ChanPin.equals(item.getExpenseItemCategory()))
|
|
||||||
.findFirst()
|
|
||||||
.orElse(null);
|
|
||||||
|
|
||||||
// 2. 查找运费付费项(YunFei + transOrgId,可能有多条)
|
OrderExpenseItemsEntity goodsOrderItem = null;
|
||||||
List<ExpenseItemEntity> freightItems = itemEntityList.stream()
|
if (!goodsItems.isEmpty()) {
|
||||||
.filter(item -> transOrgId.equals(item.getOrgId())
|
goodsOrderItem = BeanUtil.copyProperties(goodsItems.getFirst(), OrderExpenseItemsEntity.class)
|
||||||
&& ExpenseItemCategory.YunFei.equals(item.getExpenseItemCategory()))
|
.setOrderId(orderEntity.getId())
|
||||||
.toList();
|
.setOriginExpenseItemsId(goodsItems.getFirst().getId());
|
||||||
|
}
|
||||||
|
|
||||||
// 3. 过滤其他付费项(排除产品、运费)
|
|
||||||
List<OrderExpenseItemsEntity> extraItems = itemEntityList.stream()
|
List<OrderExpenseItemsEntity> extraItems = itemEntityList.stream()
|
||||||
.filter(cfg -> !ExpenseItemCategory.ChanPin.equals(cfg.getExpenseItemCategory())
|
.filter(cfg -> {
|
||||||
&& !ExpenseItemCategory.YunFei.equals(cfg.getExpenseItemCategory()))
|
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)
|
||||||
.map(cfg -> {
|
.map(cfg -> {
|
||||||
OrderExpenseItemsEntity entity = BeanUtil.copyProperties(cfg, OrderExpenseItemsEntity.class);
|
OrderExpenseItemsEntity entity = BeanUtil.copyProperties(cfg, OrderExpenseItemsEntity.class);
|
||||||
entity.setOrderId(orderEntity.getId());
|
entity.setOrderId(orderEntity.getId());
|
||||||
entity.setOriginExpenseItemsId(cfg.getId());
|
entity.setOriginExpenseItemsId(cfg.getId());
|
||||||
return entity;
|
return entity;
|
||||||
})
|
})
|
||||||
.toList();
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
// 第四步:合并集合并计算金额,然后批量落库
|
// 第三步:合并集合并计算金额,然后批量落库
|
||||||
List<OrderExpenseItemsEntity> allItems = Lists.newArrayList();
|
if (goodsOrderItem != null) {
|
||||||
if (firstGoodsItem != null) {
|
extraItems.addFirst(goodsOrderItem);
|
||||||
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 (allItems.isEmpty()) {
|
if (extraItems.isEmpty()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 批量保存付费项
|
// 批量保存付费项
|
||||||
orderExpenseItemsService.saveBatch(allItems);
|
orderExpenseItemsService.saveBatch(extraItems);
|
||||||
|
|
||||||
// 获取订单的所有运输记录
|
// 获取订单的所有运输记录
|
||||||
List<OrderTransEntity> transList = orderTransMapper.selectList(Wrappers.<OrderTransEntity>lambdaQuery()
|
List<OrderTransEntity> transList = orderTransMapper.selectList(Wrappers.<OrderTransEntity>lambdaQuery()
|
||||||
|
|
@ -514,7 +463,7 @@ public class OrderService extends ServiceImpl<OrderMapper, OrderEntity> {
|
||||||
|
|
||||||
List<OrderPaymentRecordEntity> recordList = Lists.newArrayList();
|
List<OrderPaymentRecordEntity> recordList = Lists.newArrayList();
|
||||||
for (OrderTransEntity transEntity : transList) {
|
for (OrderTransEntity transEntity : transList) {
|
||||||
List<OrderPaymentRecordEntity> paymentRecords = allItems.stream()
|
List<OrderPaymentRecordEntity> paymentRecords = extraItems.stream()
|
||||||
.map(item -> {
|
.map(item -> {
|
||||||
OrderPaymentRecordEntity record = new OrderPaymentRecordEntity()
|
OrderPaymentRecordEntity record = new OrderPaymentRecordEntity()
|
||||||
.setOrderId(orderEntity.getId())
|
.setOrderId(orderEntity.getId())
|
||||||
|
|
@ -524,6 +473,11 @@ public class OrderService extends ServiceImpl<OrderMapper, OrderEntity> {
|
||||||
|
|
||||||
// 根据归属字段获取结算方式和账户信息
|
// 根据归属字段获取结算方式和账户信息
|
||||||
Long customerId = item.getCustomerId();
|
Long customerId = item.getCustomerId();
|
||||||
|
if (customerId == null) {
|
||||||
|
// 如果没有归属客户,尝试从订单获取
|
||||||
|
customerId = orderEntity.getCustomerId();
|
||||||
|
}
|
||||||
|
|
||||||
CustomerEntity customer = customerMapper.selectOne(Wrappers.<CustomerEntity>lambdaQuery()
|
CustomerEntity customer = customerMapper.selectOne(Wrappers.<CustomerEntity>lambdaQuery()
|
||||||
.eq(CustomerEntity::getId, customerId));
|
.eq(CustomerEntity::getId, customerId));
|
||||||
if (customer != null && customer.getSettlementWay() != null) {
|
if (customer != null && customer.getSettlementWay() != null) {
|
||||||
|
|
@ -543,6 +497,7 @@ public class OrderService extends ServiceImpl<OrderMapper, OrderEntity> {
|
||||||
} else {
|
} else {
|
||||||
throw Exceptions.clierr("付款人资金账户不存在");
|
throw Exceptions.clierr("付款人资金账户不存在");
|
||||||
}
|
}
|
||||||
|
|
||||||
return record;
|
return record;
|
||||||
})
|
})
|
||||||
.toList();
|
.toList();
|
||||||
|
|
|
||||||
|
|
@ -4,15 +4,16 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
import com.njzscloud.common.core.tuple.Tuple2;
|
import com.njzscloud.common.core.tuple.Tuple2;
|
||||||
import com.njzscloud.common.oss.util.AliOSS;
|
import com.njzscloud.common.oss.util.AliOSS;
|
||||||
import com.njzscloud.dispose.cst.order.constant.*;
|
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.mapper.OrderTransMapper;
|
||||||
import com.njzscloud.dispose.cst.order.pojo.entity.OrderEntity;
|
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.entity.OrderTransEntity;
|
||||||
import com.njzscloud.dispose.cst.order.pojo.result.OrderTransResult;
|
import com.njzscloud.dispose.cst.order.pojo.result.OrderTransResult;
|
||||||
import com.njzscloud.dispose.dev.DiscoverTruckMsg;
|
import com.njzscloud.dispose.dev.DiscoverTruckMsg;
|
||||||
import com.njzscloud.dispose.dev.ObtainTruckDataResultMsg;
|
import com.njzscloud.dispose.dev.ObtainTruckDataResultMsg;
|
||||||
import com.njzscloud.dispose.dev.WbsHandle;
|
import com.njzscloud.dispose.dev.WbsHandle;
|
||||||
|
import com.njzscloud.dispose.finance.constant.ExpenseStrategy;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
@ -36,9 +37,9 @@ import java.util.List;
|
||||||
public class TruckWeighingBusinessService {
|
public class TruckWeighingBusinessService {
|
||||||
|
|
||||||
private final OrderService orderService;
|
private final OrderService orderService;
|
||||||
private final OrderMapper orderMapper;
|
|
||||||
private final OrderTransMapper orderTransMapper;
|
private final OrderTransMapper orderTransMapper;
|
||||||
private final PaymentRecordHelper paymentRecordHelper;
|
private final OrderPaymentRecordService orderPaymentRecordService;
|
||||||
|
private final OrderExpenseItemsService orderExpenseItemsService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 请求数据 - 处理车辆识别
|
* 请求数据 - 处理车辆识别
|
||||||
|
|
@ -172,9 +173,11 @@ public class TruckWeighingBusinessService {
|
||||||
wbsHandle.playVoice(VoiceConstants.VOICE_PLEASE_PASS);
|
wbsHandle.playVoice(VoiceConstants.VOICE_PLEASE_PASS);
|
||||||
wbsHandle.open();
|
wbsHandle.open();
|
||||||
} else if (TransStatus.YiJinChang.equals(orderTrans.getTransStatus())) {
|
} else if (TransStatus.YiJinChang.equals(orderTrans.getTransStatus())) {
|
||||||
// 出场:设置相应重量并计算净重、账目,支付完成后开门
|
// 出场:设置相应重量并计算净重、账目,等待支付完成后再开门
|
||||||
handleTruckLeavingData(orderTrans, weight, image, wbsHandle);
|
handleTruckLeavingData(orderTrans, weight, image);
|
||||||
wbsHandle.playVoice(VoiceConstants.VOICE_WEIGH_COMPLETE);
|
wbsHandle.playVoice(VoiceConstants.VOICE_WEIGH_COMPLETE);
|
||||||
|
// TODO: 触发算账流程,支付完成后调用 completePaymentAndOpenGate 方法开门
|
||||||
|
processSettlementAndWaitForPayment(orderTrans, wbsHandle);
|
||||||
} else {
|
} else {
|
||||||
log.warn("运输订单 {} 状态 {} 不支持称重操作", orderTrans.getId(), orderTrans.getTransStatus());
|
log.warn("运输订单 {} 状态 {} 不支持称重操作", orderTrans.getId(), orderTrans.getTransStatus());
|
||||||
wbsHandle.playVoice(VoiceConstants.VOICE_STATUS_ERROR);
|
wbsHandle.playVoice(VoiceConstants.VOICE_STATUS_ERROR);
|
||||||
|
|
@ -206,7 +209,7 @@ public class TruckWeighingBusinessService {
|
||||||
/**
|
/**
|
||||||
* 处理出场称重数据
|
* 处理出场称重数据
|
||||||
*/
|
*/
|
||||||
private void handleTruckLeavingData(OrderTransResult orderTrans, Integer weight, String bodyPhoto, WbsHandle wbsHandle) {
|
private void handleTruckLeavingData(OrderTransResult orderTrans, Integer weight, String bodyPhoto) {
|
||||||
OrderTransEntity transEntity = new OrderTransEntity();
|
OrderTransEntity transEntity = new OrderTransEntity();
|
||||||
transEntity.setId(orderTrans.getId());
|
transEntity.setId(orderTrans.getId());
|
||||||
transEntity.setTransStatus(TransStatus.YiChuChang);
|
transEntity.setTransStatus(TransStatus.YiChuChang);
|
||||||
|
|
@ -229,28 +232,42 @@ public class TruckWeighingBusinessService {
|
||||||
log.info("车辆出场称重完成,订单ID: {}, 重量: {}kg, 净重: {}kg",
|
log.info("车辆出场称重完成,订单ID: {}, 重量: {}kg, 净重: {}kg",
|
||||||
orderTrans.getId(), weight, settleWeight);
|
orderTrans.getId(), weight, settleWeight);
|
||||||
|
|
||||||
// 更新付费记录的量,计算结算金额并支付
|
// 更新付费记录的量
|
||||||
String orderSn = orderMapper.selectById(orderTrans.getOrderId()).getSn();
|
this.updatePaymentRecordQuantity(orderTrans.getId(), settleWeight);
|
||||||
boolean allCompleted = paymentRecordHelper.updatePaymentRecordQuantity(
|
|
||||||
orderTrans.getId(), settleWeight, orderTrans.getTransDistance(),
|
|
||||||
orderSn, orderTrans.getTrainNum());
|
|
||||||
|
|
||||||
// 如果该运输记录下所有付费记录都已完成,更新运输状态为已完成并开门
|
|
||||||
if (allCompleted) {
|
|
||||||
OrderTransEntity updateTrans = new OrderTransEntity();
|
|
||||||
updateTrans.setId(orderTrans.getId());
|
|
||||||
updateTrans.setTransStatus(TransStatus.YiWanCheng);
|
|
||||||
updateTrans.setFinishTime(LocalDateTime.now());
|
|
||||||
orderTransMapper.updateById(updateTrans);
|
|
||||||
|
|
||||||
// 检查订单下所有运输记录是否都完成
|
|
||||||
this.checkAndUpdateOrderStatus(orderTrans.getOrderId());
|
|
||||||
|
|
||||||
// 开门放行
|
|
||||||
wbsHandle.playVoice(VoiceConstants.VOICE_PLEASE_PASS);
|
|
||||||
wbsHandle.open();
|
|
||||||
log.info("运输记录 {} 支付完成,开门放行", orderTrans.getId());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新付费记录的量
|
||||||
|
*
|
||||||
|
* @param transId 运输记录ID
|
||||||
|
* @param settleWeight 净重
|
||||||
|
*/
|
||||||
|
private void updatePaymentRecordQuantity(Long transId, Integer settleWeight) {
|
||||||
|
// 1. 通过运输信息ID查询付费记录
|
||||||
|
List<OrderPaymentRecordEntity> paymentRecords = orderPaymentRecordService.list(Wrappers.<OrderPaymentRecordEntity>lambdaQuery()
|
||||||
|
.eq(OrderPaymentRecordEntity::getTransId, transId));
|
||||||
|
|
||||||
|
if (paymentRecords.isEmpty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -378,26 +395,141 @@ public class TruckWeighingBusinessService {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 检查订单下所有运输记录是否都完成,如果都完成则更新订单状态
|
* 检查订单下所有运输记录是否都已完成
|
||||||
*
|
|
||||||
* @param orderId 订单ID
|
|
||||||
*/
|
*/
|
||||||
private void checkAndUpdateOrderStatus(Long orderId) {
|
private boolean checkAllTransCompleted(Long orderId) {
|
||||||
|
try {
|
||||||
|
// 查询该订单下的所有运输记录
|
||||||
List<OrderTransEntity> transList = orderTransMapper.selectList(
|
List<OrderTransEntity> transList = orderTransMapper.selectList(
|
||||||
Wrappers.<OrderTransEntity>lambdaQuery()
|
Wrappers.<OrderTransEntity>lambdaQuery()
|
||||||
.eq(OrderTransEntity::getOrderId, orderId)
|
.eq(OrderTransEntity::getOrderId, orderId)
|
||||||
.ne(OrderTransEntity::getTransStatus, TransStatus.YiQuXiao));
|
);
|
||||||
|
|
||||||
|
if (transList.isEmpty()) {
|
||||||
|
log.warn("订单 {} 下没有找到运输记录", orderId);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 检查所有运输记录的状态是否都为已完成
|
||||||
boolean allCompleted = transList.stream()
|
boolean allCompleted = transList.stream()
|
||||||
.allMatch(t -> TransStatus.YiWanCheng.equals(t.getTransStatus()));
|
.allMatch(trans -> TransStatus.YiWanCheng.equals(trans.getTransStatus()));
|
||||||
|
|
||||||
if (allCompleted) {
|
if (allCompleted) {
|
||||||
OrderEntity updateOrder = new OrderEntity();
|
log.info("订单 {} 下所有 {} 条运输记录都已完成", orderId, transList.size());
|
||||||
updateOrder.setId(orderId);
|
} else {
|
||||||
updateOrder.setOrderStatus(OrderStatus.YiWanCheng);
|
long completedCount = transList.stream()
|
||||||
updateOrder.setFinishTime(LocalDateTime.now());
|
.filter(trans -> TransStatus.YiWanCheng.equals(trans.getTransStatus()))
|
||||||
orderService.updateById(updateOrder);
|
.count();
|
||||||
log.info("订单 {} 所有运输记录已完成,更新订单状态为已完成", orderId);
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,8 +17,13 @@ public enum ExpenseStrategy implements DictStr {
|
||||||
|
|
||||||
GuDing("GuDing", "固定"),
|
GuDing("GuDing", "固定"),
|
||||||
|
|
||||||
DanJia("DanJia", "单价");
|
Che("Che", "车"),
|
||||||
|
|
||||||
|
Fang("Fang", "方"),
|
||||||
|
|
||||||
|
JuLi("JuLi", "距离"),
|
||||||
|
|
||||||
|
;
|
||||||
private final String val;
|
private final String val;
|
||||||
|
|
||||||
private final String txt;
|
private final String txt;
|
||||||
|
|
|
||||||
|
|
@ -1,26 +0,0 @@
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
@ -8,7 +8,6 @@ import com.njzscloud.common.mp.support.handler.j.JsonTypeHandler;
|
||||||
import com.njzscloud.dispose.common.pojo.entity.BaseEntity;
|
import com.njzscloud.dispose.common.pojo.entity.BaseEntity;
|
||||||
import com.njzscloud.dispose.finance.constant.ExpenseItemCategory;
|
import com.njzscloud.dispose.finance.constant.ExpenseItemCategory;
|
||||||
import com.njzscloud.dispose.finance.constant.ExpenseStrategy;
|
import com.njzscloud.dispose.finance.constant.ExpenseStrategy;
|
||||||
import com.njzscloud.dispose.finance.constant.Unit;
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
import lombok.ToString;
|
import lombok.ToString;
|
||||||
|
|
@ -52,7 +51,7 @@ public class ExpenseItemEntity extends BaseEntity {
|
||||||
/**
|
/**
|
||||||
* 计量单位;字典代码:unit
|
* 计量单位;字典代码:unit
|
||||||
*/
|
*/
|
||||||
private Unit unit;
|
private String unit;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 税率
|
* 税率
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,6 @@ package com.njzscloud.dispose.finance.pojo.param;
|
||||||
|
|
||||||
import com.njzscloud.dispose.finance.constant.ExpenseItemCategory;
|
import com.njzscloud.dispose.finance.constant.ExpenseItemCategory;
|
||||||
import com.njzscloud.dispose.finance.constant.ExpenseStrategy;
|
import com.njzscloud.dispose.finance.constant.ExpenseStrategy;
|
||||||
import com.njzscloud.dispose.finance.constant.Unit;
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
import lombok.ToString;
|
import lombok.ToString;
|
||||||
|
|
@ -34,7 +33,7 @@ public class AddExpenseItemParam {
|
||||||
/**
|
/**
|
||||||
* 计量单位;字典代码:unit
|
* 计量单位;字典代码:unit
|
||||||
*/
|
*/
|
||||||
private Unit unit;
|
private String unit;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 税率
|
* 税率
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,6 @@ package com.njzscloud.dispose.finance.pojo.param;
|
||||||
|
|
||||||
import com.njzscloud.dispose.finance.constant.ExpenseItemCategory;
|
import com.njzscloud.dispose.finance.constant.ExpenseItemCategory;
|
||||||
import com.njzscloud.dispose.finance.constant.ExpenseStrategy;
|
import com.njzscloud.dispose.finance.constant.ExpenseStrategy;
|
||||||
import com.njzscloud.dispose.finance.constant.Unit;
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
import lombok.ToString;
|
import lombok.ToString;
|
||||||
|
|
@ -38,7 +37,7 @@ public class ModifyExpenseItemParam {
|
||||||
/**
|
/**
|
||||||
* 计量单位;字典代码:unit
|
* 计量单位;字典代码:unit
|
||||||
*/
|
*/
|
||||||
private Unit unit;
|
private String unit;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 税率
|
* 税率
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,6 @@ package com.njzscloud.dispose.finance.pojo.result;
|
||||||
|
|
||||||
import com.njzscloud.dispose.finance.constant.ExpenseItemCategory;
|
import com.njzscloud.dispose.finance.constant.ExpenseItemCategory;
|
||||||
import com.njzscloud.dispose.finance.constant.ExpenseStrategy;
|
import com.njzscloud.dispose.finance.constant.ExpenseStrategy;
|
||||||
import com.njzscloud.dispose.finance.constant.Unit;
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
import lombok.ToString;
|
import lombok.ToString;
|
||||||
|
|
@ -44,7 +43,7 @@ public class SearchExpenseItemResult {
|
||||||
/**
|
/**
|
||||||
* 计量单位;字典代码:unit
|
* 计量单位;字典代码:unit
|
||||||
*/
|
*/
|
||||||
private Unit unit;
|
private String unit;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 税率
|
* 税率
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,6 @@ import com.njzscloud.common.core.ienum.DictKey;
|
||||||
import com.njzscloud.dispose.finance.constant.ExpenseItemCategory;
|
import com.njzscloud.dispose.finance.constant.ExpenseItemCategory;
|
||||||
import com.njzscloud.dispose.finance.constant.ExpenseStrategy;
|
import com.njzscloud.dispose.finance.constant.ExpenseStrategy;
|
||||||
import com.njzscloud.dispose.finance.constant.Payer;
|
import com.njzscloud.dispose.finance.constant.Payer;
|
||||||
import com.njzscloud.dispose.finance.constant.Unit;
|
|
||||||
import com.njzscloud.dispose.finance.pojo.entity.ScopeStrategyConfig;
|
import com.njzscloud.dispose.finance.pojo.entity.ScopeStrategyConfig;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
|
|
@ -95,7 +94,7 @@ public class AddGoodsParam {
|
||||||
/**
|
/**
|
||||||
* 计量单位;字典代码:unit
|
* 计量单位;字典代码:unit
|
||||||
*/
|
*/
|
||||||
private Unit unit;
|
private String unit;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 税率
|
* 税率
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,6 @@ package com.njzscloud.dispose.goods.pojo.param;
|
||||||
import com.njzscloud.dispose.finance.constant.ExpenseItemCategory;
|
import com.njzscloud.dispose.finance.constant.ExpenseItemCategory;
|
||||||
import com.njzscloud.dispose.finance.constant.ExpenseStrategy;
|
import com.njzscloud.dispose.finance.constant.ExpenseStrategy;
|
||||||
import com.njzscloud.dispose.finance.constant.Payer;
|
import com.njzscloud.dispose.finance.constant.Payer;
|
||||||
import com.njzscloud.dispose.finance.constant.Unit;
|
|
||||||
import com.njzscloud.dispose.finance.pojo.entity.ScopeStrategyConfig;
|
import com.njzscloud.dispose.finance.pojo.entity.ScopeStrategyConfig;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
|
|
@ -55,7 +54,7 @@ public class ModifyGoodsParam {
|
||||||
/**
|
/**
|
||||||
* 计量单位;字典代码:unit
|
* 计量单位;字典代码:unit
|
||||||
*/
|
*/
|
||||||
private Unit unit;
|
private String unit;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 排序
|
* 排序
|
||||||
|
|
@ -101,7 +100,7 @@ public class ModifyGoodsParam {
|
||||||
/**
|
/**
|
||||||
* 计量单位;字典代码:unit
|
* 计量单位;字典代码:unit
|
||||||
*/
|
*/
|
||||||
private Unit unit;
|
private String unit;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 税率
|
* 税率
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
package com.njzscloud.dispose.wh.pojo.entity;
|
package com.njzscloud.dispose.wh.pojo.entity;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.annotation.*;
|
import com.baomidou.mybatisplus.annotation.*;
|
||||||
import com.njzscloud.dispose.finance.constant.Unit;
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
import lombok.ToString;
|
import lombok.ToString;
|
||||||
|
|
@ -94,7 +93,7 @@ public class InOrderEntity {
|
||||||
/**
|
/**
|
||||||
* 计量单位;字典代码:unit
|
* 计量单位;字典代码:unit
|
||||||
*/
|
*/
|
||||||
private Unit unit;
|
private String unit;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 备注
|
* 备注
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
package com.njzscloud.dispose.wh.pojo.entity;
|
package com.njzscloud.dispose.wh.pojo.entity;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.annotation.*;
|
import com.baomidou.mybatisplus.annotation.*;
|
||||||
import com.njzscloud.dispose.finance.constant.Unit;
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
import lombok.ToString;
|
import lombok.ToString;
|
||||||
|
|
@ -63,7 +62,7 @@ public class InventoryEntity {
|
||||||
/**
|
/**
|
||||||
* 计量单位;字典代码:unit
|
* 计量单位;字典代码:unit
|
||||||
*/
|
*/
|
||||||
private Unit unit;
|
private String unit;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建人 Id;sys_user.id
|
* 创建人 Id;sys_user.id
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
package com.njzscloud.dispose.wh.pojo.entity;
|
package com.njzscloud.dispose.wh.pojo.entity;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.annotation.*;
|
import com.baomidou.mybatisplus.annotation.*;
|
||||||
import com.njzscloud.dispose.finance.constant.Unit;
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
import lombok.ToString;
|
import lombok.ToString;
|
||||||
|
|
@ -94,7 +93,7 @@ public class OutOrderEntity {
|
||||||
/**
|
/**
|
||||||
* 计量单位;字典代码:unit
|
* 计量单位;字典代码:unit
|
||||||
*/
|
*/
|
||||||
private Unit unit;
|
private String unit;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 备注
|
* 备注
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
package com.njzscloud.dispose.wh.pojo.entity;
|
package com.njzscloud.dispose.wh.pojo.entity;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.annotation.*;
|
import com.baomidou.mybatisplus.annotation.*;
|
||||||
import com.njzscloud.dispose.finance.constant.Unit;
|
|
||||||
import com.njzscloud.dispose.wh.constant.PurchaseOrderStatus;
|
import com.njzscloud.dispose.wh.constant.PurchaseOrderStatus;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
|
|
@ -97,7 +96,7 @@ public class PurchaseOrderEntity {
|
||||||
/**
|
/**
|
||||||
* 计量单位;字典代码:unit
|
* 计量单位;字典代码:unit
|
||||||
*/
|
*/
|
||||||
private Unit unit;
|
private String unit;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 总金额;单位:元
|
* 总金额;单位:元
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
package com.njzscloud.dispose.wh.pojo.entity;
|
package com.njzscloud.dispose.wh.pojo.entity;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.annotation.*;
|
import com.baomidou.mybatisplus.annotation.*;
|
||||||
import com.njzscloud.dispose.finance.constant.Unit;
|
|
||||||
import com.njzscloud.dispose.wh.constant.SalesOrderStatus;
|
import com.njzscloud.dispose.wh.constant.SalesOrderStatus;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
|
|
@ -97,7 +96,7 @@ public class SalesOrderEntity {
|
||||||
/**
|
/**
|
||||||
* 计量单位;字典代码:unit
|
* 计量单位;字典代码:unit
|
||||||
*/
|
*/
|
||||||
private Unit unit;
|
private String unit;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 总金额;单位:元
|
* 总金额;单位:元
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
package com.njzscloud.dispose.wh.pojo.entity;
|
package com.njzscloud.dispose.wh.pojo.entity;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.annotation.*;
|
import com.baomidou.mybatisplus.annotation.*;
|
||||||
import com.njzscloud.dispose.finance.constant.Unit;
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
import lombok.ToString;
|
import lombok.ToString;
|
||||||
|
|
@ -73,7 +72,7 @@ public class WarehouseCheckDetailEntity {
|
||||||
/**
|
/**
|
||||||
* 计量单位;字典代码:unit
|
* 计量单位;字典代码:unit
|
||||||
*/
|
*/
|
||||||
private Unit unit;
|
private String unit;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 处理建议
|
* 处理建议
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
package com.njzscloud.dispose.wh.pojo.param;
|
package com.njzscloud.dispose.wh.pojo.param;
|
||||||
|
|
||||||
import com.njzscloud.dispose.finance.constant.Unit;
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
import lombok.ToString;
|
import lombok.ToString;
|
||||||
|
|
@ -75,7 +74,7 @@ public class AddInOrderParam {
|
||||||
/**
|
/**
|
||||||
* 计量单位;字典代码:unit
|
* 计量单位;字典代码:unit
|
||||||
*/
|
*/
|
||||||
private Unit unit;
|
private String unit;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 备注
|
* 备注
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
package com.njzscloud.dispose.wh.pojo.param;
|
package com.njzscloud.dispose.wh.pojo.param;
|
||||||
|
|
||||||
import com.njzscloud.dispose.finance.constant.Unit;
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
import lombok.ToString;
|
import lombok.ToString;
|
||||||
|
|
@ -52,5 +51,5 @@ public class AddInventoryParam {
|
||||||
/**
|
/**
|
||||||
* 计量单位;字典代码:unit
|
* 计量单位;字典代码:unit
|
||||||
*/
|
*/
|
||||||
private Unit unit;
|
private String unit;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
package com.njzscloud.dispose.wh.pojo.param;
|
package com.njzscloud.dispose.wh.pojo.param;
|
||||||
|
|
||||||
import com.njzscloud.dispose.finance.constant.Unit;
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
import lombok.ToString;
|
import lombok.ToString;
|
||||||
|
|
@ -74,7 +73,7 @@ public class AddOutOrderParam {
|
||||||
/**
|
/**
|
||||||
* 计量单位;字典代码:unit
|
* 计量单位;字典代码:unit
|
||||||
*/
|
*/
|
||||||
private Unit unit;
|
private String unit;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 备注
|
* 备注
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
package com.njzscloud.dispose.wh.pojo.param;
|
package com.njzscloud.dispose.wh.pojo.param;
|
||||||
|
|
||||||
import com.njzscloud.dispose.finance.constant.Unit;
|
|
||||||
import com.njzscloud.dispose.wh.constant.SalesOrderStatus;
|
import com.njzscloud.dispose.wh.constant.SalesOrderStatus;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
|
|
@ -88,7 +87,7 @@ public class AddSalesOrderParam {
|
||||||
/**
|
/**
|
||||||
* 计量单位;字典代码:unit
|
* 计量单位;字典代码:unit
|
||||||
*/
|
*/
|
||||||
private Unit unit;
|
private String unit;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 总金额;单位:元
|
* 总金额;单位:元
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
package com.njzscloud.dispose.wh.pojo.param;
|
package com.njzscloud.dispose.wh.pojo.param;
|
||||||
|
|
||||||
import com.njzscloud.dispose.finance.constant.Unit;
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
import lombok.ToString;
|
import lombok.ToString;
|
||||||
|
|
@ -64,7 +63,7 @@ public class AddWarehouseCheckDetailParam {
|
||||||
/**
|
/**
|
||||||
* 计量单位;字典代码:unit
|
* 计量单位;字典代码:unit
|
||||||
*/
|
*/
|
||||||
private Unit unit;
|
private String unit;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 处理建议
|
* 处理建议
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,6 @@ package com.njzscloud.dispose.wh.pojo.result;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.annotation.IdType;
|
import com.baomidou.mybatisplus.annotation.IdType;
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
import com.njzscloud.dispose.finance.constant.Unit;
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
import lombok.ToString;
|
import lombok.ToString;
|
||||||
|
|
@ -105,7 +104,7 @@ public class SearchInOrderResult {
|
||||||
/**
|
/**
|
||||||
* 计量单位;字典代码:unit
|
* 计量单位;字典代码:unit
|
||||||
*/
|
*/
|
||||||
private Unit unit;
|
private String unit;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 备注
|
* 备注
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,6 @@ package com.njzscloud.dispose.wh.pojo.result;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.annotation.IdType;
|
import com.baomidou.mybatisplus.annotation.IdType;
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
import com.njzscloud.dispose.finance.constant.Unit;
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
import lombok.ToString;
|
import lombok.ToString;
|
||||||
|
|
@ -64,7 +63,7 @@ public class SearchInventoryResult {
|
||||||
/**
|
/**
|
||||||
* 计量单位;字典代码:unit
|
* 计量单位;字典代码:unit
|
||||||
*/
|
*/
|
||||||
private Unit unit;
|
private String unit;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建人 Id;sys_user.id
|
* 创建人 Id;sys_user.id
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,6 @@ package com.njzscloud.dispose.wh.pojo.result;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.annotation.IdType;
|
import com.baomidou.mybatisplus.annotation.IdType;
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
import com.njzscloud.dispose.finance.constant.Unit;
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
import lombok.ToString;
|
import lombok.ToString;
|
||||||
|
|
@ -104,7 +103,7 @@ public class SearchOutOrderResult {
|
||||||
/**
|
/**
|
||||||
* 计量单位;字典代码:unit
|
* 计量单位;字典代码:unit
|
||||||
*/
|
*/
|
||||||
private Unit unit;
|
private String unit;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 备注
|
* 备注
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,6 @@ package com.njzscloud.dispose.wh.pojo.result;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.annotation.IdType;
|
import com.baomidou.mybatisplus.annotation.IdType;
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
import com.njzscloud.dispose.finance.constant.Unit;
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
import lombok.ToString;
|
import lombok.ToString;
|
||||||
|
|
@ -73,7 +72,7 @@ public class SearchWarehouseCheckDetailResult {
|
||||||
/**
|
/**
|
||||||
* 计量单位;字典代码:unit
|
* 计量单位;字典代码:unit
|
||||||
*/
|
*/
|
||||||
private Unit unit;
|
private String unit;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 处理建议
|
* 处理建议
|
||||||
|
|
|
||||||
|
|
@ -66,7 +66,7 @@ public class PurchaseOrderService extends ServiceImpl<PurchaseOrderMapper, Purch
|
||||||
.setArrivalDate(LocalDate.now())
|
.setArrivalDate(LocalDate.now())
|
||||||
.setQuantity(orderTrans.getEstimatedQuantity())
|
.setQuantity(orderTrans.getEstimatedQuantity())
|
||||||
.setTotalMoney(totalMoney)
|
.setTotalMoney(totalMoney)
|
||||||
.setMemo("回收预约单自动添加"));
|
.setMemo(""));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -68,7 +68,7 @@ public class SalesOrderService extends ServiceImpl<SalesOrderMapper, SalesOrderE
|
||||||
.setShipmentDate(LocalDate.now())
|
.setShipmentDate(LocalDate.now())
|
||||||
.setQuantity(orderTrans.getEstimatedQuantity())
|
.setQuantity(orderTrans.getEstimatedQuantity())
|
||||||
.setTotalMoney(totalMoney)
|
.setTotalMoney(totalMoney)
|
||||||
.setMemo("销售预约单自动添加"));
|
.setMemo(""));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,6 @@
|
||||||
<result column="out_body_photo" property="outBodyPhoto"/>
|
<result column="out_body_photo" property="outBodyPhoto"/>
|
||||||
<result column="in_time" property="inTime"/>
|
<result column="in_time" property="inTime"/>
|
||||||
<result column="out_time" property="outTime"/>
|
<result column="out_time" property="outTime"/>
|
||||||
<result column="sn" property="sn"/>
|
|
||||||
<result column="trans_org_id" property="transOrgId"/>
|
<result column="trans_org_id" property="transOrgId"/>
|
||||||
<result column="trans_customer_id" property="transCustomerId"/>
|
<result column="trans_customer_id" property="transCustomerId"/>
|
||||||
<result column="assignment_trans_time" property="assignmentTransTime"/>
|
<result column="assignment_trans_time" property="assignmentTransTime"/>
|
||||||
|
|
@ -83,7 +82,6 @@
|
||||||
cot.out_body_photo AS out_body_photo,
|
cot.out_body_photo AS out_body_photo,
|
||||||
cot.in_time AS in_time,
|
cot.in_time AS in_time,
|
||||||
cot.out_time AS out_time,
|
cot.out_time AS out_time,
|
||||||
co.sn,
|
|
||||||
co.trans_org_id AS trans_org_id,
|
co.trans_org_id AS trans_org_id,
|
||||||
co.trans_customer_id AS trans_customer_id,
|
co.trans_customer_id AS trans_customer_id,
|
||||||
co.assignment_trans_time AS assignment_trans_time,
|
co.assignment_trans_time AS assignment_trans_time,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue