# 运送清单字段修复说明 ## 修复的问题 根据用户反馈,以下字段在创建运送清单后为 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 buyerInfo = memberMapper.selectMemberUserById(delivery.getBuyerId()); // ... 设置 buyerName 和 buyerMobile } ``` ### 6. 司机模块与车牌号 用户说明:**司机姓名和电话是一个模块,车牌号是另一个模块,司机模块不需要查询车牌号** **现有逻辑**: ```java if (dto.getDriverId() != null) { Map 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