feat(order-ship): 更新发货单据字段并支持文件存储

- 将原有的 document 字段拆分为 pdfUrl 和 picUrl 两个独立字段
- 新增 OrderShipFileDO 类用于封装发货单文件信息
- 使用 JacksonTypeHandler 支持 file 字段的 JSON 格式存储
- 更新 Mapper 配置以适配新的字段结构和转换逻辑
- 移除不再使用的 PurchaseOrderMapper 引用
- 添加日期格式化注解确保 LocalDate 正确序列化
- 调整数据库映射配置启用 autoResultMap 以支持复杂类型处理
This commit is contained in:
shenyifei 2025-12-22 14:53:57 +08:00
parent be12b0d883
commit 67fea6e500
10 changed files with 108 additions and 26 deletions

View File

@ -92,9 +92,14 @@ public class OrderShip extends DTO {
private String watermelonGrade; private String watermelonGrade;
/** /**
* 发货单据 * PDF 文件地址
*/ */
private String document; private String pdfUrl;
/**
* 图片文件地址
*/
private String picUrl;
/** /**
* 发货单状态0_草稿1_待发货2_待回款3_待改签4_部分回款5_已回款6_拒收完结7_已完结 * 发货单状态0_草稿1_待发货2_待回款3_待改签4_部分回款5_已回款6_拒收完结7_已完结

View File

@ -5,6 +5,7 @@ import com.xunhong.erp.turbo.api.biz.dto.cmd.OrderShipGenerateDocumentCmd;
import com.xunhong.erp.turbo.api.biz.dto.cmd.OrderShipUpdateCmd; import com.xunhong.erp.turbo.api.biz.dto.cmd.OrderShipUpdateCmd;
import com.xunhong.erp.turbo.api.biz.dto.common.OrderShip; import com.xunhong.erp.turbo.api.biz.dto.common.OrderShip;
import com.xunhong.erp.turbo.biz.infrastructure.entity.OrderShipDO; import com.xunhong.erp.turbo.biz.infrastructure.entity.OrderShipDO;
import com.xunhong.erp.turbo.biz.infrastructure.entity.OrderShipFileDO;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
import org.mapstruct.Mapping; import org.mapstruct.Mapping;
import org.mapstruct.MappingTarget; import org.mapstruct.MappingTarget;
@ -16,17 +17,21 @@ import org.mapstruct.NullValueCheckStrategy;
@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS) @Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS)
public interface OrderShipConvert { public interface OrderShipConvert {
@Mapping(target = "picUrl", source = "file.picUrl")
@Mapping(target = "pdfUrl", source = "file.pdfUrl")
@Mapping(target = "orderVehicle", source = "orderVehicleDO") @Mapping(target = "orderVehicle", source = "orderVehicleDO")
@Mapping(target = "orderCostList", source = "orderCostDOList") @Mapping(target = "orderCostList", source = "orderCostDOList")
@Mapping(target = "orderShipItemList", source = "orderShipItemDOList") @Mapping(target = "orderShipItemList", source = "orderShipItemDOList")
com.xunhong.erp.turbo.biz.domain.entity.OrderShip toOrderShip(OrderShipDO orderShipDO); com.xunhong.erp.turbo.biz.domain.entity.OrderShip toOrderShip(OrderShipDO orderShipDO);
@Mapping(target = "file", ignore = true)
@Mapping(target = "dealerName", ignore = true)
@Mapping(target = "dealerId", ignore = true)
@Mapping(target = "orderVehicleDO", ignore = true) @Mapping(target = "orderVehicleDO", ignore = true)
@Mapping(target = "orderCostDOList", ignore = true) @Mapping(target = "orderCostDOList", ignore = true)
@Mapping(target = "warehouseName", ignore = true) @Mapping(target = "warehouseName", ignore = true)
@Mapping(target = "warehouseId", ignore = true) @Mapping(target = "warehouseId", ignore = true)
@Mapping(target = "state", ignore = true) @Mapping(target = "state", ignore = true)
@Mapping(target = "document", ignore = true)
@Mapping(target = "orderShipItemDOList", ignore = true) @Mapping(target = "orderShipItemDOList", ignore = true)
@Mapping(target = "version", ignore = true) @Mapping(target = "version", ignore = true)
@Mapping(target = "updatedAt", ignore = true) @Mapping(target = "updatedAt", ignore = true)
@ -34,6 +39,9 @@ public interface OrderShipConvert {
@Mapping(target = "createdAt", ignore = true) @Mapping(target = "createdAt", ignore = true)
OrderShipDO toOrderShipDO(OrderShipCreateCmd orderShipCreateCmd); OrderShipDO toOrderShipDO(OrderShipCreateCmd orderShipCreateCmd);
@Mapping(target = "file", ignore = true)
@Mapping(target = "dealerName", ignore = true)
@Mapping(target = "dealerId", ignore = true)
@Mapping(target = "orderVehicleDO", ignore = true) @Mapping(target = "orderVehicleDO", ignore = true)
@Mapping(target = "orderId", ignore = true) @Mapping(target = "orderId", ignore = true)
@Mapping(target = "orderCostDOList", ignore = true) @Mapping(target = "orderCostDOList", ignore = true)
@ -51,6 +59,9 @@ public interface OrderShipConvert {
@Mapping(target = "createdAt", ignore = true) @Mapping(target = "createdAt", ignore = true)
void toOrderShipDO(@MappingTarget OrderShipDO orderShipDO, OrderShipUpdateCmd orderShipUpdateCmd); void toOrderShipDO(@MappingTarget OrderShipDO orderShipDO, OrderShipUpdateCmd orderShipUpdateCmd);
@Mapping(target = "file", expression = "java(this.toOrderShipFileDO(orderShipGenerateDocumentCmd))")
@Mapping(target = "dealerName", ignore = true)
@Mapping(target = "dealerId", ignore = true)
@Mapping(target = "orderVehicleDO", ignore = true) @Mapping(target = "orderVehicleDO", ignore = true)
@Mapping(target = "orderId", ignore = true) @Mapping(target = "orderId", ignore = true)
@Mapping(target = "orderCostDOList", ignore = true) @Mapping(target = "orderCostDOList", ignore = true)
@ -70,6 +81,15 @@ public interface OrderShipConvert {
@Mapping(target = "createdAt", ignore = true) @Mapping(target = "createdAt", ignore = true)
void toOrderShipDO(@MappingTarget OrderShipDO orderShipDO, OrderShipGenerateDocumentCmd orderShipGenerateDocumentCmd); void toOrderShipDO(@MappingTarget OrderShipDO orderShipDO, OrderShipGenerateDocumentCmd orderShipGenerateDocumentCmd);
@SuppressWarnings("unused")
default OrderShipFileDO toOrderShipFileDO(OrderShipGenerateDocumentCmd orderShipGenerateDocumentCmd) {
OrderShipFileDO orderShipFileDO = new OrderShipFileDO();
orderShipFileDO.setPicUrl(orderShipGenerateDocumentCmd.getPicUrl());
orderShipFileDO.setPdfUrl(orderShipGenerateDocumentCmd.getPdfUrl());
return orderShipFileDO;
}
@Mapping(target = "file", ignore = true)
@Mapping(target = "orderVehicleDO", ignore = true) @Mapping(target = "orderVehicleDO", ignore = true)
@Mapping(target = "orderCostDOList", ignore = true) @Mapping(target = "orderCostDOList", ignore = true)
@Mapping(target = "orderShipItemDOList", ignore = true) @Mapping(target = "orderShipItemDOList", ignore = true)

View File

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import com.xunhong.erp.turbo.api.biz.dto.enums.OrderShipStateEnum; import com.xunhong.erp.turbo.api.biz.dto.enums.OrderShipStateEnum;
import com.xunhong.erp.turbo.datasource.domain.entity.BaseDO; import com.xunhong.erp.turbo.datasource.domain.entity.BaseDO;
import lombok.Data; import lombok.Data;
@ -16,7 +17,7 @@ import java.util.List;
* @author shenyifei * @author shenyifei
*/ */
@Data @Data
@TableName(value = "order_ship") @TableName(value = "order_ship", autoResultMap = true)
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
public class OrderShipDO extends BaseDO<OrderShipDO> { public class OrderShipDO extends BaseDO<OrderShipDO> {
@ -118,10 +119,10 @@ public class OrderShipDO extends BaseDO<OrderShipDO> {
private OrderShipStateEnum state; private OrderShipStateEnum state;
/** /**
* 发货单 * 发货单文件
*/ */
@TableField(value = "document") @TableField(value = "file", typeHandler = JacksonTypeHandler.class)
private String document; private OrderShipFileDO file;
/** /**
* 备注 * 备注

View File

@ -0,0 +1,23 @@
package com.xunhong.erp.turbo.biz.infrastructure.entity;
import com.alibaba.cola.dto.DTO;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* @author shenyifei
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class OrderShipFileDO extends DTO {
/**
* PDF 文件地址
*/
private String pdfUrl;
/**
* 图片文件地址
*/
private String picUrl;
}

View File

@ -22,7 +22,10 @@ import com.xunhong.erp.turbo.biz.infrastructure.entity.OrderCostDO;
import com.xunhong.erp.turbo.biz.infrastructure.entity.OrderShipDO; import com.xunhong.erp.turbo.biz.infrastructure.entity.OrderShipDO;
import com.xunhong.erp.turbo.biz.infrastructure.entity.OrderShipItemDO; import com.xunhong.erp.turbo.biz.infrastructure.entity.OrderShipItemDO;
import com.xunhong.erp.turbo.biz.infrastructure.entity.OrderVehicleDO; import com.xunhong.erp.turbo.biz.infrastructure.entity.OrderVehicleDO;
import com.xunhong.erp.turbo.biz.infrastructure.mapper.*; import com.xunhong.erp.turbo.biz.infrastructure.mapper.OrderCostMapper;
import com.xunhong.erp.turbo.biz.infrastructure.mapper.OrderShipItemMapper;
import com.xunhong.erp.turbo.biz.infrastructure.mapper.OrderShipMapper;
import com.xunhong.erp.turbo.biz.infrastructure.mapper.OrderVehicleMapper;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
@ -44,7 +47,6 @@ public class OrderShipGatewayImpl implements OrderShipGateway {
private final OrderShipItemMapper orderShipItemMapper; private final OrderShipItemMapper orderShipItemMapper;
private final OrderCostMapper orderCostMapper; private final OrderCostMapper orderCostMapper;
private final PurchaseOrderMapper purchaseOrderMapper;
private final OrderVehicleMapper orderVehicleMapper; private final OrderVehicleMapper orderVehicleMapper;

View File

@ -19,7 +19,8 @@
column="estimated_arrival_date"/> column="estimated_arrival_date"/>
<result property="watermelonGrade" column="watermelon_grade"/> <result property="watermelonGrade" column="watermelon_grade"/>
<result property="farmerInfo" column="farmer_info"/> <result property="farmerInfo" column="farmer_info"/>
<result property="document" column="document"/> <result property="file" column="file"
typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"/>
<result property="state" column="state"/> <result property="state" column="state"/>
<result property="remark" column="remark"/> <result property="remark" column="remark"/>
<result property="createdBy" column="created_by"/> <result property="createdBy" column="created_by"/>

View File

@ -51,9 +51,15 @@ public class OrderShipGenerateDocumentCmd extends Command {
private List<OrderShipItem> orderShipItemList; private List<OrderShipItem> orderShipItemList;
/** /**
* 发货单据 * PDF 文件地址
*/ */
@Schema(title = "发货单据") @Schema(title = "PDF 文件地址")
private String document; private String pdfUrl;
/**
* 图片文件地址
*/
@Schema(title = "图片文件地址")
private String picUrl;
} }

View File

@ -63,8 +63,14 @@ public class OrderShipUpdateCmd extends Command {
private List<OrderShipItem> orderShipItemList; private List<OrderShipItem> orderShipItemList;
/** /**
* 发货单据 * PDF 文件地址
*/ */
@Schema(title = "发货单据") @Schema(title = "PDF 文件地址")
private String document; private String pdfUrl;
/**
* 图片文件地址
*/
@Schema(title = "图片文件地址")
private String picUrl;
} }

View File

@ -1,10 +1,12 @@
package com.xunhong.erp.turbo.api.biz.dto.common; package com.xunhong.erp.turbo.api.biz.dto.common;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.xunhong.erp.turbo.api.biz.dto.enums.OrderShipStateEnum; import com.xunhong.erp.turbo.api.biz.dto.enums.OrderShipStateEnum;
import com.xunhong.erp.turbo.base.dto.Command; import com.xunhong.erp.turbo.base.dto.Command;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.List; import java.util.List;
@ -87,12 +89,16 @@ public class OrderShip extends Command {
* 发货日期 * 发货日期
*/ */
@Schema(title = "发货日期", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(title = "发货日期", type = "string", requiredMode = Schema.RequiredMode.REQUIRED)
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDate shippingDate; private LocalDate shippingDate;
/** /**
* 预计到仓时间 * 预计到仓时间
*/ */
@Schema(title = "预计到仓时间", type = "string", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(title = "预计到仓时间", type = "string", requiredMode = Schema.RequiredMode.REQUIRED)
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDate estimatedArrivalDate; private LocalDate estimatedArrivalDate;
/** /**
@ -107,12 +113,6 @@ public class OrderShip extends Command {
@Schema(title = "瓜农姓名逗号隔开") @Schema(title = "瓜农姓名逗号隔开")
private String farmerInfo; private String farmerInfo;
/**
* 发货单据
*/
@Schema(title = "发货单据", type = "string", requiredMode = Schema.RequiredMode.REQUIRED)
private String document;
/** /**
* 发货单状态0_草稿1_待发货2_待回款3_待改签4_部分回款5_已回款6_拒收完结7_已完结 * 发货单状态0_草稿1_待发货2_待回款3_待改签4_部分回款5_已回款6_拒收完结7_已完结
*/ */
@ -130,4 +130,16 @@ public class OrderShip extends Command {
*/ */
@Schema(title = "发货单明细") @Schema(title = "发货单明细")
private List<OrderShipItem> orderShipItemList; private List<OrderShipItem> orderShipItemList;
/**
* PDF 文件地址
*/
@Schema(title = "PDF 文件地址")
private String pdfUrl;
/**
* 图片文件地址
*/
@Schema(title = "图片文件地址")
private String picUrl;
} }

View File

@ -118,10 +118,16 @@ public class OrderShipVO extends DTO {
private String farmerInfo; private String farmerInfo;
/** /**
* 发货单据 * PDF 文件地址
*/ */
@Schema(title = "发货单据") @Schema(title = "PDF 文件地址")
private String document; private String pdfUrl;
/**
* 图片文件地址
*/
@Schema(title = "图片文件地址")
private String picUrl;
/** /**
* 发货单状态0_草稿1_待发货2_待回款3_待改签4_部分回款5_已回款6_拒收完结7_已完结 * 发货单状态0_草稿1_待发货2_待回款3_待改签4_部分回款5_已回款6_拒收完结7_已完结