Merge branch 'plp'

plp
86158 3 weeks ago
commit b5804ebf85

@ -114,7 +114,7 @@ public class MoldBrandController {
@Operation(summary = "获得模具分页")
@Parameter(name = "brandId", description = "型号id")
@PreAuthorize("@ss.hasPermission('erp:mold-brand:query')")
public CommonResult<PageResult<MoldRespVO>> getMoldPage(PageParam pageReqVO, @RequestParam("brandId") Long brandId) {
public CommonResult<PageResult<MoldRespVO>> getMoldPage(PageParam pageReqVO, @RequestParam(value = "brandId", required = false) Long brandId) {
return success(moldBrandService.getMoldPage(pageReqVO, brandId));
}

@ -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
}

@ -21,7 +21,7 @@ public interface MoldMapper extends BaseMapperX<MoldDO> {
default PageResult<MoldDO> selectPage(PageParam reqVO, Long brandId) {
return selectPage(reqVO, new LambdaQueryWrapperX<MoldDO>()
.eq(MoldDO::getBrandId, brandId)
.eqIfPresent(MoldDO::getBrandId, brandId)
.orderByDesc(MoldDO::getId));
}
@ -33,7 +33,7 @@ public interface MoldMapper extends BaseMapperX<MoldDO> {
return selectList(new LambdaQueryWrapperX<MoldDO>()
.eqIfPresent(MoldDO::getCode, reqVO.getCode())
.likeIfPresent(MoldDO::getName, reqVO.getName())
.eq(MoldDO::getBrandId, reqVO.getBrandId())
.eqIfPresent(MoldDO::getBrandId, reqVO.getBrandId())
.orderByDesc(MoldDO::getId));
}

@ -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, "产线工位不存在");

@ -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<Long> createMoldRepair(@Valid @RequestBody MoldRepairSaveReqVO createReqVO) {
return success(moldRepairService.createMoldRepair(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新设备维修记录")
@PreAuthorize("@ss.hasPermission('mes:mold-repair:update')")
public CommonResult<Boolean> 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<Boolean> deleteMoldRepair(@RequestParam("ids") String ids) {
// 将逗号分隔的字符串转换为Long类型的List
List<Long> 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<MoldRepairRespVO> 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<PageResult<MoldRepairRespVO>> getMoldRepairPage(@Valid MoldRepairPageReqVO pageReqVO) {
PageResult<MoldRepairDO> pageResult = moldRepairService.getMoldRepairPage(pageReqVO);
PageResult<MoldRepairRespVO> 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<MoldRepairDO> list = moldRepairService.getMoldRepairPage(pageReqVO).getList();
List<MoldRepairRespVO> 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<List<MoldRepairLineDO>> getMoldRepairLineListByRepairId(@RequestParam("repairId") Long repairId) {
return success(moldRepairService.getMoldRepairLineListByRepairId(repairId));
}
private PageResult<MoldRepairRespVO> buildCreatorName(PageResult<MoldRepairRespVO> 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;
}
}

@ -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;
}
}

@ -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;
}

@ -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;
}

@ -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<MoldRepairLineDO> moldRepairLines;
@Schema(description = "模具类型 1-模具 2-关键件")
private Integer deviceType;
@Schema(description = "模具Id")
private Long deviceId;
@Schema(description = "关键件Id")
private Long componentId;
}

@ -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;
}

@ -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;
}

@ -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<MoldRepairLineDO> {
default List<MoldRepairLineDO> selectListByRepairId(Long repairId) {
return selectList(MoldRepairLineDO::getRepairId, repairId);
}
default int deleteByRepairId(Long repairId) {
return delete(MoldRepairLineDO::getRepairId, repairId);
}
}

@ -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<MoldRepairDO> {
default PageResult<MoldRepairDO> selectPage(MoldRepairPageReqVO reqVO) {
LambdaQueryWrapperX<MoldRepairDO> 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<Long> idList = Arrays.stream(reqVO.getIds().split(","))
.map(String::trim)
.map(Long::valueOf)
.collect(Collectors.toList());
dvRepairDOLambdaQueryWrapperX.in(MoldRepairDO::getId, idList);
}
return selectPage(reqVO,dvRepairDOLambdaQueryWrapperX );
}
}

