buhuazhen
2026-04-22 814f0712ce59dc0aee73779a8ff645e3ec5f394a
feat(production): 新增印刷定印单及相关DTO和Mapper实现

- 新增印刷定印单实体类ProductionPrintOrder,包含详细字段及Json类型处理
- 新增ProductionPrintOrder的Mapper接口和XML文件框架
- 新增服务接口ProductionPrintOrderService及实现类,实现保存方法
- 实现保存逻辑,自动设置工序加工内容的唯一Id
- 新增相关DTO类(MaterialInfoDto, PlateMakingDto, ProcessContentDto, ProductionPrintOrderDto, SaveProductionPrintOrderDto)
- 新增产品订单查询DTO及对应XML映射支持多字段查询和计算完成度
- 完善MyBatis页面查询及条件过滤逻辑,支持多表关联查询和发送状态判断
已添加10个文件
已修改2个文件
441 ■■■■■ 文件已修改
src/main/java/com/ruoyi/production/dto/MaterialInfoDto.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/dto/PlateMakingDto.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/dto/ProcessContentDto.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/dto/ProductOrderDto.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/dto/ProductionPrintOrderDto.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/dto/SaveProductionPrintOrderDto.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/mapper/ProductionPrintOrderMapper.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/pojo/ProductionPrintOrder.java 219 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/service/ProductionPrintOrderService.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/service/impl/ProductionPrintOrderServiceImpl.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/production/ProductOrderMapper.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/production/ProductionPrintOrderMapper.xml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/dto/MaterialInfoDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
package com.ruoyi.production.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
 * @author buhuazhen
 * @date 2026/4/22
 * @email 3038525872@qq.com
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class MaterialInfoDto implements Serializable {
    private Long id;
    private String name;
    private String model;
    private String num;
    private String numSuffix = "å¼ ";
    private String unit;
    private String unitSuffix = "元/kg";
    private String price;
    private String totalAmount;
}
src/main/java/com/ruoyi/production/dto/PlateMakingDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
package com.ruoyi.production.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
 * åˆ¶ç‰ˆDTO
 * @author buhuazhen
 * @date 2026/4/22
 * @email 3038525872@qq.com
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class PlateMakingDto implements Serializable {
    private String designProductionFee;   // è®¾è®¡åˆ¶ä½œè´¹
    private String impositionFee;         // æ‹¼ç‰ˆè´¹
    private String filmOutputFee;         // å‡ºç‰‡è´¹
    private String proofingFee;           // æ‰“æ ·è´¹
    private String doctorBladePlateFee;   // åˆ®åˆ€ç‰ˆè´¹
    private String hotEmbossingPlateFee;  // çƒ«/凸版费
    private String subtotalFee;           // å°è®¡
}
src/main/java/com/ruoyi/production/dto/ProcessContentDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
package com.ruoyi.production.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
 * å·¥åºåР工内容Dto
 * @author buhuazhen
 * @date 2026/4/22
 * @email 3038525872@qq.com
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ProcessContentDto implements Serializable {
    private String id;
    private Long processId;             // å·¥åºid
    private String processContent;    // å·¥è‰ºåР工内容
    private String openCount;         // å¼€æ•°
    private String processPositive;   // å·¥è‰ºæ­£æ•°
    private String allowanceQty;      // åŠ æ”¾æ•°
}
src/main/java/com/ruoyi/production/dto/ProductOrderDto.java
@@ -57,4 +57,6 @@
    //是否发货(台账页面颜色控制)
    private Boolean isFh;
    private Long saleLedgerId;
}
src/main/java/com/ruoyi/production/dto/ProductionPrintOrderDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
package com.ruoyi.production.dto;
import com.ruoyi.production.pojo.ProductionPrintOrder;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
 * @author buhuazhen
 * @date 2026/4/22
 * @email 3038525872@qq.com
 */
@EqualsAndHashCode(callSuper = true)
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ProductionPrintOrderDto extends ProductionPrintOrder implements Serializable {
}
src/main/java/com/ruoyi/production/dto/SaveProductionPrintOrderDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
package com.ruoyi.production.dto;
import com.ruoyi.production.pojo.ProductionPrintOrder;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
 * ç”¨äºŽä¿å­˜çš„dto
 * @author buhuazhen
 * @date 2026/4/22
 * @email 3038525872@qq.com
 */
