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