基本完成,修复细节
This commit is contained in:
210
DELIVERY_FIELD_FIX_SUMMARY.md
Normal file
210
DELIVERY_FIELD_FIX_SUMMARY.md
Normal file
@@ -0,0 +1,210 @@
|
||||
# 运送清单字段修复说明
|
||||
|
||||
## 修复的问题
|
||||
|
||||
根据用户反馈,以下字段在创建运送清单后为 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
|
||||
|
||||
Reference in New Issue
Block a user