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

5.6 KiB
Raw Blame History

运送清单字段修复说明

修复的问题

根据用户反馈,以下字段在创建运送清单后为 null

  1. createByName: null - 创建人姓名没有中文映射
  2. supplierId, supplierName, supplierMobile: null - 卖方信息为空
  3. buyerId, buyerName, buyerMobile: null - 买方信息为空
  4. 车牌号与司机模块混淆

解决方案

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 不为 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