@ -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<Long> idList);
/**
*
*
* @param id
* @return
*/
MoldRepairDO getMoldRepair(Long id);
/**
*
*
* @param pageReqVO
* @return
*/
PageResult<MoldRepairDO> getMoldRepairPage(MoldRepairPageReqVO pageReqVO);
// ==================== 子表(设备维修记录行) ====================
/**
*
*
* @param repairId ID
* @return
*/
List<MoldRepairLineDO> getMoldRepairLineListByRepairId(Long repairId);
}

@ -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<MoldRepairDO>()
.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<MoldRepairDO>()
.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<Long> 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<MoldRepairDO> getMoldRepairPage(MoldRepairPageReqVO pageReqVO) {
return moldRepairMapper.selectPage(pageReqVO);
}
// ==================== 子表(设备维修记录行) ====================
@Override
public List<MoldRepairLineDO> getMoldRepairLineListByRepairId(Long repairId) {
return moldRepairLineMapper.selectListByRepairId(repairId);
}
// private void createMoldRepairLineList(Long repairId, List<MoldRepairLineDO> list) {
// list.forEach(o -> o.setRepairId(repairId));
// moldRepairLineMapper.insertBatch(list);
// }
private void createMoldRepairLineList(Long repairId, List<MoldRepairLineDO> 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<MoldRepairLineDO> list) {
deleteMoldRepairLineByRepairId(repairId);
list.forEach(o -> o.setId(null).setUpdater(null).setUpdateTime(null)); // 解决更新情况下1id 冲突2updateTime 不更新
createMoldRepairLineList(repairId, list);
}
private void deleteMoldRepairLineByRepairId(Long repairId) {
moldRepairLineMapper.deleteByRepairId(repairId);
}
}

@ -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<MoldTaskManagementDO> getMoldTaskManagementPage(MoldTaskManagementPageReqVO pageReqVO) {
// @Override
// public PageResult<MoldTaskManagementDO> getMoldTaskManagementPage(MoldTaskManagementPageReqVO pageReqVO) {
//
// PageResult<MoldTaskManagementDO> moldtaskManagementDOPageResult = moldtaskManagementMapper.selectPage(pageReqVO);
// for (MoldTaskManagementDO moldtaskManagementDO : moldtaskManagementDOPageResult.getList()) {
// MoldPlanMaintenanceDO moldplanMaintenanceDO = moldplanMaintenanceMapper.selectById(moldtaskManagementDO.getProjectForm());
// moldtaskManagementDO.setProjectFormName(moldplanMaintenanceDO.getPlanName());
// }
//
//
// return moldtaskManagementDOPageResult;
// }
@Override
public PageResult<MoldTaskManagementDO> getMoldTaskManagementPage(MoldTaskManagementPageReqVO pageReqVO) {
// 1. 查询分页数据
PageResult<MoldTaskManagementDO> moldtaskManagementDOPageResult = moldtaskManagementMapper.selectPage(pageReqVO);
// 2. 空列表直接返回,避免遍历空指针
if (CollectionUtils.isEmpty(moldtaskManagementDOPageResult.getList())) {
return moldtaskManagementDOPageResult;
}
PageResult<MoldTaskManagementDO> 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 校验关联的维保计划IDprojectForm非空
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<DvSubjectDO> dvSubjectDOList = new ArrayList<>();
List<SubjectPlanDO> subjectPlanDOList = subjectPlanMapper.selectList(Wrappers.<SubjectPlanDO>lambdaQuery().eq(SubjectPlanDO::getPlanId, moldticketManagementDO.getPlanId()));
for (SubjectPlanDO subjectPlanDO : subjectPlanDOList) {
DvSubjectDO dvSubjectDO = dvSubjectMapper.selectById(subjectPlanDO.getSubjectId());
List<MoldSubjectDO> moldSubjectDOList = new ArrayList<>();
List<SubjectMoldPlanDO> subjectmoldPlanDOList = subjectmoldPlanMapper.selectList(Wrappers.<SubjectMoldPlanDO>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);

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.iocoder.yudao.module.mes.dal.mysql.moldrepair.MoldRepairMapper">
<!--
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
文档可见https://www.iocoder.cn/MyBatis/x-plugins/
-->
</mapper>
Loading…
Cancel
Save