5.6 KiB
5.6 KiB
运送清单字段修复说明
修复的问题
根据用户反馈,以下字段在创建运送清单后为 null:
createByName: null - 创建人姓名没有中文映射supplierId,supplierName,supplierMobile: null - 卖方信息为空buyerId,buyerName,buyerMobile: null - 买方信息为空- 车牌号与司机模块混淆
解决方案
1. 修改 DTO 字段
文件: DeliveryCreateDto.java
修改前:
/**
* 发货方
*/
@NotBlank(message = "发货方不能为空")
private String shipper;
/**
* 采购方
*/
@NotBlank(message = "采购方不能为空")
private String buyer;
修改后:
/**
* 发货方ID
*/
private Integer shipperId;
/**
* 采购方ID
*/
private Integer buyerId;
说明: 改为传递ID而不是名称,便于后端查询详细信息。
2. 修改前端提交逻辑
文件: createDeliveryDialog.vue
修改前:
const buildSubmitData = () => {
// 将发货方和采购方的ID转换为名称
let shipperName = '';
let buyerName = '';
if (formData.shipper) {
const shipper = supplierList.value.find(item => item.id === formData.shipper);
shipperName = shipper ? (shipper.username || shipper.mobile || shipper.name || '') : String(formData.shipper);
}
if (formData.buyer) {
const buyer = buyerList.value.find(item => item.id === formData.buyer);
buyerName = buyer ? (buyer.username || buyer.mobile || buyer.name || '') : String(formData.buyer);
}
const data = {
shipper: shipperName,
buyer: buyerName,
// ...
};
};
修改后:
const buildSubmitData = () => {
const data = {
shipperId: formData.shipper,
buyerId: formData.buyer,
// ...
};
};
说明: 直接传递 ID,简化逻辑。
3. 修改后端保存逻辑
文件: DeliveryServiceImpl.java
新增代码:
// 设置卖方和买方ID
if (dto.getShipperId() != null) {
delivery.setSupplierId(String.valueOf(dto.getShipperId()));
System.out.println("[CREATE-DELIVERY] 设置卖方ID: " + dto.getShipperId());
}
if (dto.getBuyerId() != null) {
delivery.setBuyerId(dto.getBuyerId());
System.out.println("[CREATE-DELIVERY] 设置买方ID: " + dto.getBuyerId());
}
位置: 在 delivery.setLicensePlate(dto.getPlateNumber()); 之后
说明: 保存 shipperId 和 buyerId 到数据库。
4. 关于创建人姓名 (createByName)
现有的代码逻辑是:
Integer userId = SecurityUtil.getCurrentUserId();
String userName = SecurityUtil.getUserName();
delivery.setCreatedBy(userId);
delivery.setCreateByName(userName);
说明:
createByName应该从SecurityUtil.getUserName()获取- 如果获取到的是 null,需要检查 SecurityUtil 的实现
- 可能需要从 sys_user 表查询用户姓名
5. 关于卖方和买方信息的显示
由于现在是保存 ID 而不是名称,在查询运送清单列表时,需要通过 ID 查询并显示名称和手机号。
现有代码已经实现了这个逻辑(在 pageQuery 方法中):
// 查询供应商信息
if (StringUtils.isNotEmpty(delivery.getSupplierId())) {
String[] supplierIds = delivery.getSupplierId().split(",");
// ... 查询并设置 supplierName 和 supplierMobile
}
// 查询采购商信息
if (delivery.getBuyerId() != null) {
Map<String, Object> buyerInfo = memberMapper.selectMemberUserById(delivery.getBuyerId());
// ... 设置 buyerName 和 buyerMobile
}
6. 司机模块与车牌号
用户说明:司机姓名和电话是一个模块,车牌号是另一个模块,司机模块不需要查询车牌号
现有逻辑:
if (dto.getDriverId() != null) {
Map<String, Object> driverInfo = memberDriverMapper.selectDriverById(dto.getDriverId());
if (driverInfo != null) {
String driverUsername = (String) driverInfo.get("username");
String driverMobile = (String) driverInfo.get("mobile");
String carImg = (String) driverInfo.get("car_img"); // 这个不需要使用
// 设置司机姓名和电话
delivery.setDriverName(driverUsername);
delivery.setDriverMobile(driverMobile);
}
}
说明: 现有代码只查询司机姓名和电话,不涉及车牌号,符合要求。
测试验证
创建运送清单后,检查数据库:
SELECT
id,
supplier_id,
buyer_id,
driver_id,
license_plate,
driver_name,
driver_mobile,
created_by,
create_by_name
FROM delivery
WHERE id = [最新创建的运送清单ID];
预期结果:
supplier_id不为 null(如 "123")buyer_id不为 null(如 456)driver_id不为 nulllicense_plate不为 nulldriver_name不为 nulldriver_mobile不为 nullcreate_by_name不为 null(需要检查 SecurityUtil.getUserName())
注意事项
- supplierId 是字符串类型:Delivery 实体中
supplierId字段是 String 类型(逗号分隔),所以使用String.valueOf()转换 - buyerId 是整数类型:直接赋值即可
- 创建人姓名问题:如果
SecurityUtil.getUserName()返回 null,需要检查权限管理模块的配置
相关文件
tradeCattle/aiotagro-cattle-trade/src/main/java/com/aiotagro/cattletrade/business/dto/DeliveryCreateDto.javatradeCattle/aiotagro-cattle-trade/src/main/java/com/aiotagro/cattletrade/business/service/impl/DeliveryServiceImpl.javapc-cattle-transportation/src/views/shipping/createDeliveryDialog.vue
实现日期
2025-10-29