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; /** * 质检单的可报告数据(单头 + 检验项) *

* 四类质检单(来料/过程/出货/退货)共用本结构:各自独有的字段(供应商、客户、工单、批次) * 都放进同一组字段里,用不上的留空,调用方不必按类型分支。 */ @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; /** * 是否已完成检验。 *

* 直接给结论而不是让调用方去比 {@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 items = new ArrayList<>(); /** * 在本单里没有子项、因而没能合并成组的分组项名称(如「正丁醇含量」但只选了它自己)。 *

* 这类指标按独立检验项照常出在报告里,只是组名跨不住任何行; * 但「本该是组却没组起来」必须让调用方知道。 */ private List childlessGroupNames = new ArrayList<>(); /** * 在本单里没有自己的检验行、被补出一行来放组名与公式的分组项名称。 *

* 检验行是从检验模板生成的,模板只选了子项没选组头时就会这样。 * 补一行是为了不把组名和公式丢掉(那正是分组检验项要还原的东西), * 但「这一行不是单据上的原始行」得让调用方知道。 */ private List synthesizedGroupNames = new ArrayList<>(); /** 单据行引用了已被删除的指标、因而跳过的条数 */ private int missingIndicatorCount; }