@EqualsAndHashCode(callSuper = true)
@Data
@AllArgsConstructor
@NoArgsConstructor
public class SaveProductionPrintOrderDto extends ProductionPrintOrder implements Serializable {
    private String notNeed;
}
src/main/java/com/ruoyi/production/mapper/ProductionPrintOrderMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
package com.ruoyi.production.mapper;
import com.ruoyi.production.pojo.ProductionPrintOrder;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @author buhuazhen
* @description é’ˆå¯¹è¡¨ã€production_print_order(印刷定印单)】的数据库操作Mapper
* @createDate 2026-04-22 15:14:51
* @Entity com.ruoyi.production.pojo.ProductionPrintOrder
*/
public interface ProductionPrintOrderMapper extends BaseMapper<ProductionPrintOrder> {
}
src/main/java/com/ruoyi/production/pojo/ProductionPrintOrder.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,219 @@
package com.ruoyi.production.pojo;
import com.baomidou.mybatisplus.annotation.*;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.List;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import com.ruoyi.production.dto.MaterialInfoDto;
import com.ruoyi.production.dto.PlateMakingDto;
import com.ruoyi.production.dto.ProcessContentDto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * å°åˆ·å®šå°å•
 * @TableName production_print_order
 */
@TableName(value ="production_print_order",autoResultMap = true)
@Data
public class ProductionPrintOrder implements Serializable {
    /**
     *
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    /**
     * å¯¹åº”的销售订单
     */
    @TableField(value = "sales_ledger_id")
    private Long salesLedgerId;
    /**
     * å¯¹åº”的生产工单
     */
    @TableField(value = "product_order")
    private Long productOrder;
    /**
     * åˆ¶å•日期
     */
    @TableField(value = "print_order_time")
    private LocalDateTime printOrderTime;
    /**
     * å®Œæˆæ—¥æœŸ
     */
    @TableField(value = "finish_time")
    private LocalDateTime finishTime;
    /**
     * ç¼–号 åº”该为sale的合同号
     */
    @TableField(value = "no")
    private String no;
    /**
     * æˆå“å°ºå¯¸
     */
    @TableField(value = "finished_size")
    private String finishedSize;
    /**
     * ä»‹ç»ä¿¡ å­˜åœ¨ , è¡¨ç¤ºå¤šä¸ª
     */
    @TableField(value = "introduction_letter")
    private String introductionLetter;
    /**
     * äº§å“åç§°
     */
    @TableField(value = "product_name")
    private String productName;
    /**
     * äº§å“è¯´æ˜Ž
     */
    @TableField(value = "product_description")
    private String productDescription;
    /**
     * åˆ‡æ–™å°ºå¯¸
     */
    @TableField(value = "cut_size")
    private String cutSize;
    /**
     * åˆ‡æ–™å°ºå¯¸æ•°é‡
     */
    @TableField(value = "cut_num")
    private String cutNum;
    /**
     * æ­£æ•°
     */
    @TableField(value = "positive_qty")
    private String positiveQty;
    /**
     * åŠ æ”¾æ•°
     */
    @TableField(value = "allowance_qty")
    private String allowanceQty;
    /**
     * åˆ¶ç‰ˆ
     */
    @TableField(value = "plate_making",typeHandler = JacksonTypeHandler.class)
    private List<PlateMakingDto> plateMaking;
    /**
     * å·¥åºåР工内容
     */
    @TableField(value = "process_content",typeHandler = JacksonTypeHandler.class)
    private List<ProcessContentDto> processContent;
    /**
     * ææ–™ä¿¡æ¯
     */
    @TableField(value = "material_info",typeHandler = JacksonTypeHandler.class)
    private List<MaterialInfoDto> materialInfo;
    /**
     * å·¥è‰ºè¦æ±‚
     */
    @TableField(value = "process_requirement")
    private String processRequirement;
    /**
     * é€è´§åœ°ç‚¹
     */
    @TableField(value = "delivery_address")
    private String deliveryAddress;
    /**
     * è”系人
     */
    @TableField(value = "contact_name")
    private String contactName;
    /**
     * åŒ…装要求
     */
    @TableField(value = "packaging_requirement")
    private String packagingRequirement;
    /**
     * åŠ å·¥åŽå°ºå¯¸
     */
    @TableField(value = "post_process_size")
    private String postProcessSize;
    /**
     * è®¢è´§æ•°é‡
     */
    @TableField(value = "order_qty")
    private String orderQty;
    /**
     * å®žé™…交付数量
     */
    @TableField(value = "actual_delivery_qty")
    private String actualDeliveryQty;
    /**
     * ç”Ÿäº§éƒ¨é—¨
     */
    @TableField(value = "production_dept")
    private String productionDept;
    /**
     * æŠ€æœ¯éƒ¨
     */
    @TableField(value = "technical_dept")
    private String technicalDept;
    /**
     * åº“房
     */
    @TableField(value = "warehouse_dept")
    private String warehouseDept;
    /**
     *
     */
    @TableField(value = "create_time")
    private LocalDateTime createTime;
    /**
     *
     */
    @TableField(value = "update_time")
    private LocalDateTime updateTime;
    @TableField(exist = false)
    private static final long serialVersionUID = 1L;
    /**
     *
     */
    @TableField(value = "create_user",fill = FieldFill.INSERT)
    @ApiModelProperty(value="创建人")
    private Integer createUser;
    /**
     *
     */
    @TableField(value = "update_user",fill = FieldFill.INSERT_UPDATE)
    @ApiModelProperty(value="更新人")
    private Integer updateUser;
    @TableField(value = "create_user_name", fill = FieldFill.INSERT)
    private String createUserName;
    @TableField(value = "update_user_name", fill = FieldFill.INSERT_UPDATE)
    private String updateUserName;
}
src/main/java/com/ruoyi/production/service/ProductionPrintOrderService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
package com.ruoyi.production.service;
import com.ruoyi.production.dto.SaveProductionPrintOrderDto;
import com.ruoyi.production.pojo.ProductionPrintOrder;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @author buhuazhen
* @description é’ˆå¯¹è¡¨ã€production_print_order(印刷定印单)】的数据库操作Service
* @createDate 2026-04-22 15:14:51
*/
public interface ProductionPrintOrderService extends IService<ProductionPrintOrder> {
    /**
     * ä¿å­˜
     * @param dto
     */
    void save(SaveProductionPrintOrderDto dto);
}
src/main/java/com/ruoyi/production/service/impl/ProductionPrintOrderServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,49 @@
package com.ruoyi.production.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.production.dto.ProcessContentDto;
import com.ruoyi.production.dto.SaveProductionPrintOrderDto;
import com.ruoyi.production.pojo.ProductionPrintOrder;
import com.ruoyi.production.service.ProductionPrintOrderService;
import com.ruoyi.production.mapper.ProductionPrintOrderMapper;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* @author buhuazhen
* @description é’ˆå¯¹è¡¨ã€production_print_order(印刷定印单)】的数据库操作Service实现
* @createDate 2026-04-22 15:14:51
*/
@Service
@RequiredArgsConstructor
public class ProductionPrintOrderServiceImpl extends ServiceImpl<ProductionPrintOrderMapper, ProductionPrintOrder>
    implements ProductionPrintOrderService{
    private final ProductionPrintOrderMapper productionPrintOrderMapper;
    @Override
    @Transactional
    public void save(SaveProductionPrintOrderDto dto) {
        ProductionPrintOrder productionPrintOrder = BeanUtil.copyProperties(dto, ProductionPrintOrder.class);
        List<ProcessContentDto> processContentDtoList = productionPrintOrder.getProcessContent();
        // ç»™æ²¡æœ‰id的信息设置uuid
        processContentDtoList.forEach(processContentDto -> {
            if (StrUtil.isBlank(processContentDto.getId())) {
                processContentDto.setId(IdUtil.simpleUUID());
            }
        });
        int i = dto.getId() == null ? productionPrintOrderMapper.insert(productionPrintOrder) : productionPrintOrderMapper.updateById(productionPrintOrder);
    }
}
src/main/resources/mapper/production/ProductOrderMapper.xml
@@ -22,6 +22,7 @@
        pm.unit,
        ppr.process_route_code,
        pb.bom_no,
        sl.id as sales_ledger_id,
        ROUND(po.complete_quantity / po.quantity * 100, 2) AS completionStatus,
        DATEDIFF(sl.delivery_date, CURDATE()) AS delivery_days_diff,
        sl.delivery_date,
src/main/resources/mapper/production/ProductionPrintOrderMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.production.mapper.ProductionPrintOrderMapper">
</mapper>