Files
cattleTransportation/DELIVERY_FIELD_FIX_SUMMARY.md
2025-10-29 17:33:32 +08:00

211 lines
5.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 运送清单字段修复说明
## 修复的问题
根据用户反馈,以下字段在创建运送清单后为 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