Files
cattleTransportation/DELIVERY_FIELD_FIX_SUMMARY.md

211 lines
5.6 KiB
Markdown
Raw Normal View History

2025-10-29 17:33:32 +08:00
# 运送清单字段修复说明
## 修复的问题
根据用户反馈,以下字段在创建运送清单后为 null
1. `createByName`: null - 创建人姓名没有中文映射
2. `supplierId`, `supplierName`, `supplierMobile`: null - 卖方信息为空
3. `buyerId`, `buyerName`, `buyerMobile`: null - 买方信息为空
4. 车牌号与司机模块混淆
## 解决方案
### 1. 修改 DTO 字段
**文件**: `DeliveryCreateDto.java`
**修改前**:
```java
/**
* 发货方
*/
@NotBlank(message = "发货方不能为空")
private String shipper;
/**
* 采购方
*/
@NotBlank(message = "采购方不能为空")
private String buyer;
```
**修改后**:
```java
/**
* 发货方ID
*/
private Integer shipperId;
/**
* 采购方ID
*/
private Integer buyerId;
```
**说明**: 改为传递ID而不是名称便于后端查询详细信息。
### 2. 修改前端提交逻辑
**文件**: `createDeliveryDialog.vue`
**修改前**:
```javascript
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,
// ...
};
};
```
**修改后**:
```javascript
const buildSubmitData = () => {
const data = {
shipperId: formData.shipper,
buyerId: formData.buyer,
// ...
};
};
```
**说明**: 直接传递 ID简化逻辑。
### 3. 修改后端保存逻辑
**文件**: `DeliveryServiceImpl.java`
**新增代码**:
```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)
现有的代码逻辑是:
```java
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` 方法中):
```java
// 查询供应商信息
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. 司机模块与车牌号
用户说明:**司机姓名和电话是一个模块,车牌号是另一个模块,司机模块不需要查询车牌号**
**现有逻辑**:
```java
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);
}
}
```
**说明**: 现有代码只查询司机姓名和电话,不涉及车牌号,符合要求。
## 测试验证
创建运送清单后,检查数据库:
```sql
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` 不为 null
- `license_plate` 不为 null
- `driver_name` 不为 null
- `driver_mobile` 不为 null
- `create_by_name` 不为 null需要检查 SecurityUtil.getUserName()
## 注意事项
1. **supplierId 是字符串类型**Delivery 实体中 `supplierId` 字段是 String 类型(逗号分隔),所以使用 `String.valueOf()` 转换
2. **buyerId 是整数类型**:直接赋值即可
3. **创建人姓名问题**:如果 `SecurityUtil.getUserName()` 返回 null需要检查权限管理模块的配置
## 相关文件
1. `tradeCattle/aiotagro-cattle-trade/src/main/java/com/aiotagro/cattletrade/business/dto/DeliveryCreateDto.java`
2. `tradeCattle/aiotagro-cattle-trade/src/main/java/com/aiotagro/cattletrade/business/service/impl/DeliveryServiceImpl.java`
3. `pc-cattle-transportation/src/views/shipping/createDeliveryDialog.vue`
## 实现日期
2025-10-29