package cn.iocoder.yudao.module.mes.controller.admin.pro.feedback.vo; import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; import cn.iocoder.yudao.module.mes.enums.DictTypeConstants; import cn.idev.excel.annotation.ExcelIgnoreUnannotated; import cn.idev.excel.annotation.ExcelProperty; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.List; @Schema(description = "管理后台 - MES 生产报工 Response VO") @Data @ExcelIgnoreUnannotated public class MesProFeedbackRespVO { @Schema(description = "首次提交时的关联设备编号快照,逗号分隔;旧历史记录可能为空") private String machineryIds; @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") @ExcelProperty("编号") private Long id; @Schema(description = "报工单编号", example = "FB202503160001") @ExcelProperty("报工单编号") private String code; @Schema(description = "报工类型", example = "1") @ExcelProperty(value = "报工类型", converter = DictConvert.class) @DictFormat(DictTypeConstants.MES_PRO_FEEDBACK_TYPE) private Integer type; @Schema(description = "报工途径", example = "PC") @ExcelProperty("报工途径") private String channel; @Schema(description = "报工时间") @ExcelProperty("报工时间") private LocalDateTime feedbackTime; @Schema(description = "工作站编号", example = "1") private Long workstationId; @Schema(description = "工作站编码", example = "WS-001") @ExcelProperty("工作站编码") private String workstationCode; @Schema(description = "工作站名称", example = "注塑工作站") @ExcelProperty("工作站名称") private String workstationName; @Schema(description = "工艺路线编号", example = "1") private Long routeId; @Schema(description = "工艺路线编码", example = "RT-001") private String routeCode; @Schema(description = "工序编号", example = "1") private Long processId; @Schema(description = "工序编码", example = "PR-001") @ExcelProperty("工序编码") private String processCode; @Schema(description = "工序名称", example = "注塑") @ExcelProperty("工序名称") private String processName; @Schema(description = "是否需要检验") private Boolean checkFlag; @Schema(description = "生产工单编号", example = "1") private Long workOrderId; @Schema(description = "工单编码", example = "MO202503120008") @ExcelProperty("工单编码") private String workOrderCode; @Schema(description = "销售明细盘号") @ExcelProperty("盘号") private String reelNo; @Schema(description = "工单名称", example = "博世螺丝刀") @ExcelProperty("工单名称") private String workOrderName; @Schema(description = "生产任务编号", example = "1") private Long taskId; @Schema(description = "任务编码", example = "PT202503150001") private String taskCode; @Schema(description = "产品物料编号", example = "75") private Long itemId; @Schema(description = "物料编码", example = "I-075") @ExcelProperty("物料编码") private String itemCode; @Schema(description = "物料名称", example = "博世螺丝刀") @ExcelProperty("物料名称") private String itemName; @Schema(description = "规格型号", example = "一字型") @ExcelProperty("规格型号") private String itemSpecification; @Schema(description = "单位编号", example = "202") private Long unitMeasureId; @Schema(description = "单位名称", example = "个") @ExcelProperty("单位") private String unitMeasureName; @Schema(description = "过期日期") private LocalDateTime expireDate; @Schema(description = "生产批号", example = "LOT20260321") private String lotNumber; @Schema(description = "排产数量", example = "5000.00") @ExcelProperty("排产数量") private BigDecimal scheduledQuantity; @Schema(description = "本次报工数量", example = "500.00") @ExcelProperty("报工数量") private BigDecimal feedbackQuantity; @Schema(description = "合格品数量", example = "490.00") @ExcelProperty("合格品数量") private BigDecimal qualifiedQuantity; @Schema(description = "不良品数量", example = "10.00") @ExcelProperty("不良品数量") private BigDecimal unqualifiedQuantity; @Schema(description = "待检测数量", example = "0") @ExcelProperty("待检测数量") private BigDecimal uncheckQuantity; @Schema(description = "工废数量", example = "6.00") private BigDecimal laborScrapQuantity; @Schema(description = "料废数量", example = "4.00") private BigDecimal materialScrapQuantity; @Schema(description = "其他废品数量", example = "0") private BigDecimal otherScrapQuantity; @Schema(description = "计费类型:1-计时 2-计件", example = "2") @ExcelProperty("计费类型") private Integer billingType; @Schema(description = "工资定额:计时为元/小时,计件为元/件", example = "12.50") @ExcelProperty("工资定额") private BigDecimal wageRate; @Schema(description = "主计价设备编号", example = "8") private Long machineryId; @Schema(description = "主计价设备名称", example = "挤塑机-01") private String machineryName; @Schema(description = "命中的工序工资单价规则编号") private Long wageRuleId; @Schema(description = "本次报工工时(小时)", example = "8.00") @ExcelProperty("报工工时") private BigDecimal workHours; @Schema(description = "本次报工工资(含辅助工资与质量调整)", example = "100.00") @ExcelProperty("报工工资") private BigDecimal wageAmount; @Schema(description = "辅助计薪工时(小时)", example = "0.50") private BigDecimal auxPaidHours; @Schema(description = "本次辅助工资", example = "15.00") @ExcelProperty("辅助工资") private BigDecimal auxWageAmount; @Schema(description = "质量合格率(%)", example = "97.50") private BigDecimal qualityPassRate; @Schema(description = "质量系数", example = "0.9200") private BigDecimal qualityCoefficient; @Schema(description = "质量扣款", example = "0.00") private BigDecimal qualityDeduction; @Schema(description = "工资计算明细快照(JSON)") private String wageBreakdown; @Schema(description = "本次生产长度(米),仅用于计算标准工时", example = "1000.00") @ExcelProperty("生产长度(米)") private BigDecimal productionLength; @Schema(description = "标准工时(小时),只用于考核对比", example = "1.25") @ExcelProperty("标准工时") private BigDecimal standardWorkHours; @Schema(description = "标准工时-主工时(小时)", example = "1.00") private BigDecimal standardPrimaryHours; @Schema(description = "标准工时-辅助工时(小时)", example = "0.25") private BigDecimal standardAuxHours; @Schema(description = "标准工时计算依据", example = "线速度 45.60 米/分;生产长度 1000.00 米,主工时 0.37h;辅助工时 0.25h") private String stdCalcNote; @Schema(description = "工时差异(小时)= 实际工时 - 标准工时", example = "0.35") @ExcelProperty("工时差异") private BigDecimal workHoursDiff; @Schema(description = "工时差异率(%)= (实际 - 标准) ÷ 标准 × 100", example = "28.00") @ExcelProperty("工时差异率(%)") private BigDecimal workHoursDiffRate; @Schema(description = "是否超出工时考核阈值", example = "true") private Boolean standardWarnFlag; @Schema(description = "工时考核提示", example = "本次报工工时 1.60h 高于标准工时 1.25h 达 28.00%,超过 20% 阈值,请核对工时或辅助项次数") private String standardWarnMessage; @Schema(description = "辅助工时录入明细") private List auxList; @Schema(description = "报工用户编号", example = "1") private Long feedbackUserId; @Schema(description = "报工人昵称", example = "张三") @ExcelProperty("报工人") private String feedbackUserNickname; @Schema(description = "审核用户编号", example = "1") private Long approveUserId; @Schema(description = "审核人昵称", example = "李四") @ExcelProperty("审核人") private String approveUserNickname; @Schema(description = "状态", example = "0") @ExcelProperty(value = "状态", converter = DictConvert.class) @DictFormat(DictTypeConstants.MES_PRO_FEEDBACK_STATUS) private Integer status; @Schema(description = "备注", example = "备注") @ExcelProperty("备注") private String remark; @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) @ExcelProperty("创建时间") private LocalDateTime createTime; @Schema(description = "BPM 流程实例编号") @ExcelProperty("BPM 流程实例编号") private String processInstanceId; @Schema(description = "BPM 流程定义 Key") @ExcelProperty("BPM 流程定义 Key") private String processDefinitionKey; @Schema(description = "本次报工对应的任务参数值(按任务参数记录快照展示)") private List paramValues; @Data @Schema(description = "报工辅助工时明细") public static class AuxResp { @Schema(description = "辅助工时项目编号", example = "1024") private Long auxItemId; @Schema(description = "辅助项目名称", example = "上下放线盘") private String itemName; @Schema(description = "计量方式:1-按次 2-按个 3-按盘 4-按米折算", example = "2") private Integer measureType; @Schema(description = "次数/个数/盘数/米数", example = "2.00") private BigDecimal quantity; @Schema(description = "换色起始材料", example = "PVC") private String materialFrom; @Schema(description = "换色目标材料", example = "LSZH") private String materialTo; @Schema(description = "折算分钟数", example = "10.00") private BigDecimal minutes; @Schema(description = "备注") private String remark; } @Data @Schema(description = "报工参数值") public static class ParamValueResp { @Schema(description = "任务参数记录明细编号", example = "1") private Long detailId; @Schema(description = "参数编码", example = "PP2024001") private String paramCode; @Schema(description = "参数名称", example = "温度") private String paramName; @Schema(description = "参数类型", example = "2") private Integer paramType; @Schema(description = "计量单位名称", example = "℃") private String unitMeasureName; @Schema(description = "参数值", example = "200") private String paramValue; @Schema(description = "是否必填", example = "true") private Boolean required; } }