diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/moldrepair/enums/MoldRecordStatusEnum.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/moldrepair/enums/MoldRecordStatusEnum.java new file mode 100644 index 000000000..43f26d393 --- /dev/null +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/moldrepair/enums/MoldRecordStatusEnum.java @@ -0,0 +1,36 @@ +package cn.iocoder.yudao.module.erp.controller.admin.moldrepair.enums; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 单据状态枚举 + */ +@Getter +@AllArgsConstructor +public enum MoldRecordStatusEnum { + + PENDING(0, "待完成"), + COMPLETED(1, "已完成"), + // 可以根据需要添加其他状态 + CANCELED(2, "已取消"); + + @JsonValue + private final Integer code; + private final String name; + + @JsonCreator + public static MoldRecordStatusEnum getByCode(Integer code) { + if (code == null) { + return null; + } + for (MoldRecordStatusEnum status : MoldRecordStatusEnum.values()) { + if (status.getCode().equals(code)) { + return status; + } + } + return null; + } +} \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/moldrepair/vo/MoldRepairPageReqVO.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/moldrepair/vo/MoldRepairPageReqVO.java new file mode 100644 index 000000000..ac92bca44 --- /dev/null +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/moldrepair/vo/MoldRepairPageReqVO.java @@ -0,0 +1,78 @@ +package cn.iocoder.yudao.module.erp.controller.admin.moldrepair.vo; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 模具维修记录分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class MoldRepairPageReqVO extends PageParam { + + @Schema(description = "维修单编号") + private String repairCode; + + @Schema(description = "维修单名称", example = "王五") + private String repairName; + + @Schema(description = "模具ID", example = "6979") + private Long moldId; + + @Schema(description = "模具编码") + private String moldCode; + + @Schema(description = "模具名称", example = "张三") + private String moldName; + + @Schema(description = "品牌") + private String moldBrand; + + @Schema(description = "规格型号") + private String moldSpec; + + @Schema(description = "模具类型", example = "1622") + private Long moldTypeId; + + @Schema(description = "报修日期") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] requireDate; + + @Schema(description = "完成日期") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] finishDate; + + @Schema(description = "验收日期") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] confirmDate; + + @Schema(description = "维修结果") + private String repairResult; + + @Schema(description = "维修人员") + private String acceptedBy; + + @Schema(description = "验收人员") + private String confirmBy; + + @Schema(description = "单据状态0-待完成 1-已完成", example = "1") + private Integer status; + + @Schema(description = "备注") + private String remark; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + + + @Schema(description = "ids集合导出用") + private String ids; +} \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/moldrepair/vo/MoldRepairRespVO.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/moldrepair/vo/MoldRepairRespVO.java new file mode 100644 index 000000000..8d158cf43 --- /dev/null +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/moldrepair/vo/MoldRepairRespVO.java @@ -0,0 +1,110 @@ +package cn.iocoder.yudao.module.erp.controller.admin.moldrepair.vo; + +import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 模具维修记录 Response VO") +@Data +@ExcelIgnoreUnannotated +public class MoldRepairRespVO { + + @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "27809") +// @ExcelProperty("ID") + private Long id; + + @Schema(description = "维修单编号", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("维修单编号") + private String repairCode; + + @Schema(description = "维修单名称", example = "王五") + @ExcelProperty("维修单名称") + private String repairName; + + @Schema(description = "模具ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "6979") +// @ExcelProperty("模具ID") + private Long moldId; + + @Schema(description = "模具编码", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("模具编码") + private String moldCode; + + @Schema(description = "模具名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三") + @ExcelProperty("模具名称") + private String moldName; + + @Schema(description = "品牌") +// @ExcelProperty("品牌") + private String moldBrand; + + @Schema(description = "规格型号") +// @ExcelProperty("规格型号") + private String moldSpec; + + @Schema(description = "模具类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1622") +// @ExcelProperty(value = "模具类型", converter = DictConvert.class) +// @DictFormat("mes_machine_type") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中 + private Long moldTypeId; + + @Schema(description = "报修日期") + @ExcelProperty("报修日期") + @ColumnWidth(20) + private LocalDateTime requireDate; + + @Schema(description = "完成日期") + @ExcelProperty("完成日期") + @ColumnWidth(20) + private LocalDateTime finishDate; + + @Schema(description = "验收日期") + @ExcelProperty("验收日期") + @ColumnWidth(20) + private LocalDateTime confirmDate; + + @Schema(description = "维修结果") + @ExcelProperty("维修结果") + private String repairResult; + + @Schema(description = "维修人员") + @ExcelProperty("维修人员") + private String acceptedBy; + + @Schema(description = "验收人员") + @ExcelProperty("验收人员") + private String confirmBy; + + @Schema(description = "单据状态", example = "1") + @ExcelProperty(value = "单据状态 0-待完成 1-已完成") + @DictFormat("mes_mold_record_status") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中 + private Integer status; + + @Schema(description = "单据状态", example = "1") + @ExcelProperty(value = "单据状态 0-待完成 1-已完成") + @DictFormat("mes_mold_record_status") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中 + private String statusName; + + @Schema(description = "备注", example = "你猜") + @ExcelProperty("备注") + private String remark; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + @ColumnWidth(20) + private LocalDateTime createTime; + + @Schema(description = "模具类型 1-模具 2-关键件", example = "你猜") + private Integer deviceType; + + @Schema(description = "模具Id", example = "你猜") + private Long deviceId; + + @Schema(description = "关键件Id", example = "你猜") + private Long componentId; + + +} \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/moldrepair/vo/MoldRepairSaveReqVO.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/moldrepair/vo/MoldRepairSaveReqVO.java new file mode 100644 index 000000000..0ab05362f --- /dev/null +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/moldrepair/vo/MoldRepairSaveReqVO.java @@ -0,0 +1,83 @@ +package cn.iocoder.yudao.module.erp.controller.admin.moldrepair.vo; + +import cn.iocoder.yudao.module.erp.dal.dataobject.moldrepair.MoldRepairLineDO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import java.time.LocalDateTime; +import java.util.List; + +@Schema(description = "管理后台 - 模具维修记录新增/修改 Request VO") +@Data +public class MoldRepairSaveReqVO { + + @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "27809") + private Long id; + + @Schema(description = "维修单编号", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "维修单编号不能为空") + private String repairCode; + + @Schema(description = "维修单名称", example = "王五") + private String repairName; + + @Schema(description = "模具ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "6979") +// @NotNull(message = "模具ID不能为空") + private Long moldId; + + @Schema(description = "模具编码", requiredMode = Schema.RequiredMode.REQUIRED) +// @NotEmpty(message = "模具编码不能为空") + private String moldCode; + + @Schema(description = "模具名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三") +// @NotEmpty(message = "模具名称不能为空") + private String moldName; + + @Schema(description = "品牌") + private String moldBrand; + + @Schema(description = "规格型号") + private String moldSpec; + + @Schema(description = "模具类型-待用", requiredMode = Schema.RequiredMode.REQUIRED, example = "1622") +// @NotNull(message = "模具类型不能为空") + private Long moldTypeId; + + @Schema(description = "报修日期") + private LocalDateTime requireDate; + + @Schema(description = "完成日期") + private LocalDateTime finishDate; + + @Schema(description = "验收日期") + private LocalDateTime confirmDate; + + @Schema(description = "维修结果") + private String repairResult; + + @Schema(description = "维修人员") + private String acceptedBy; + + @Schema(description = "验收人员") + private String confirmBy; + + @Schema(description = "单据状态", example = "1") + private String status; + + @Schema(description = "备注", example = "你猜") + private String remark; + + @Schema(description = "模具维修记录行列表") + private List moldRepairLines; + + @Schema(description = "模具类型 1-模具 2-关键件") + private Integer deviceType; + + @Schema(description = "模具Id") + private Long deviceId; + + @Schema(description = "关键件Id") + private Long componentId; + +} \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/moldticketmanagement/enums/MoldPlanTypeEnum.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/moldticketmanagement/enums/MoldPlanTypeEnum.java new file mode 100644 index 000000000..5713775fd --- /dev/null +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/moldticketmanagement/enums/MoldPlanTypeEnum.java @@ -0,0 +1,87 @@ +package cn.iocoder.yudao.module.erp.controller.admin.moldticketmanagement.enums; + +import lombok.Getter; + +import java.util.Arrays; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 计划类型枚举 + * 1-点检 2-保养 + */ +@Getter +public enum MoldPlanTypeEnum { + + INSPECTION(1, "点检"), + MAINTENANCE(2, "保养"); + + private final Integer code; + private final String description; + + MoldPlanTypeEnum(Integer code, String description) { + this.code = code; + this.description = description; + } + + /** + * 根据code获取枚举 + */ + public static MoldPlanTypeEnum getByCode(Integer code) { + if (code == null) { + return null; + } + for (MoldPlanTypeEnum type : values()) { + if (type.getCode().equals(code)) { + return type; + } + } + return null; + } + + /** + * 根据code获取描述 + */ + public static String getDescriptionByCode(Integer code) { + MoldPlanTypeEnum type = getByCode(code); + return type != null ? type.getDescription() : "未知"; + } + + /** + * 检查code是否有效 + */ + public static boolean isValidCode(Integer code) { + return getByCode(code) != null; + } + + /** + * 获取所有code列表 + */ + public static List getAllCodes() { + return Arrays.stream(values()) + .map(MoldPlanTypeEnum::getCode) + .collect(Collectors.toList()); + } + + /** + * 获取所有描述列表 + */ + public static List getAllDescriptions() { + return Arrays.stream(values()) + .map(MoldPlanTypeEnum::getDescription) + .collect(Collectors.toList()); + } + + /** + * 获取code和描述的映射 + */ + public static Map getCodeDescriptionMap() { + Map map = new LinkedHashMap<>(); + for (MoldPlanTypeEnum type : values()) { + map.put(type.getCode(), type.getDescription()); + } + return map; + } +} \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/moldticketmanagement/vo/MoldTicketManagementBatchUpdateReqVO.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/moldticketmanagement/vo/MoldTicketManagementBatchUpdateReqVO.java new file mode 100644 index 000000000..e4486aaf8 --- /dev/null +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/moldticketmanagement/vo/MoldTicketManagementBatchUpdateReqVO.java @@ -0,0 +1,20 @@ +package cn.iocoder.yudao.module.erp.controller.admin.moldticketmanagement.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +// 1. 新增请求VO +@Data +public class MoldTicketManagementBatchUpdateReqVO { + + @Schema(description = "工单ID列表,用逗号分隔", example = "1,2,3") + @NotBlank(message = "工单ID不能为空") + private String ids; + + @Schema(description = "作业状态", example = "2") + @NotNull(message = "作业状态不能为空") + private Integer jobStatus ; // 默认值为2 +} \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/moldticketmanagement/vo/MoldTicketManagementPageReqVO.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/moldticketmanagement/vo/MoldTicketManagementPageReqVO.java new file mode 100644 index 000000000..6f87722a7 --- /dev/null +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/moldticketmanagement/vo/MoldTicketManagementPageReqVO.java @@ -0,0 +1,63 @@ +package cn.iocoder.yudao.module.erp.controller.admin.moldticketmanagement.vo; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 项目方案关联分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class MoldTicketManagementPageReqVO extends PageParam { + + @Schema(description = "项目ID", example = "21368") + private Long taskId; + + @Schema(description = "方案ID", example = "20459") + private Long planId; + + @Schema(description = "单号") + private String planNo; + + @Schema(description = "设备名称", example = "张三") + private String moldName; + + @Schema(description = "类型(1-点检 2-保养)", example = "2") + private String planType; + + @Schema(description = "计划配置名称", example = "赵六") + private String configName; + + @Schema(description = "作业状态", example = "1") + private Integer jobStatus; + + @Schema(description = "作业结果") + private String jobResult; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + + + @Schema(description = "id集合导出用") + private String ids; + + + /** + * 作业开始时间 + */ + private String taskTime; + + /** + * 作业结束时间 + */ + private String taskEndTime; + +} \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/moldticketmanagement/vo/MoldTicketManagementRespVO.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/moldticketmanagement/vo/MoldTicketManagementRespVO.java new file mode 100644 index 000000000..9934bd504 --- /dev/null +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/moldticketmanagement/vo/MoldTicketManagementRespVO.java @@ -0,0 +1,91 @@ +package cn.iocoder.yudao.module.erp.controller.admin.moldticketmanagement.vo; + +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 项目方案关联 Response VO") +@Data +@ExcelIgnoreUnannotated +public class MoldTicketManagementRespVO extends BaseDO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "6566") + @ExcelProperty("id") + private Long id; + + @Schema(description = "任务Id", example = "21368") +// @ExcelProperty("项目ID") + private Long taskId; + + @Schema(description = "方案ID", example = "20459") +// @ExcelProperty("方案ID") + private Long planId; + + @Schema(description = "单号") + @ExcelProperty("单号") + private String planNo; + + @Schema(description = "设备名称", example = "张三") + @ExcelProperty("设备名称") + private String moldName; + + @Schema(description = "类型", example = "2") + @ExcelProperty("类型") + private String planType; + + @Schema(description = "计划配置名称", example = "赵六") + @ExcelProperty("计划配置名称") + private String configName; + + @Schema(description = "作业状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @ExcelProperty("作业状态") + private Integer jobStatus; + + @Schema(description = "作业结果") + @ExcelProperty("作业结果") + private Integer jobResult; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + + + + /** + * 作业开始时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonSerialize(using = LocalDateTimeSerializer.class) + @JsonDeserialize(using = LocalDateTimeDeserializer.class) + private LocalDateTime taskTime; + + /** + * 作业结束时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonSerialize(using = LocalDateTimeSerializer.class) + @JsonDeserialize(using = LocalDateTimeDeserializer.class) + private LocalDateTime taskEndTime; + + + @Schema(description = "创建人名字") + @ExcelProperty("创建人名字") + private String creatorName; + + @Schema(description = "作业人") + private String operator; + @Schema(description = "作业人名称") + @ExcelProperty("作业人名称") + private String operatorName; + + +} \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/moldticketmanagement/vo/MoldTicketManagementSaveReqVO.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/moldticketmanagement/vo/MoldTicketManagementSaveReqVO.java new file mode 100644 index 000000000..772290330 --- /dev/null +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/moldticketmanagement/vo/MoldTicketManagementSaveReqVO.java @@ -0,0 +1,42 @@ +package cn.iocoder.yudao.module.erp.controller.admin.moldticketmanagement.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +@Schema(description = "管理后台 - 项目方案关联新增/修改 Request VO") +@Data +public class MoldTicketManagementSaveReqVO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "6566") + private Long id; + + @Schema(description = "项目ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "21368") + @NotNull(message = "项目ID不能为空") + private Long subjectId; + + @Schema(description = "方案ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "20459") + @NotNull(message = "方案ID不能为空") + private Long planId; + + @Schema(description = "单号") + private String planNo; + + @Schema(description = "设备名称", example = "张三") + private String moldName; + + @Schema(description = "类型", example = "2") + private String planType; + + @Schema(description = "计划配置名称", example = "赵六") + private String configName; + + @Schema(description = "作业状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "作业状态不能为空") + private Integer jobStatus; + + @Schema(description = "作业结果") + private Integer jobResult; + +} \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/moldticketresults/enums/MoldJobResultEnum.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/moldticketresults/enums/MoldJobResultEnum.java new file mode 100644 index 000000000..55ae7df0f --- /dev/null +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/moldticketresults/enums/MoldJobResultEnum.java @@ -0,0 +1,109 @@ +package cn.iocoder.yudao.module.erp.controller.admin.moldticketresults.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 作业结果枚举 + */ +@Getter +@AllArgsConstructor +public enum MoldJobResultEnum { + + /** + * 待完成 + */ + PENDING(0, "待完成"), + + /** + * 通过 + */ + PASS(1, "通过"), + + /** + * 不通过 + */ + FAIL(2, "不通过"); + + /** + * 结果编码 + */ + private final Integer code; + + /** + * 结果描述 + */ + private final String description; + + /** + * 根据编码获取枚举 + */ + public static MoldJobResultEnum getByCode(Integer code) { + if (code == null) { + return null; + } + for (MoldJobResultEnum status : values()) { + if (status.getCode().equals(code)) { + return status; + } + } + return null; + } + + /** + * 判断编码是否有效 + */ + public static boolean isValidCode(Integer code) { + return getByCode(code) != null; + } + + /** + * 获取所有编码 + */ + public static List getAllCodes() { + return Arrays.stream(values()) + .map(MoldJobResultEnum::getCode) + .collect(Collectors.toList()); + } + + /** + * 获取所有描述 + */ + public static List getAllDescriptions() { + return Arrays.stream(values()) + .map(MoldJobResultEnum::getDescription) + .collect(Collectors.toList()); + } + + /** + * 是否为待完成 + */ + public boolean isPending() { + return this == PENDING; + } + + /** + * 是否为通过 + */ + public boolean isPass() { + return this == PASS; + } + + /** + * 是否为不通过 + */ + public boolean isFail() { + return this == FAIL; + } + + /** + * 是否已完成(通过或不通过都算完成) + */ + public boolean isCompleted() { + return this == PASS || this == FAIL; + } +} \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/moldticketresults/vo/MoldTicketResultsPageReqVO.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/moldticketresults/vo/MoldTicketResultsPageReqVO.java new file mode 100644 index 000000000..20358ac48 --- /dev/null +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/moldticketresults/vo/MoldTicketResultsPageReqVO.java @@ -0,0 +1,49 @@ +package cn.iocoder.yudao.module.erp.controller.admin.moldticketresults.vo; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 工单检验结果分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class MoldTicketResultsPageReqVO extends PageParam { + + @Schema(description = "检验项名称", example = "赵六") + private String inspectionItemName; + + @Schema(description = "检验方式") + private String inspectionMethod; + + @Schema(description = "判定基准") + private String judgmentCriteria; + + @Schema(description = "检验结果 0-待检测 1-检测通过 2-检测不通过") + private Integer inspectionResult; + + @Schema(description = "图片路径") + private String images; + + @Schema(description = "备注", example = "你说的对") + private String remark; + + @Schema(description = "检验时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] inspectionTime; + + @Schema(description = "工单管理Id") + private Long managementId; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/moldticketresults/vo/MoldTicketResultsRespVO.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/moldticketresults/vo/MoldTicketResultsRespVO.java new file mode 100644 index 000000000..b7e9a3f17 --- /dev/null +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/moldticketresults/vo/MoldTicketResultsRespVO.java @@ -0,0 +1,56 @@ +package cn.iocoder.yudao.module.erp.controller.admin.moldticketresults.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 工单检验结果 Response VO") +@Data +@ExcelIgnoreUnannotated +public class MoldTicketResultsRespVO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "30557") + @ExcelProperty("id") + private Long id; + + @Schema(description = "检验项名称", example = "赵六") + @ExcelProperty("检验项名称") + private String inspectionItemName; + + @Schema(description = "检验方式") + @ExcelProperty("检验方式") + private String inspectionMethod; + + @Schema(description = "判定基准") + @ExcelProperty("判定基准") + private String judgmentCriteria; + + @Schema(description = "检验结果 0-待检测 1-检测通过 2-检测不通过") + @ExcelProperty("检验结果 0-待检测 1-检测通过 2-检测不通过") + private Integer inspectionResult; + + @Schema(description = "图片路径") + @ExcelProperty("图片路径") + private String images; + + @Schema(description = "备注", example = "你说的对") + @ExcelProperty("备注") + private String remark; + + @Schema(description = "检验时间") + @ExcelProperty("检验时间") + private LocalDateTime inspectionTime; + + @Schema(description = "工单管理Id") + private Long managementId; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + + @Schema(description = "模具Id") + private Long moldId; +} \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/moldticketresults/vo/MoldTicketResultsSaveReqVO.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/moldticketresults/vo/MoldTicketResultsSaveReqVO.java new file mode 100644 index 000000000..81428e1eb --- /dev/null +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/moldticketresults/vo/MoldTicketResultsSaveReqVO.java @@ -0,0 +1,42 @@ +package cn.iocoder.yudao.module.erp.controller.admin.moldticketresults.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 工单检验结果新增/修改 Request VO") +@Data +public class MoldTicketResultsSaveReqVO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "30557") + private Long id; + + @Schema(description = "检验项名称", example = "赵六") + private String inspectionItemName; + + @Schema(description = "工单管理Id") + private Long managementId; + + @Schema(description = "检验方式") + private String inspectionMethod; + + @Schema(description = "判定基准") + private String judgmentCriteria; + + @Schema(description = "检验结果 0-待检测 1-检测通过 2-检测不通过") + private Integer inspectionResult; + + @Schema(description = "图片路径") + private String images; + + @Schema(description = "备注", example = "你说的对") + private String remark; + + @Schema(description = "检验时间") + private LocalDateTime inspectionTime; + + @Schema(description = "检验人") + private String inspector; + +} \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/moldrepair/MoldRepairDO.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/moldrepair/MoldRepairDO.java new file mode 100644 index 000000000..8a35552a9 --- /dev/null +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/moldrepair/MoldRepairDO.java @@ -0,0 +1,117 @@ +package cn.iocoder.yudao.module.erp.dal.dataobject.moldrepair; + +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.*; +import org.apache.ibatis.type.Alias; + +import java.time.LocalDateTime; + +/** + * 模具维修记录 DO + * + * @author 内蒙必硕 + */ +@TableName("mes_mold_repair") +@KeySequence("mes_mold_repair_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Alias("ErpMoldRepairDO") +public class MoldRepairDO extends BaseDO { + + /** + * ID + */ + @TableId + private Long id; + /** + * 维修单编号 + */ + private String repairCode; + /** + * 维修单名称 + */ + private String repairName; + /** + * 模具ID + */ + private Long moldId; + /** + * 模具编码 + */ + private String moldCode; + /** + * 模具名称 + */ + private String moldName; + /** + * 品牌 + */ + private String moldBrand; + /** + * 规格型号 + */ + private String moldSpec; + /** + * 模具类型 + * + * 枚举 {@link TODO mes_machine_type 对应的类} + */ + private Long moldTypeId; + /** + * 报修日期 + */ + private LocalDateTime requireDate; + /** + * 完成日期 + */ + private LocalDateTime finishDate; + /** + * 验收日期 + */ + private LocalDateTime confirmDate; + /** + * 维修结果 + */ + private String repairResult; + /** + * 维修人员 + */ + private String acceptedBy; + /** + * 验收人员 + */ + private String confirmBy; + /** + * 单据状态0-待完成 1-已完成 + * + * 枚举 {@link TODO mes_mold_record_status 对应的类} + */ + private Integer status; + /** + * 备注 + */ + private String remark; + + /** + * 模具类型 1-模具 2-关键件 + */ + private Integer moldType; + + /** + * 设备Id + */ + private Long deviceId; + + /** + * 关键件Id + */ + private Long componentId; + +} \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/moldrepair/MoldRepairLineDO.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/moldrepair/MoldRepairLineDO.java new file mode 100644 index 000000000..ca1cfa7e4 --- /dev/null +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/moldrepair/MoldRepairLineDO.java @@ -0,0 +1,76 @@ +package cn.iocoder.yudao.module.erp.dal.dataobject.moldrepair; + +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.*; +import org.apache.ibatis.type.Alias; + +/** + * 模具维修记录行 DO + * + * @author 内蒙必硕 + */ +@TableName("mes_mold_repair_line") +@KeySequence("mes_mold_repair_line_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Alias("ErpMoldRepairLineDO") +public class MoldRepairLineDO extends BaseDO { + + /** + * ID + */ + @TableId + private Long id; + /** + * 维修单ID + */ + private Long repairId; + /** + * 项目ID + */ + private Long subjectId; + /** + * 项目编码 + */ + private String subjectCode; + /** + * 项目名称 + */ + private String subjectName; + /** + * 项目类型 + */ + private String subjectType; + /** + * 项目内容 + */ + private String subjectContent; + /** + * 标准 + */ + private String subjectStandard; + /** + * 故障描述 + */ + private String malfunction; + /** + * 故障描述资源 + */ + private String malfunctionUrl; + /** + * 维修情况 + */ + private String repairDes; + /** + * 备注 + */ + private String remark; + +} \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/moldticketresults/MoldTicketResultsDO.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/moldticketresults/MoldTicketResultsDO.java new file mode 100644 index 000000000..8209eabc2 --- /dev/null +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/moldticketresults/MoldTicketResultsDO.java @@ -0,0 +1,70 @@ +package cn.iocoder.yudao.module.erp.dal.dataobject.moldticketresults; + +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.*; +import org.apache.ibatis.type.Alias; + +import java.time.LocalDateTime; + +/** + * 工单检验结果 DO + * + * @author 内蒙必硕 + */ +@TableName("mes_mold_ticket_results") +@KeySequence("mes_mold_ticket_results_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Alias("ErpMoldTicketResultsDO") +public class MoldTicketResultsDO extends BaseDO { + + /** + * id + */ + @TableId + private Long id; + /** + * 检验项名称 + */ + private String inspectionItemName; + /** + * 检验方式 + */ + private String inspectionMethod; + /** + * 判定基准 + */ + private String judgmentCriteria; + /** + * 检验结果 0-待检测 1-检测通过 2-检测不通过 + */ + private Integer inspectionResult; + /** + * 图片路径 + */ + private String images; + /** + * 备注 + */ + private String remark; + /** + * 检验时间 + */ + private LocalDateTime inspectionTime; + /** + * 检验人 + */ + private Long managementId; + /** + * 模具id + */ + private Long moldId; + +} \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/moldrepair/MoldRepairLineMapper.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/moldrepair/MoldRepairLineMapper.java new file mode 100644 index 000000000..d3d110813 --- /dev/null +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/moldrepair/MoldRepairLineMapper.java @@ -0,0 +1,27 @@ +package cn.iocoder.yudao.module.erp.dal.mysql.moldrepair; + +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.erp.dal.dataobject.moldrepair.MoldRepairLineDO; +import org.apache.ibatis.annotations.Mapper; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * 设备维修记录行 Mapper + * + * @author 内蒙必硕 + */ +@Mapper +@Repository("erpMoldRepairLineMapper") +public interface MoldRepairLineMapper extends BaseMapperX { + + default List selectListByRepairId(Long repairId) { + return selectList(MoldRepairLineDO::getRepairId, repairId); + } + + default int deleteByRepairId(Long repairId) { + return delete(MoldRepairLineDO::getRepairId, repairId); + } + +} \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/moldrepair/MoldRepairMapper.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/moldrepair/MoldRepairMapper.java new file mode 100644 index 000000000..0a8a00eee --- /dev/null +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/moldrepair/MoldRepairMapper.java @@ -0,0 +1,61 @@ +package cn.iocoder.yudao.module.erp.dal.mysql.moldrepair; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.module.erp.controller.admin.moldrepair.vo.MoldRepairPageReqVO; +import cn.iocoder.yudao.module.erp.dal.dataobject.moldrepair.MoldRepairDO; +import com.alibaba.excel.util.StringUtils; +import org.apache.ibatis.annotations.Mapper; +import org.springframework.stereotype.Repository; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 设备维修记录 Mapper + * + * @author 内蒙必硕 + */ +@Mapper +@Repository("erpMoldRepairMapper") +public interface MoldRepairMapper extends BaseMapperX { + + default PageResult selectPage(MoldRepairPageReqVO reqVO) { + + + LambdaQueryWrapperX moldRepairDOLambdaQueryWrapperX = new LambdaQueryWrapperX<>(); + moldRepairDOLambdaQueryWrapperX + .eqIfPresent(MoldRepairDO::getRepairCode, reqVO.getRepairCode()) + .likeIfPresent(MoldRepairDO::getRepairName, reqVO.getRepairName()) + .eqIfPresent(MoldRepairDO::getMoldId, reqVO.getMoldId()) + .eqIfPresent(MoldRepairDO::getMoldCode, reqVO.getMoldCode()) + .likeIfPresent(MoldRepairDO::getMoldName, reqVO.getMoldName()) + .eqIfPresent(MoldRepairDO::getMoldBrand, reqVO.getMoldBrand()) + .eqIfPresent(MoldRepairDO::getMoldSpec, reqVO.getMoldSpec()) + .eqIfPresent(MoldRepairDO::getMoldTypeId, reqVO.getMoldTypeId()) + .betweenIfPresent(MoldRepairDO::getRequireDate, reqVO.getRequireDate()) + .betweenIfPresent(MoldRepairDO::getFinishDate, reqVO.getFinishDate()) + .betweenIfPresent(MoldRepairDO::getConfirmDate, reqVO.getConfirmDate()) + .eqIfPresent(MoldRepairDO::getRepairResult, reqVO.getRepairResult()) + .eqIfPresent(MoldRepairDO::getAcceptedBy, reqVO.getAcceptedBy()) + .eqIfPresent(MoldRepairDO::getConfirmBy, reqVO.getConfirmBy()) + .eqIfPresent(MoldRepairDO::getStatus, reqVO.getStatus()) + .eqIfPresent(MoldRepairDO::getRemark, reqVO.getRemark()) + .betweenIfPresent(MoldRepairDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(MoldRepairDO::getCreateTime); + + // 单独处理 ids 条件 + if (StringUtils.isNotBlank(reqVO.getIds())) { + List idList = Arrays.stream(reqVO.getIds().split(",")) + .map(String::trim) + .map(Long::valueOf) + .collect(Collectors.toList()); + moldRepairDOLambdaQueryWrapperX.in(MoldRepairDO::getId, idList); + } + + return selectPage(reqVO,moldRepairDOLambdaQueryWrapperX ); + } + +} \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/moldticketresults/MoldTicketResultsMapper.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/moldticketresults/MoldTicketResultsMapper.java new file mode 100644 index 000000000..e85a26875 --- /dev/null +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/moldticketresults/MoldTicketResultsMapper.java @@ -0,0 +1,38 @@ +package cn.iocoder.yudao.module.erp.dal.mysql.moldticketresults; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.module.erp.controller.admin.moldticketresults.vo.MoldTicketResultsPageReqVO; +import cn.iocoder.yudao.module.erp.dal.dataobject.moldticketresults.MoldTicketResultsDO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * 工单检验结果 Mapper + * + * @author 内蒙必硕 + */ +@Mapper +@Repository("erpMoldTicketResultsMapper") +public interface MoldTicketResultsMapper extends BaseMapperX { + + default PageResult selectPage(MoldTicketResultsPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .likeIfPresent(MoldTicketResultsDO::getInspectionItemName, reqVO.getInspectionItemName()) + .eqIfPresent(MoldTicketResultsDO::getInspectionMethod, reqVO.getInspectionMethod()) + .eqIfPresent(MoldTicketResultsDO::getJudgmentCriteria, reqVO.getJudgmentCriteria()) + .eqIfPresent(MoldTicketResultsDO::getInspectionResult, reqVO.getInspectionResult()) + .eqIfPresent(MoldTicketResultsDO::getImages, reqVO.getImages()) + .eqIfPresent(MoldTicketResultsDO::getRemark, reqVO.getRemark()) + .betweenIfPresent(MoldTicketResultsDO::getInspectionTime, reqVO.getInspectionTime()) + .eqIfPresent(MoldTicketResultsDO::getManagementId, reqVO.getManagementId()) + .betweenIfPresent(MoldTicketResultsDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(MoldTicketResultsDO::getId)); + } + + List findByMoldIdAndPlanType(@Param("moldId") Long moldId,@Param("planType") Integer planType); +} \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/resources/mapper/moldticketresults/MoldTicketResultsMapper.xml b/yudao-module-erp/yudao-module-erp-biz/src/main/resources/mapper/moldticketresults/MoldTicketResultsMapper.xml new file mode 100644 index 000000000..a176f6edc --- /dev/null +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/resources/mapper/moldticketresults/MoldTicketResultsMapper.xml @@ -0,0 +1,30 @@ + + + + + + + + \ No newline at end of file diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipe/RecipeController.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipe/RecipeController.java index 5ad269f9f..b24922f92 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipe/RecipeController.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipe/RecipeController.java @@ -95,6 +95,7 @@ public CommonResult> getRecipePage(@Valid RecipePageReq HttpServletResponse response) throws IOException { pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); List list = recipeService.getRecipePage(pageReqVO).getList(); + PageResult pageResult = recipeService.getRecipePage(pageReqVO); // 导出 Excel ExcelUtils.write(response, "配方管理主.xls", "数据", RecipeRespVO.class, BeanUtils.toBean(list, RecipeRespVO.class)); diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipe/vo/RecipePageReqVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipe/vo/RecipePageReqVO.java index b68dfc384..ddeabd2d3 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipe/vo/RecipePageReqVO.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipe/vo/RecipePageReqVO.java @@ -15,19 +15,25 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_ @ToString(callSuper = true) public class RecipePageReqVO extends PageParam { - @Schema(description = "配方名称", example = "李四") + @Schema(description = "配方名称", example = "赵六") private String name; @Schema(description = "配方编码") private String recipeCode; - @Schema(description = "关联配方类型", example = "2") + @Schema(description = "配方类型(关联配方类型表code)", example = "2") private String recipeType; - @Schema(description = "关联产品名字", example = "赵六") + @Schema(description = "关联产品名称", example = "李四") private String productName; - @Schema(description = "关联设备名字", example = "赵六") + @Schema(description = "关联设备ID(关联iot_device.id)", example = "14725") + private Long machineId; + + @Schema(description = "关联设备编码(冗余字段)") + private String machineCode; + + @Schema(description = "关联设备名称(冗余字段)", example = "芋艿") private String machineName; @Schema(description = "配方描述") @@ -43,8 +49,4 @@ public class RecipePageReqVO extends PageParam { @Schema(description = "数据单位") private String dataUnit; - // 新增:多选导出的ids字段(逗号分隔的id字符串,如"1,2,3") - @Schema(description = "多选导出ID集合(逗号分隔)", example = "1,2,3") - private String ids; - } \ No newline at end of file diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipe/vo/RecipeRespVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipe/vo/RecipeRespVO.java index 80dec1c43..82beec117 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipe/vo/RecipeRespVO.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipe/vo/RecipeRespVO.java @@ -12,11 +12,11 @@ import com.alibaba.excel.annotation.*; @ExcelIgnoreUnannotated public class RecipeRespVO { - @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "631") -// @ExcelProperty("主键ID") + @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "6587") + @ExcelProperty("主键ID") private Long id; - @Schema(description = "配方名称", example = "李四") + @Schema(description = "配方名称", example = "赵六") @ExcelProperty("配方名称") private String name; @@ -24,36 +24,40 @@ public class RecipeRespVO { @ExcelProperty("配方编码") private String recipeCode; - @Schema(description = "关联配方类型", example = "2") - @ExcelProperty("配方类型") + @Schema(description = "配方类型(关联配方类型表code)", example = "2") + @ExcelProperty("配方类型(关联配方类型表code)") private String recipeType; - @Schema(description = "关联产品名字", example = "赵六") - @ExcelProperty("关联产品") + @Schema(description = "关联产品名称", example = "李四") + @ExcelProperty("关联产品名称") private String productName; - @Schema(description = "关联设备名字", example = "赵六") - @ExcelProperty("关联设备") + @Schema(description = "关联设备ID(关联iot_device.id)", example = "14725") + @ExcelProperty("关联设备ID(关联iot_device.id)") + private Long machineId; + + @Schema(description = "关联设备编码(冗余字段)") + @ExcelProperty("关联设备编码(冗余字段)") + private String machineCode; + + @Schema(description = "关联设备名称(冗余字段)", example = "芋艿") + @ExcelProperty("关联设备名称(冗余字段)") private String machineName; @Schema(description = "配方描述") - @ExcelProperty("备注") + @ExcelProperty("配方描述") private String recipeDesc; @Schema(description = "是否启用(0-禁用,1-启用)", requiredMode = Schema.RequiredMode.REQUIRED) -// @ExcelProperty("是否启用(0-禁用,1-启用)") + @ExcelProperty("是否启用(0-禁用,1-启用)") private Boolean isEnable; @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) -// @ExcelProperty("创建时间") + @ExcelProperty("创建时间") private LocalDateTime createTime; @Schema(description = "数据单位") -// @ExcelProperty("数据单位") + @ExcelProperty("数据单位") private String dataUnit; - @Schema(description = "关联设备ID", example = "1001") -// @ExcelProperty("关联设备ID") - private Long deviceId; - } \ No newline at end of file diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/recipe/RecipeMapper.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/recipe/RecipeMapper.java index 680c84cb8..7bdca08e3 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/recipe/RecipeMapper.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/recipe/RecipeMapper.java @@ -1,16 +1,13 @@ package cn.iocoder.yudao.module.iot.dal.mysql.recipe; import java.util.*; -import java.util.stream.Collectors; -import com.alibaba.excel.util.StringUtils; import cn.iocoder.yudao.framework.common.pojo.PageResult; -//import cn.iocoder.yudao.framework.common.util.StringUtils; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.module.iot.dal.dataobject.recipe.RecipeDO; import org.apache.ibatis.annotations.Mapper; -import cn.iocoder.yudao.module.iot.controller.admin.recipe.vo.RecipePageReqVO; +import cn.iocoder.yudao.module.iot.controller.admin.recipe.vo.*; /** * 配方管理主 Mapper @@ -21,33 +18,19 @@ import cn.iocoder.yudao.module.iot.controller.admin.recipe.vo.RecipePageReqVO; public interface RecipeMapper extends BaseMapperX { default PageResult selectPage(RecipePageReqVO reqVO) { - // 1. 先创建查询条件对象 - LambdaQueryWrapperX queryWrapper = new LambdaQueryWrapperX() - // 原有所有查询条件(保留不变) + return selectPage(reqVO, new LambdaQueryWrapperX() .likeIfPresent(RecipeDO::getName, reqVO.getName()) - .likeIfPresent(RecipeDO::getRecipeCode, reqVO.getRecipeCode()) + .eqIfPresent(RecipeDO::getRecipeCode, reqVO.getRecipeCode()) .eqIfPresent(RecipeDO::getRecipeType, reqVO.getRecipeType()) .likeIfPresent(RecipeDO::getProductName, reqVO.getProductName()) + .eqIfPresent(RecipeDO::getMachineId, reqVO.getMachineId()) + .eqIfPresent(RecipeDO::getMachineCode, reqVO.getMachineCode()) .likeIfPresent(RecipeDO::getMachineName, reqVO.getMachineName()) .eqIfPresent(RecipeDO::getRecipeDesc, reqVO.getRecipeDesc()) .eqIfPresent(RecipeDO::getIsEnable, reqVO.getIsEnable()) .betweenIfPresent(RecipeDO::getCreateTime, reqVO.getCreateTime()) .eqIfPresent(RecipeDO::getDataUnit, reqVO.getDataUnit()) - .orderByDesc(RecipeDO::getId); - - // 2. 新增:处理ids多选导出条件(和参考代码逻辑一致) - if (StringUtils.isNotBlank(reqVO.getIds())) { - // 将逗号分隔的ids字符串转为Long类型的List - List idList = Arrays.stream(reqVO.getIds().split(",")) - .map(String::trim) // 去除空格,避免空字符导致转换失败 - .map(Long::valueOf) // 转为Long类型 - .collect(Collectors.toList()); - // 添加idIn条件,只查询指定ids的记录 - queryWrapper.in(RecipeDO::getId, idList); - } - - // 3. 执行分页查询 - return selectPage(reqVO, queryWrapper); + .orderByDesc(RecipeDO::getId)); } } \ No newline at end of file diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/recipetype/RecipeTypeMapper.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/recipetype/RecipeTypeMapper.java index ada0bc9d6..ae4d3bc64 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/recipetype/RecipeTypeMapper.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/recipetype/RecipeTypeMapper.java @@ -1,16 +1,11 @@ package cn.iocoder.yudao.module.iot.dal.mysql.recipetype; import java.util.*; -import java.util.stream.Collectors; -import cn.iocoder.yudao.module.iot.controller.admin.recipe.vo.RecipePageReqVO; -import com.alibaba.excel.util.StringUtils; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.module.iot.dal.dataobject.recipe.RecipeDO; import cn.iocoder.yudao.module.iot.dal.dataobject.recipetype.RecipeTypeDO; -import com.alibaba.excel.util.StringUtils; import org.apache.ibatis.annotations.Mapper; import cn.iocoder.yudao.module.iot.controller.admin.recipetype.vo.*; @@ -19,71 +14,18 @@ import cn.iocoder.yudao.module.iot.controller.admin.recipetype.vo.*; * * @author 内蒙必硕 */ -//@Mapper -//public interface RecipeTypeMapper extends BaseMapperX { -// -// default PageResult selectPage(RecipeTypePageReqVO reqVO) { -// LambdaQueryWrapperX queryWrapper = new LambdaQueryWrapperX() -//// return selectPage(reqVO, new LambdaQueryWrapperX() -// .eqIfPresent(RecipeTypeDO::getCode, reqVO.getCode()) -// .likeIfPresent(RecipeTypeDO::getName, reqVO.getName()) -// .eqIfPresent(RecipeTypeDO::getProcess, reqVO.getProcess()) -// .eqIfPresent(RecipeTypeDO::getRemark, reqVO.getRemark()) -// .eqIfPresent(RecipeTypeDO::getSort, reqVO.getSort()) -// .betweenIfPresent(RecipeTypeDO::getCreateTime, reqVO.getCreateTime()) -// .orderByDesc(RecipeTypeDO::getId); -// -// // 新增:处理ids多选导出条件 -// if (StringUtils.isNotBlank(reqVO.getIds())) { -// List idList = Arrays.stream(reqVO.getIds().split(",")) -// .map(String::trim) -// .map(Long::valueOf) -// .collect(Collectors.toList()); -// queryWrapper.in(RecipeTypeDO::getId, idList); -// } -// -// return selectPage(reqVO, queryWrapper); -// -// -// } -// -//} - @Mapper public interface RecipeTypeMapper extends BaseMapperX { - // 原有selectPage方法保留,不动 default PageResult selectPage(RecipeTypePageReqVO reqVO) { - LambdaQueryWrapperX queryWrapper = buildQueryWrapper(reqVO); - return selectPage(reqVO, queryWrapper); - } - - // 新增:selectList方法,复用查询条件,仅查全部列表(解决Service报错) - default List selectList(RecipeTypePageReqVO reqVO) { - LambdaQueryWrapperX queryWrapper = buildQueryWrapper(reqVO); - return selectList(queryWrapper); // 调用BaseMapperX的selectList方法 - } - - // 抽取通用查询条件构造方法(复用,避免代码重复) - default LambdaQueryWrapperX buildQueryWrapper(RecipeTypePageReqVO reqVO) { - LambdaQueryWrapperX queryWrapper = new LambdaQueryWrapperX() + return selectPage(reqVO, new LambdaQueryWrapperX() .eqIfPresent(RecipeTypeDO::getCode, reqVO.getCode()) .likeIfPresent(RecipeTypeDO::getName, reqVO.getName()) .eqIfPresent(RecipeTypeDO::getProcess, reqVO.getProcess()) .eqIfPresent(RecipeTypeDO::getRemark, reqVO.getRemark()) .eqIfPresent(RecipeTypeDO::getSort, reqVO.getSort()) .betweenIfPresent(RecipeTypeDO::getCreateTime, reqVO.getCreateTime()) - .orderByDesc(RecipeTypeDO::getId); - - // 处理ids多选导出条件(复用原有逻辑) - if (StringUtils.isNotBlank(reqVO.getIds())) { - List idList = Arrays.stream(reqVO.getIds().split(",")) - .map(String::trim) - .map(Long::valueOf) - .collect(Collectors.toList()); - queryWrapper.in(RecipeTypeDO::getId, idList); - } - return queryWrapper; + .orderByDesc(RecipeTypeDO::getId)); } -} +} \ No newline at end of file diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipe/RecipeServiceImpl.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipe/RecipeServiceImpl.java index 3cf175759..6a4733a30 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipe/RecipeServiceImpl.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipe/RecipeServiceImpl.java @@ -1,129 +1,21 @@ -//package cn.iocoder.yudao.module.iot.service.recipe; -// -//import cn.iocoder.yudao.module.iot.enums.ErrorCodeConstants; -//import org.springframework.stereotype.Service; -//import javax.annotation.Resource; -//import org.springframework.validation.annotation.Validated; -//import org.springframework.transaction.annotation.Transactional; -// -//import java.util.*; -//import cn.iocoder.yudao.module.iot.controller.admin.recipe.vo.*; -//import cn.iocoder.yudao.module.iot.dal.dataobject.recipe.RecipeDO; -//import cn.iocoder.yudao.framework.common.pojo.PageResult; -//import cn.iocoder.yudao.framework.common.pojo.PageParam; -//import cn.iocoder.yudao.framework.common.util.object.BeanUtils; -// -//import cn.iocoder.yudao.module.iot.dal.mysql.recipe.RecipeMapper; -//import cn.iocoder.yudao.module.iot.dal.mysql.device.DeviceMapper; -// -//import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -//import static cn.iocoder.yudao.module.iot.enums.ErrorCodeConstants.*; -// -//import cn.iocoder.yudao.framework.common.exception.ServiceException; -//import cn.hutool.core.util.StrUtil; -//import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; -//import cn.iocoder.yudao.framework.common.exception.ServiceException; -// -//import cn.iocoder.yudao.module.iot.dal.dataobject.device.DeviceDO; // 引入现有DeviceDO -//import cn.iocoder.yudao.module.iot.dal.mysql.device.DeviceMapper; // 引入现有DeviceMapper -// -///** -// * 配方管理主 Service 实现类 -// * -// * @author 内蒙必硕 -// */ -//@Service -//@Validated -//public class RecipeServiceImpl implements RecipeService { -// -// @Resource -// private RecipeMapper recipeMapper; -// -//// @Override -//// public Long createRecipe(RecipeSaveReqVO createReqVO) { -//// // 插入 -//// RecipeDO recipe = BeanUtils.toBean(createReqVO, RecipeDO.class); -//// recipeMapper.insert(recipe); -//// // 返回 -//// return recipe.getId(); -//// } -//@Override -//public Long createRecipe(RecipeSaveReqVO createReqVO) { -// String recipeCode = createReqVO.getRecipeCode(); -// -// // 1. 校验recipeCode不为空(使用新增的RECIPE_CODE_EMPTY错误码) -// if (StrUtil.isBlank(recipeCode)) { -// throw new ServiceException(ErrorCodeConstants.RECIPE_CODE_EMPTY); -// } -// -// // 2. 校验recipeCode是否重复(使用新增的RECIPE_CODE_DUPLICATE错误码) -// boolean exists = recipeMapper.exists( -// new LambdaQueryWrapperX().eq(RecipeDO::getRecipeCode, recipeCode) -// ); -// if (exists) { -// throw new ServiceException(ErrorCodeConstants.RECIPE_CODE_DUPLICATE); -// } -// -// // ========== 原有逻辑保持不变 ========== -// RecipeDO recipe = BeanUtils.toBean(createReqVO, RecipeDO.class); -// recipeMapper.insert(recipe); -// return recipe.getId(); -//} -// -// @Override -// public void updateRecipe(RecipeSaveReqVO updateReqVO) { -// // 校验存在 -// validateRecipeExists(updateReqVO.getId()); -// // 更新 -// RecipeDO updateObj = BeanUtils.toBean(updateReqVO, RecipeDO.class); -// recipeMapper.updateById(updateObj); -// } -// -// @Override -// public void deleteRecipe(Long id) { -// // 校验存在 -// validateRecipeExists(id); -// // 删除 -// recipeMapper.deleteById(id); -// } -// -// private void validateRecipeExists(Long id) { -// if (recipeMapper.selectById(id) == null) { -// throw exception(RECIPE_NOT_EXISTS); -// } -// } -// -// @Override -// public RecipeDO getRecipe(Long id) { -// return recipeMapper.selectById(id); -// } -// -//} package cn.iocoder.yudao.module.iot.service.recipe; -import cn.iocoder.yudao.module.iot.enums.ErrorCodeConstants; -import cn.iocoder.yudao.module.iot.controller.admin.recipe.vo.RecipePageReqVO; -import cn.iocoder.yudao.module.iot.controller.admin.recipe.vo.RecipeRespVO; -import cn.iocoder.yudao.module.iot.controller.admin.recipe.vo.RecipeSaveReqVO; -import cn.iocoder.yudao.module.iot.dal.dataobject.device.DeviceDO; -import cn.iocoder.yudao.module.iot.dal.dataobject.recipe.RecipeDO; -import cn.iocoder.yudao.module.iot.dal.mysql.device.DeviceMapper; -import cn.iocoder.yudao.module.iot.dal.mysql.recipe.RecipeMapper; -import cn.iocoder.yudao.framework.common.exception.ServiceException; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.util.object.BeanUtils; -import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; -import cn.hutool.core.util.StrUtil; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; -import javax.annotation.Resource; import java.util.*; -import java.util.stream.Collectors; +import cn.iocoder.yudao.module.iot.controller.admin.recipe.vo.*; +import cn.iocoder.yudao.module.iot.dal.dataobject.recipe.RecipeDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; + +import cn.iocoder.yudao.module.iot.dal.mysql.recipe.RecipeMapper; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.module.iot.enums.ErrorCodeConstants.RECIPE_NOT_EXISTS; +import static cn.iocoder.yudao.module.iot.enums.ErrorCodeConstants.*; /** * 配方管理主 Service 实现类 @@ -136,37 +28,30 @@ public class RecipeServiceImpl implements RecipeService { @Resource private RecipeMapper recipeMapper; - @Resource - private DeviceMapper deviceMapper; // 注入现有DeviceMapper - // ========== 原有方法保持不变 ========== @Override public Long createRecipe(RecipeSaveReqVO createReqVO) { - String recipeCode = createReqVO.getRecipeCode(); - if (StrUtil.isBlank(recipeCode)) { - throw new ServiceException(ErrorCodeConstants.RECIPE_CODE_EMPTY); - } - boolean exists = recipeMapper.exists( - new LambdaQueryWrapperX().eq(RecipeDO::getRecipeCode, recipeCode) - ); - if (exists) { - throw new ServiceException(ErrorCodeConstants.RECIPE_CODE_DUPLICATE); - } + // 插入 RecipeDO recipe = BeanUtils.toBean(createReqVO, RecipeDO.class); recipeMapper.insert(recipe); + // 返回 return recipe.getId(); } @Override public void updateRecipe(RecipeSaveReqVO updateReqVO) { + // 校验存在 validateRecipeExists(updateReqVO.getId()); + // 更新 RecipeDO updateObj = BeanUtils.toBean(updateReqVO, RecipeDO.class); recipeMapper.updateById(updateObj); } @Override public void deleteRecipe(Long id) { + // 校验存在 validateRecipeExists(id); + // 删除 recipeMapper.deleteById(id); } @@ -186,65 +71,4 @@ public class RecipeServiceImpl implements RecipeService { return recipeMapper.selectPage(pageReqVO); } - // ========== 新增带deviceId的方法(改为public,供Controller直接调用) ========== - /** - * 分页查询配方,包含deviceId字段 - */ - public PageResult getRecipePageWithDeviceId(RecipePageReqVO pageReqVO) { - // 1. 查询配方分页数据 - PageResult recipePage = recipeMapper.selectPage(pageReqVO); - List recipeList = recipePage.getList(); - if (recipeList.isEmpty()) { - return PageResult.empty(recipePage.getTotal()); - } - - // 2. 提取所有machineName,批量查询deviceId(避免N+1查询) - List machineNames = recipeList.stream() - .map(RecipeDO::getMachineName) - .filter(Objects::nonNull) - .distinct() - .collect(Collectors.toList()); - - // 调用现有DeviceMapper查询设备名称->ID映射 - List deviceList = deviceMapper.selectList( - new LambdaQueryWrapperX().in(DeviceDO::getDeviceName, machineNames) - ); - // 构建设备名称到ID的映射(处理重复名称,取第一个) - Map deviceName2IdMap = new HashMap<>(); - for (DeviceDO device : deviceList) { - deviceName2IdMap.putIfAbsent(device.getDeviceName(), device.getId()); - } - - // 3. 转换为VO并设置deviceId - List respVOList = new ArrayList<>(); - for (RecipeDO recipe : recipeList) { - RecipeRespVO respVO = BeanUtils.toBean(recipe, RecipeRespVO.class); - // 根据machineName关联设置deviceId - respVO.setDeviceId(deviceName2IdMap.get(recipe.getMachineName())); - respVOList.add(respVO); - } - - return new PageResult<>(respVOList, recipePage.getTotal()); - } - - /** - * 查询单个配方,包含deviceId字段 - */ - public RecipeRespVO getRecipeWithDeviceId(Long id) { - RecipeDO recipe = getRecipe(id); - if (recipe == null) { - return null; - } - RecipeRespVO respVO = BeanUtils.toBean(recipe, RecipeRespVO.class); - // 关联查询deviceId - if (recipe.getMachineName() != null) { - DeviceDO device = deviceMapper.selectOne( - new LambdaQueryWrapperX().eq(DeviceDO::getDeviceName, recipe.getMachineName()) - ); - if (device != null) { - respVO.setDeviceId(device.getId()); - } - } - return respVO; - } } \ No newline at end of file