6 小时以前 9bad721754fe8bbe2e5f459d0706e0fefac569f3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
package cn.iocoder.yudao.module.mes.api.qc.dto;
 
import lombok.Data;
 
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
 
/**
 * 质检单的可报告数据(单头 + 检验项)
 * <p>
 * 四类质检单(来料/过程/出货/退货)共用本结构:各自独有的字段(供应商、客户、工单、批次)
 * 都放进同一组字段里,用不上的留空,调用方不必按类型分支。
 */
@Data
public class MesQcReportRespDTO {
 
    // ==================== 单据标识 ====================
 
    /** 质检类型:1 来料 2 过程 3 出货 4 退货 */
    private Integer qcType;
    /** 质检类型名称,如「来料检验」 */
    private String qcTypeName;
 
    private Long qcId;
    /** 单号,如 IQC_20260917001 */
    private String qcCode;
    /** 单据名称,如「精萘来料检验-0917」 */
    private String qcName;
 
    /** 单据状态:见 MesQcStatusEnum */
    private Integer status;
    private String statusName;
    /**
     * 是否已完成检验。
     * <p>
     * 直接给结论而不是让调用方去比 {@code status} 的数值:那个数值的含义只在 MES 侧成立,
     * 调用方不该为了判断「能不能出报告」去认识 MES 的状态码表。
     */
    private boolean finished;
 
    /** 检验判定:1 合格 2 特采 3 不合格退货 4 不合格报废;未判定为 null */
    private Integer checkResult;
    private String checkResultText;
 
    /** 对应的 MES 检验模板编号(不是报告模板) */
    private Long templateId;
 
    /** 来源单据类型与单号 */
    private Integer sourceDocType;
    private String sourceDocCode;
 
    // ==================== 物料 ====================
 
    private Long itemId;
    private String itemCode;
    private String itemName;
    private String itemSpecification;
    /** 物料的计量单位名称 */
    private String unitName;
 
    // ==================== 各类型独有 ====================
 
    /** 供应商名称(来料检验) */
    private String vendorName;
    /** 供应商批次(来料检验) */
    private String vendorBatch;
    /** 客户名称(出货检验) */
    private String clientName;
    /** 批次号(出货 / 退货检验) */
    private String batchCode;
    /** 生产工单号(过程检验) */
    private String workOrderCode;
 
    // ==================== 数量与判定 ====================
 
    private BigDecimal checkQuantity;
    private BigDecimal qualifiedQuantity;
    private BigDecimal unqualifiedQuantity;
 
    private LocalDateTime inspectDate;
    /** 检验员姓名 */
    private String inspectorName;
 
    private String remark;
 
    // ==================== 明细 ====================
 
    /**
     * 检验项列表,已按「样品 × 指标」摊平,并按分组结构排好序
     * (组头行在前、组内子项紧跟其后,组与独立项之间按指标的排序号)。
     */
    private List<MesQcReportItemRespDTO> items = new ArrayList<>();
 
    /**
     * 在本单里没有子项、因而没能合并成组的分组项名称(如「正丁醇含量」但只选了它自己)。
     * <p>
     * 这类指标按独立检验项照常出在报告里,只是组名跨不住任何行;
     * 但「本该是组却没组起来」必须让调用方知道。
     */
    private List<String> childlessGroupNames = new ArrayList<>();
 
    /**
     * 在本单里没有自己的检验行、被补出一行来放组名与公式的分组项名称。
     * <p>
     * 检验行是从检验模板生成的,模板只选了子项没选组头时就会这样。
     * 补一行是为了不把组名和公式丢掉(那正是分组检验项要还原的东西),
     * 但「这一行不是单据上的原始行」得让调用方知道。
     */
    private List<String> synthesizedGroupNames = new ArrayList<>();
 
    /** 单据行引用了已被删除的指标、因而跳过的条数 */
    private int missingIndicatorCount;
 
}