diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/mold/MoldBrandController.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/mold/MoldBrandController.java index f60eeb3d1a..ccbb475bad 100644 --- a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/mold/MoldBrandController.java +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/mold/MoldBrandController.java @@ -106,7 +106,7 @@ public class MoldBrandController { @Operation(summary = "获得模具分页") @Parameter(name = "brandId", description = "型号id") @PreAuthorize("@ss.hasPermission('erp:mold-brand:query')") - public CommonResult> getMoldPage(PageParam pageReqVO, @RequestParam("brandId") Long brandId) { + public CommonResult> getMoldPage(PageParam pageReqVO, @RequestParam(value = "brandId", required = false) Long brandId) { return success(moldBrandService.getMoldPage(pageReqVO, brandId)); } diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/mold/vo/MoldBrandRespVO.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/mold/vo/MoldBrandRespVO.java index d5125adff9..ca0e6de7ee 100644 --- a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/mold/vo/MoldBrandRespVO.java +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/mold/vo/MoldBrandRespVO.java @@ -71,8 +71,8 @@ public class MoldBrandRespVO { private LocalDateTime createTime; @Schema(description = "工序", example = "你说的对") + @ExcelProperty(value = "工序", converter = DictConvert.class) @DictFormat("mes_org_type") - @ExcelProperty(value = "工序") private String orgType; // , converter = OrgTypeConverter.class } \ 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/mold/MoldMapper.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/mold/MoldMapper.java index f20c5284eb..c42aed010e 100644 --- a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/mold/MoldMapper.java +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/mold/MoldMapper.java @@ -21,7 +21,7 @@ public interface MoldMapper extends BaseMapperX { default PageResult selectPage(PageParam reqVO, Long brandId) { return selectPage(reqVO, new LambdaQueryWrapperX() - .eq(MoldDO::getBrandId, brandId) + .eqIfPresent(MoldDO::getBrandId, brandId) .orderByDesc(MoldDO::getId)); } @@ -33,7 +33,7 @@ public interface MoldMapper extends BaseMapperX { return selectList(new LambdaQueryWrapperX() .eqIfPresent(MoldDO::getCode, reqVO.getCode()) .likeIfPresent(MoldDO::getName, reqVO.getName()) - .eq(MoldDO::getBrandId, reqVO.getBrandId()) + .eqIfPresent(MoldDO::getBrandId, reqVO.getBrandId()) .orderByDesc(MoldDO::getId)); } diff --git a/yudao-module-mes/yudao-module-mes-api/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java b/yudao-module-mes/yudao-module-mes-api/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java index da3ef9d026..d9875c9c65 100644 --- a/yudao-module-mes/yudao-module-mes-api/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java +++ b/yudao-module-mes/yudao-module-mes-api/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java @@ -9,6 +9,12 @@ import cn.iocoder.yudao.framework.common.exception.ErrorCode; */ public interface ErrorCodeConstants { + + ErrorCode MOLD_REPAIR_ID_NULL = new ErrorCode(5_0090, "维修单ID不能为空"); + ErrorCode MOLD_REPAIR_MAPPER_NULL = new ErrorCode(5_0091, "维修单行数据Mapper初始化失败"); + ErrorCode MOLD_REPAIR_LINE_NULL = new ErrorCode(5_0092, "维修单行数据不能为空"); + ErrorCode MOLD_REPAIR_SUBJECT_ID_NULL = new ErrorCode(5_0093, "维修项目ID不能为空"); + ErrorCode BOM_NOT_EXISTS = new ErrorCode(5_001, "产品BOM不存在"); ErrorCode BOM_EXISTS = new ErrorCode(5_002, "产品BOM已存在"); ErrorCode ORGANIZATION_NOT_EXISTS = new ErrorCode(5_0011, "产线工位不存在"); diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldrepair/MoldRepairController.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldrepair/MoldRepairController.java new file mode 100644 index 0000000000..23d3cd5ad2 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldrepair/MoldRepairController.java @@ -0,0 +1,149 @@ +package cn.iocoder.yudao.module.mes.controller.admin.moldrepair; + +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; +import cn.iocoder.yudao.module.mes.controller.admin.moldrepair.vo.MoldRepairPageReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.moldrepair.vo.MoldRepairRespVO; +import cn.iocoder.yudao.module.mes.controller.admin.moldrepair.vo.MoldRepairSaveReqVO; +import cn.iocoder.yudao.module.mes.dal.dataobject.moldrepair.MoldRepairDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.moldrepair.MoldRepairLineDO; +import cn.iocoder.yudao.module.mes.service.moldrepair.MoldRepairService; +import cn.iocoder.yudao.module.system.api.user.AdminUserApi; +import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; +import java.io.IOException; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - 设备维修记录") +@RestController +@RequestMapping("/mes/mold-repair") +@Validated +public class MoldRepairController { + + @Resource + private MoldRepairService moldRepairService; + + @Resource + private AdminUserApi adminUserApi; + + @PostMapping("/create") + @Operation(summary = "创建设备维修记录") + @PreAuthorize("@ss.hasPermission('mes:mold-repair:create')") + public CommonResult createMoldRepair(@Valid @RequestBody MoldRepairSaveReqVO createReqVO) { + return success(moldRepairService.createMoldRepair(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新设备维修记录") + @PreAuthorize("@ss.hasPermission('mes:mold-repair:update')") + public CommonResult updateMoldRepair(@Valid @RequestBody MoldRepairSaveReqVO updateReqVO) { + moldRepairService.updateMoldRepair(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除设备维修记录") + @Parameter(name = "ids", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('mes:mold-repair:delete')") + public CommonResult deleteMoldRepair(@RequestParam("ids") String ids) { + + // 将逗号分隔的字符串转换为Long类型的List + List idList = Arrays.stream(ids.split(",")) + .map(String::trim) // 去除可能存在的空格 + .map(Long::valueOf) + .collect(Collectors.toList()); + moldRepairService.deleteMoldRepair(idList); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得设备维修记录") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('mes:mold-repair:query')") + public CommonResult getMoldRepair(@RequestParam("id") Long id) { + MoldRepairDO moldRepair = moldRepairService.getMoldRepair(id); + return success(BeanUtils.toBean(moldRepair, MoldRepairRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得设备维修记录分页") + @PreAuthorize("@ss.hasPermission('mes:mold-repair:query')") + public CommonResult> getMoldRepairPage(@Valid MoldRepairPageReqVO pageReqVO) { + PageResult pageResult = moldRepairService.getMoldRepairPage(pageReqVO); + PageResult moldRepairRespVOPageResult = BeanUtils.toBean(pageResult, MoldRepairRespVO.class); + return success(buildCreatorName(moldRepairRespVOPageResult)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出设备维修记录 Excel") + @PreAuthorize("@ss.hasPermission('mes:mold-repair:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportMoldRepairExcel(@Valid MoldRepairPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = moldRepairService.getMoldRepairPage(pageReqVO).getList(); + List moldRepairRespVOList = BeanUtils.toBean(list, MoldRepairRespVO.class); + for (MoldRepairRespVO moldSubjectRespVO : moldRepairRespVOList) { + if (moldSubjectRespVO.getAcceptedBy() !=null) { + AdminUserRespDTO user = adminUserApi.getUser(Long.valueOf(moldSubjectRespVO.getAcceptedBy())); + moldSubjectRespVO.setAcceptedBy("(" + user.getUsername() + ")" + user.getNickname()); + } + if (moldSubjectRespVO.getConfirmBy() !=null) { + AdminUserRespDTO user = adminUserApi.getUser(Long.valueOf(moldSubjectRespVO.getConfirmBy())); + moldSubjectRespVO.setConfirmBy("(" + user.getUsername() + ")" + user.getNickname()); + } + if (moldSubjectRespVO.getStatus() !=null) { + moldSubjectRespVO.setStatusName(moldSubjectRespVO.getStatus() != null ? + (moldSubjectRespVO.getStatus() == 0 ? "待完成" : "已完成") : null); + } + + } + // 导出 Excel + ExcelUtils.write(response, "设备维修记录.xls", "数据", MoldRepairRespVO.class,moldRepairRespVOList); + } + + // ==================== 子表(设备维修记录行) ==================== + + @GetMapping("/mold-repair-line/list-by-repair-id") + @Operation(summary = "获得设备维修记录行列表") + @Parameter(name = "repairId", description = "维修单ID") + @PreAuthorize("@ss.hasPermission('mes:mold-repair:query')") + public CommonResult> getMoldRepairLineListByRepairId(@RequestParam("repairId") Long repairId) { + return success(moldRepairService.getMoldRepairLineListByRepairId(repairId)); + } + + + private PageResult buildCreatorName(PageResult moldSubjectRespVOPageResult) { + for (MoldRepairRespVO moldSubjectRespVO : moldSubjectRespVOPageResult.getList()) { + if (moldSubjectRespVO.getAcceptedBy() !=null) { + AdminUserRespDTO user = adminUserApi.getUser(Long.valueOf(moldSubjectRespVO.getAcceptedBy())); + moldSubjectRespVO.setAcceptedBy("(" + user.getUsername() + ")" + user.getNickname()); + } + if (moldSubjectRespVO.getConfirmBy() !=null) { + AdminUserRespDTO user = adminUserApi.getUser(Long.valueOf(moldSubjectRespVO.getConfirmBy())); + moldSubjectRespVO.setConfirmBy("(" + user.getUsername() + ")" + user.getNickname()); + } + } + + return moldSubjectRespVOPageResult; + } + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldrepair/enums/MoldRecordStatusEnum.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldrepair/enums/MoldRecordStatusEnum.java new file mode 100644 index 0000000000..c517dea0c5 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldrepair/enums/MoldRecordStatusEnum.java @@ -0,0 +1,36 @@ +package cn.iocoder.yudao.module.mes.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-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldrepair/vo/MoldRepairPageReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldrepair/vo/MoldRepairPageReqVO.java new file mode 100644 index 0000000000..ac8d76db0f --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldrepair/vo/MoldRepairPageReqVO.java @@ -0,0 +1,76 @@ +package cn.iocoder.yudao.module.mes.controller.admin.moldrepair.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +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-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldrepair/vo/MoldRepairRespVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldrepair/vo/MoldRepairRespVO.java new file mode 100644 index 0000000000..ebf7fe9176 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldrepair/vo/MoldRepairRespVO.java @@ -0,0 +1,113 @@ +package cn.iocoder.yudao.module.mes.controller.admin.moldrepair.vo; + +import cn.iocoder.yudao.module.mes.controller.admin.moldrepair.enums.MoldRecordStatusEnum; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import java.util.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; +import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; +import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; + +@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-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldrepair/vo/MoldRepairSaveReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldrepair/vo/MoldRepairSaveReqVO.java new file mode 100644 index 0000000000..e1afd0e832 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/moldrepair/vo/MoldRepairSaveReqVO.java @@ -0,0 +1,84 @@ +package cn.iocoder.yudao.module.mes.controller.admin.moldrepair.vo; + +import cn.iocoder.yudao.module.mes.dal.dataobject.moldrepair.MoldRepairLineDO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +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-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/moldrepair/MoldRepairDO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/moldrepair/MoldRepairDO.java new file mode 100644 index 0000000000..c40f70bfdc --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/moldrepair/MoldRepairDO.java @@ -0,0 +1,117 @@ +package cn.iocoder.yudao.module.mes.dal.dataobject.moldrepair; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; + +/** + * 模具维修记录 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 +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-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/moldrepair/MoldRepairLineDO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/moldrepair/MoldRepairLineDO.java new file mode 100644 index 0000000000..aed8c3b19c --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/moldrepair/MoldRepairLineDO.java @@ -0,0 +1,75 @@ +package cn.iocoder.yudao.module.mes.dal.dataobject.moldrepair; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; + +/** + * 模具维修记录行 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 +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-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/moldrepair/MoldRepairLineMapper.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/moldrepair/MoldRepairLineMapper.java new file mode 100644 index 0000000000..4c3889e17a --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/moldrepair/MoldRepairLineMapper.java @@ -0,0 +1,28 @@ +package cn.iocoder.yudao.module.mes.dal.mysql.moldrepair; + +import java.util.*; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.mes.dal.dataobject.moldrepair.MoldRepairLineDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 设备维修记录行 Mapper + * + * @author 内蒙必硕 + */ +@Mapper +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-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/moldrepair/MoldRepairMapper.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/moldrepair/MoldRepairMapper.java new file mode 100644 index 0000000000..211a194c76 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/moldrepair/MoldRepairMapper.java @@ -0,0 +1,59 @@ +package cn.iocoder.yudao.module.mes.dal.mysql.moldrepair; + +import java.util.*; +import java.util.stream.Collectors; + +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.mes.dal.dataobject.moldrepair.MoldRepairDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.moldsubject.MoldSubjectDO; +import com.alibaba.excel.util.StringUtils; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.mes.controller.admin.moldrepair.vo.*; + +/** + * 设备维修记录 Mapper + * + * @author 内蒙必硕 + */ +@Mapper +public interface MoldRepairMapper extends BaseMapperX { + + default PageResult selectPage(MoldRepairPageReqVO reqVO) { + + + LambdaQueryWrapperX dvRepairDOLambdaQueryWrapperX = new LambdaQueryWrapperX<>(); + dvRepairDOLambdaQueryWrapperX + .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()); + dvRepairDOLambdaQueryWrapperX.in(MoldRepairDO::getId, idList); + } + + return selectPage(reqVO,dvRepairDOLambdaQueryWrapperX ); + } + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldrepair/MoldRepairService.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldrepair/MoldRepairService.java new file mode 100644 index 0000000000..76db64da0b --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldrepair/MoldRepairService.java @@ -0,0 +1,67 @@ +package cn.iocoder.yudao.module.mes.service.moldrepair; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.mes.controller.admin.moldrepair.vo.MoldRepairPageReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.moldrepair.vo.MoldRepairSaveReqVO; +import cn.iocoder.yudao.module.mes.dal.dataobject.moldrepair.MoldRepairDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.moldrepair.MoldRepairLineDO; + +import javax.validation.Valid; +import java.util.List; + +/** + * 设备维修记录 Service 接口 + * + * @author 内蒙必硕 + */ +public interface MoldRepairService { + + /** + * 创建设备维修记录 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createMoldRepair(@Valid MoldRepairSaveReqVO createReqVO); + + /** + * 更新设备维修记录 + * + * @param updateReqVO 更新信息 + */ + void updateMoldRepair(@Valid MoldRepairSaveReqVO updateReqVO); + + /** + * 删除设备维修记录 + * + * @param id 编号 + */ + void deleteMoldRepair(List idList); + + /** + * 获得设备维修记录 + * + * @param id 编号 + * @return 设备维修记录 + */ + MoldRepairDO getMoldRepair(Long id); + + /** + * 获得设备维修记录分页 + * + * @param pageReqVO 分页查询 + * @return 设备维修记录分页 + */ + PageResult getMoldRepairPage(MoldRepairPageReqVO pageReqVO); + + // ==================== 子表(设备维修记录行) ==================== + + /** + * 获得设备维修记录行列表 + * + * @param repairId 维修单ID + * @return 设备维修记录行列表 + */ + List getMoldRepairLineListByRepairId(Long repairId); + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldrepair/MoldRepairServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldrepair/MoldRepairServiceImpl.java new file mode 100644 index 0000000000..29b515ed8c --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldrepair/MoldRepairServiceImpl.java @@ -0,0 +1,177 @@ +package cn.iocoder.yudao.module.mes.service.moldrepair; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.iot.dal.dataobject.devicemodel.DeviceModelDO; +import cn.iocoder.yudao.module.mes.controller.admin.moldrepair.vo.MoldRepairPageReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.moldrepair.vo.MoldRepairSaveReqVO; +import cn.iocoder.yudao.module.mes.dal.dataobject.devicetype.DeviceTypeDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.moldrepair.MoldRepairDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.moldrepair.MoldRepairLineDO; +import cn.iocoder.yudao.module.mes.dal.mysql.moldrepair.MoldRepairLineMapper; +import cn.iocoder.yudao.module.mes.dal.mysql.moldrepair.MoldRepairMapper; +import cn.iocoder.yudao.module.mes.service.moldrepair.MoldRepairService; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; +import java.util.List; +import lombok.extern.slf4j.Slf4j; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.iot.enums.ErrorCodeConstants.DEVICE_MODEL_CODE_EXISTS; +import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; + +import org.springframework.util.CollectionUtils; +import cn.iocoder.yudao.framework.common.exception.ServiceException; + + +/** + * 设备维修记录 Service 实现类 + * + * @author 内蒙必硕 + */ +@Slf4j +@Service +@Validated +public class MoldRepairServiceImpl implements MoldRepairService { + + @Resource + private MoldRepairMapper moldRepairMapper; + @Resource + private MoldRepairLineMapper moldRepairLineMapper; + + @Override + @Transactional(rollbackFor = Exception.class) + public Long createMoldRepair(MoldRepairSaveReqVO createReqVO) { + + //编码重复判断 + Long count = moldRepairMapper.selectCount(new LambdaQueryWrapper() + .eq(MoldRepairDO::getRepairCode, createReqVO.getRepairCode()) + ); + + if (count > 0) { + throw exception(DV_REPAIR_CODE_EXISTS); + } + // 插入 + MoldRepairDO moldRepair = BeanUtils.toBean(createReqVO, MoldRepairDO.class); + moldRepairMapper.insert(moldRepair); + + // 插入子表 + createMoldRepairLineList(moldRepair.getId(), createReqVO.getMoldRepairLines()); + // 返回 + return moldRepair.getId(); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateMoldRepair(MoldRepairSaveReqVO updateReqVO) { + // 校验存在 + validateMoldRepairExists(updateReqVO.getId()); + + //编码重复判断 + Long count = moldRepairMapper.selectCount(new LambdaQueryWrapper() + .eq(MoldRepairDO::getRepairCode, updateReqVO.getRepairCode()) + .ne(MoldRepairDO::getId, updateReqVO.getId()) + + ); + + if (count > 0) { + throw exception(DV_REPAIR_CODE_EXISTS); + } + + // 更新 + MoldRepairDO updateObj = BeanUtils.toBean(updateReqVO, MoldRepairDO.class); + moldRepairMapper.updateById(updateObj); + + // 更新子表 + updateMoldRepairLineList(updateReqVO.getId(), updateReqVO.getMoldRepairLines()); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteMoldRepair(List idList) { + for (Long id : idList) { + // 校验存在 + validateMoldRepairExists(id); + // 删除 + moldRepairMapper.deleteById(id); + // 删除子表 + deleteMoldRepairLineByRepairId(id); + } + + } + + private void validateMoldRepairExists(Long id) { + if (moldRepairMapper.selectById(id) == null) { + throw exception(DV_REPAIR_NOT_EXISTS); + } + } + + @Override + public MoldRepairDO getMoldRepair(Long id) { + return moldRepairMapper.selectById(id); + } + + @Override + public PageResult getMoldRepairPage(MoldRepairPageReqVO pageReqVO) { + return moldRepairMapper.selectPage(pageReqVO); + } + + // ==================== 子表(设备维修记录行) ==================== + + @Override + public List getMoldRepairLineListByRepairId(Long repairId) { + return moldRepairLineMapper.selectListByRepairId(repairId); + } + +// private void createMoldRepairLineList(Long repairId, List list) { +// list.forEach(o -> o.setRepairId(repairId)); +// moldRepairLineMapper.insertBatch(list); +// } + private void createMoldRepairLineList(Long repairId, List list) { + // 2. 校验维修单ID非空 + if (repairId == null) { + log.error("创建维修单行数据失败:维修单ID为null"); + throw new ServiceException(MOLD_REPAIR_ID_NULL); + } + + // 3. 校验列表非空(核心:解决第125行空指针) + if (CollectionUtils.isEmpty(list)) { + log.warn("维修单{}暂无行数据,跳过行记录创建", repairId); + return; + } + + // 4. 遍历列表,校验每个元素非空并设置repairId + for (MoldRepairLineDO lineDO : list) { + if (lineDO == null) { + log.warn("维修单{}发现空的行数据,跳过处理", repairId); + continue; // 跳过空元素,不影响其他数据 + } + lineDO.setRepairId(repairId); // 设置主表关联ID + } + + // 5. 校验mapper是否注入(兜底) + if (moldRepairLineMapper == null) { + log.error("创建维修单行数据失败:moldRepairLineMapper未注入"); + throw new ServiceException(MOLD_REPAIR_MAPPER_NULL); + } + + // 6. 批量插入 + moldRepairLineMapper.insertBatch(list); + log.info("维修单{}成功创建{}条行数据", repairId, list.size()); + } + + private void updateMoldRepairLineList(Long repairId, List list) { + deleteMoldRepairLineByRepairId(repairId); + list.forEach(o -> o.setId(null).setUpdater(null).setUpdateTime(null)); // 解决更新情况下:1)id 冲突;2)updateTime 不更新 + createMoldRepairLineList(repairId, list); + } + + private void deleteMoldRepairLineByRepairId(Long repairId) { + moldRepairLineMapper.deleteByRepairId(repairId); + } + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldtaskmanagement/MoldTaskManagementServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldtaskmanagement/MoldTaskManagementServiceImpl.java index 0fed43f2c7..81c43e075e 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldtaskmanagement/MoldTaskManagementServiceImpl.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldtaskmanagement/MoldTaskManagementServiceImpl.java @@ -1,15 +1,15 @@ package cn.iocoder.yudao.module.mes.service.moldtaskmanagement; import cn.iocoder.yudao.module.erp.dal.dataobject.mold.MoldDO; -import cn.iocoder.yudao.module.mes.dal.dataobject.dvsubject.DvSubjectDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.moldsubject.MoldSubjectDO; import cn.iocoder.yudao.module.mes.dal.dataobject.moldplanmaintenance.MoldPlanMaintenanceDO; -import cn.iocoder.yudao.module.mes.dal.dataobject.subjectplan.SubjectPlanDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.subjectmoldplan.SubjectMoldPlanDO; import cn.iocoder.yudao.module.mes.dal.dataobject.moldticketmanagement.MoldTicketManagementDO; import cn.iocoder.yudao.module.mes.dal.dataobject.moldticketresults.MoldTicketResultsDO; import cn.iocoder.yudao.module.erp.dal.mysql.mold.MoldMapper; -import cn.iocoder.yudao.module.mes.dal.mysql.dvsubject.DvSubjectMapper; +import cn.iocoder.yudao.module.mes.dal.mysql.moldsubject.MoldSubjectMapper; import cn.iocoder.yudao.module.mes.dal.mysql.moldplanmaintenance.MoldPlanMaintenanceMapper; -import cn.iocoder.yudao.module.mes.dal.mysql.subjectplan.SubjectPlanMapper; +import cn.iocoder.yudao.module.mes.dal.mysql.subjectmoldplan.SubjectMoldPlanMapper; import cn.iocoder.yudao.module.mes.dal.mysql.moldticketmanagement.MoldTicketManagementMapper; import cn.iocoder.yudao.module.mes.dal.mysql.moldticketresults.MoldTicketResultsMapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; @@ -33,12 +33,16 @@ import cn.iocoder.yudao.module.mes.dal.mysql.moldtaskmanagement.MoldTaskManageme import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; +import org.springframework.util.CollectionUtils; +import lombok.extern.slf4j.Slf4j; + /** * 设备类型 Service 实现类 * * @author 内蒙必硕 */ @Service +@Slf4j @Validated public class MoldTaskManagementServiceImpl implements MoldTaskManagementService { @@ -58,11 +62,11 @@ public class MoldTaskManagementServiceImpl implements MoldTaskManagementService private MoldPlanMaintenanceMapper moldplanMaintenanceMapper; @Resource - private SubjectPlanMapper subjectPlanMapper; + private SubjectMoldPlanMapper subjectmoldPlanMapper; @Resource - private DvSubjectMapper dvSubjectMapper; + private MoldSubjectMapper moldSubjectMapper; @Override public Long createMoldTaskManagement(MoldTaskManagementSaveReqVO createReqVO) { @@ -103,19 +107,56 @@ public class MoldTaskManagementServiceImpl implements MoldTaskManagementService return moldtaskManagementMapper.selectById(id); } - @Override - public PageResult getMoldTaskManagementPage(MoldTaskManagementPageReqVO pageReqVO) { +// @Override +// public PageResult getMoldTaskManagementPage(MoldTaskManagementPageReqVO pageReqVO) { +// +// PageResult moldtaskManagementDOPageResult = moldtaskManagementMapper.selectPage(pageReqVO); +// for (MoldTaskManagementDO moldtaskManagementDO : moldtaskManagementDOPageResult.getList()) { +// MoldPlanMaintenanceDO moldplanMaintenanceDO = moldplanMaintenanceMapper.selectById(moldtaskManagementDO.getProjectForm()); +// moldtaskManagementDO.setProjectFormName(moldplanMaintenanceDO.getPlanName()); +// } +// +// +// return moldtaskManagementDOPageResult; +// } +@Override +public PageResult getMoldTaskManagementPage(MoldTaskManagementPageReqVO pageReqVO) { + // 1. 查询分页数据 + PageResult moldtaskManagementDOPageResult = moldtaskManagementMapper.selectPage(pageReqVO); + + // 2. 空列表直接返回,避免遍历空指针 + if (CollectionUtils.isEmpty(moldtaskManagementDOPageResult.getList())) { + return moldtaskManagementDOPageResult; + } - PageResult moldtaskManagementDOPageResult = moldtaskManagementMapper.selectPage(pageReqVO); - for (MoldTaskManagementDO moldtaskManagementDO : moldtaskManagementDOPageResult.getList()) { - MoldPlanMaintenanceDO moldplanMaintenanceDO = moldplanMaintenanceMapper.selectById(moldtaskManagementDO.getProjectForm()); - moldtaskManagementDO.setProjectFormName(moldplanMaintenanceDO.getPlanName()); + // 3. 遍历处理每条数据,添加全量空值校验 + for (MoldTaskManagementDO moldtaskManagementDO : moldtaskManagementDOPageResult.getList()) { + // 3.1 校验关联的维保计划ID(projectForm)非空 + Long projectFormId = moldtaskManagementDO.getProjectForm(); + if (projectFormId == null) { + log.warn("模具任务{}的维保计划ID为空,跳过计划名称填充", moldtaskManagementDO.getId()); + moldtaskManagementDO.setProjectFormName("无维保计划"); // 兜底默认值 + continue; } - - return moldtaskManagementDOPageResult; + // 3.2 查询维保计划 + MoldPlanMaintenanceDO moldplanMaintenanceDO = moldplanMaintenanceMapper.selectById(projectFormId); + + // 3.3 校验查询结果非空 + if (moldplanMaintenanceDO == null) { + log.warn("模具任务{}关联的维保计划{}不存在", moldtaskManagementDO.getId(), projectFormId); + moldtaskManagementDO.setProjectFormName("维保计划不存在"); // 兜底 + } else { + // 3.4 正常赋值(确保planName非空,避免空字符串) + String planName = moldplanMaintenanceDO.getPlanName(); + moldtaskManagementDO.setProjectFormName(planName == null ? "未命名维保计划" : planName); + } } + // 4. 返回处理后的结果 + return moldtaskManagementDOPageResult; +} + @Override public void createMoldTicket(Long id) { @@ -147,15 +188,15 @@ public class MoldTaskManagementServiceImpl implements MoldTaskManagementService moldticketManagementDO.setTaskEndTime(moldtaskManagementDO.getEndDate().atStartOfDay()); moldticketManagementMapper.insert(moldticketManagementDO); - List dvSubjectDOList = new ArrayList<>(); - List subjectPlanDOList = subjectPlanMapper.selectList(Wrappers.lambdaQuery().eq(SubjectPlanDO::getPlanId, moldticketManagementDO.getPlanId())); - for (SubjectPlanDO subjectPlanDO : subjectPlanDOList) { - DvSubjectDO dvSubjectDO = dvSubjectMapper.selectById(subjectPlanDO.getSubjectId()); + List moldSubjectDOList = new ArrayList<>(); + List subjectmoldPlanDOList = subjectmoldPlanMapper.selectList(Wrappers.lambdaQuery().eq(SubjectMoldPlanDO::getPlanId, moldticketManagementDO.getPlanId())); + for (SubjectMoldPlanDO subjectmoldPlanDO : subjectmoldPlanDOList) { + MoldSubjectDO moldSubjectDO = moldSubjectMapper.selectById(subjectmoldPlanDO.getSubjectId()); MoldTicketResultsDO moldticketResultsDO = new MoldTicketResultsDO(); - moldticketResultsDO.setInspectionItemName(dvSubjectDO.getSubjectName()); - moldticketResultsDO.setInspectionMethod(dvSubjectDO.getInspectionMethod()); - moldticketResultsDO.setJudgmentCriteria(dvSubjectDO.getJudgmentCriteria()); + moldticketResultsDO.setInspectionItemName(moldSubjectDO.getSubjectName()); + moldticketResultsDO.setInspectionMethod(moldSubjectDO.getInspectionMethod()); + moldticketResultsDO.setJudgmentCriteria(moldSubjectDO.getJudgmentCriteria()); moldticketResultsDO.setManagementId(moldticketManagementDO.getId()); moldticketResultsDO.setMoldId(moldId); moldticketResultsMapper.insert(moldticketResultsDO); diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/moldrepair/MoldRepairMapper.xml b/yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/moldrepair/MoldRepairMapper.xml new file mode 100644 index 0000000000..fc057b247d --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/moldrepair/MoldRepairMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file