diff --git a/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/ErrorCodeConstants.java b/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/ErrorCodeConstants.java index 6fbfb9a98..38548102c 100644 --- a/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/ErrorCodeConstants.java +++ b/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/ErrorCodeConstants.java @@ -41,12 +41,12 @@ public interface ErrorCodeConstants { ErrorCode DEVICE_MODEL_NOT_EXISTS = new ErrorCode(1_003_000_001, "采集设备模型不存在"); ErrorCode DEVICE_MODEL_CODE_EXISTS = new ErrorCode(1_003_000_002, "采集设备模型编码已存在"); ErrorCode DEVICE_CODE_ALREADY_EXISTS = new ErrorCode(1_003_000_002, "采集设备编码已存在"); + ErrorCode DEVICE_CODE_CHECK_EXISTS = new ErrorCode(1_003_001_004, "采集设备编码只能包含字母、数字、下划线"); ErrorCode DEVICE_ID_MODEL_NOT_EXISTS = new ErrorCode(1_003_000_003, "该设备模型ID不能为空"); ErrorCode POINT_ID_MODEL_NOT_EXISTS = new ErrorCode(1_003_000_004, "该点位参数ID不能为空"); ErrorCode DEVICE_MODEL_ATTRIBUTE_NOT_EXISTS = new ErrorCode(1_003_000_005, "采集设备模型点位不存在"); ErrorCode DEVICE_MODEL_POINT_CODE_EXISTS = new ErrorCode(1_003_000_005, "采集设备采集点位编码已存在"); - ErrorCode DEVICE_MODEL_ATTRIBUTE_POTIN_CODE_EXISTS = new ErrorCode(1_003_000_005, "采集设备模型点位编码已存在"); ErrorCode DEVICE_ATTRIBUTE_NOT_EXISTS = new ErrorCode(1_003_000_006, "设备属性不存在"); diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/TDengineService.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/TDengineService.java index be992ded2..ef9584324 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/TDengineService.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/TDengineService.java @@ -1293,7 +1293,7 @@ public class TDengineService { // 3. 只能包含字母、数字、下划线 if (!tableName.matches("^[a-zA-Z][a-zA-Z0-9_]*$")) { - throw exception(DEVICE_MODEL_POINT_CODE_EXISTS, + throw exception(DEVICE_CODE_CHECK_EXISTS, "表名只能包含字母、数字和下划线: " + tableName); } 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 2e6f7a761..58250bb17 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 @@ -213,4 +213,5 @@ public interface ErrorCodeConstants { ErrorCode DEVICE_LINE_EXITS_CHILDREN = new ErrorCode(100_501_0005, "存在子设备产线,无法删除"); ErrorCode DEVICE_LINE_CODE_EXISTS = new ErrorCode(100_501_0006, "设备产线编码已存在,请重新提交"); ErrorCode DEVICE_LINE_CODE_NOT_EXISTS = new ErrorCode(100_501_0007, "设备产线编码不能为空"); + ErrorCode DEVICE_CRITICAL_COMPONENT_NOT_EXISTS = new ErrorCode(100_501_0008, "设备关键件明细不存在"); } diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/devicecriticalcomponent/DeviceCriticalComponentController.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/devicecriticalcomponent/DeviceCriticalComponentController.java new file mode 100644 index 000000000..59ddb800c --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/devicecriticalcomponent/DeviceCriticalComponentController.java @@ -0,0 +1,103 @@ +package cn.iocoder.yudao.module.mes.controller.admin.devicecriticalcomponent; + +import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; + +import javax.validation.constraints.*; +import javax.validation.*; +import javax.servlet.http.*; +import java.util.*; +import java.io.IOException; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; + +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*; + +import cn.iocoder.yudao.module.mes.controller.admin.devicecriticalcomponent.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.devicecriticalcomponent.DeviceCriticalComponentDO; +import cn.iocoder.yudao.module.mes.service.devicecriticalcomponent.DeviceCriticalComponentService; + +@Tag(name = "管理后台 - 设备关键件明细") +@RestController +@RequestMapping("/mes/device-critical-component") +@Validated +public class DeviceCriticalComponentController { + + @Resource + private DeviceCriticalComponentService deviceCriticalComponentService; + + @PostMapping("/create") + @Operation(summary = "创建设备关键件明细") + @PreAuthorize("@ss.hasPermission('mes:device-critical-component:create')") + public CommonResult createDeviceCriticalComponent(@Valid @RequestBody DeviceCriticalComponentSaveReqVO createReqVO) { + return success(deviceCriticalComponentService.createDeviceCriticalComponent(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新设备关键件明细") + @PreAuthorize("@ss.hasPermission('mes:device-critical-component:update')") + public CommonResult updateDeviceCriticalComponent(@Valid @RequestBody DeviceCriticalComponentSaveReqVO updateReqVO) { + deviceCriticalComponentService.updateDeviceCriticalComponent(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除设备关键件明细") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('mes:device-critical-component:delete')") + public CommonResult deleteDeviceCriticalComponent(@RequestParam("id") Long id) { + deviceCriticalComponentService.deleteDeviceCriticalComponent(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得设备关键件明细") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('mes:device-critical-component:query')") + public CommonResult getDeviceCriticalComponent(@RequestParam("id") Long id) { + DeviceCriticalComponentDO deviceCriticalComponent = deviceCriticalComponentService.getDeviceCriticalComponent(id); + return success(BeanUtils.toBean(deviceCriticalComponent, DeviceCriticalComponentRespVO.class)); + } + + @GetMapping("/getDetails") + @Operation(summary = "获得设备关键件明细") + @Parameter(name = "id", description = "设备id", required = true, example = "1024") + public CommonResult> getDetails(@RequestParam("deviceId") Long deviceId) { + List details=deviceCriticalComponentService.getDetails(deviceId); + return success(details); + } + + @GetMapping("/page") + @Operation(summary = "获得设备关键件明细分页") + @PreAuthorize("@ss.hasPermission('mes:device-critical-component:query')") + public CommonResult> getDeviceCriticalComponentPage(@Valid DeviceCriticalComponentPageReqVO pageReqVO) { + PageResult pageResult = deviceCriticalComponentService.getDeviceCriticalComponentPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, DeviceCriticalComponentRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出设备关键件明细 Excel") + @PreAuthorize("@ss.hasPermission('mes:device-critical-component:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportDeviceCriticalComponentExcel(@Valid DeviceCriticalComponentPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = deviceCriticalComponentService.getDeviceCriticalComponentPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "设备关键件明细.xls", "数据", DeviceCriticalComponentRespVO.class, + BeanUtils.toBean(list, DeviceCriticalComponentRespVO.class)); + } + +} \ 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/devicecriticalcomponent/vo/DeviceCriticalComponentPageReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/devicecriticalcomponent/vo/DeviceCriticalComponentPageReqVO.java new file mode 100644 index 000000000..7b53be0c7 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/devicecriticalcomponent/vo/DeviceCriticalComponentPageReqVO.java @@ -0,0 +1,46 @@ +package cn.iocoder.yudao.module.mes.controller.admin.devicecriticalcomponent.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 DeviceCriticalComponentPageReqVO extends PageParam { + + @Schema(description = "编码(唯一标识)") + private String code; + + @Schema(description = "名称", example = "王五") + private String name; + + @Schema(description = "描述", example = "你猜") + private String description; + + @Schema(description = "备注", example = "你猜") + private String remark; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + + @Schema(description = "数量", example = "32204") + private Integer count; + + @Schema(description = "设备id", example = "27281") + private Long deviceId; + + @Schema(description = "规格型号") + private String deviceSpec; + + @Schema(description = "图片") + private String images; + +} \ 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/devicecriticalcomponent/vo/DeviceCriticalComponentRespVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/devicecriticalcomponent/vo/DeviceCriticalComponentRespVO.java new file mode 100644 index 000000000..e2865e102 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/devicecriticalcomponent/vo/DeviceCriticalComponentRespVO.java @@ -0,0 +1,55 @@ +package cn.iocoder.yudao.module.mes.controller.admin.devicecriticalcomponent.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 设备关键件明细 Response VO") +@Data +@ExcelIgnoreUnannotated +public class DeviceCriticalComponentRespVO { + + @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "8330") + @ExcelProperty("主键ID") + private Long id; + + @Schema(description = "编码(唯一标识)", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("编码(唯一标识)") + private String code; + + @Schema(description = "名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "王五") + @ExcelProperty("名称") + private String name; + + @Schema(description = "描述", example = "你猜") + @ExcelProperty("描述") + private String description; + + @Schema(description = "备注", example = "你猜") + @ExcelProperty("备注") + private String remark; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + + @Schema(description = "数量", example = "32204") + @ExcelProperty("数量") + private Integer count; + + @Schema(description = "设备id", example = "27281") + @ExcelProperty("设备id") + private Long deviceId; + + @Schema(description = "规格型号") + @ExcelProperty("规格型号") + private String deviceSpec; + + @Schema(description = "图片") + @ExcelProperty("图片") + private String images; + +} \ 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/devicecriticalcomponent/vo/DeviceCriticalComponentSaveReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/devicecriticalcomponent/vo/DeviceCriticalComponentSaveReqVO.java new file mode 100644 index 000000000..0603a0f2f --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/devicecriticalcomponent/vo/DeviceCriticalComponentSaveReqVO.java @@ -0,0 +1,41 @@ +package cn.iocoder.yudao.module.mes.controller.admin.devicecriticalcomponent.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import javax.validation.constraints.*; + +@Schema(description = "管理后台 - 设备关键件明细新增/修改 Request VO") +@Data +public class DeviceCriticalComponentSaveReqVO { + + @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "8330") + private Long id; + + @Schema(description = "编码(唯一标识)", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "编码(唯一标识)不能为空") + private String code; + + @Schema(description = "名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "王五") + @NotEmpty(message = "名称不能为空") + private String name; + + @Schema(description = "描述", example = "你猜") + private String description; + + @Schema(description = "备注", example = "你猜") + private String remark; + + @Schema(description = "数量", example = "32204") + private Integer count; + + @Schema(description = "设备id", example = "27281") + private Long deviceId; + + @Schema(description = "规格型号") + private String deviceSpec; + + @Schema(description = "图片") + private String images; + +} \ 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/deviceledger/vo/DeviceLedgerSaveReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/deviceledger/vo/DeviceLedgerSaveReqVO.java index 64ab9ef0a..e0b59fa69 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/deviceledger/vo/DeviceLedgerSaveReqVO.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/deviceledger/vo/DeviceLedgerSaveReqVO.java @@ -1,10 +1,14 @@ package cn.iocoder.yudao.module.mes.controller.admin.deviceledger.vo; +import cn.iocoder.yudao.module.mes.controller.admin.devicecriticalcomponent.vo.DeviceCriticalComponentRespVO; +import cn.iocoder.yudao.module.mes.dal.dataobject.criticalcomponent.CriticalComponentDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.devicecriticalcomponent.DeviceCriticalComponentDO; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import java.time.LocalDate; import java.time.LocalDateTime; +import java.util.List; @Schema(description = "管理后台 - 设备类型新增/修改 Request VO") @Data @@ -96,4 +100,7 @@ public class DeviceLedgerSaveReqVO { @Schema(description = "数据采集产能") private Integer dataCollectionCapacity; + + @Schema(description = "设备关键件") + private List componentList; } diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/devicecriticalcomponent/DeviceCriticalComponentDO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/devicecriticalcomponent/DeviceCriticalComponentDO.java new file mode 100644 index 000000000..c4aeb64cc --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/devicecriticalcomponent/DeviceCriticalComponentDO.java @@ -0,0 +1,63 @@ +package cn.iocoder.yudao.module.mes.dal.dataobject.devicecriticalcomponent; + +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_device_critical_component") +@KeySequence("mes_device_critical_component_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class DeviceCriticalComponentDO extends BaseDO { + + /** + * 主键ID + */ + @TableId + private Long id; + /** + * 编码(唯一标识) + */ + private String code; + /** + * 名称 + */ + private String name; + /** + * 描述 + */ + private String description; + /** + * 备注 + */ + private String remark; + /** + * 数量 + */ + private Integer count; + /** + * 设备id + */ + private Long deviceId; + /** + * 规格型号 + */ + private String deviceSpec; + /** + * 图片 + */ + private String images; + +} \ 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/deviceledger/DeviceLedgerDO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/deviceledger/DeviceLedgerDO.java index 3c49a3105..529f0df60 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/deviceledger/DeviceLedgerDO.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/deviceledger/DeviceLedgerDO.java @@ -4,6 +4,7 @@ import cn.iocoder.yudao.module.common.dal.dataobject.mold.MoldDO; import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductCategoryDO; import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductDO; import cn.iocoder.yudao.module.mes.dal.dataobject.criticalcomponent.CriticalComponentDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.devicecriticalcomponent.DeviceCriticalComponentDO; import cn.iocoder.yudao.module.mes.dal.dataobject.dvrepair.DvRepairLineDO; import cn.iocoder.yudao.module.mes.dal.dataobject.ticketresults.TicketResultsDO; import lombok.*; @@ -155,7 +156,7 @@ public class DeviceLedgerDO extends BaseDO { * 关键件列表 */ @TableField(exist = false) - private List componentList; + private List componentList; /** * 备件id diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/devicecriticalcomponent/DeviceCriticalComponentMapper.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/devicecriticalcomponent/DeviceCriticalComponentMapper.java new file mode 100644 index 000000000..ba87f841d --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/devicecriticalcomponent/DeviceCriticalComponentMapper.java @@ -0,0 +1,34 @@ +package cn.iocoder.yudao.module.mes.dal.mysql.devicecriticalcomponent; + +import java.util.*; + +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.devicecriticalcomponent.DeviceCriticalComponentDO; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.mes.controller.admin.devicecriticalcomponent.vo.*; + +/** + * 设备关键件明细 Mapper + * + * @author 必硕智能 + */ +@Mapper +public interface DeviceCriticalComponentMapper extends BaseMapperX { + + default PageResult selectPage(DeviceCriticalComponentPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(DeviceCriticalComponentDO::getCode, reqVO.getCode()) + .likeIfPresent(DeviceCriticalComponentDO::getName, reqVO.getName()) + .eqIfPresent(DeviceCriticalComponentDO::getDescription, reqVO.getDescription()) + .eqIfPresent(DeviceCriticalComponentDO::getRemark, reqVO.getRemark()) + .betweenIfPresent(DeviceCriticalComponentDO::getCreateTime, reqVO.getCreateTime()) + .eqIfPresent(DeviceCriticalComponentDO::getCount, reqVO.getCount()) + .eqIfPresent(DeviceCriticalComponentDO::getDeviceId, reqVO.getDeviceId()) + .eqIfPresent(DeviceCriticalComponentDO::getDeviceSpec, reqVO.getDeviceSpec()) + .eqIfPresent(DeviceCriticalComponentDO::getImages, reqVO.getImages()) + .orderByDesc(DeviceCriticalComponentDO::getId)); + } + +} \ 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/devicecriticalcomponent/DeviceCriticalComponentService.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/devicecriticalcomponent/DeviceCriticalComponentService.java new file mode 100644 index 000000000..b22c2731c --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/devicecriticalcomponent/DeviceCriticalComponentService.java @@ -0,0 +1,56 @@ +package cn.iocoder.yudao.module.mes.service.devicecriticalcomponent; + +import java.util.*; +import javax.validation.*; +import cn.iocoder.yudao.module.mes.controller.admin.devicecriticalcomponent.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.devicecriticalcomponent.DeviceCriticalComponentDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; + +/** + * 设备关键件明细 Service 接口 + * + * @author 必硕智能 + */ +public interface DeviceCriticalComponentService { + + /** + * 创建设备关键件明细 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createDeviceCriticalComponent(@Valid DeviceCriticalComponentSaveReqVO createReqVO); + + /** + * 更新设备关键件明细 + * + * @param updateReqVO 更新信息 + */ + void updateDeviceCriticalComponent(@Valid DeviceCriticalComponentSaveReqVO updateReqVO); + + /** + * 删除设备关键件明细 + * + * @param id 编号 + */ + void deleteDeviceCriticalComponent(Long id); + + /** + * 获得设备关键件明细 + * + * @param id 编号 + * @return 设备关键件明细 + */ + DeviceCriticalComponentDO getDeviceCriticalComponent(Long id); + + /** + * 获得设备关键件明细分页 + * + * @param pageReqVO 分页查询 + * @return 设备关键件明细分页 + */ + PageResult getDeviceCriticalComponentPage(DeviceCriticalComponentPageReqVO pageReqVO); + + List getDetails(Long deviceId); +} \ 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/devicecriticalcomponent/DeviceCriticalComponentServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/devicecriticalcomponent/DeviceCriticalComponentServiceImpl.java new file mode 100644 index 000000000..8c6dcf01e --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/devicecriticalcomponent/DeviceCriticalComponentServiceImpl.java @@ -0,0 +1,80 @@ +package cn.iocoder.yudao.module.mes.service.devicecriticalcomponent; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +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.mes.controller.admin.devicecriticalcomponent.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.devicecriticalcomponent.DeviceCriticalComponentDO; +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.mes.dal.mysql.devicecriticalcomponent.DeviceCriticalComponentMapper; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; + +/** + * 设备关键件明细 Service 实现类 + * + * @author 必硕智能 + */ +@Service +@Validated +public class DeviceCriticalComponentServiceImpl implements DeviceCriticalComponentService { + + @Resource + private DeviceCriticalComponentMapper deviceCriticalComponentMapper; + + @Override + public Long createDeviceCriticalComponent(DeviceCriticalComponentSaveReqVO createReqVO) { + // 插入 + DeviceCriticalComponentDO deviceCriticalComponent = BeanUtils.toBean(createReqVO, DeviceCriticalComponentDO.class); + deviceCriticalComponentMapper.insert(deviceCriticalComponent); + // 返回 + return deviceCriticalComponent.getId(); + } + + @Override + public void updateDeviceCriticalComponent(DeviceCriticalComponentSaveReqVO updateReqVO) { + // 校验存在 + validateDeviceCriticalComponentExists(updateReqVO.getId()); + // 更新 + DeviceCriticalComponentDO updateObj = BeanUtils.toBean(updateReqVO, DeviceCriticalComponentDO.class); + deviceCriticalComponentMapper.updateById(updateObj); + } + + @Override + public void deleteDeviceCriticalComponent(Long id) { + // 校验存在 + validateDeviceCriticalComponentExists(id); + // 删除 + deviceCriticalComponentMapper.deleteById(id); + } + + private void validateDeviceCriticalComponentExists(Long id) { + if (deviceCriticalComponentMapper.selectById(id) == null) { + throw exception(DEVICE_CRITICAL_COMPONENT_NOT_EXISTS); + } + } + + @Override + public DeviceCriticalComponentDO getDeviceCriticalComponent(Long id) { + return deviceCriticalComponentMapper.selectById(id); + } + + @Override + public PageResult getDeviceCriticalComponentPage(DeviceCriticalComponentPageReqVO pageReqVO) { + return deviceCriticalComponentMapper.selectPage(pageReqVO); + } + + @Override + public List getDetails(Long deviceId) { + return deviceCriticalComponentMapper.selectList(new LambdaQueryWrapper().eq(DeviceCriticalComponentDO::getDeviceId, deviceId)); + } + +} \ 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/deviceledger/DeviceLedgerServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/deviceledger/DeviceLedgerServiceImpl.java index 77d2ea198..ba56be7f1 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/deviceledger/DeviceLedgerServiceImpl.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/deviceledger/DeviceLedgerServiceImpl.java @@ -14,12 +14,15 @@ import cn.iocoder.yudao.module.erp.dal.mysql.productdevicerel.ProductDeviceRelMa import cn.iocoder.yudao.module.iot.dal.dataobject.device.DeviceDO; import cn.iocoder.yudao.module.iot.service.device.DeviceService; import cn.iocoder.yudao.module.iot.service.device.TDengineService; +import cn.iocoder.yudao.module.mes.controller.admin.devicecriticalcomponent.vo.DeviceCriticalComponentRespVO; +import cn.iocoder.yudao.module.mes.dal.dataobject.devicecriticalcomponent.DeviceCriticalComponentDO; import cn.iocoder.yudao.module.mes.dal.dataobject.devicetype.DeviceTypeDO; import cn.iocoder.yudao.module.mes.dal.dataobject.deviceline.DeviceLineDO; import cn.iocoder.yudao.module.mes.dal.dataobject.organization.OrganizationDO; import cn.iocoder.yudao.module.mes.dal.dataobject.plan.PlanDO; import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductDO; import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductUnitDO; +import cn.iocoder.yudao.module.mes.dal.mysql.devicecriticalcomponent.DeviceCriticalComponentMapper; import cn.iocoder.yudao.module.mes.dal.mysql.devicetype.DeviceTypeMapper; import cn.iocoder.yudao.module.erp.dal.mysql.product.ErpProductMapper; import cn.iocoder.yudao.module.erp.service.product.ErpProductUnitService; @@ -35,6 +38,7 @@ import cn.iocoder.yudao.module.mes.dal.mysql.dvrepair.DvRepairLineMapper; import cn.iocoder.yudao.module.mes.dal.mysql.dvrepair.DvRepairMapper; import cn.iocoder.yudao.module.mes.dal.mysql.ticketresults.TicketResultsMapper; import cn.iocoder.yudao.module.mes.dal.mysql.workreportplan.ReportPlanSummaryMapper; +import cn.iocoder.yudao.module.mes.service.criticalcomponent.CriticalComponentService; import cn.iocoder.yudao.module.mes.service.organization.OrganizationService; import cn.iocoder.yudao.module.mes.service.deviceline.DeviceLineService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -153,6 +157,9 @@ public class DeviceLedgerServiceImpl implements DeviceLedgerService { @Resource private TDengineService tdengineService; + @Resource + private DeviceCriticalComponentMapper deviceCriticalComponentMapper; + @Override public Long createDeviceLedger(DeviceLedgerSaveReqVO createReqVO) throws UnsupportedEncodingException { DeviceLedgerDO deviceLedger = BeanUtils.toBean(createReqVO, DeviceLedgerDO.class); @@ -222,6 +229,8 @@ public class DeviceLedgerServiceImpl implements DeviceLedgerService { if (count > 0) { throw exception(DEVICE_LEDGER_EXISTS); } + //更新设备关键件 + if(CollUtil.isNotEmpty(updateReqVO.getComponentList()))addOrUpdateCriticalComponent(updateReqVO.getComponentList(),updateReqVO.getId()); // 更新 DeviceLedgerDO updateObj = BeanUtils.toBean(updateReqVO, DeviceLedgerDO.class); updateObj.setComponentId(updateObj.getComponentId()==null?"":updateObj.getComponentId()); @@ -231,6 +240,25 @@ public class DeviceLedgerServiceImpl implements DeviceLedgerService { deviceLedgerSpareRelService.replaceByDeviceLedgerId(updateObj.getId(), updateReqVO.getBeijianId()); } + private void addOrUpdateCriticalComponent(List componentList, Long deviceId) { + componentList.forEach(component -> component.setDeviceId(deviceId)); + componentList.forEach(component -> component.setId(null)); + Map> result = + componentList.stream() + .collect(Collectors.partitioningBy(c -> c.getId() == null)); + List insertList = result.get(true); // id == null → 新增 + List updateList = result.get(false); + List deviceCriticalComponentDOS = new ArrayList<>(); + componentList.forEach(component -> { + DeviceCriticalComponentDO deviceLedger = BeanUtils.toBean(component, DeviceCriticalComponentDO.class); + deviceCriticalComponentDOS.add(deviceLedger); + }); + deviceCriticalComponentMapper.delete(new LambdaQueryWrapper().eq(DeviceCriticalComponentDO::getDeviceId,deviceId)); + if(CollUtil.isNotEmpty(componentList))deviceCriticalComponentMapper.insertBatch(deviceCriticalComponentDOS); + //if(CollUtil.isNotEmpty(updateList))deviceCriticalComponentMapper.updateBatch(updateList); + // criticalComponentService.saveOrUpdateBatch(componentList); + } + @Override public void deleteDeviceLedger(List idList ) { @@ -292,7 +320,7 @@ public class DeviceLedgerServiceImpl implements DeviceLedgerService { // } - List componentList = new ArrayList<>(); + //List componentList = new ArrayList<>(); List componentRelList = deviceLedgerComponentRelService.getListByDeviceLedgerId(id); if (CollUtil.isNotEmpty(componentRelList)) { Set componentIds = componentRelList.stream().map(DeviceLedgerComponentRelDO::getComponentId) @@ -303,15 +331,16 @@ public class DeviceLedgerServiceImpl implements DeviceLedgerService { for (DeviceLedgerComponentRelDO relDO : componentRelList) { CriticalComponentDO criticalComponentDO = componentMap.get(relDO.getComponentId()); if (criticalComponentDO != null) { - componentList.add(criticalComponentDO); + //componentList.add(criticalComponentDO); continue; } CriticalComponentDO deletedComponent = new CriticalComponentDO(); deletedComponent.setId(relDO.getComponentId()); deletedComponent.setName(buildDeletedName(relDO.getComponentNameSnapshot())); - componentList.add(deletedComponent); + // componentList.add(deletedComponent); } - deviceLedgerDO.setComponentList(componentList); + List deviceCriticalComponentDOS = deviceCriticalComponentMapper.selectList(new LambdaQueryWrapper().eq(DeviceCriticalComponentDO::getDeviceId, id)); + deviceLedgerDO.setComponentList(deviceCriticalComponentDOS); deviceLedgerDO.setComponentId(componentRelList.stream() .map(DeviceLedgerComponentRelDO::getComponentId) .filter(Objects::nonNull)