From a22e9c8052dc46022d9620284979a06b9aaea2f2 Mon Sep 17 00:00:00 2001 From: HuangHuiKang Date: Wed, 7 Jan 2026 18:23:43 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat:1=E3=80=81=E6=96=B0=E5=A2=9E=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E5=88=86=E7=B1=BB=E6=8E=A5=E5=8F=A3=202=E3=80=81?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=AE=BE=E5=A4=87=E5=8F=B0=E8=B4=A6=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=203=E3=80=81=E4=BF=AE=E6=94=B9=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E7=BB=B4=E6=8A=A4=E6=8E=A5=E5=8F=A3=204=E3=80=81=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E6=96=B9=E6=A1=88=E7=BB=B4=E6=8A=A4=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/mes/enums/ErrorCodeConstants.java | 17 + .../deviceledger/DeviceLedgerController.java | 103 ++++++ .../vo/DeviceLedgerPageReqVO.java | 78 +++++ .../deviceledger/vo/DeviceLedgerRespVO.java | 91 +++++ .../vo/DeviceLedgerSaveReqVO.java | 68 ++++ .../devicetype/DeviceTypeController.java | 137 ++++++++ .../devicetype/vo/DeviceTypeListReqVO.java | 32 ++ .../devicetype/vo/DeviceTypePageReqVO.java | 40 +++ .../admin/devicetype/vo/DeviceTypeRespVO.java | 45 +++ .../devicetype/vo/DeviceTypeSaveReqVO.java | 36 ++ .../devicetype/vo/DeviceTypeTreeRespVO.java | 20 ++ .../admin/dvsubject/DvSubjectController.java | 15 +- .../dvsubject/vo/DvSubjectPageReqVO.java | 12 + .../admin/dvsubject/vo/DvSubjectRespVO.java | 18 +- .../dvsubject/vo/DvSubjectSaveReqVO.java | 1 + .../PlanMaintenanceController.java | 112 +++++++ .../vo/PlanMaintenancePageReqVO.java | 34 ++ .../vo/PlanMaintenanceRespVO.java | 35 ++ .../vo/PlanMaintenanceSaveReqVO.java | 28 ++ .../subjectplan/SubjectPlanController.java | 95 ++++++ .../subjectplan/vo/SubjectPlanPageReqVO.java | 28 ++ .../subjectplan/vo/SubjectPlanRespVO.java | 31 ++ .../subjectplan/vo/SubjectPlanSaveReqVO.java | 23 ++ .../TaskManagementController.java | 101 ++++++ .../vo/TaskManagementPageReqVO.java | 54 +++ .../vo/TaskManagementRespVO.java | 59 ++++ .../vo/TaskManagementSaveReqVO.java | 46 +++ .../deviceledger/DeviceLedgerDO.java | 101 ++++++ .../dataobject/devicetype/DeviceTypeDO.java | 56 ++++ .../dal/dataobject/dvsubject/DvSubjectDO.java | 13 + .../planmaintenance/PlanMaintenanceDO.java | 43 +++ .../dataobject/subjectplan/SubjectPlanDO.java | 39 +++ .../taskmanagement/TaskManagementDO.java | 69 ++++ .../deviceledger/DeviceLedgerMapper.java | 59 ++++ .../mysql/devicetype/DeviceTypeMapper.java | 50 +++ .../dal/mysql/dvsubject/DvSubjectMapper.java | 26 +- .../PlanMaintenanceMapper.java | 45 +++ .../mysql/subjectplan/SubjectPlanMapper.java | 35 ++ .../taskmanagement/TaskManagementMapper.java | 53 +++ .../deviceledger/DeviceLedgerService.java | 55 +++ .../deviceledger/DeviceLedgerServiceImpl.java | 89 +++++ .../service/devicetype/DeviceTypeService.java | 40 +++ .../devicetype/DeviceTypeServiceImpl.java | 312 ++++++++++++++++++ .../service/dvsubject/DvSubjectService.java | 3 +- .../dvsubject/DvSubjectServiceImpl.java | 27 +- .../PlanMaintenanceService.java | 58 ++++ .../PlanMaintenanceServiceImpl.java | 164 +++++++++ .../subjectplan/SubjectPlanService.java | 55 +++ .../subjectplan/SubjectPlanServiceImpl.java | 74 +++++ .../taskmanagement/TaskManagementService.java | 55 +++ .../TaskManagementServiceImpl.java | 76 +++++ .../dvsubject/DvSubjectServiceImplTest.java | 6 +- 52 files changed, 2945 insertions(+), 17 deletions(-) create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/deviceledger/DeviceLedgerController.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/deviceledger/vo/DeviceLedgerPageReqVO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/deviceledger/vo/DeviceLedgerRespVO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/deviceledger/vo/DeviceLedgerSaveReqVO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/devicetype/DeviceTypeController.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/devicetype/vo/DeviceTypeListReqVO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/devicetype/vo/DeviceTypePageReqVO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/devicetype/vo/DeviceTypeRespVO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/devicetype/vo/DeviceTypeSaveReqVO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/devicetype/vo/DeviceTypeTreeRespVO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/planmaintenance/PlanMaintenanceController.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/planmaintenance/vo/PlanMaintenancePageReqVO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/planmaintenance/vo/PlanMaintenanceRespVO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/planmaintenance/vo/PlanMaintenanceSaveReqVO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/subjectplan/SubjectPlanController.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/subjectplan/vo/SubjectPlanPageReqVO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/subjectplan/vo/SubjectPlanRespVO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/subjectplan/vo/SubjectPlanSaveReqVO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/taskmanagement/TaskManagementController.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/taskmanagement/vo/TaskManagementPageReqVO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/taskmanagement/vo/TaskManagementRespVO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/taskmanagement/vo/TaskManagementSaveReqVO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/deviceledger/DeviceLedgerDO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/devicetype/DeviceTypeDO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/planmaintenance/PlanMaintenanceDO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/subjectplan/SubjectPlanDO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/taskmanagement/TaskManagementDO.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/deviceledger/DeviceLedgerMapper.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/devicetype/DeviceTypeMapper.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/planmaintenance/PlanMaintenanceMapper.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/subjectplan/SubjectPlanMapper.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/taskmanagement/TaskManagementMapper.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/deviceledger/DeviceLedgerService.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/deviceledger/DeviceLedgerServiceImpl.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/devicetype/DeviceTypeService.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/devicetype/DeviceTypeServiceImpl.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/planmaintenance/PlanMaintenanceService.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/planmaintenance/PlanMaintenanceServiceImpl.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/subjectplan/SubjectPlanService.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/subjectplan/SubjectPlanServiceImpl.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/taskmanagement/TaskManagementService.java create mode 100644 yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/taskmanagement/TaskManagementServiceImpl.java 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 d59101f8c..8dc0b27ff 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 @@ -82,4 +82,21 @@ public interface ErrorCodeConstants { ErrorCode ZJ_ITEM_NOT_EXISTS = new ErrorCode(5_0091, "检验项目不存在"); ErrorCode ZJ_SCHEMA_NOT_EXISTS = new ErrorCode(5_0092, "检验方案不存在"); ErrorCode ZJ_PRODUCT_NOT_EXISTS = new ErrorCode(5_0093, "检验参数不存在"); + + + //======================================设备台账相关 1002000000================================================= + ErrorCode DEVICE_TYPE_NOT_EXISTS = new ErrorCode(1002000000, "设备类型不存在"); + ErrorCode DEVICE_TYPE_PARENT_NOT_EXISTS = new ErrorCode(1002000001, "父级设备类型不存在"); + ErrorCode DEVICE_TYPE_PARENT_IS_SELF = new ErrorCode(1002000002, "不能设置自己为父级"); + ErrorCode DEVICE_TYPE_PARENT_IS_CHILD = new ErrorCode(1002000003, "不能设置子节点为父级"); + ErrorCode DEVICE_TYPE_EXITS_CHILDREN = new ErrorCode(1002000004, "存在子设备类型,无法删除"); + ErrorCode DEVICE_LEDGER_NOT_EXISTS = new ErrorCode(1002000005, "该设备不存在"); + ErrorCode DEVICE_LEDGER_CODE_NOT_ONLY = new ErrorCode(1002000006, "设备类型编码已存在"); + ErrorCode PLAN_MAINTENANCE_NOT_EXISTS = new ErrorCode(1002000007, "方案维护不存在"); + ErrorCode SUBJECT_PLAN_NOT_EXISTS = new ErrorCode(1002000008, "项目方案关联不存在"); + ErrorCode SUBJECT_ID_NOT_EXISTS = new ErrorCode(1002000009, "项目Id不存在"); + ErrorCode DEVICE_LEDGER_EXISTS = new ErrorCode(1002000010, "设备台账编码已存在"); + ErrorCode SUBJECT_EXISTS = new ErrorCode(1002000010, "项目编码已存在"); + ErrorCode TASK_MANAGEMENT_NOT_EXISTS = new ErrorCode(1002000011, "设备类型不存在"); + } diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/deviceledger/DeviceLedgerController.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/deviceledger/DeviceLedgerController.java new file mode 100644 index 000000000..111c8ca3f --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/deviceledger/DeviceLedgerController.java @@ -0,0 +1,103 @@ +package cn.iocoder.yudao.module.mes.controller.admin.deviceledger; + +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 java.util.stream.Collectors; + +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.deviceledger.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.deviceledger.DeviceLedgerDO; +import cn.iocoder.yudao.module.mes.service.deviceledger.DeviceLedgerService; + +@Tag(name = "管理后台 - 设备台账") +@RestController +@RequestMapping("/mes/device-ledger") +@Validated +public class DeviceLedgerController { + + @Resource + private DeviceLedgerService deviceLedgerService; + + @PostMapping("/create") + @Operation(summary = "创建设备台账") + @PreAuthorize("@ss.hasPermission('mes:device-ledger:create')") + public CommonResult createDeviceLedger(@Valid @RequestBody DeviceLedgerSaveReqVO createReqVO) { + return success(deviceLedgerService.createDeviceLedger(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新设备台账") + @PreAuthorize("@ss.hasPermission('mes:device-ledger:update')") + public CommonResult updateDeviceLedger(@Valid @RequestBody DeviceLedgerSaveReqVO updateReqVO) { + deviceLedgerService.updateDeviceLedger(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除设备台账") + @Parameter(name = "ids", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('mes:device-ledger:delete')") + public CommonResult deleteDeviceLedger(@RequestParam("ids") String ids) { + + // 将逗号分隔的字符串转换为Long类型的List + List idList = Arrays.stream(ids.split(",")) + .map(String::trim) // 去除可能存在的空格 + .map(Long::valueOf) + .collect(Collectors.toList()); + + deviceLedgerService.deleteDeviceLedger(idList); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得设备台账") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('mes:device-ledger:query')") + public CommonResult getDeviceLedger(@RequestParam("id") Long id) { + DeviceLedgerDO deviceLedger = deviceLedgerService.getDeviceLedger(id); + return success(BeanUtils.toBean(deviceLedger, DeviceLedgerRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得设备台账分页") + @PreAuthorize("@ss.hasPermission('mes:device-ledger:query')") + public CommonResult> getDeviceLedgerPage(@Valid DeviceLedgerPageReqVO pageReqVO) { + PageResult pageResult = deviceLedgerService.getDeviceLedgerPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, DeviceLedgerRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出设备台账 Excel") + @PreAuthorize("@ss.hasPermission('mes:device-ledger:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportDeviceLedgerExcel(@Valid DeviceLedgerPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = deviceLedgerService.getDeviceLedgerPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "设备台账.xls", "数据", DeviceLedgerRespVO.class, + BeanUtils.toBean(list, DeviceLedgerRespVO.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/deviceledger/vo/DeviceLedgerPageReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/deviceledger/vo/DeviceLedgerPageReqVO.java new file mode 100644 index 000000000..9bc106edf --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/deviceledger/vo/DeviceLedgerPageReqVO.java @@ -0,0 +1,78 @@ +package cn.iocoder.yudao.module.mes.controller.admin.deviceledger.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 DeviceLedgerPageReqVO extends PageParam { + + @Schema(description = "设备编号") + private String deviceCode; + + @Schema(description = "设备名称", example = "赵六") + private String deviceName; + + @Schema(description = "设备状态 (0-正常, 1-停用, 2-维修, 3-报废)", example = "2") + private Integer deviceStatus; + + @Schema(description = "设备品牌") + private String deviceBrand; + + @Schema(description = "设备型号") + private String deviceModel; + + @Schema(description = "设备规格") + private String deviceSpec; + + @Schema(description = "设备类型", example = "1") + private Long deviceType; + + @Schema(description = "供应商") + private String supplier; + + @Schema(description = "所属车间") + private String workshop; + + @Schema(description = "所属系统组织") + private String systemOrg; + + @Schema(description = "设备位置") + private String deviceLocation; + + @Schema(description = "设备负责人") + private String deviceManager; + + @Schema(description = "设备生产日期") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] productionDate; + + @Schema(description = "设备入厂日期") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] factoryEntryDate; + + @Schema(description = "设备备注", example = "随便") + private String deviceRemark; + + @Schema(description = "备注", example = "随便") + private String remark; + + @Schema(description = "排序") + private Integer sort; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + + @Schema(description = "id集合导出用") + 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/deviceledger/vo/DeviceLedgerRespVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/deviceledger/vo/DeviceLedgerRespVO.java new file mode 100644 index 000000000..6f36cd5d3 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/deviceledger/vo/DeviceLedgerRespVO.java @@ -0,0 +1,91 @@ +package cn.iocoder.yudao.module.mes.controller.admin.deviceledger.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 DeviceLedgerRespVO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "24467") + @ExcelProperty("id") + private Long id; + + @Schema(description = "设备编号") + @ExcelProperty("设备编号") + private String deviceCode; + + @Schema(description = "设备名称", example = "赵六") + @ExcelProperty("设备名称") + private String deviceName; + + @Schema(description = "设备状态 (0-正常, 1-停用, 2-维修, 3-报废)", example = "2") + @ExcelProperty("设备状态 (0-正常, 1-停用, 2-维修, 3-报废)") + private Integer deviceStatus; + + @Schema(description = "设备品牌") + @ExcelProperty("设备品牌") + private String deviceBrand; + + @Schema(description = "设备型号") + @ExcelProperty("设备型号") + private String deviceModel; + + @Schema(description = "设备规格") + @ExcelProperty("设备规格") + private String deviceSpec; + + @Schema(description = "设备类型", example = "1") + @ExcelProperty("设备类型") + private String deviceType; + + @Schema(description = "供应商") + @ExcelProperty("供应商") + private String supplier; + + @Schema(description = "所属车间") + @ExcelProperty("所属车间") + private String workshop; + + @Schema(description = "所属系统组织") + @ExcelProperty("所属系统组织") + private String systemOrg; + + @Schema(description = "设备位置") + @ExcelProperty("设备位置") + private String deviceLocation; + + @Schema(description = "设备负责人") + @ExcelProperty("设备负责人") + private String deviceManager; + + @Schema(description = "设备生产日期") + @ExcelProperty("设备生产日期") + private LocalDateTime productionDate; + + @Schema(description = "设备入厂日期") + @ExcelProperty("设备入厂日期") + private LocalDateTime factoryEntryDate; + + @Schema(description = "设备备注", example = "随便") + @ExcelProperty("设备备注") + private String deviceRemark; + + @Schema(description = "备注", example = "随便") + @ExcelProperty("备注") + private String remark; + + @Schema(description = "排序") + @ExcelProperty("排序") + private Integer sort; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} \ 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 new file mode 100644 index 000000000..1016f43d8 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/deviceledger/vo/DeviceLedgerSaveReqVO.java @@ -0,0 +1,68 @@ +package cn.iocoder.yudao.module.mes.controller.admin.deviceledger.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import javax.validation.constraints.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 设备类型新增/修改 Request VO") +@Data +public class DeviceLedgerSaveReqVO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "24467") + private Long id; + + @Schema(description = "设备编号") + private String deviceCode; + + @Schema(description = "设备名称", example = "赵六") + private String deviceName; + + @Schema(description = "设备状态 (0-正常, 1-停用, 2-维修, 3-报废)", example = "2") + private Integer deviceStatus; + + @Schema(description = "设备品牌") + private String deviceBrand; + + @Schema(description = "设备型号") + private String deviceModel; + + @Schema(description = "设备规格") + private String deviceSpec; + + @Schema(description = "设备类型", example = "1") + private String deviceType; + + @Schema(description = "供应商") + private String supplier; + + @Schema(description = "所属车间") + private String workshop; + + @Schema(description = "所属系统组织") + private String systemOrg; + + @Schema(description = "设备位置") + private String deviceLocation; + + @Schema(description = "设备负责人") + private String deviceManager; + + @Schema(description = "设备生产日期") + private LocalDateTime productionDate; + + @Schema(description = "设备入厂日期") + private LocalDateTime factoryEntryDate; + + @Schema(description = "设备备注", example = "随便") + private String deviceRemark; + + @Schema(description = "备注", example = "随便") + private String remark; + + @Schema(description = "排序") + private Integer sort; + +} \ 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/devicetype/DeviceTypeController.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/devicetype/DeviceTypeController.java new file mode 100644 index 000000000..2667ee725 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/devicetype/DeviceTypeController.java @@ -0,0 +1,137 @@ +package cn.iocoder.yudao.module.mes.controller.admin.devicetype; + +import cn.iocoder.yudao.module.mes.controller.admin.devicetype.vo.DeviceTypeTreeRespVO; +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.devicetype.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.devicetype.DeviceTypeDO; +import cn.iocoder.yudao.module.mes.service.devicetype.DeviceTypeService; + +@Tag(name = "管理后台 - 设备类型") +@RestController +@RequestMapping("/mes/device-type") +@Validated +public class DeviceTypeController { + + @Resource + private DeviceTypeService deviceTypeService; + + @PostMapping("/create") + @Operation(summary = "创建设备类型") + @PreAuthorize("@ss.hasPermission('mes:device-type:create')") + public CommonResult createDeviceType(@Valid @RequestBody DeviceTypeSaveReqVO createReqVO) { + return success(deviceTypeService.createDeviceType(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新设备类型") + @PreAuthorize("@ss.hasPermission('mes:device-type:update')") + public CommonResult updateDeviceType(@Valid @RequestBody DeviceTypeSaveReqVO updateReqVO) { + deviceTypeService.updateDeviceType(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除设备类型") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('mes:device-type:delete')") + public CommonResult deleteDeviceType(@RequestParam("id") Long id) { + deviceTypeService.deleteDeviceType(id); + return success(true); + } + + @DeleteMapping("/delete-batch") + @Operation(summary = "批量删除设备类型") + @PreAuthorize("@ss.hasPermission('mes:device-type:delete')") + public CommonResult deleteDeviceTypeBatch(@RequestParam("ids") List ids) { + deviceTypeService.deleteDeviceTypeBatch(ids); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得设备类型") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('mes:device-type:query')") + public CommonResult getDeviceType(@RequestParam("id") Long id) { + DeviceTypeDO deviceType = deviceTypeService.getDeviceType(id); + return success(BeanUtils.toBean(deviceType, DeviceTypeRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得设备类型分页") + @PreAuthorize("@ss.hasPermission('mes:device-type:query')") + public CommonResult> getDeviceTypePage(@Valid DeviceTypePageReqVO pageReqVO) { + PageResult pageResult = deviceTypeService.getDeviceTypePage(pageReqVO); + return success(BeanUtils.toBean(pageResult, DeviceTypeRespVO.class)); + } + + @GetMapping("/list") + @Operation(summary = "获得设备类型列表") + @PreAuthorize("@ss.hasPermission('mes:device-type:query')") + public CommonResult> getDeviceTypeList(@Valid DeviceTypeListReqVO listReqVO) { + List list = deviceTypeService.getDeviceTypeList(listReqVO); + return success(BeanUtils.toBean(list, DeviceTypeRespVO.class)); + } + + @GetMapping("/tree") + @Operation(summary = "获得设备类型树") + @PreAuthorize("@ss.hasPermission('mes:device-type:query')") + public CommonResult> getDeviceTypeTree(@Valid DeviceTypeListReqVO pageReqVO) { + List tree = deviceTypeService.getDeviceTypeTree(pageReqVO); + return success(tree); + } + + @GetMapping("/children") + @Operation(summary = "获得子设备类型列表") + @Parameter(name = "parentId", description = "父级ID", required = true, example = "0") + @PreAuthorize("@ss.hasPermission('mes:device-type:query')") + public CommonResult> getChildrenDeviceTypes(@RequestParam("parentId") Long parentId) { + List list = deviceTypeService.getChildrenDeviceTypes(parentId); + return success(BeanUtils.toBean(list, DeviceTypeRespVO.class)); + } + + @GetMapping("/ancestors") + @Operation(summary = "获得祖先设备类型列表") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('mes:device-type:query')") + public CommonResult> getAncestorDeviceTypes(@RequestParam("id") Long id) { + List list = deviceTypeService.getAncestorDeviceTypes(id); + return success(BeanUtils.toBean(list, DeviceTypeRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出设备类型 Excel") + @PreAuthorize("@ss.hasPermission('mes:device-type:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportDeviceTypeExcel(@Valid DeviceTypePageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = deviceTypeService.getDeviceTypePage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "设备类型.xls", "数据", DeviceTypeRespVO.class, + BeanUtils.toBean(list, DeviceTypeRespVO.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/devicetype/vo/DeviceTypeListReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/devicetype/vo/DeviceTypeListReqVO.java new file mode 100644 index 000000000..0a0717430 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/devicetype/vo/DeviceTypeListReqVO.java @@ -0,0 +1,32 @@ +// DeviceTypeListReqVO.java +package cn.iocoder.yudao.module.mes.controller.admin.devicetype.vo; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Schema(description = "管理后台 - 设备类型列表 Request VO") +public class DeviceTypeListReqVO extends PageParam { + + @Schema(description = "父级ID") + private Long parentId; + + @Schema(description = "父级链") + private String parentChain; + + @Schema(description = "编码") + private String code; + + @Schema(description = "名称") + private String name; + + @Schema(description = "开始创建时间") + private String createStartTime; + @Schema(description = "结束创建时间") + private String createEndTime; +} \ 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/devicetype/vo/DeviceTypePageReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/devicetype/vo/DeviceTypePageReqVO.java new file mode 100644 index 000000000..a003d21d7 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/devicetype/vo/DeviceTypePageReqVO.java @@ -0,0 +1,40 @@ +package cn.iocoder.yudao.module.mes.controller.admin.devicetype.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 DeviceTypePageReqVO extends PageParam { + + @Schema(description = "编码") + private String code; + + @Schema(description = "名称", example = "赵六") + private String name; + + @Schema(description = "备注", example = "随便") + private String remark; + + @Schema(description = "排序") + private Integer sort; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + + @Schema(description = "排序") + private Long parentId; + + @Schema(description = "排序") + private String parentChain; + +} \ 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/devicetype/vo/DeviceTypeRespVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/devicetype/vo/DeviceTypeRespVO.java new file mode 100644 index 000000000..6798e8cf8 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/devicetype/vo/DeviceTypeRespVO.java @@ -0,0 +1,45 @@ +package cn.iocoder.yudao.module.mes.controller.admin.devicetype.vo; + +import com.fasterxml.jackson.annotation.JsonProperty; +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 DeviceTypeRespVO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "3230") + @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 remark; + + @Schema(description = "排序") + @ExcelProperty("排序") + private Integer sort; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + + private Long parentId; + + /** */ + private String parentChain; + +} \ 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/devicetype/vo/DeviceTypeSaveReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/devicetype/vo/DeviceTypeSaveReqVO.java new file mode 100644 index 000000000..b40f5b2b5 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/devicetype/vo/DeviceTypeSaveReqVO.java @@ -0,0 +1,36 @@ +package cn.iocoder.yudao.module.mes.controller.admin.devicetype.vo; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import javax.validation.constraints.*; + +@Schema(description = "管理后台 - 设备类型新增/修改 Request VO") +@Data +public class DeviceTypeSaveReqVO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "3230") + 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 remark; + + @Schema(description = "排序") + private Integer sort; + + @NotNull(message = "parentId参数不存在") + private Long parentId; + + private String parentChain; + + +} \ 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/devicetype/vo/DeviceTypeTreeRespVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/devicetype/vo/DeviceTypeTreeRespVO.java new file mode 100644 index 000000000..63c623cb7 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/devicetype/vo/DeviceTypeTreeRespVO.java @@ -0,0 +1,20 @@ +package cn.iocoder.yudao.module.mes.controller.admin.devicetype.vo; + + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +@Data +@EqualsAndHashCode(callSuper = true) +@Schema(description = "管理后台 - 设备类型树形结构 Response VO") +public class DeviceTypeTreeRespVO extends DeviceTypeRespVO { + + @Schema(description = "子设备类型列表") + private List children; + + @Schema(description = "是否叶子节点", example = "true") + private Boolean leaf = true; +} \ 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/dvsubject/DvSubjectController.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/dvsubject/DvSubjectController.java index 33c2fb2a2..efb750dcf 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/dvsubject/DvSubjectController.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/dvsubject/DvSubjectController.java @@ -22,7 +22,9 @@ 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; @@ -53,10 +55,17 @@ public class DvSubjectController { @DeleteMapping("/delete") @Operation(summary = "删除维保项目") - @Parameter(name = "id", description = "编号", required = true) + @Parameter(name = "ids", description = "编号", required = true) @PreAuthorize("@ss.hasPermission('mes:dv-subject:delete')") - public CommonResult deleteDvSubject(@RequestParam("id") Long id) { - dvSubjectService.deleteDvSubject(id); + public CommonResult deleteDvSubject(@RequestParam("ids") String ids) { + + // 将逗号分隔的字符串转换为Long类型的List + List idList = Arrays.stream(ids.split(",")) + .map(String::trim) // 去除可能存在的空格 + .map(Long::valueOf) + .collect(Collectors.toList()); + dvSubjectService.deleteDvSubject(idList); + return success(true); } diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/dvsubject/vo/DvSubjectPageReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/dvsubject/vo/DvSubjectPageReqVO.java index 00a3ce769..a2780cad1 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/dvsubject/vo/DvSubjectPageReqVO.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/dvsubject/vo/DvSubjectPageReqVO.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.mes.controller.admin.dvsubject.vo; +import com.alibaba.excel.annotation.ExcelProperty; import lombok.*; import java.util.*; import io.swagger.v3.oas.annotations.media.Schema; @@ -37,4 +38,15 @@ public class DvSubjectPageReqVO extends PageParam { @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) private LocalDateTime[] createTime; + @Schema(description = "检验方式") + private String inspectionMethod; + + @Schema(description = "值类型") + private String valueType; + + @Schema(description = "判定基准") + private String judgmentCriteria; + + @Schema(description = "id集合导出用") + 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/dvsubject/vo/DvSubjectRespVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/dvsubject/vo/DvSubjectRespVO.java index db906ab6d..870b11878 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/dvsubject/vo/DvSubjectRespVO.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/dvsubject/vo/DvSubjectRespVO.java @@ -28,15 +28,15 @@ public class DvSubjectRespVO { private String subjectName; @Schema(description = "项目类型", example = "2") - @ExcelProperty("项目类型") +// @ExcelProperty("项目类型") private String subjectType; @Schema(description = "项目内容", requiredMode = Schema.RequiredMode.REQUIRED) - @ExcelProperty("项目内容") +// @ExcelProperty("项目内容") private String subjectContent; @Schema(description = "标准") - @ExcelProperty("标准") +// @ExcelProperty("标准") private String subjectStandard; @Schema(description = "是否启用", requiredMode = Schema.RequiredMode.REQUIRED) @@ -48,4 +48,16 @@ public class DvSubjectRespVO { @ExcelProperty("创建时间") private LocalDateTime createTime; + @Schema(description = "检验方式") + @ExcelProperty("检验方式") + private String inspectionMethod; + + @Schema(description = "值类型") + @ExcelProperty("值类型") + private String valueType; + + @Schema(description = "判定基准") + @ExcelProperty("判定基准") + private String judgmentCriteria; + } \ 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/dvsubject/vo/DvSubjectSaveReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/dvsubject/vo/DvSubjectSaveReqVO.java index 1325476c0..1fdec3636 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/dvsubject/vo/DvSubjectSaveReqVO.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/dvsubject/vo/DvSubjectSaveReqVO.java @@ -35,4 +35,5 @@ public class DvSubjectSaveReqVO { @NotNull(message = "是否启用不能为空") private Boolean isEnable; + } \ 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/planmaintenance/PlanMaintenanceController.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/planmaintenance/PlanMaintenanceController.java new file mode 100644 index 000000000..54998bd59 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/planmaintenance/PlanMaintenanceController.java @@ -0,0 +1,112 @@ +package cn.iocoder.yudao.module.mes.controller.admin.planmaintenance; + +import cn.iocoder.yudao.module.mes.dal.dataobject.subjectplan.SubjectPlanDO; +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 java.util.stream.Collectors; + +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.planmaintenance.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.planmaintenance.PlanMaintenanceDO; +import cn.iocoder.yudao.module.mes.service.planmaintenance.PlanMaintenanceService; + +@Tag(name = "管理后台 - 方案维护") +@RestController +@RequestMapping("/mes/plan-maintenance") +@Validated +public class PlanMaintenanceController { + + @Resource + private PlanMaintenanceService planMaintenanceService; + + @PostMapping("/create") + @Operation(summary = "创建方案维护") + @PreAuthorize("@ss.hasPermission('mes:plan-maintenance:create')") + public CommonResult createPlanMaintenance(@Valid @RequestBody PlanMaintenanceSaveReqVO createReqVO) { + return success(planMaintenanceService.createPlanMaintenance(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新方案维护") + @PreAuthorize("@ss.hasPermission('mes:plan-maintenance:update')") + public CommonResult updatePlanMaintenance(@Valid @RequestBody PlanMaintenanceSaveReqVO updateReqVO) { + planMaintenanceService.updatePlanMaintenance(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除方案维护") + @Parameter(name = "ids", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('mes:plan-maintenance:delete')") + public CommonResult deletePlanMaintenance(@RequestParam("ids") String ids) { + // 将逗号分隔的字符串转换为Long类型的List + List idList = Arrays.stream(ids.split(",")) + .map(String::trim) // 去除可能存在的空格 + .map(Long::valueOf) + .collect(Collectors.toList()); + planMaintenanceService.deletePlanMaintenance(idList); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得方案维护") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('mes:plan-maintenance:query')") + public CommonResult getPlanMaintenance(@RequestParam("id") Long id) { + PlanMaintenanceDO planMaintenance = planMaintenanceService.getPlanMaintenance(id); + return success(BeanUtils.toBean(planMaintenance, PlanMaintenanceRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得方案维护分页") + @PreAuthorize("@ss.hasPermission('mes:plan-maintenance:query')") + public CommonResult> getPlanMaintenancePage(@Valid PlanMaintenancePageReqVO pageReqVO) { + PageResult pageResult = planMaintenanceService.getPlanMaintenancePage(pageReqVO); + return success(BeanUtils.toBean(pageResult, PlanMaintenanceRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出方案维护 Excel") + @PreAuthorize("@ss.hasPermission('mes:plan-maintenance:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportPlanMaintenanceExcel(@Valid PlanMaintenancePageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = planMaintenanceService.getPlanMaintenancePage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "方案维护.xls", "数据", PlanMaintenanceRespVO.class, + BeanUtils.toBean(list, PlanMaintenanceRespVO.class)); + } + + + @GetMapping("/getSubjectList") + @Operation(summary = "查询项目集合列表") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('mes:plan-maintenance:query')") + public CommonResult> getSubjectList(@RequestParam("id") Long id) { + List subjectPlanDOList = planMaintenanceService.getSubjectList(id); + return success(subjectPlanDOList); + } + +} \ 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/planmaintenance/vo/PlanMaintenancePageReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/planmaintenance/vo/PlanMaintenancePageReqVO.java new file mode 100644 index 000000000..e5af3baf6 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/planmaintenance/vo/PlanMaintenancePageReqVO.java @@ -0,0 +1,34 @@ +package cn.iocoder.yudao.module.mes.controller.admin.planmaintenance.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 PlanMaintenancePageReqVO extends PageParam { + + @Schema(description = "名称", example = "王五") + private String planName; + + @Schema(description = "名称", example = "1") + private String planType; + + @Schema(description = "描述", example = "你猜") + private String description; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + + + @Schema(description = "id集合导出用") + 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/planmaintenance/vo/PlanMaintenanceRespVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/planmaintenance/vo/PlanMaintenanceRespVO.java new file mode 100644 index 000000000..cafd1a5a6 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/planmaintenance/vo/PlanMaintenanceRespVO.java @@ -0,0 +1,35 @@ +package cn.iocoder.yudao.module.mes.controller.admin.planmaintenance.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 PlanMaintenanceRespVO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "19033") + @ExcelProperty("id") + private Long id; + + @Schema(description = "名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "王五") + @ExcelProperty("名称") + private String planName; + + @Schema(description = "名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @ExcelProperty("名称") + private String planType; + + @Schema(description = "描述", example = "你猜") + @ExcelProperty("描述") + private String description; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} \ 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/planmaintenance/vo/PlanMaintenanceSaveReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/planmaintenance/vo/PlanMaintenanceSaveReqVO.java new file mode 100644 index 000000000..23fe7f859 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/planmaintenance/vo/PlanMaintenanceSaveReqVO.java @@ -0,0 +1,28 @@ +package cn.iocoder.yudao.module.mes.controller.admin.planmaintenance.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 PlanMaintenanceSaveReqVO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "19033") + private Long id; + + @Schema(description = "名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "王五") + @NotEmpty(message = "名称不能为空") + private String planName; + + @Schema(description = "名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotEmpty(message = "名称不能为空") + private String planType; + + @Schema(description = "描述") + private String description; + + @Schema(description = "项目id集合", example = "1") + private String subjectIdS; +} \ 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/subjectplan/SubjectPlanController.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/subjectplan/SubjectPlanController.java new file mode 100644 index 000000000..8e0906806 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/subjectplan/SubjectPlanController.java @@ -0,0 +1,95 @@ +package cn.iocoder.yudao.module.mes.controller.admin.subjectplan; + +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.subjectplan.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.subjectplan.SubjectPlanDO; +import cn.iocoder.yudao.module.mes.service.subjectplan.SubjectPlanService; + +@Tag(name = "管理后台 - 项目方案关联") +@RestController +@RequestMapping("/mes/subject-plan") +@Validated +public class SubjectPlanController { + + @Resource + private SubjectPlanService subjectPlanService; + + @PostMapping("/create") + @Operation(summary = "创建项目方案关联") + @PreAuthorize("@ss.hasPermission('mes:subject-plan:create')") + public CommonResult createSubjectPlan(@Valid @RequestBody SubjectPlanSaveReqVO createReqVO) { + return success(subjectPlanService.createSubjectPlan(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新项目方案关联") + @PreAuthorize("@ss.hasPermission('mes:subject-plan:update')") + public CommonResult updateSubjectPlan(@Valid @RequestBody SubjectPlanSaveReqVO updateReqVO) { + subjectPlanService.updateSubjectPlan(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除项目方案关联") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('mes:subject-plan:delete')") + public CommonResult deleteSubjectPlan(@RequestParam("id") Long id) { + subjectPlanService.deleteSubjectPlan(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得项目方案关联") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('mes:subject-plan:query')") + public CommonResult getSubjectPlan(@RequestParam("id") Long id) { + SubjectPlanDO subjectPlan = subjectPlanService.getSubjectPlan(id); + return success(BeanUtils.toBean(subjectPlan, SubjectPlanRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得项目方案关联分页") + @PreAuthorize("@ss.hasPermission('mes:subject-plan:query')") + public CommonResult> getSubjectPlanPage(@Valid SubjectPlanPageReqVO pageReqVO) { + PageResult pageResult = subjectPlanService.getSubjectPlanPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, SubjectPlanRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出项目方案关联 Excel") + @PreAuthorize("@ss.hasPermission('mes:subject-plan:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportSubjectPlanExcel(@Valid SubjectPlanPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = subjectPlanService.getSubjectPlanPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "项目方案关联.xls", "数据", SubjectPlanRespVO.class, + BeanUtils.toBean(list, SubjectPlanRespVO.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/subjectplan/vo/SubjectPlanPageReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/subjectplan/vo/SubjectPlanPageReqVO.java new file mode 100644 index 000000000..de88e0147 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/subjectplan/vo/SubjectPlanPageReqVO.java @@ -0,0 +1,28 @@ +package cn.iocoder.yudao.module.mes.controller.admin.subjectplan.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 SubjectPlanPageReqVO extends PageParam { + + @Schema(description = "项目ID", example = "21197") + private String subjectId; + + @Schema(description = "方案ID", example = "19398") + private String planId; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/subjectplan/vo/SubjectPlanRespVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/subjectplan/vo/SubjectPlanRespVO.java new file mode 100644 index 000000000..5b5830eb9 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/subjectplan/vo/SubjectPlanRespVO.java @@ -0,0 +1,31 @@ +package cn.iocoder.yudao.module.mes.controller.admin.subjectplan.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 SubjectPlanRespVO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "29831") + @ExcelProperty("id") + private Long id; + + @Schema(description = "项目ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "21197") + @ExcelProperty("项目ID") + private String subjectId; + + @Schema(description = "方案ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "19398") + @ExcelProperty("方案ID") + private String planId; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} \ 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/subjectplan/vo/SubjectPlanSaveReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/subjectplan/vo/SubjectPlanSaveReqVO.java new file mode 100644 index 000000000..72dc995f8 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/subjectplan/vo/SubjectPlanSaveReqVO.java @@ -0,0 +1,23 @@ +package cn.iocoder.yudao.module.mes.controller.admin.subjectplan.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 SubjectPlanSaveReqVO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "29831") + private Long id; + + @Schema(description = "项目ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "21197") + @NotEmpty(message = "项目ID不能为空") + private String subjectId; + + @Schema(description = "方案ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "19398") + @NotEmpty(message = "方案ID不能为空") + private String planId; + +} \ 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/taskmanagement/TaskManagementController.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/taskmanagement/TaskManagementController.java new file mode 100644 index 000000000..b995e7463 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/taskmanagement/TaskManagementController.java @@ -0,0 +1,101 @@ +package cn.iocoder.yudao.module.mes.controller.admin.taskmanagement; + +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 java.util.stream.Collectors; + +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.taskmanagement.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.taskmanagement.TaskManagementDO; +import cn.iocoder.yudao.module.mes.service.taskmanagement.TaskManagementService; + +@Tag(name = "管理后台 - 任务管理") +@RestController +@RequestMapping("/mes/task-management") +@Validated +public class TaskManagementController { + + @Resource + private TaskManagementService taskManagementService; + + @PostMapping("/create") + @Operation(summary = "创建任务管理") + @PreAuthorize("@ss.hasPermission('mes:task-management:create')") + public CommonResult createTaskManagement(@Valid @RequestBody TaskManagementSaveReqVO createReqVO) { + return success(taskManagementService.createTaskManagement(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新任务管理") + @PreAuthorize("@ss.hasPermission('mes:task-management:update')") + public CommonResult updateTaskManagement(@Valid @RequestBody TaskManagementSaveReqVO updateReqVO) { + taskManagementService.updateTaskManagement(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除任务管理") + @Parameter(name = "ids", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('mes:task-management:delete')") + public CommonResult deleteTaskManagement(@RequestParam("ids") String ids) { + // 将逗号分隔的字符串转换为Long类型的List + List idList = Arrays.stream(ids.split(",")) + .map(String::trim) // 去除可能存在的空格 + .map(Long::valueOf) + .collect(Collectors.toList()); + taskManagementService.deleteTaskManagement(idList); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得任务管理") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('mes:task-management:query')") + public CommonResult getTaskManagement(@RequestParam("id") Long id) { + TaskManagementDO taskManagement = taskManagementService.getTaskManagement(id); + return success(BeanUtils.toBean(taskManagement, TaskManagementRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得任务管理分页") + @PreAuthorize("@ss.hasPermission('mes:task-management:query')") + public CommonResult> getTaskManagementPage(@Valid TaskManagementPageReqVO pageReqVO) { + PageResult pageResult = taskManagementService.getTaskManagementPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, TaskManagementRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出任务管理 Excel") + @PreAuthorize("@ss.hasPermission('mes:task-management:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportTaskManagementExcel(@Valid TaskManagementPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = taskManagementService.getTaskManagementPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "设备类型.xls", "数据", TaskManagementRespVO.class, + BeanUtils.toBean(list, TaskManagementRespVO.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/taskmanagement/vo/TaskManagementPageReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/taskmanagement/vo/TaskManagementPageReqVO.java new file mode 100644 index 000000000..7e9adaf16 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/taskmanagement/vo/TaskManagementPageReqVO.java @@ -0,0 +1,54 @@ +package cn.iocoder.yudao.module.mes.controller.admin.taskmanagement.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 TaskManagementPageReqVO extends PageParam { + + @Schema(description = "名称", example = "李四") + private String name; + + @Schema(description = "类型(1-点检 2-保养)", example = "2") + private Integer taskType; + + @Schema(description = "设备列表") + private String deviceList; + + @Schema(description = "项目表单") + private Long projectForm; + + @Schema(description = "起止开始日期") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] startDate; + + @Schema(description = "起止结束日期") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] endDate; + + @Schema(description = "cron表达式") + private String cronExpression; + + @Schema(description = "可操作人") + private String operableUsers; + + @Schema(description = "是否启用") + private Boolean enabled; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + + @Schema(description = "id集合导出用") + 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/taskmanagement/vo/TaskManagementRespVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/taskmanagement/vo/TaskManagementRespVO.java new file mode 100644 index 000000000..90c8f2208 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/taskmanagement/vo/TaskManagementRespVO.java @@ -0,0 +1,59 @@ +package cn.iocoder.yudao.module.mes.controller.admin.taskmanagement.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 TaskManagementRespVO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "26348") + @ExcelProperty("id") + private Long id; + + @Schema(description = "名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四") + @ExcelProperty("名称") + private String name; + + @Schema(description = "类型(1-点检 2-保养)", example = "2") + @ExcelProperty("类型(1-点检 2-保养)") + private Integer taskType; + + @Schema(description = "设备列表") + @ExcelProperty("设备列表") + private String deviceList; + + @Schema(description = "项目表单") + @ExcelProperty("项目表单") + private Long projectForm; + + @Schema(description = "起止开始日期") + @ExcelProperty("起止开始日期") + private LocalDateTime startDate; + + @Schema(description = "起止结束日期") + @ExcelProperty("起止结束日期") + private LocalDateTime endDate; + + @Schema(description = "cron表达式") + @ExcelProperty("cron表达式") + private String cronExpression; + + @Schema(description = "可操作人") + @ExcelProperty("可操作人") + private String operableUsers; + + @Schema(description = "是否启用", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("是否启用") + private Boolean enabled; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} \ 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/taskmanagement/vo/TaskManagementSaveReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/taskmanagement/vo/TaskManagementSaveReqVO.java new file mode 100644 index 000000000..f7bd8d399 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/taskmanagement/vo/TaskManagementSaveReqVO.java @@ -0,0 +1,46 @@ +package cn.iocoder.yudao.module.mes.controller.admin.taskmanagement.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import javax.validation.constraints.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 设备类型新增/修改 Request VO") +@Data +public class TaskManagementSaveReqVO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "26348") + private Long id; + + @Schema(description = "名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四") + @NotEmpty(message = "名称不能为空") + private String name; + + @Schema(description = "类型(1-点检 2-保养)", example = "2") + private Integer taskType; + + @Schema(description = "设备列表") + private String deviceList; + + @Schema(description = "项目表单") + private Long projectForm; + + @Schema(description = "起止开始日期") + private LocalDateTime startDate; + + @Schema(description = "起止结束日期") + private LocalDateTime endDate; + + @Schema(description = "cron表达式") + private String cronExpression; + + @Schema(description = "可操作人") + private String operableUsers; + + @Schema(description = "是否启用", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "是否启用不能为空") + private Boolean enabled; + +} \ 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 new file mode 100644 index 000000000..bfccf7c1a --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/deviceledger/DeviceLedgerDO.java @@ -0,0 +1,101 @@ +package cn.iocoder.yudao.module.mes.dal.dataobject.deviceledger; + +import lombok.*; +import java.util.*; +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_device_ledger") +@KeySequence("mes_device_ledger_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class DeviceLedgerDO extends BaseDO { + + /** + * id + */ + @TableId + private Long id; + /** + * 设备编号 + */ + private String deviceCode; + /** + * 设备名称 + */ + private String deviceName; + /** + * 设备状态 (0-正常, 1-停用, 2-维修, 3-报废) + */ + private Integer deviceStatus; + /** + * 设备品牌 + */ + private String deviceBrand; + /** + * 设备型号 + */ + private String deviceModel; + /** + * 设备规格 + */ + private String deviceSpec; + /** + * 设备类型 + */ + private Long deviceType; + /** + * 供应商 + */ + private String supplier; + /** + * 所属车间 + */ + private String workshop; + /** + * 所属系统组织 + */ + private String systemOrg; + /** + * 设备位置 + */ + private String deviceLocation; + /** + * 设备负责人 + */ + private String deviceManager; + /** + * 设备生产日期 + */ + private LocalDateTime productionDate; + /** + * 设备入厂日期 + */ + private LocalDateTime factoryEntryDate; + /** + * 设备备注 + */ + private String deviceRemark; + /** + * 备注 + */ + private String remark; + /** + * 排序 + */ + private Integer sort; + +} \ 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/devicetype/DeviceTypeDO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/devicetype/DeviceTypeDO.java new file mode 100644 index 000000000..3d41d478c --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/devicetype/DeviceTypeDO.java @@ -0,0 +1,56 @@ +package cn.iocoder.yudao.module.mes.dal.dataobject.devicetype; + +import com.fasterxml.jackson.annotation.JsonProperty; +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_type") +@KeySequence("mes_device_type_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class DeviceTypeDO extends BaseDO { + + /** + * id + */ + @TableId + private Long id; + /** + * 编码 + */ + private String code; + /** + * 名称 + */ + private String name; + /** + * 备注 + */ + private String remark; + /** + * 排序 + */ + private Integer sort; + + /** */ + @JsonProperty("parent_id") + private Long parentId; + + /** */ + @JsonProperty("parent_chain") + private String parentChain; + +} \ 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/dvsubject/DvSubjectDO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/dvsubject/DvSubjectDO.java index 5da3cfc4c..398f08ac8 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/dvsubject/DvSubjectDO.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/dvsubject/DvSubjectDO.java @@ -54,4 +54,17 @@ public class DvSubjectDO extends BaseDO { */ private Boolean isEnable; + /** + * 检验方式 + */ + private String inspectionMethod; + /** + * 值类型 + */ + private String valueType; + /** + * 判定基准 + */ + private String judgmentCriteria; + } \ 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/planmaintenance/PlanMaintenanceDO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/planmaintenance/PlanMaintenanceDO.java new file mode 100644 index 000000000..5a0dabe41 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/planmaintenance/PlanMaintenanceDO.java @@ -0,0 +1,43 @@ +package cn.iocoder.yudao.module.mes.dal.dataobject.planmaintenance; + +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_plan_maintenance") +@KeySequence("mes_plan_maintenance_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class PlanMaintenanceDO extends BaseDO { + + /** + * id + */ + @TableId + private Long id; + /** + * 名称 + */ + private String planName; + /** + * 名称 + */ + private String planType; + /** + * 描述 + */ + private String description; + +} \ 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/subjectplan/SubjectPlanDO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/subjectplan/SubjectPlanDO.java new file mode 100644 index 000000000..609206dc6 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/subjectplan/SubjectPlanDO.java @@ -0,0 +1,39 @@ +package cn.iocoder.yudao.module.mes.dal.dataobject.subjectplan; + +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_subject_plan") +@KeySequence("mes_subject_plan_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SubjectPlanDO extends BaseDO { + + /** + * id + */ + @TableId + private Long id; + /** + * 项目ID + */ + private Long subjectId; + /** + * 方案ID + */ + private Long planId; + +} \ 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/taskmanagement/TaskManagementDO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/taskmanagement/TaskManagementDO.java new file mode 100644 index 000000000..1a683a5bb --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/taskmanagement/TaskManagementDO.java @@ -0,0 +1,69 @@ +package cn.iocoder.yudao.module.mes.dal.dataobject.taskmanagement; + +import lombok.*; +import java.util.*; +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_task_management") +@KeySequence("mes_task_management_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class TaskManagementDO extends BaseDO { + + /** + * id + */ + @TableId + private Long id; + /** + * 名称 + */ + private String name; + /** + * 类型(1-点检 2-保养) + */ + private Integer taskType; + /** + * 设备列表 + */ + private String deviceList; + /** + * 项目表单 + */ + private Long projectForm; + /** + * 起止开始日期 + */ + private LocalDateTime startDate; + /** + * 起止结束日期 + */ + private LocalDateTime endDate; + /** + * cron表达式 + */ + private String cronExpression; + /** + * 可操作人 + */ + private String operableUsers; + /** + * 是否启用 + */ + private Boolean enabled; + +} \ 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/deviceledger/DeviceLedgerMapper.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/deviceledger/DeviceLedgerMapper.java new file mode 100644 index 000000000..2da2f0fa0 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/deviceledger/DeviceLedgerMapper.java @@ -0,0 +1,59 @@ +package cn.iocoder.yudao.module.mes.dal.mysql.deviceledger; + +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.iot.dal.dataobject.device.DeviceDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.deviceledger.DeviceLedgerDO; +import com.alibaba.excel.util.StringUtils; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.mes.controller.admin.deviceledger.vo.*; + +/** + * 设备类型 Mapper + * + * @author 内蒙必硕 + */ +@Mapper +public interface DeviceLedgerMapper extends BaseMapperX { + + default PageResult selectPage(DeviceLedgerPageReqVO reqVO) { + + LambdaQueryWrapperX deviceLedgerDOLambdaQueryWrapperX = new LambdaQueryWrapperX<>(); + deviceLedgerDOLambdaQueryWrapperX + .eqIfPresent(DeviceLedgerDO::getDeviceCode, reqVO.getDeviceCode()) + .likeIfPresent(DeviceLedgerDO::getDeviceName, reqVO.getDeviceName()) + .eqIfPresent(DeviceLedgerDO::getDeviceStatus, reqVO.getDeviceStatus()) + .eqIfPresent(DeviceLedgerDO::getDeviceBrand, reqVO.getDeviceBrand()) + .eqIfPresent(DeviceLedgerDO::getDeviceModel, reqVO.getDeviceModel()) + .eqIfPresent(DeviceLedgerDO::getDeviceSpec, reqVO.getDeviceSpec()) + .eqIfPresent(DeviceLedgerDO::getDeviceType, reqVO.getDeviceType()) + .eqIfPresent(DeviceLedgerDO::getSupplier, reqVO.getSupplier()) + .eqIfPresent(DeviceLedgerDO::getWorkshop, reqVO.getWorkshop()) + .eqIfPresent(DeviceLedgerDO::getSystemOrg, reqVO.getSystemOrg()) + .eqIfPresent(DeviceLedgerDO::getDeviceLocation, reqVO.getDeviceLocation()) + .eqIfPresent(DeviceLedgerDO::getDeviceManager, reqVO.getDeviceManager()) + .betweenIfPresent(DeviceLedgerDO::getProductionDate, reqVO.getProductionDate()) + .betweenIfPresent(DeviceLedgerDO::getFactoryEntryDate, reqVO.getFactoryEntryDate()) + .eqIfPresent(DeviceLedgerDO::getDeviceRemark, reqVO.getDeviceRemark()) + .eqIfPresent(DeviceLedgerDO::getRemark, reqVO.getRemark()) + .eqIfPresent(DeviceLedgerDO::getSort, reqVO.getSort()) + .betweenIfPresent(DeviceLedgerDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(DeviceLedgerDO::getId); + + // 单独处理 ids 条件 + if (StringUtils.isNotBlank(reqVO.getIds())) { + List idList = Arrays.stream(reqVO.getIds().split(",")) + .map(String::trim) + .map(Long::valueOf) + .collect(Collectors.toList()); + deviceLedgerDOLambdaQueryWrapperX.in(DeviceLedgerDO::getId, idList); + } + + return selectPage(reqVO, deviceLedgerDOLambdaQueryWrapperX); + } + +} \ 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/devicetype/DeviceTypeMapper.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/devicetype/DeviceTypeMapper.java new file mode 100644 index 000000000..691d2ca85 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/devicetype/DeviceTypeMapper.java @@ -0,0 +1,50 @@ +package cn.iocoder.yudao.module.mes.dal.mysql.devicetype; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.apache.ibatis.annotations.Mapper; +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.devicetype.DeviceTypeDO; +import cn.iocoder.yudao.module.mes.controller.admin.devicetype.vo.*; + +import java.util.List; + +/** + * 设备类型 Mapper + * + * @author 内蒙必硕 + */ +@Mapper +public interface DeviceTypeMapper extends BaseMapperX { + + default PageResult selectPage(DeviceTypePageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(DeviceTypeDO::getParentId, reqVO.getParentId()) + .likeIfPresent(DeviceTypeDO::getParentChain, reqVO.getParentChain()) + .eqIfPresent(DeviceTypeDO::getCode, reqVO.getCode()) + .likeIfPresent(DeviceTypeDO::getName, reqVO.getName()) + .eqIfPresent(DeviceTypeDO::getRemark, reqVO.getRemark()) + .eqIfPresent(DeviceTypeDO::getSort, reqVO.getSort()) + .betweenIfPresent(DeviceTypeDO::getCreateTime, reqVO.getCreateTime()) + .orderByAsc(DeviceTypeDO::getSort) + .orderByDesc(DeviceTypeDO::getId)); + } + + default List selectList(DeviceTypeListReqVO reqVO) { + return selectList(new LambdaQueryWrapperX() + .eqIfPresent(DeviceTypeDO::getParentId, reqVO.getParentId()) + .likeIfPresent(DeviceTypeDO::getParentChain, reqVO.getParentChain()) + .likeIfPresent(DeviceTypeDO::getCode, reqVO.getCode()) + .likeIfPresent(DeviceTypeDO::getName, reqVO.getName()) + .betweenIfPresent(DeviceTypeDO::getCreateTime, reqVO.getCreateStartTime(), reqVO.getCreateEndTime()) + .orderByAsc(DeviceTypeDO::getSort) + .orderByDesc(DeviceTypeDO::getId)); + } + + default List selectList() { + return selectList(new LambdaQueryWrapper() + .orderByAsc(DeviceTypeDO::getSort) + .orderByDesc(DeviceTypeDO::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/dal/mysql/dvsubject/DvSubjectMapper.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/dvsubject/DvSubjectMapper.java index cc70a7f19..e13954205 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/dvsubject/DvSubjectMapper.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/dvsubject/DvSubjectMapper.java @@ -1,11 +1,14 @@ package cn.iocoder.yudao.module.mes.dal.mysql.dvsubject; 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.deviceledger.DeviceLedgerDO; import cn.iocoder.yudao.module.mes.dal.dataobject.dvsubject.DvSubjectDO; +import com.alibaba.excel.util.StringUtils; import org.apache.ibatis.annotations.Mapper; import cn.iocoder.yudao.module.mes.controller.admin.dvsubject.vo.*; @@ -18,15 +21,32 @@ import cn.iocoder.yudao.module.mes.controller.admin.dvsubject.vo.*; public interface DvSubjectMapper extends BaseMapperX { default PageResult selectPage(DvSubjectPageReqVO reqVO) { - return selectPage(reqVO, new LambdaQueryWrapperX() - .eqIfPresent(DvSubjectDO::getSubjectCode, reqVO.getSubjectCode()) + + + LambdaQueryWrapperX dvSubjectDOLambdaQueryWrapperX = new LambdaQueryWrapperX<>(); + dvSubjectDOLambdaQueryWrapperX + .likeIfPresent(DvSubjectDO::getInspectionMethod, reqVO.getInspectionMethod()) + .likeIfPresent(DvSubjectDO::getValueType, reqVO.getValueType()) + .likeIfPresent(DvSubjectDO::getJudgmentCriteria, reqVO.getJudgmentCriteria()) + .likeIfPresent(DvSubjectDO::getSubjectCode, reqVO.getSubjectCode()) .likeIfPresent(DvSubjectDO::getSubjectName, reqVO.getSubjectName()) .eqIfPresent(DvSubjectDO::getSubjectType, reqVO.getSubjectType()) .eqIfPresent(DvSubjectDO::getSubjectContent, reqVO.getSubjectContent()) .eqIfPresent(DvSubjectDO::getSubjectStandard, reqVO.getSubjectStandard()) .eqIfPresent(DvSubjectDO::getIsEnable, reqVO.getIsEnable()) .betweenIfPresent(DvSubjectDO::getCreateTime, reqVO.getCreateTime()) - .orderByDesc(DvSubjectDO::getId)); + .orderByDesc(DvSubjectDO::getId); + + // 单独处理 ids 条件 + if (StringUtils.isNotBlank(reqVO.getIds())) { + List idList = Arrays.stream(reqVO.getIds().split(",")) + .map(String::trim) + .map(Long::valueOf) + .collect(Collectors.toList()); + dvSubjectDOLambdaQueryWrapperX.in(DvSubjectDO::getId, idList); + } + + return selectPage(reqVO, dvSubjectDOLambdaQueryWrapperX); } } \ 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/planmaintenance/PlanMaintenanceMapper.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/planmaintenance/PlanMaintenanceMapper.java new file mode 100644 index 000000000..d5f446ba4 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/planmaintenance/PlanMaintenanceMapper.java @@ -0,0 +1,45 @@ +package cn.iocoder.yudao.module.mes.dal.mysql.planmaintenance; + +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.dvsubject.DvSubjectDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.planmaintenance.PlanMaintenanceDO; +import com.alibaba.excel.util.StringUtils; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.mes.controller.admin.planmaintenance.vo.*; + +/** + * 方案维护 Mapper + * + * @author 内蒙必硕 + */ +@Mapper +public interface PlanMaintenanceMapper extends BaseMapperX { + + default PageResult selectPage(PlanMaintenancePageReqVO reqVO) { + + LambdaQueryWrapperX planMaintenanceDOLambdaQueryWrapperX = new LambdaQueryWrapperX<>(); + planMaintenanceDOLambdaQueryWrapperX + .likeIfPresent(PlanMaintenanceDO::getPlanName, reqVO.getPlanName()) + .eqIfPresent(PlanMaintenanceDO::getPlanType, reqVO.getPlanType()) + .eqIfPresent(PlanMaintenanceDO::getDescription, reqVO.getDescription()) + .betweenIfPresent(PlanMaintenanceDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(PlanMaintenanceDO::getId); + + // 单独处理 ids 条件 + if (StringUtils.isNotBlank(reqVO.getIds())) { + List idList = Arrays.stream(reqVO.getIds().split(",")) + .map(String::trim) + .map(Long::valueOf) + .collect(Collectors.toList()); + planMaintenanceDOLambdaQueryWrapperX.in(PlanMaintenanceDO::getId, idList); + } + + return selectPage(reqVO, planMaintenanceDOLambdaQueryWrapperX); + } + +} \ 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/subjectplan/SubjectPlanMapper.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/subjectplan/SubjectPlanMapper.java new file mode 100644 index 000000000..c65dd3c7e --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/subjectplan/SubjectPlanMapper.java @@ -0,0 +1,35 @@ +package cn.iocoder.yudao.module.mes.dal.mysql.subjectplan; + +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.subjectplan.SubjectPlanDO; +import org.apache.ibatis.annotations.Delete; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.mes.controller.admin.subjectplan.vo.*; + +/** + * 项目方案关联 Mapper + * + * @author 内蒙必硕 + */ +@Mapper +public interface SubjectPlanMapper extends BaseMapperX { + + default PageResult selectPage(SubjectPlanPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(SubjectPlanDO::getSubjectId, reqVO.getSubjectId()) + .eqIfPresent(SubjectPlanDO::getPlanId, reqVO.getPlanId()) + .betweenIfPresent(SubjectPlanDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(SubjectPlanDO::getId)); + } + + /** + * 物理删除指定计划的关联 + * + * @param planId 计划ID + */ + @Delete("DELETE FROM besure.mes_subject_plan WHERE plan_id = #{planId}") + void deleteByPlanId(Long planId); + +} \ 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/taskmanagement/TaskManagementMapper.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/taskmanagement/TaskManagementMapper.java new file mode 100644 index 000000000..66598d41f --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/taskmanagement/TaskManagementMapper.java @@ -0,0 +1,53 @@ +package cn.iocoder.yudao.module.mes.dal.mysql.taskmanagement; + +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.planmaintenance.PlanMaintenanceDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.taskmanagement.TaskManagementDO; +import com.alibaba.excel.util.StringUtils; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.mes.controller.admin.taskmanagement.vo.*; + +/** + * 设备类型 Mapper + * + * @author 内蒙必硕 + */ +@Mapper +public interface TaskManagementMapper extends BaseMapperX { + + default PageResult selectPage(TaskManagementPageReqVO reqVO) { + + + LambdaQueryWrapperX taskManagementDOLambdaQueryWrapperX = new LambdaQueryWrapperX<>(); + taskManagementDOLambdaQueryWrapperX + .likeIfPresent(TaskManagementDO::getName, reqVO.getName()) + .eqIfPresent(TaskManagementDO::getTaskType, reqVO.getTaskType()) + .eqIfPresent(TaskManagementDO::getDeviceList, reqVO.getDeviceList()) + .eqIfPresent(TaskManagementDO::getProjectForm, reqVO.getProjectForm()) + .betweenIfPresent(TaskManagementDO::getStartDate, reqVO.getStartDate()) + .betweenIfPresent(TaskManagementDO::getEndDate, reqVO.getEndDate()) + .eqIfPresent(TaskManagementDO::getCronExpression, reqVO.getCronExpression()) + .eqIfPresent(TaskManagementDO::getOperableUsers, reqVO.getOperableUsers()) + .eqIfPresent(TaskManagementDO::getEnabled, reqVO.getEnabled()) + .betweenIfPresent(TaskManagementDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(TaskManagementDO::getId); + + // 单独处理 ids 条件 + if (StringUtils.isNotBlank(reqVO.getIds())) { + List idList = Arrays.stream(reqVO.getIds().split(",")) + .map(String::trim) + .map(Long::valueOf) + .collect(Collectors.toList()); + taskManagementDOLambdaQueryWrapperX.in(TaskManagementDO::getId, idList); + } + + + return selectPage(reqVO, taskManagementDOLambdaQueryWrapperX); + } + +} \ 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/DeviceLedgerService.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/deviceledger/DeviceLedgerService.java new file mode 100644 index 000000000..26e257dfc --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/deviceledger/DeviceLedgerService.java @@ -0,0 +1,55 @@ +package cn.iocoder.yudao.module.mes.service.deviceledger; + +import java.util.*; +import javax.validation.*; +import cn.iocoder.yudao.module.mes.controller.admin.deviceledger.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.deviceledger.DeviceLedgerDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; + +/** + * 设备类型 Service 接口 + * + * @author 内蒙必硕 + */ +public interface DeviceLedgerService { + + /** + * 创建设备类型 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createDeviceLedger(@Valid DeviceLedgerSaveReqVO createReqVO); + + /** + * 更新设备类型 + * + * @param updateReqVO 更新信息 + */ + void updateDeviceLedger(@Valid DeviceLedgerSaveReqVO updateReqVO); + + /** + * 删除设备类型 + * + * @param id 编号 + */ + void deleteDeviceLedger( List idList ); + + /** + * 获得设备类型 + * + * @param id 编号 + * @return 设备类型 + */ + DeviceLedgerDO getDeviceLedger(Long id); + + /** + * 获得设备类型分页 + * + * @param pageReqVO 分页查询 + * @return 设备类型分页 + */ + PageResult getDeviceLedgerPage(DeviceLedgerPageReqVO pageReqVO); + +} \ 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 new file mode 100644 index 000000000..521f06ba0 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/deviceledger/DeviceLedgerServiceImpl.java @@ -0,0 +1,89 @@ +package cn.iocoder.yudao.module.mes.service.deviceledger; + +import cn.iocoder.yudao.module.mes.dal.dataobject.devicetype.DeviceTypeDO; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +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.deviceledger.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.deviceledger.DeviceLedgerDO; +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.deviceledger.DeviceLedgerMapper; + +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 DeviceLedgerServiceImpl implements DeviceLedgerService { + + @Resource + private DeviceLedgerMapper deviceLedgerMapper; + + @Override + public Long createDeviceLedger(DeviceLedgerSaveReqVO createReqVO) { + + //验证是否唯一编码 + validateCodeOnly(createReqVO.getDeviceCode()); + // 插入 + DeviceLedgerDO deviceLedger = BeanUtils.toBean(createReqVO, DeviceLedgerDO.class); + deviceLedgerMapper.insert(deviceLedger); + // 返回 + return deviceLedger.getId(); + } + + private void validateCodeOnly( String code) { + if (deviceLedgerMapper.exists(Wrappers.lambdaQuery() + .eq(DeviceLedgerDO::getDeviceCode, code))) { + throw exception(DEVICE_LEDGER_EXISTS); + } + } + @Override + public void updateDeviceLedger(DeviceLedgerSaveReqVO updateReqVO) { + // 校验存在 + validateDeviceLedgerExists(updateReqVO.getId()); + // 更新 + DeviceLedgerDO updateObj = BeanUtils.toBean(updateReqVO, DeviceLedgerDO.class); + deviceLedgerMapper.updateById(updateObj); + } + + @Override + public void deleteDeviceLedger(List idList ) { + + for (Long id : idList) { + // 校验存在 + validateDeviceLedgerExists(id); + } + + // 删除 + deviceLedgerMapper.deleteByIds(idList); + } + + private void validateDeviceLedgerExists(Long id) { + if (deviceLedgerMapper.selectById(id) == null) { + throw exception(DEVICE_LEDGER_NOT_EXISTS); + } + } + + @Override + public DeviceLedgerDO getDeviceLedger(Long id) { + return deviceLedgerMapper.selectById(id); + } + + @Override + public PageResult getDeviceLedgerPage(DeviceLedgerPageReqVO pageReqVO) { + return deviceLedgerMapper.selectPage(pageReqVO); + } + +} \ 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/devicetype/DeviceTypeService.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/devicetype/DeviceTypeService.java new file mode 100644 index 000000000..47d68a2c3 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/devicetype/DeviceTypeService.java @@ -0,0 +1,40 @@ +package cn.iocoder.yudao.module.mes.service.devicetype; + +import cn.iocoder.yudao.module.mes.controller.admin.devicetype.vo.DeviceTypeTreeRespVO; +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.devicetype.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.devicetype.DeviceTypeDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; + +/** + * 设备类型 Service 接口 + * + * @author 内蒙必硕 + */ +public interface DeviceTypeService { + + Long createDeviceType(DeviceTypeSaveReqVO createReqVO); + + void updateDeviceType(DeviceTypeSaveReqVO updateReqVO); + + void deleteDeviceType(Long id); + + void deleteDeviceTypeBatch(List ids); + + DeviceTypeDO getDeviceType(Long id); + + PageResult getDeviceTypePage(DeviceTypePageReqVO pageReqVO); + + List getDeviceTypeList(DeviceTypeListReqVO listReqVO); + + List getDeviceTypeTree(DeviceTypeListReqVO pageReqVO); + + List getChildrenDeviceTypes(Long parentId); + + List getAncestorDeviceTypes(Long id); +} \ 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/devicetype/DeviceTypeServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/devicetype/DeviceTypeServiceImpl.java new file mode 100644 index 000000000..7e4c677a1 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/devicetype/DeviceTypeServiceImpl.java @@ -0,0 +1,312 @@ +package cn.iocoder.yudao.module.mes.service.devicetype; + +import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; +import cn.iocoder.yudao.module.mes.controller.admin.devicetype.vo.DeviceTypeTreeRespVO; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; + +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import java.util.stream.Collectors; + +import cn.iocoder.yudao.module.mes.controller.admin.devicetype.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.devicetype.DeviceTypeDO; +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.devicetype.DeviceTypeMapper; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; +import static com.baomidou.mybatisplus.extension.toolkit.Db.list; + +/** + * 设备类型 Service 实现类 + * + * @author 内蒙必硕 + */ +@Service +@Validated +public class DeviceTypeServiceImpl implements DeviceTypeService { + + @Resource + private DeviceTypeMapper deviceTypeMapper; + + @Override + public Long createDeviceType(DeviceTypeSaveReqVO createReqVO) { + + + // 1. 验证父级设备类型是否存在以及编码是否唯一 + validateParentDeviceType(Long.valueOf(createReqVO.getParentId())); + + validateCodeOnly(createReqVO.getCode()); + + // 2. 插入 + DeviceTypeDO deviceType = BeanUtils.toBean(createReqVO, DeviceTypeDO.class); + + // 3. 设置父级链 + if (createReqVO.getParentId() != null && createReqVO.getParentId() > 0) { + DeviceTypeDO parent = getDeviceType(Long.valueOf(createReqVO.getParentId())); + deviceType.setParentChain(buildParentChain(parent)); + } else { + deviceType.setParentChain(""); // 根节点 + } + + deviceTypeMapper.insert(deviceType); + + // 4. 更新子节点的父级链(如果有的话) + updateChildrenParentChain(deviceType); + + return deviceType.getId(); + } + + private void validateCodeOnly( String code) { + if (deviceTypeMapper.exists(Wrappers.lambdaQuery() + .eq(DeviceTypeDO::getCode, code))) { + throw exception(DEVICE_LEDGER_CODE_NOT_ONLY); + } + } + + @Override + public void updateDeviceType(DeviceTypeSaveReqVO updateReqVO) { + // 1. 校验存在 + validateDeviceTypeExists(updateReqVO.getId()); + + // 2. 验证父级设备类型是否存在且不能是自己的子节点 + validateParentDeviceType(Long.valueOf(updateReqVO.getParentId())); + if (updateReqVO.getParentId() != null) { + validateNotChildOfSelf(updateReqVO.getId(), Long.valueOf(updateReqVO.getParentId())); + } + + // 3. 获取旧数据 + DeviceTypeDO oldDeviceType = getDeviceType(updateReqVO.getId()); + + // 4. 更新 + DeviceTypeDO updateObj = BeanUtils.toBean(updateReqVO, DeviceTypeDO.class); + + // 5. 如果父级有变化,更新父级链 + if (!Objects.equals(oldDeviceType.getParentId(), updateReqVO.getParentId())) { + if (updateReqVO.getParentId() != null && updateReqVO.getParentId() > 0) { + DeviceTypeDO parent = getDeviceType(Long.valueOf(updateReqVO.getParentId())); + updateObj.setParentChain(buildParentChain(parent)); + } else { + updateObj.setParentChain(""); // 根节点 + } + + // 更新所有子节点的父级链 + updateChildrenParentChain(updateObj); + } + + deviceTypeMapper.updateById(updateObj); + } + + @Override + public void deleteDeviceType(Long id) { + // 1. 校验存在 + validateDeviceTypeExists(id); + + // 2. 校验是否有子节点 + if (hasChildren(id)) { + throw exception(DEVICE_TYPE_EXITS_CHILDREN); + } + + // 3. 删除 + deviceTypeMapper.deleteById(id); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteDeviceTypeBatch(List ids) { + for (Long id : ids) { + deleteDeviceType(id); + } + } + + private void validateDeviceTypeExists(Long id) { + if (deviceTypeMapper.selectById(id) == null) { + throw exception(DEVICE_TYPE_NOT_EXISTS); + } + } + + @Override + public DeviceTypeDO getDeviceType(Long id) { + return deviceTypeMapper.selectById(id); + } + + @Override + public PageResult getDeviceTypePage(DeviceTypePageReqVO pageReqVO) { + return deviceTypeMapper.selectPage(pageReqVO); + } + + @Override + public List getDeviceTypeList(DeviceTypeListReqVO listReqVO) { + return deviceTypeMapper.selectList(listReqVO); + } + + @Override + public List getDeviceTypeTree(DeviceTypeListReqVO pageReqVO) { + // 1. 查询所有设备类型 + List allDeviceTypes = deviceTypeMapper.selectList(pageReqVO); + + // 2. 构建树形结构 + return buildDeviceTypeTree(allDeviceTypes); + } + + @Override + public List getChildrenDeviceTypes(Long parentId) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(DeviceTypeDO::getParentId, parentId) + .orderByAsc(DeviceTypeDO::getSort, DeviceTypeDO::getId); + return deviceTypeMapper.selectList(queryWrapper); + } + + @Override + public List getAncestorDeviceTypes(Long id) { + DeviceTypeDO deviceType = getDeviceType(id); + if (deviceType == null || deviceType.getParentChain() == null || + deviceType.getParentChain().isEmpty()) { + return Collections.emptyList(); + } + + String[] parentIds = deviceType.getParentChain().split(","); + List ids = Arrays.stream(parentIds) + .filter(s -> !s.isEmpty()) + .map(Long::valueOf) + .collect(Collectors.toList()); + + if (ids.isEmpty()) { + return Collections.emptyList(); + } + + return deviceTypeMapper.selectBatchIds(ids); + } + + // ========== 私有方法 ========== + + /** + * 构建树形结构 + */ + private List buildDeviceTypeTree(List allDeviceTypes) { + // 按父级ID分组 + Map> childrenMap = CollectionUtils.convertMultiMap( + allDeviceTypes, DeviceTypeDO::getParentId); + + // 获取根节点(parentId为空或0) + List rootDeviceTypes = childrenMap.getOrDefault(0L, Collections.emptyList()); + rootDeviceTypes.addAll(childrenMap.getOrDefault(null, Collections.emptyList())); + + // 排序 + rootDeviceTypes.sort(Comparator.comparing(DeviceTypeDO::getSort) + .thenComparing(DeviceTypeDO::getId)); + + // 递归构建树 + return rootDeviceTypes.stream() + .map(deviceType -> convertToTree(deviceType, childrenMap)) + .collect(Collectors.toList()); + } + + /** + * 转换为树形节点 + */ + private DeviceTypeTreeRespVO convertToTree(DeviceTypeDO deviceType, + Map> childrenMap) { + DeviceTypeTreeRespVO treeNode = BeanUtils.toBean(deviceType, DeviceTypeTreeRespVO.class); + + // 获取子节点 + List children = childrenMap.getOrDefault(deviceType.getId(), Collections.emptyList()); + + if (!children.isEmpty()) { + // 排序 + children.sort(Comparator.comparing(DeviceTypeDO::getSort) + .thenComparing(DeviceTypeDO::getId)); + + // 递归转换子节点 + List childNodes = children.stream() + .map(child -> convertToTree(child, childrenMap)) + .collect(Collectors.toList()); + + treeNode.setChildren(childNodes); + treeNode.setLeaf(false); + } + + return treeNode; + } + + /** + * 验证父级设备类型是否存在 + */ + private void validateParentDeviceType(Long parentId) { + if (parentId != null && parentId > 0) { + if (deviceTypeMapper.selectById(parentId) == null) { + throw exception(DEVICE_TYPE_PARENT_NOT_EXISTS); + } + } + } + + /** + * 验证不能设置自己或自己的子节点为父级 + */ + private void validateNotChildOfSelf(Long id, Long parentId) { + if (id.equals(parentId)) { + throw exception(DEVICE_TYPE_PARENT_IS_SELF); + } + + // 获取父级的父级链 + DeviceTypeDO parent = getDeviceType(parentId); + if (parent != null && parent.getParentChain() != null) { + String parentChain = parent.getParentChain(); + if (parentChain.contains("," + id + ",") || + parentChain.startsWith(id + ",") || + parentChain.endsWith("," + id)) { + throw exception(DEVICE_TYPE_PARENT_IS_CHILD); + } + } + } + + /** + * 检查是否有子节点 + */ + private boolean hasChildren(Long id) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(DeviceTypeDO::getParentId, id); + return deviceTypeMapper.selectCount(queryWrapper) > 0; + } + + /** + * 构建父级链 + */ + private String buildParentChain(DeviceTypeDO parent) { + if (parent == null) { + return ""; + } + + StringBuilder chain = new StringBuilder(); + if (parent.getParentChain() != null && !parent.getParentChain().isEmpty()) { + chain.append(parent.getParentChain()).append(","); + } + chain.append(parent.getId()); + return chain.toString(); + } + + /** + * 更新子节点的父级链 + */ + private void updateChildrenParentChain(DeviceTypeDO deviceType) { + List children = getChildrenDeviceTypes(deviceType.getId()); + for (DeviceTypeDO child : children) { + String newParentChain = buildParentChain(deviceType); + child.setParentChain(newParentChain); + deviceTypeMapper.updateById(child); + + // 递归更新孙子节点 + updateChildrenParentChain(child); + } + } +} \ 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/dvsubject/DvSubjectService.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/dvsubject/DvSubjectService.java index 9d816f497..cc1bd058f 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/dvsubject/DvSubjectService.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/dvsubject/DvSubjectService.java @@ -6,6 +6,7 @@ import cn.iocoder.yudao.module.mes.controller.admin.dvsubject.vo.DvSubjectSaveRe import cn.iocoder.yudao.module.mes.dal.dataobject.dvsubject.DvSubjectDO; import javax.validation.Valid; +import java.util.List; /** * 维保项目 Service 接口 @@ -34,7 +35,7 @@ public interface DvSubjectService { * * @param id 编号 */ - void deleteDvSubject(Long id); + void deleteDvSubject(List idList); /** * 获得维保项目 diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/dvsubject/DvSubjectServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/dvsubject/DvSubjectServiceImpl.java index efce2241a..6e146944a 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/dvsubject/DvSubjectServiceImpl.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/dvsubject/DvSubjectServiceImpl.java @@ -4,15 +4,19 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.mes.controller.admin.dvsubject.vo.DvSubjectPageReqVO; import cn.iocoder.yudao.module.mes.controller.admin.dvsubject.vo.DvSubjectSaveReqVO; +import cn.iocoder.yudao.module.mes.dal.dataobject.devicetype.DeviceTypeDO; import cn.iocoder.yudao.module.mes.dal.dataobject.dvsubject.DvSubjectDO; import cn.iocoder.yudao.module.mes.dal.mysql.dvsubject.DvSubjectMapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; +import java.util.List; + import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.DV_SUBJECT_NOT_EXISTS; +import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; /** * 维保项目 Service 实现类 @@ -28,6 +32,8 @@ public class DvSubjectServiceImpl implements DvSubjectService { @Override public Long createDvSubject(DvSubjectSaveReqVO createReqVO) { + + validateCodeOnly(createReqVO.getSubjectCode()); // 插入 DvSubjectDO dvSubject = BeanUtils.toBean(createReqVO, DvSubjectDO.class); dvSubjectMapper.insert(dvSubject); @@ -35,6 +41,13 @@ public class DvSubjectServiceImpl implements DvSubjectService { return dvSubject.getId(); } + private void validateCodeOnly( String code) { + if (dvSubjectMapper.exists(Wrappers.lambdaQuery() + .eq(DvSubjectDO::getSubjectCode, code))) { + throw exception(SUBJECT_EXISTS); + } + } + @Override public void updateDvSubject(DvSubjectSaveReqVO updateReqVO) { // 校验存在 @@ -45,11 +58,15 @@ public class DvSubjectServiceImpl implements DvSubjectService { } @Override - public void deleteDvSubject(Long id) { - // 校验存在 - validateDvSubjectExists(id); + public void deleteDvSubject(List idList) { + + for (Long id : idList) { + // 校验存在 + validateDvSubjectExists(id); + } + // 删除 - dvSubjectMapper.deleteById(id); + dvSubjectMapper.deleteByIds(idList); } private void validateDvSubjectExists(Long id) { diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/planmaintenance/PlanMaintenanceService.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/planmaintenance/PlanMaintenanceService.java new file mode 100644 index 000000000..6c0eb4439 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/planmaintenance/PlanMaintenanceService.java @@ -0,0 +1,58 @@ +package cn.iocoder.yudao.module.mes.service.planmaintenance; + +import java.util.*; +import javax.validation.*; +import cn.iocoder.yudao.module.mes.controller.admin.planmaintenance.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.planmaintenance.PlanMaintenanceDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.module.mes.dal.dataobject.subjectplan.SubjectPlanDO; + +/** + * 方案维护 Service 接口 + * + * @author 内蒙必硕 + */ +public interface PlanMaintenanceService { + + /** + * 创建方案维护 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createPlanMaintenance(@Valid PlanMaintenanceSaveReqVO createReqVO); + + /** + * 更新方案维护 + * + * @param updateReqVO 更新信息 + */ + void updatePlanMaintenance(@Valid PlanMaintenanceSaveReqVO updateReqVO); + + /** + * 删除方案维护 + * + * @param id 编号 + */ + void deletePlanMaintenance( List idList); + + /** + * 获得方案维护 + * + * @param id 编号 + * @return 方案维护 + */ + PlanMaintenanceDO getPlanMaintenance(Long id); + + /** + * 获得方案维护分页 + * + * @param pageReqVO 分页查询 + * @return 方案维护分页 + */ + PageResult getPlanMaintenancePage(PlanMaintenancePageReqVO pageReqVO); + + List getSubjectList(Long id); + +} \ 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/planmaintenance/PlanMaintenanceServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/planmaintenance/PlanMaintenanceServiceImpl.java new file mode 100644 index 000000000..f8ed907eb --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/planmaintenance/PlanMaintenanceServiceImpl.java @@ -0,0 +1,164 @@ +package cn.iocoder.yudao.module.mes.service.planmaintenance; + +import cn.iocoder.yudao.module.mes.dal.dataobject.subjectplan.SubjectPlanDO; +import cn.iocoder.yudao.module.mes.dal.mysql.subjectplan.SubjectPlanMapper; +import cn.iocoder.yudao.module.mes.service.subjectplan.SubjectPlanService; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +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 java.util.stream.Collectors; + +import cn.iocoder.yudao.module.mes.controller.admin.planmaintenance.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.planmaintenance.PlanMaintenanceDO; +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.planmaintenance.PlanMaintenanceMapper; + +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 PlanMaintenanceServiceImpl implements PlanMaintenanceService { + + @Resource + private PlanMaintenanceMapper planMaintenanceMapper; + @Resource + private SubjectPlanMapper subjectPlanMapper; + + + @Override + @Transactional(rollbackFor = Exception.class) + public Long createPlanMaintenance(PlanMaintenanceSaveReqVO createReqVO) { + // 插入 + PlanMaintenanceDO planMaintenance = BeanUtils.toBean(createReqVO, PlanMaintenanceDO.class); + planMaintenanceMapper.insert(planMaintenance); + + if (StringUtils.isNotBlank(createReqVO.getSubjectIdS())){ + + // 将逗号分隔的字符串转换为Long类型的List + List idList = Arrays.stream( createReqVO.getSubjectIdS().split(",")) + .map(String::trim) // 去除可能存在的空格 + .map(Long::valueOf) + .collect(Collectors.toList()); + + + //插入关联表 + insertSubjectPlan(planMaintenance.getId(),idList); + } + // 返回 + return planMaintenance.getId(); + } + + private void insertSubjectPlan(Long id, List idList) { + + List subjectPlanDOArrayList = new ArrayList<>(); + for (Long subjectId : idList) { + SubjectPlanDO subjectPlanDO = new SubjectPlanDO(); + subjectPlanDO.setPlanId(id); + subjectPlanDO.setSubjectId(subjectId); + subjectPlanDOArrayList.add(subjectPlanDO); + } + subjectPlanMapper.insertBatch(subjectPlanDOArrayList); + + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void updatePlanMaintenance(PlanMaintenanceSaveReqVO updateReqVO) { + // 校验存在 + validatePlanMaintenanceExists(updateReqVO.getId()); + // 更新 + PlanMaintenanceDO updateObj = BeanUtils.toBean(updateReqVO, PlanMaintenanceDO.class); + planMaintenanceMapper.updateById(updateObj); + + + if (StringUtils.isNotBlank(updateReqVO.getSubjectIdS())) { + // 将逗号分隔的字符串转换为Long类型的List + List idList = Arrays.stream( updateReqVO.getSubjectIdS().split(",")) + .map(String::trim) // 去除可能存在的空格 + .map(Long::valueOf) + .collect(Collectors.toList()); + //更新关联表 + updateSubjectPlan(updateObj.getId(),idList); + } + } + + private void updateSubjectPlan(Long id, List idList) { + + subjectPlanMapper.deleteByPlanId(id); + List subjectPlanDOArrayList = new ArrayList<>(); + for (Long subjectId : idList) { + SubjectPlanDO subjectPlanDO = new SubjectPlanDO(); + subjectPlanDO.setPlanId(id); + subjectPlanDO.setSubjectId(subjectId); + subjectPlanDOArrayList.add(subjectPlanDO); + } + subjectPlanMapper.insertBatch(subjectPlanDOArrayList); + + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deletePlanMaintenance( List idList) { + for (Long id : idList) { + // 校验存在 + validatePlanMaintenanceExists(id); + + } + // 删除 + planMaintenanceMapper.deleteByIds(idList); + //删除关联表数据 + deleteSubjectPlan(idList); + + } + + private void deleteSubjectPlan(List idList) { + for (Long id : idList) { + if (id != null ){ + subjectPlanMapper.delete(Wrappers.lambdaQuery() + .eq(SubjectPlanDO::getPlanId, id)); + } + } + + } + + private void validatePlanMaintenanceExists(Long id) { + if (planMaintenanceMapper.selectById(id) == null) { + throw exception(PLAN_MAINTENANCE_NOT_EXISTS); + } + } + + @Override + public PlanMaintenanceDO getPlanMaintenance(Long id) { + return planMaintenanceMapper.selectById(id); + } + + @Override + public PageResult getPlanMaintenancePage(PlanMaintenancePageReqVO pageReqVO) { + return planMaintenanceMapper.selectPage(pageReqVO); + } + + @Override + public List getSubjectList(Long id) { + if (id == null ){ + throw exception(SUBJECT_ID_NOT_EXISTS); + } + return subjectPlanMapper.selectList(Wrappers.lambdaQuery() + .eq(SubjectPlanDO::getSubjectId, id)); + } + +} \ 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/subjectplan/SubjectPlanService.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/subjectplan/SubjectPlanService.java new file mode 100644 index 000000000..c65e33f56 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/subjectplan/SubjectPlanService.java @@ -0,0 +1,55 @@ +package cn.iocoder.yudao.module.mes.service.subjectplan; + +import java.util.*; +import javax.validation.*; +import cn.iocoder.yudao.module.mes.controller.admin.subjectplan.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.subjectplan.SubjectPlanDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; + +/** + * 项目方案关联 Service 接口 + * + * @author 内蒙必硕 + */ +public interface SubjectPlanService { + + /** + * 创建项目方案关联 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createSubjectPlan(@Valid SubjectPlanSaveReqVO createReqVO); + + /** + * 更新项目方案关联 + * + * @param updateReqVO 更新信息 + */ + void updateSubjectPlan(@Valid SubjectPlanSaveReqVO updateReqVO); + + /** + * 删除项目方案关联 + * + * @param id 编号 + */ + void deleteSubjectPlan(Long id); + + /** + * 获得项目方案关联 + * + * @param id 编号 + * @return 项目方案关联 + */ + SubjectPlanDO getSubjectPlan(Long id); + + /** + * 获得项目方案关联分页 + * + * @param pageReqVO 分页查询 + * @return 项目方案关联分页 + */ + PageResult getSubjectPlanPage(SubjectPlanPageReqVO pageReqVO); + +} \ 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/subjectplan/SubjectPlanServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/subjectplan/SubjectPlanServiceImpl.java new file mode 100644 index 000000000..07fd689a3 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/subjectplan/SubjectPlanServiceImpl.java @@ -0,0 +1,74 @@ +package cn.iocoder.yudao.module.mes.service.subjectplan; + +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.subjectplan.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.subjectplan.SubjectPlanDO; +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.subjectplan.SubjectPlanMapper; + +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 SubjectPlanServiceImpl implements SubjectPlanService { + + @Resource + private SubjectPlanMapper subjectPlanMapper; + + @Override + public Long createSubjectPlan(SubjectPlanSaveReqVO createReqVO) { + // 插入 + SubjectPlanDO subjectPlan = BeanUtils.toBean(createReqVO, SubjectPlanDO.class); + subjectPlanMapper.insert(subjectPlan); + // 返回 + return subjectPlan.getId(); + } + + @Override + public void updateSubjectPlan(SubjectPlanSaveReqVO updateReqVO) { + // 校验存在 + validateSubjectPlanExists(updateReqVO.getId()); + // 更新 + SubjectPlanDO updateObj = BeanUtils.toBean(updateReqVO, SubjectPlanDO.class); + subjectPlanMapper.updateById(updateObj); + } + + @Override + public void deleteSubjectPlan(Long id) { + // 校验存在 + validateSubjectPlanExists(id); + // 删除 + subjectPlanMapper.deleteById(id); + } + + private void validateSubjectPlanExists(Long id) { + if (subjectPlanMapper.selectById(id) == null) { + throw exception(SUBJECT_PLAN_NOT_EXISTS); + } + } + + @Override + public SubjectPlanDO getSubjectPlan(Long id) { + return subjectPlanMapper.selectById(id); + } + + @Override + public PageResult getSubjectPlanPage(SubjectPlanPageReqVO pageReqVO) { + return subjectPlanMapper.selectPage(pageReqVO); + } + +} \ 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/taskmanagement/TaskManagementService.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/taskmanagement/TaskManagementService.java new file mode 100644 index 000000000..fd62dce72 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/taskmanagement/TaskManagementService.java @@ -0,0 +1,55 @@ +package cn.iocoder.yudao.module.mes.service.taskmanagement; + +import java.util.*; +import javax.validation.*; +import cn.iocoder.yudao.module.mes.controller.admin.taskmanagement.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.taskmanagement.TaskManagementDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; + +/** + * 设备类型 Service 接口 + * + * @author 内蒙必硕 + */ +public interface TaskManagementService { + + /** + * 创建设备类型 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createTaskManagement(@Valid TaskManagementSaveReqVO createReqVO); + + /** + * 更新设备类型 + * + * @param updateReqVO 更新信息 + */ + void updateTaskManagement(@Valid TaskManagementSaveReqVO updateReqVO); + + /** + * 删除设备类型 + * + * @param id 编号 + */ + void deleteTaskManagement(List idList ); + + /** + * 获得设备类型 + * + * @param id 编号 + * @return 设备类型 + */ + TaskManagementDO getTaskManagement(Long id); + + /** + * 获得设备类型分页 + * + * @param pageReqVO 分页查询 + * @return 设备类型分页 + */ + PageResult getTaskManagementPage(TaskManagementPageReqVO pageReqVO); + +} \ 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/taskmanagement/TaskManagementServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/taskmanagement/TaskManagementServiceImpl.java new file mode 100644 index 000000000..066b8007f --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/taskmanagement/TaskManagementServiceImpl.java @@ -0,0 +1,76 @@ +package cn.iocoder.yudao.module.mes.service.taskmanagement; + +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.taskmanagement.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.taskmanagement.TaskManagementDO; +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.taskmanagement.TaskManagementMapper; + +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 TaskManagementServiceImpl implements TaskManagementService { + + @Resource + private TaskManagementMapper taskManagementMapper; + + @Override + public Long createTaskManagement(TaskManagementSaveReqVO createReqVO) { + // 插入 + TaskManagementDO taskManagement = BeanUtils.toBean(createReqVO, TaskManagementDO.class); + taskManagementMapper.insert(taskManagement); + // 返回 + return taskManagement.getId(); + } + + @Override + public void updateTaskManagement(TaskManagementSaveReqVO updateReqVO) { + // 校验存在 + validateTaskManagementExists(updateReqVO.getId()); + // 更新 + TaskManagementDO updateObj = BeanUtils.toBean(updateReqVO, TaskManagementDO.class); + taskManagementMapper.updateById(updateObj); + } + + @Override + public void deleteTaskManagement(List idList ) { + for (Long id : idList) { + // 校验存在 + validateTaskManagementExists(id); + } + // 删除 + taskManagementMapper.deleteByIds(idList); + } + + private void validateTaskManagementExists(Long id) { + if (taskManagementMapper.selectById(id) == null) { + throw exception(TASK_MANAGEMENT_NOT_EXISTS); + } + } + + @Override + public TaskManagementDO getTaskManagement(Long id) { + return taskManagementMapper.selectById(id); + } + + @Override + public PageResult getTaskManagementPage(TaskManagementPageReqVO pageReqVO) { + return taskManagementMapper.selectPage(pageReqVO); + } + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/test/java/cn/iocoder/yudao/module/mes/service/dvsubject/DvSubjectServiceImplTest.java b/yudao-module-mes/yudao-module-mes-biz/src/test/java/cn/iocoder/yudao/module/mes/service/dvsubject/DvSubjectServiceImplTest.java index 53aeb823a..918ee6493 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/test/java/cn/iocoder/yudao/module/mes/service/dvsubject/DvSubjectServiceImplTest.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/test/java/cn/iocoder/yudao/module/mes/service/dvsubject/DvSubjectServiceImplTest.java @@ -12,6 +12,8 @@ import org.springframework.context.annotation.Import; import javax.annotation.Resource; +import java.util.Collections; + import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildBetweenTime; import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; @@ -84,7 +86,7 @@ public class DvSubjectServiceImplTest extends BaseDbUnitTest { Long id = dbDvSubject.getId(); // 调用 - dvSubjectService.deleteDvSubject(id); + dvSubjectService.deleteDvSubject(Collections.singletonList(id)); // 校验数据不存在了 assertNull(dvSubjectMapper.selectById(id)); } @@ -95,7 +97,7 @@ public class DvSubjectServiceImplTest extends BaseDbUnitTest { Long id = randomLongId(); // 调用, 并断言异常 - assertServiceException(() -> dvSubjectService.deleteDvSubject(id), DV_SUBJECT_NOT_EXISTS); + assertServiceException(() -> dvSubjectService.deleteDvSubject(Collections.singletonList(id)), DV_SUBJECT_NOT_EXISTS); } @Test From 0cca100356866f999e0153b8f01f9b75550248df Mon Sep 17 00:00:00 2001 From: 86158 <461356067@qq.com> Date: Wed, 7 Jan 2026 19:27:19 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=AE=8C=E6=88=90=E4=BA=86=E9=85=8D?= =?UTF-8?q?=E6=96=B9=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/iot/enums/ErrorCodeConstants.java | 3 +- .../admin/recipe/RecipeController.java | 1 - .../admin/recipe/vo/RecipePageReqVO.java | 17 +-- .../admin/recipe/vo/RecipeRespVO.java | 26 ++--- .../admin/recipe/vo/RecipeSaveReqVO.java | 16 +-- .../RecipeDeviceAttributeController.java | 95 +++++++++++++++ .../vo/RecipeDeviceAttributePageReqVO.java | 40 +++++++ .../vo/RecipeDeviceAttributeRespVO.java | 47 ++++++++ .../vo/RecipeDeviceAttributeSaveReqVO.java | 39 +++++++ .../recipepoint/RecipePointController.java | 16 +-- .../recipepoint/vo/RecipePointPageReqVO.java | 30 +++-- .../recipepoint/vo/RecipePointRespVO.java | 49 ++++---- .../recipepoint/vo/RecipePointSaveReqVO.java | 32 +++-- .../recipetype/RecipeTypeController.java | 25 ++++ .../iot/dal/dataobject/recipe/RecipeDO.java | 14 +-- .../RecipeDeviceAttributeDO.java | 55 +++++++++ .../dataobject/recipepoint/RecipePointDO.java | 32 +++-- .../iot/dal/mysql/recipe/RecipeMapper.java | 59 +++------- .../RecipeDeviceAttributeMapper.java | 32 +++++ .../mysql/recipepoint/RecipePointMapper.java | 13 +-- .../mysql/recipetype/RecipeTypeMapper.java | 51 +++++++- .../iot/service/recipe/RecipeServiceImpl.java | 1 - .../RecipeDeviceAttributeService.java | 57 +++++++++ .../RecipeDeviceAttributeServiceImpl.java | 110 ++++++++++++++++++ .../recipepoint/RecipePointService.java | 16 +-- .../recipepoint/RecipePointServiceImpl.java | 2 +- .../service/recipetype/RecipeTypeService.java | 10 ++ .../recipetype/RecipeTypeServiceImpl.java | 8 ++ .../RecipeDeviceAttributeMapper.xml | 12 ++ 29 files changed, 703 insertions(+), 205 deletions(-) create mode 100644 yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipedeviceattribute/RecipeDeviceAttributeController.java create mode 100644 yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipedeviceattribute/vo/RecipeDeviceAttributePageReqVO.java create mode 100644 yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipedeviceattribute/vo/RecipeDeviceAttributeRespVO.java create mode 100644 yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipedeviceattribute/vo/RecipeDeviceAttributeSaveReqVO.java create mode 100644 yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/recipedeviceattribute/RecipeDeviceAttributeDO.java create mode 100644 yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/recipedeviceattribute/RecipeDeviceAttributeMapper.java create mode 100644 yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipedeviceattribute/RecipeDeviceAttributeService.java create mode 100644 yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipedeviceattribute/RecipeDeviceAttributeServiceImpl.java create mode 100644 yudao-module-iot/yudao-module-iot-biz/src/main/resources/mapper/recipedeviceattribute/RecipeDeviceAttributeMapper.xml 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 c358cd025..5973c4e02 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 @@ -52,7 +52,8 @@ public interface ErrorCodeConstants { ErrorCode CREATE_TDENGINE_FAILURE= new ErrorCode(1_003_000_000, "创建Tdengine子表失败"); ErrorCode RECIPE_NOT_EXISTS = new ErrorCode(1_003_000_000, "配方主不存在"); - ErrorCode RECIPE_POINT_NOT_EXISTS = new ErrorCode(1_003_000_000, "配方点位配置表(配方与设备点位关联)不存在"); ErrorCode RECIPE_TYPE_NOT_EXISTS = new ErrorCode(1_003_000_000, "配方类型表(基础字典)不存在"); + ErrorCode RECIPE_POINT_NOT_EXISTS = new ErrorCode(1_003_000_000, "手动配置参数表(绑定配方)不存在"); + ErrorCode RECIPE_DEVICE_ATTRIBUTE_NOT_EXISTS = new ErrorCode(1_003_000_000, "配方配置(关联采集设备模型-点位管理)不存在"); } diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipe/RecipeController.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipe/RecipeController.java index 6eb96d589..be84fbb30 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipe/RecipeController.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipe/RecipeController.java @@ -87,7 +87,6 @@ public class RecipeController { HttpServletResponse response) throws IOException { pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); List list = recipeService.getRecipePage(pageReqVO).getList(); - PageResult pageResult = recipeService.getRecipePage(pageReqVO); // 导出 Excel ExcelUtils.write(response, "配方管理主.xls", "数据", RecipeRespVO.class, BeanUtils.toBean(list, RecipeRespVO.class)); diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipe/vo/RecipePageReqVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipe/vo/RecipePageReqVO.java index bf0957fa3..b68dfc384 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipe/vo/RecipePageReqVO.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipe/vo/RecipePageReqVO.java @@ -15,25 +15,19 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_ @ToString(callSuper = true) public class RecipePageReqVO extends PageParam { - @Schema(description = "配方名称", example = "赵六") + @Schema(description = "配方名称", example = "李四") private String name; @Schema(description = "配方编码") private String recipeCode; - @Schema(description = "配方类型(关联配方类型表code)", example = "2") + @Schema(description = "关联配方类型", example = "2") private String recipeType; - @Schema(description = "关联产品名称", example = "李四") + @Schema(description = "关联产品名字", example = "赵六") private String productName; - @Schema(description = "关联设备ID(关联iot_device.id)", example = "14725") - private Long machineId; - - @Schema(description = "关联设备编码(冗余字段)") - private String machineCode; - - @Schema(description = "关联设备名称(冗余字段)", example = "芋艿") + @Schema(description = "关联设备名字", example = "赵六") private String machineName; @Schema(description = "配方描述") @@ -49,7 +43,8 @@ public class RecipePageReqVO extends PageParam { @Schema(description = "数据单位") private String dataUnit; - @Schema(description = "id集合导出用(多选导出时传逗号分隔的ID)") + // 新增:多选导出的ids字段(逗号分隔的id字符串,如"1,2,3") + @Schema(description = "多选导出ID集合(逗号分隔)", example = "1,2,3") private String ids; } \ No newline at end of file diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipe/vo/RecipeRespVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipe/vo/RecipeRespVO.java index 198b7563b..e7d166261 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipe/vo/RecipeRespVO.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipe/vo/RecipeRespVO.java @@ -12,36 +12,28 @@ import com.alibaba.excel.annotation.*; @ExcelIgnoreUnannotated public class RecipeRespVO { - @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "6587") + @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "631") // @ExcelProperty("主键ID") private Long id; - @Schema(description = "配方名称", example = "赵六") + @Schema(description = "配方名称", example = "李四") @ExcelProperty("配方名称") private String name; @Schema(description = "配方编码") -// @ExcelProperty("配方编码") + @ExcelProperty("配方编码") private String recipeCode; - @Schema(description = "配方类型(关联配方类型表code)", example = "2") - @ExcelProperty("配方类型(工序)") + @Schema(description = "关联配方类型", example = "2") + @ExcelProperty("配方类型") private String recipeType; - @Schema(description = "关联产品名称", example = "李四") -// @ExcelProperty("关联产品名称") + @Schema(description = "关联产品名字", example = "赵六") + @ExcelProperty("关联产品") private String productName; - @Schema(description = "关联设备ID(关联iot_device.id)", example = "14725") -// @ExcelProperty("关联设备ID(关联iot_device.id)") - private Long machineId; - - @Schema(description = "关联设备编码(冗余字段)") -// @ExcelProperty("关联设备编码(冗余字段)") - private String machineCode; - - @Schema(description = "关联设备名称(冗余字段)", example = "芋艿") -// @ExcelProperty("关联设备名称(冗余字段)") + @Schema(description = "关联设备名字", example = "赵六") + @ExcelProperty("关联设备") private String machineName; @Schema(description = "配方描述") diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipe/vo/RecipeSaveReqVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipe/vo/RecipeSaveReqVO.java index 5fe2cb1a8..c432c6b28 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipe/vo/RecipeSaveReqVO.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipe/vo/RecipeSaveReqVO.java @@ -9,28 +9,22 @@ import javax.validation.constraints.*; @Data public class RecipeSaveReqVO { - @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "6587") + @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "631") private Long id; - @Schema(description = "配方名称", example = "赵六") + @Schema(description = "配方名称", example = "李四") private String name; @Schema(description = "配方编码") private String recipeCode; - @Schema(description = "配方类型(关联配方类型表code)", example = "2") + @Schema(description = "关联配方类型", example = "2") private String recipeType; - @Schema(description = "关联产品名称", example = "李四") + @Schema(description = "关联产品名字", example = "赵六") private String productName; - @Schema(description = "关联设备ID(关联iot_device.id)", example = "14725") - private Long machineId; - - @Schema(description = "关联设备编码(冗余字段)") - private String machineCode; - - @Schema(description = "关联设备名称(冗余字段)", example = "芋艿") + @Schema(description = "关联设备名字", example = "赵六") private String machineName; @Schema(description = "配方描述") diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipedeviceattribute/RecipeDeviceAttributeController.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipedeviceattribute/RecipeDeviceAttributeController.java new file mode 100644 index 000000000..eaf685933 --- /dev/null +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipedeviceattribute/RecipeDeviceAttributeController.java @@ -0,0 +1,95 @@ +package cn.iocoder.yudao.module.iot.controller.admin.recipedeviceattribute; + +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.iot.controller.admin.recipedeviceattribute.vo.*; +import cn.iocoder.yudao.module.iot.dal.dataobject.recipedeviceattribute.RecipeDeviceAttributeDO; +import cn.iocoder.yudao.module.iot.service.recipedeviceattribute.RecipeDeviceAttributeService; + +@Tag(name = "管理后台 - 配方配置(关联采集设备模型-点位管理)") +@RestController +@RequestMapping("/iot/recipe-device-attribute") +@Validated +public class RecipeDeviceAttributeController { + + @Resource + private RecipeDeviceAttributeService recipeDeviceAttributeService; + + @PostMapping("/create") + @Operation(summary = "创建配方配置(关联采集设备模型-点位管理)") + @PreAuthorize("@ss.hasPermission('iot:recipe-device-attribute:create')") + public CommonResult createRecipeDeviceAttribute(@Valid @RequestBody RecipeDeviceAttributeSaveReqVO createReqVO) { + return success(recipeDeviceAttributeService.createRecipeDeviceAttributeBatch(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新配方配置(关联采集设备模型-点位管理)") + @PreAuthorize("@ss.hasPermission('iot:recipe-device-attribute:update')") + public CommonResult updateRecipeDeviceAttribute(@Valid @RequestBody RecipeDeviceAttributeSaveReqVO updateReqVO) { + recipeDeviceAttributeService.updateRecipeDeviceAttribute(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除配方配置(关联采集设备模型-点位管理)") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('iot:recipe-device-attribute:delete')") + public CommonResult deleteRecipeDeviceAttribute(@RequestParam("id") Long id) { + recipeDeviceAttributeService.deleteRecipeDeviceAttribute(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得配方配置(关联采集设备模型-点位管理)") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('iot:recipe-device-attribute:query')") + public CommonResult getRecipeDeviceAttribute(@RequestParam("id") Long id) { + RecipeDeviceAttributeDO recipeDeviceAttribute = recipeDeviceAttributeService.getRecipeDeviceAttribute(id); + return success(BeanUtils.toBean(recipeDeviceAttribute, RecipeDeviceAttributeRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得配方配置(关联采集设备模型-点位管理)分页") + @PreAuthorize("@ss.hasPermission('iot:recipe-device-attribute:query')") + public CommonResult> getRecipeDeviceAttributePage(@Valid RecipeDeviceAttributePageReqVO pageReqVO) { + PageResult pageResult = recipeDeviceAttributeService.getRecipeDeviceAttributePage(pageReqVO); + return success(BeanUtils.toBean(pageResult, RecipeDeviceAttributeRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出配方配置(关联采集设备模型-点位管理) Excel") + @PreAuthorize("@ss.hasPermission('iot:recipe-device-attribute:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportRecipeDeviceAttributeExcel(@Valid RecipeDeviceAttributePageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = recipeDeviceAttributeService.getRecipeDeviceAttributePage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "配方配置(关联采集设备模型-点位管理).xls", "数据", RecipeDeviceAttributeRespVO.class, + BeanUtils.toBean(list, RecipeDeviceAttributeRespVO.class)); + } + +} \ No newline at end of file diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipedeviceattribute/vo/RecipeDeviceAttributePageReqVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipedeviceattribute/vo/RecipeDeviceAttributePageReqVO.java new file mode 100644 index 000000000..dcb392bf2 --- /dev/null +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipedeviceattribute/vo/RecipeDeviceAttributePageReqVO.java @@ -0,0 +1,40 @@ +package cn.iocoder.yudao.module.iot.controller.admin.recipedeviceattribute.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 RecipeDeviceAttributePageReqVO extends PageParam { + + @Schema(description = "关联配方id", example = "1102") + private Long recipeId; + + @Schema(description = "关联点位id", example = "21675") + private Long attributeId; + + @Schema(description = "点位名字", example = "王五") + private String attributeName; + + @Schema(description = "点位类型", example = "1") + private String attributeType; + + @Schema(description = "数据类型", example = "2") + private String dataType; + + @Schema(description = "单位") + private String dataUnit; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} \ No newline at end of file diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipedeviceattribute/vo/RecipeDeviceAttributeRespVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipedeviceattribute/vo/RecipeDeviceAttributeRespVO.java new file mode 100644 index 000000000..e427ad223 --- /dev/null +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipedeviceattribute/vo/RecipeDeviceAttributeRespVO.java @@ -0,0 +1,47 @@ +package cn.iocoder.yudao.module.iot.controller.admin.recipedeviceattribute.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 RecipeDeviceAttributeRespVO { + + @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1118") + @ExcelProperty("主键ID") + private Long id; + + @Schema(description = "关联配方id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1102") + @ExcelProperty("关联配方id") + private Long recipeId; + + @Schema(description = "关联点位id", requiredMode = Schema.RequiredMode.REQUIRED, example = "21675") + @ExcelProperty("关联点位id") + private Long attributeId; + + @Schema(description = "点位名字", example = "王五") + @ExcelProperty("点位名字") + private String attributeName; + + @Schema(description = "点位类型", example = "1") + @ExcelProperty("点位类型") + private String attributeType; + + @Schema(description = "数据类型", example = "2") + @ExcelProperty("数据类型") + private String dataType; + + @Schema(description = "单位") + @ExcelProperty("单位") + private String dataUnit; + + @Schema(description = "创建时间") + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} \ No newline at end of file diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipedeviceattribute/vo/RecipeDeviceAttributeSaveReqVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipedeviceattribute/vo/RecipeDeviceAttributeSaveReqVO.java new file mode 100644 index 000000000..9b575e30a --- /dev/null +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipedeviceattribute/vo/RecipeDeviceAttributeSaveReqVO.java @@ -0,0 +1,39 @@ +package cn.iocoder.yudao.module.iot.controller.admin.recipedeviceattribute.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 RecipeDeviceAttributeSaveReqVO { + + @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1118") + private Long id; + + @Schema(description = "关联配方id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1102") +// @NotNull(message = "关联配方id不能为空") + private Long recipeId; + + @Schema(description = "关联点位id", requiredMode = Schema.RequiredMode.REQUIRED, example = "21675") +// @NotNull(message = "关联点位id不能为空") + private Long attributeId; + + @Schema(description = "点位名字", example = "王五") + private String attributeName; + + @Schema(description = "点位类型", example = "1") + private String attributeType; + + @Schema(description = "数据类型", example = "2") + private String dataType; + + @Schema(description = "单位") + private String dataUnit; + + // 新增:批量创建的属性ID集合 + @Schema(description = "批量创建的属性ID集合", requiredMode = Schema.RequiredMode.REQUIRED) + private List ids; + +} \ No newline at end of file diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipepoint/RecipePointController.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipepoint/RecipePointController.java index 9e316d507..24e81b77e 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipepoint/RecipePointController.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipepoint/RecipePointController.java @@ -29,7 +29,7 @@ import cn.iocoder.yudao.module.iot.controller.admin.recipepoint.vo.*; import cn.iocoder.yudao.module.iot.dal.dataobject.recipepoint.RecipePointDO; import cn.iocoder.yudao.module.iot.service.recipepoint.RecipePointService; -@Tag(name = "管理后台 - 配方点位配置表(配方与设备点位关联)") +@Tag(name = "管理后台 - 手动配置参数表(绑定配方)") @RestController @RequestMapping("/iot/recipe-point") @Validated @@ -39,14 +39,14 @@ public class RecipePointController { private RecipePointService recipePointService; @PostMapping("/create") - @Operation(summary = "创建配方点位配置表(配方与设备点位关联)") + @Operation(summary = "创建手动配置参数表(绑定配方)") @PreAuthorize("@ss.hasPermission('iot:recipe-point:create')") public CommonResult createRecipePoint(@Valid @RequestBody RecipePointSaveReqVO createReqVO) { return success(recipePointService.createRecipePoint(createReqVO)); } @PutMapping("/update") - @Operation(summary = "更新配方点位配置表(配方与设备点位关联)") + @Operation(summary = "更新手动配置参数表(绑定配方)") @PreAuthorize("@ss.hasPermission('iot:recipe-point:update')") public CommonResult updateRecipePoint(@Valid @RequestBody RecipePointSaveReqVO updateReqVO) { recipePointService.updateRecipePoint(updateReqVO); @@ -54,7 +54,7 @@ public class RecipePointController { } @DeleteMapping("/delete") - @Operation(summary = "删除配方点位配置表(配方与设备点位关联)") + @Operation(summary = "删除手动配置参数表(绑定配方)") @Parameter(name = "id", description = "编号", required = true) @PreAuthorize("@ss.hasPermission('iot:recipe-point:delete')") public CommonResult deleteRecipePoint(@RequestParam("id") Long id) { @@ -63,7 +63,7 @@ public class RecipePointController { } @GetMapping("/get") - @Operation(summary = "获得配方点位配置表(配方与设备点位关联)") + @Operation(summary = "获得手动配置参数表(绑定配方)") @Parameter(name = "id", description = "编号", required = true, example = "1024") @PreAuthorize("@ss.hasPermission('iot:recipe-point:query')") public CommonResult getRecipePoint(@RequestParam("id") Long id) { @@ -72,7 +72,7 @@ public class RecipePointController { } @GetMapping("/page") - @Operation(summary = "获得配方点位配置表(配方与设备点位关联)分页") + @Operation(summary = "获得手动配置参数表(绑定配方)分页") @PreAuthorize("@ss.hasPermission('iot:recipe-point:query')") public CommonResult> getRecipePointPage(@Valid RecipePointPageReqVO pageReqVO) { PageResult pageResult = recipePointService.getRecipePointPage(pageReqVO); @@ -80,7 +80,7 @@ public class RecipePointController { } @GetMapping("/export-excel") - @Operation(summary = "导出配方点位配置表(配方与设备点位关联) Excel") + @Operation(summary = "导出手动配置参数表(绑定配方) Excel") @PreAuthorize("@ss.hasPermission('iot:recipe-point:export')") @ApiAccessLog(operateType = EXPORT) public void exportRecipePointExcel(@Valid RecipePointPageReqVO pageReqVO, @@ -88,7 +88,7 @@ public class RecipePointController { pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); List list = recipePointService.getRecipePointPage(pageReqVO).getList(); // 导出 Excel - ExcelUtils.write(response, "配方点位配置表(配方与设备点位关联).xls", "数据", RecipePointRespVO.class, + ExcelUtils.write(response, "手动配置参数表(绑定配方).xls", "数据", RecipePointRespVO.class, BeanUtils.toBean(list, RecipePointRespVO.class)); } diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipepoint/vo/RecipePointPageReqVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipepoint/vo/RecipePointPageReqVO.java index 0b567382c..ce75ec3f8 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipepoint/vo/RecipePointPageReqVO.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipepoint/vo/RecipePointPageReqVO.java @@ -4,40 +4,38 @@ import lombok.*; import java.util.*; import io.swagger.v3.oas.annotations.media.Schema; import cn.iocoder.yudao.framework.common.pojo.PageParam; +import java.math.BigDecimal; 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") +@Schema(description = "管理后台 - 手动配置参数表(绑定配方)分页 Request VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) public class RecipePointPageReqVO extends PageParam { - @Schema(description = "关联配方ID(关联iot_recipe.id)", example = "8760") + @Schema(description = "关联配方ID", example = "28516") private Long recipeId; - @Schema(description = "点位编码(关联iot_device_attribute_type.code)") - private String pointCode; + @Schema(description = "参数名字", example = "李四") + private String name; - @Schema(description = "点位名称", example = "李四") - private String pointName; + @Schema(description = "上限") + private BigDecimal max; - @Schema(description = "点位类型", example = "1") - private String pointType; + @Schema(description = "下限") + private BigDecimal min; - @Schema(description = "数据类型(如:Time、Number等)", example = "1") + @Schema(description = "数据类型", example = "1") private String dataType; - @Schema(description = "单位(如:s、min等)") - private String unit; + @Schema(description = "单位") + private String dataUnit; - @Schema(description = "设定值") - private String setValue; - - @Schema(description = "实际值(从设备上载同步)") - private String actualValue; + @Schema(description = "备注", example = "你说的对") + private String remark; @Schema(description = "创建时间") @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipepoint/vo/RecipePointRespVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipepoint/vo/RecipePointRespVO.java index d7ac9e423..b9e6b4daf 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipepoint/vo/RecipePointRespVO.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipepoint/vo/RecipePointRespVO.java @@ -3,52 +3,49 @@ package cn.iocoder.yudao.module.iot.controller.admin.recipepoint.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import java.util.*; +import java.math.BigDecimal; import org.springframework.format.annotation.DateTimeFormat; import java.time.LocalDateTime; import com.alibaba.excel.annotation.*; -@Schema(description = "管理后台 - 配方点位配置表(配方与设备点位关联) Response VO") +@Schema(description = "管理后台 - 手动配置参数表(绑定配方) Response VO") @Data @ExcelIgnoreUnannotated public class RecipePointRespVO { - @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "27323") + @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "16742") @ExcelProperty("主键ID") private Long id; - @Schema(description = "关联配方ID(关联iot_recipe.id)", example = "8760") - @ExcelProperty("关联配方ID(关联iot_recipe.id)") + @Schema(description = "关联配方ID", example = "28516") + @ExcelProperty("关联配方ID") private Long recipeId; - @Schema(description = "点位编码(关联iot_device_attribute_type.code)") - @ExcelProperty("点位编码(关联iot_device_attribute_type.code)") - private String pointCode; + @Schema(description = "参数名字", example = "李四") + @ExcelProperty("参数名字") + private String name; - @Schema(description = "点位名称", example = "李四") - @ExcelProperty("点位名称") - private String pointName; + @Schema(description = "上限") + @ExcelProperty("上限") + private BigDecimal max; - @Schema(description = "点位类型", example = "1") - @ExcelProperty("点位类型") - private String pointType; + @Schema(description = "下限") + @ExcelProperty("下限") + private BigDecimal min; - @Schema(description = "数据类型(如:Time、Number等)", example = "1") - @ExcelProperty("数据类型(如:Time、Number等)") + @Schema(description = "数据类型", example = "1") + @ExcelProperty("数据类型") private String dataType; - @Schema(description = "单位(如:s、min等)") - @ExcelProperty("单位(如:s、min等)") - private String unit; + @Schema(description = "单位") + @ExcelProperty("单位") + private String dataUnit; - @Schema(description = "设定值") - @ExcelProperty("设定值") - private String setValue; + @Schema(description = "备注", example = "你说的对") + @ExcelProperty("备注") + private String remark; - @Schema(description = "实际值(从设备上载同步)") - @ExcelProperty("实际值(从设备上载同步)") - private String actualValue; - - @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "创建时间") @ExcelProperty("创建时间") private LocalDateTime createTime; diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipepoint/vo/RecipePointSaveReqVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipepoint/vo/RecipePointSaveReqVO.java index 911e2d49f..dc64f1911 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipepoint/vo/RecipePointSaveReqVO.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipepoint/vo/RecipePointSaveReqVO.java @@ -4,36 +4,34 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import java.util.*; import javax.validation.constraints.*; +import java.math.BigDecimal; -@Schema(description = "管理后台 - 配方点位配置表(配方与设备点位关联)新增/修改 Request VO") +@Schema(description = "管理后台 - 手动配置参数表(绑定配方)新增/修改 Request VO") @Data public class RecipePointSaveReqVO { - @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "27323") + @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "16742") private Long id; - @Schema(description = "关联配方ID(关联iot_recipe.id)", example = "8760") + @Schema(description = "关联配方ID", example = "28516") private Long recipeId; - @Schema(description = "点位编码(关联iot_device_attribute_type.code)") - private String pointCode; + @Schema(description = "参数名字", example = "李四") + private String name; - @Schema(description = "点位名称", example = "李四") - private String pointName; + @Schema(description = "上限") + private BigDecimal max; - @Schema(description = "点位类型", example = "1") - private String pointType; + @Schema(description = "下限") + private BigDecimal min; - @Schema(description = "数据类型(如:Time、Number等)", example = "1") + @Schema(description = "数据类型", example = "1") private String dataType; - @Schema(description = "单位(如:s、min等)") - private String unit; + @Schema(description = "单位") + private String dataUnit; - @Schema(description = "设定值") - private String setValue; - - @Schema(description = "实际值(从设备上载同步)") - private String actualValue; + @Schema(description = "备注", example = "你说的对") + private String remark; } \ No newline at end of file diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipetype/RecipeTypeController.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipetype/RecipeTypeController.java index cb6f49e07..4e8b64380 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipetype/RecipeTypeController.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipetype/RecipeTypeController.java @@ -79,6 +79,31 @@ public class RecipeTypeController { return success(BeanUtils.toBean(pageResult, RecipeTypeRespVO.class)); } + @GetMapping("/page-all") + @Operation(summary = "获得配方类型表(不传分页参数查全部,传则分页)") + @PreAuthorize("@ss.hasPermission('iot:recipe-type:query')") + public CommonResult> getRecipeTypePageAll( + RecipeTypePageReqVO pageReqVO, + HttpServletRequest request) { // 注入request,判断参数是否传了 + + // 核心优化:判断前端是否真的传了pageNo/pageSize,而非判断值(避免前端传1/10时误判) + boolean hasPageNo = request.getParameter("pageNo") != null; + boolean hasPageSize = request.getParameter("pageSize") != null; + boolean isQueryAll = !hasPageNo && !hasPageSize; + + PageResult pageResult; + if (isQueryAll) { + // 查全部逻辑 + pageResult = recipeTypeService.getRecipeTypeAll(pageReqVO); + } else { + // 传了分页参数则手动校验(替代@Valid,避免必填报错) +// ValidatorUtil.validate(pageReqVO); + // 复用原有分页逻辑 + pageResult = recipeTypeService.getRecipeTypePage(pageReqVO); + } + return success(BeanUtils.toBean(pageResult, RecipeTypeRespVO.class)); + } + @GetMapping("/export-excel") @Operation(summary = "导出配方类型表(基础字典) Excel") @PreAuthorize("@ss.hasPermission('iot:recipe-type:export')") diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/recipe/RecipeDO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/recipe/RecipeDO.java index d91117042..c3c943865 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/recipe/RecipeDO.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/recipe/RecipeDO.java @@ -36,23 +36,15 @@ public class RecipeDO extends BaseDO { */ private String recipeCode; /** - * 配方类型(关联配方类型表code) + * 关联配方类型 */ private String recipeType; /** - * 关联产品名称 + * 关联产品名字 */ private String productName; /** - * 关联设备ID(关联iot_device.id) - */ - private Long machineId; - /** - * 关联设备编码(冗余字段) - */ - private String machineCode; - /** - * 关联设备名称(冗余字段) + * 关联设备名字 */ private String machineName; /** diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/recipedeviceattribute/RecipeDeviceAttributeDO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/recipedeviceattribute/RecipeDeviceAttributeDO.java new file mode 100644 index 000000000..dd0f3af07 --- /dev/null +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/recipedeviceattribute/RecipeDeviceAttributeDO.java @@ -0,0 +1,55 @@ +package cn.iocoder.yudao.module.iot.dal.dataobject.recipedeviceattribute; + +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("iot_recipe_device_attribute") +@KeySequence("iot_recipe_device_attribute_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class RecipeDeviceAttributeDO extends BaseDO { + + /** + * 主键ID + */ + @TableId + private Long id; + /** + * 关联配方id + */ + private Long recipeId; + /** + * 关联点位id + */ + private Long attributeId; + /** + * 点位名字 + */ + private String attributeName; + /** + * 点位类型 + */ + private String attributeType; + /** + * 数据类型 + */ + private String dataType; + /** + * 单位 + */ + private String dataUnit; + +} \ No newline at end of file diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/recipepoint/RecipePointDO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/recipepoint/RecipePointDO.java index a4ac7766a..ef91d4a35 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/recipepoint/RecipePointDO.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/recipepoint/RecipePointDO.java @@ -2,13 +2,15 @@ package cn.iocoder.yudao.module.iot.dal.dataobject.recipepoint; import lombok.*; import java.util.*; +import java.math.BigDecimal; +import java.math.BigDecimal; import java.time.LocalDateTime; import java.time.LocalDateTime; import com.baomidou.mybatisplus.annotation.*; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; /** - * 配方点位配置表(配方与设备点位关联) DO + * 手动配置参数表(绑定配方) DO * * @author 内蒙必硕 */ @@ -28,36 +30,32 @@ public class RecipePointDO extends BaseDO { @TableId private Long id; /** - * 关联配方ID(关联iot_recipe.id) + * 关联配方ID */ private Long recipeId; /** - * 点位编码(关联iot_device_attribute_type.code) + * 参数名字 */ - private String pointCode; + private String name; /** - * 点位名称 + * 上限 */ - private String pointName; + private BigDecimal max; /** - * 点位类型 + * 下限 */ - private String pointType; + private BigDecimal min; /** - * 数据类型(如:Time、Number等) + * 数据类型 */ private String dataType; /** - * 单位(如:s、min等) + * 单位 */ - private String unit; + private String dataUnit; /** - * 设定值 + * 备注 */ - private String setValue; - /** - * 实际值(从设备上载同步) - */ - private String actualValue; + private String remark; } \ No newline at end of file diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/recipe/RecipeMapper.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/recipe/RecipeMapper.java index 38d23ea35..680c84cb8 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/recipe/RecipeMapper.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/recipe/RecipeMapper.java @@ -1,53 +1,17 @@ -//package cn.iocoder.yudao.module.iot.dal.mysql.recipe; -// -//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.iot.dal.dataobject.recipe.RecipeDO; -//import org.apache.ibatis.annotations.Mapper; -//import cn.iocoder.yudao.module.iot.controller.admin.recipe.vo.*; -// -///** -// * 配方管理主 Mapper -// * -// * @author 内蒙必硕 -// */ -//@Mapper -//public interface RecipeMapper extends BaseMapperX { -// -// default PageResult selectPage(RecipePageReqVO reqVO) { -// return selectPage(reqVO, new LambdaQueryWrapperX() -// .likeIfPresent(RecipeDO::getName, reqVO.getName()) -// .eqIfPresent(RecipeDO::getRecipeCode, reqVO.getRecipeCode()) -// .eqIfPresent(RecipeDO::getRecipeType, reqVO.getRecipeType()) -// .likeIfPresent(RecipeDO::getProductName, reqVO.getProductName()) -// .eqIfPresent(RecipeDO::getMachineId, reqVO.getMachineId()) -// .eqIfPresent(RecipeDO::getMachineCode, reqVO.getMachineCode()) -// .likeIfPresent(RecipeDO::getMachineName, reqVO.getMachineName()) -// .eqIfPresent(RecipeDO::getRecipeDesc, reqVO.getRecipeDesc()) -// .eqIfPresent(RecipeDO::getIsEnable, reqVO.getIsEnable()) -// .betweenIfPresent(RecipeDO::getCreateTime, reqVO.getCreateTime()) -// .eqIfPresent(RecipeDO::getDataUnit, reqVO.getDataUnit()) -// .orderByDesc(RecipeDO::getId)); -// } -// -//} package cn.iocoder.yudao.module.iot.dal.mysql.recipe; import java.util.*; +import java.util.stream.Collectors; + import com.alibaba.excel.util.StringUtils; import cn.iocoder.yudao.framework.common.pojo.PageResult; +//import cn.iocoder.yudao.framework.common.util.StringUtils; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.module.iot.dal.dataobject.recipe.RecipeDO; import org.apache.ibatis.annotations.Mapper; -import cn.iocoder.yudao.module.iot.controller.admin.recipe.vo.*; +import cn.iocoder.yudao.module.iot.controller.admin.recipe.vo.RecipePageReqVO; -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; /** * 配方管理主 Mapper * @@ -57,13 +21,13 @@ import java.util.stream.Collectors; public interface RecipeMapper extends BaseMapperX { default PageResult selectPage(RecipePageReqVO reqVO) { + // 1. 先创建查询条件对象 LambdaQueryWrapperX queryWrapper = new LambdaQueryWrapperX() + // 原有所有查询条件(保留不变) .likeIfPresent(RecipeDO::getName, reqVO.getName()) - .eqIfPresent(RecipeDO::getRecipeCode, reqVO.getRecipeCode()) + .likeIfPresent(RecipeDO::getRecipeCode, reqVO.getRecipeCode()) .eqIfPresent(RecipeDO::getRecipeType, reqVO.getRecipeType()) .likeIfPresent(RecipeDO::getProductName, reqVO.getProductName()) - .eqIfPresent(RecipeDO::getMachineId, reqVO.getMachineId()) - .eqIfPresent(RecipeDO::getMachineCode, reqVO.getMachineCode()) .likeIfPresent(RecipeDO::getMachineName, reqVO.getMachineName()) .eqIfPresent(RecipeDO::getRecipeDesc, reqVO.getRecipeDesc()) .eqIfPresent(RecipeDO::getIsEnable, reqVO.getIsEnable()) @@ -71,15 +35,18 @@ public interface RecipeMapper extends BaseMapperX { .eqIfPresent(RecipeDO::getDataUnit, reqVO.getDataUnit()) .orderByDesc(RecipeDO::getId); - // 新增:处理ids多选导出条件 + // 2. 新增:处理ids多选导出条件(和参考代码逻辑一致) if (StringUtils.isNotBlank(reqVO.getIds())) { + // 将逗号分隔的ids字符串转为Long类型的List List idList = Arrays.stream(reqVO.getIds().split(",")) - .map(String::trim) - .map(Long::valueOf) + .map(String::trim) // 去除空格,避免空字符导致转换失败 + .map(Long::valueOf) // 转为Long类型 .collect(Collectors.toList()); + // 添加idIn条件,只查询指定ids的记录 queryWrapper.in(RecipeDO::getId, idList); } + // 3. 执行分页查询 return selectPage(reqVO, queryWrapper); } diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/recipedeviceattribute/RecipeDeviceAttributeMapper.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/recipedeviceattribute/RecipeDeviceAttributeMapper.java new file mode 100644 index 000000000..6aa3f816a --- /dev/null +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/recipedeviceattribute/RecipeDeviceAttributeMapper.java @@ -0,0 +1,32 @@ +package cn.iocoder.yudao.module.iot.dal.mysql.recipedeviceattribute; + +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.iot.dal.dataobject.recipedeviceattribute.RecipeDeviceAttributeDO; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.iot.controller.admin.recipedeviceattribute.vo.*; + +/** + * 配方配置(关联采集设备模型-点位管理) Mapper + * + * @author 内蒙必硕 + */ +@Mapper +public interface RecipeDeviceAttributeMapper extends BaseMapperX { + + default PageResult selectPage(RecipeDeviceAttributePageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(RecipeDeviceAttributeDO::getRecipeId, reqVO.getRecipeId()) + .eqIfPresent(RecipeDeviceAttributeDO::getAttributeId, reqVO.getAttributeId()) + .likeIfPresent(RecipeDeviceAttributeDO::getAttributeName, reqVO.getAttributeName()) + .eqIfPresent(RecipeDeviceAttributeDO::getAttributeType, reqVO.getAttributeType()) + .eqIfPresent(RecipeDeviceAttributeDO::getDataType, reqVO.getDataType()) + .eqIfPresent(RecipeDeviceAttributeDO::getDataUnit, reqVO.getDataUnit()) + .betweenIfPresent(RecipeDeviceAttributeDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(RecipeDeviceAttributeDO::getId)); + } + +} \ No newline at end of file diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/recipepoint/RecipePointMapper.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/recipepoint/RecipePointMapper.java index 2e131522b..54ac2e557 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/recipepoint/RecipePointMapper.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/recipepoint/RecipePointMapper.java @@ -10,7 +10,7 @@ import org.apache.ibatis.annotations.Mapper; import cn.iocoder.yudao.module.iot.controller.admin.recipepoint.vo.*; /** - * 配方点位配置表(配方与设备点位关联) Mapper + * 手动配置参数表(绑定配方) Mapper * * @author 内蒙必硕 */ @@ -20,13 +20,12 @@ public interface RecipePointMapper extends BaseMapperX { default PageResult selectPage(RecipePointPageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX() .eqIfPresent(RecipePointDO::getRecipeId, reqVO.getRecipeId()) - .eqIfPresent(RecipePointDO::getPointCode, reqVO.getPointCode()) - .likeIfPresent(RecipePointDO::getPointName, reqVO.getPointName()) - .eqIfPresent(RecipePointDO::getPointType, reqVO.getPointType()) + .likeIfPresent(RecipePointDO::getName, reqVO.getName()) + .eqIfPresent(RecipePointDO::getMax, reqVO.getMax()) + .eqIfPresent(RecipePointDO::getMin, reqVO.getMin()) .eqIfPresent(RecipePointDO::getDataType, reqVO.getDataType()) - .eqIfPresent(RecipePointDO::getUnit, reqVO.getUnit()) - .eqIfPresent(RecipePointDO::getSetValue, reqVO.getSetValue()) - .eqIfPresent(RecipePointDO::getActualValue, reqVO.getActualValue()) + .eqIfPresent(RecipePointDO::getDataUnit, reqVO.getDataUnit()) + .eqIfPresent(RecipePointDO::getRemark, reqVO.getRemark()) .betweenIfPresent(RecipePointDO::getCreateTime, reqVO.getCreateTime()) .orderByDesc(RecipePointDO::getId)); } diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/recipetype/RecipeTypeMapper.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/recipetype/RecipeTypeMapper.java index 9f462d916..ada0bc9d6 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/recipetype/RecipeTypeMapper.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/recipetype/RecipeTypeMapper.java @@ -19,12 +19,54 @@ import cn.iocoder.yudao.module.iot.controller.admin.recipetype.vo.*; * * @author 内蒙必硕 */ +//@Mapper +//public interface RecipeTypeMapper extends BaseMapperX { +// +// default PageResult selectPage(RecipeTypePageReqVO reqVO) { +// LambdaQueryWrapperX queryWrapper = new LambdaQueryWrapperX() +//// return selectPage(reqVO, new LambdaQueryWrapperX() +// .eqIfPresent(RecipeTypeDO::getCode, reqVO.getCode()) +// .likeIfPresent(RecipeTypeDO::getName, reqVO.getName()) +// .eqIfPresent(RecipeTypeDO::getProcess, reqVO.getProcess()) +// .eqIfPresent(RecipeTypeDO::getRemark, reqVO.getRemark()) +// .eqIfPresent(RecipeTypeDO::getSort, reqVO.getSort()) +// .betweenIfPresent(RecipeTypeDO::getCreateTime, reqVO.getCreateTime()) +// .orderByDesc(RecipeTypeDO::getId); +// +// // 新增:处理ids多选导出条件 +// if (StringUtils.isNotBlank(reqVO.getIds())) { +// List idList = Arrays.stream(reqVO.getIds().split(",")) +// .map(String::trim) +// .map(Long::valueOf) +// .collect(Collectors.toList()); +// queryWrapper.in(RecipeTypeDO::getId, idList); +// } +// +// return selectPage(reqVO, queryWrapper); +// +// +// } +// +//} + @Mapper public interface RecipeTypeMapper extends BaseMapperX { + // 原有selectPage方法保留,不动 default PageResult selectPage(RecipeTypePageReqVO reqVO) { + LambdaQueryWrapperX queryWrapper = buildQueryWrapper(reqVO); + return selectPage(reqVO, queryWrapper); + } + + // 新增:selectList方法,复用查询条件,仅查全部列表(解决Service报错) + default List selectList(RecipeTypePageReqVO reqVO) { + LambdaQueryWrapperX queryWrapper = buildQueryWrapper(reqVO); + return selectList(queryWrapper); // 调用BaseMapperX的selectList方法 + } + + // 抽取通用查询条件构造方法(复用,避免代码重复) + default LambdaQueryWrapperX buildQueryWrapper(RecipeTypePageReqVO reqVO) { LambdaQueryWrapperX queryWrapper = new LambdaQueryWrapperX() -// return selectPage(reqVO, new LambdaQueryWrapperX() .eqIfPresent(RecipeTypeDO::getCode, reqVO.getCode()) .likeIfPresent(RecipeTypeDO::getName, reqVO.getName()) .eqIfPresent(RecipeTypeDO::getProcess, reqVO.getProcess()) @@ -33,7 +75,7 @@ public interface RecipeTypeMapper extends BaseMapperX { .betweenIfPresent(RecipeTypeDO::getCreateTime, reqVO.getCreateTime()) .orderByDesc(RecipeTypeDO::getId); - // 新增:处理ids多选导出条件 + // 处理ids多选导出条件(复用原有逻辑) if (StringUtils.isNotBlank(reqVO.getIds())) { List idList = Arrays.stream(reqVO.getIds().split(",")) .map(String::trim) @@ -41,10 +83,7 @@ public interface RecipeTypeMapper extends BaseMapperX { .collect(Collectors.toList()); queryWrapper.in(RecipeTypeDO::getId, idList); } - - return selectPage(reqVO, queryWrapper); - - + return queryWrapper; } } diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipe/RecipeServiceImpl.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipe/RecipeServiceImpl.java index ac85f7c5e..6a4733a30 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipe/RecipeServiceImpl.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipe/RecipeServiceImpl.java @@ -71,5 +71,4 @@ public class RecipeServiceImpl implements RecipeService { return recipeMapper.selectPage(pageReqVO); } - } \ No newline at end of file diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipedeviceattribute/RecipeDeviceAttributeService.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipedeviceattribute/RecipeDeviceAttributeService.java new file mode 100644 index 000000000..e6d541dbc --- /dev/null +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipedeviceattribute/RecipeDeviceAttributeService.java @@ -0,0 +1,57 @@ +package cn.iocoder.yudao.module.iot.service.recipedeviceattribute; + +import java.util.*; +import javax.validation.*; +import cn.iocoder.yudao.module.iot.controller.admin.recipedeviceattribute.vo.*; +import cn.iocoder.yudao.module.iot.dal.dataobject.recipedeviceattribute.RecipeDeviceAttributeDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; + +/** + * 配方配置(关联采集设备模型-点位管理) Service 接口 + * + * @author 内蒙必硕 + */ +public interface RecipeDeviceAttributeService { + + /** + * 创建配方配置(关联采集设备模型-点位管理) + * + * @param createReqVO 创建信息 + * @return 编号 + */ +// Long createRecipeDeviceAttribute(@Valid RecipeDeviceAttributeSaveReqVO createReqVO); + + /** + * 更新配方配置(关联采集设备模型-点位管理) + * + * @param updateReqVO 更新信息 + */ + void updateRecipeDeviceAttribute(@Valid RecipeDeviceAttributeSaveReqVO updateReqVO); + + /** + * 删除配方配置(关联采集设备模型-点位管理) + * + * @param id 编号 + */ + void deleteRecipeDeviceAttribute(Long id); + + /** + * 获得配方配置(关联采集设备模型-点位管理) + * + * @param id 编号 + * @return 配方配置(关联采集设备模型-点位管理) + */ + RecipeDeviceAttributeDO getRecipeDeviceAttribute(Long id); + + /** + * 获得配方配置(关联采集设备模型-点位管理)分页 + * + * @param pageReqVO 分页查询 + * @return 配方配置(关联采集设备模型-点位管理)分页 + */ + PageResult getRecipeDeviceAttributePage(RecipeDeviceAttributePageReqVO pageReqVO); + + Boolean createRecipeDeviceAttributeBatch(RecipeDeviceAttributeSaveReqVO createReqVO); + +} \ No newline at end of file diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipedeviceattribute/RecipeDeviceAttributeServiceImpl.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipedeviceattribute/RecipeDeviceAttributeServiceImpl.java new file mode 100644 index 000000000..a6ce0dc95 --- /dev/null +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipedeviceattribute/RecipeDeviceAttributeServiceImpl.java @@ -0,0 +1,110 @@ +package cn.iocoder.yudao.module.iot.service.recipedeviceattribute; + +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; + +import cn.iocoder.yudao.module.iot.controller.admin.recipedeviceattribute.vo.*; +import cn.iocoder.yudao.module.iot.dal.dataobject.recipedeviceattribute.RecipeDeviceAttributeDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; + +import cn.iocoder.yudao.module.iot.dal.mysql.recipedeviceattribute.RecipeDeviceAttributeMapper; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.iot.enums.ErrorCodeConstants.*; + +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; // 或芋道的CollectionUtils + +import java.util.List; +import java.util.stream.Collectors; +//import cn.iocoder.yudao.framework.common.util.bean.BeanUtils; // 确保BeanUtils的导入正确 + +/** + * 配方配置(关联采集设备模型-点位管理) Service 实现类 + * + * @author 内蒙必硕 + */ +@Service +@Validated +public class RecipeDeviceAttributeServiceImpl implements RecipeDeviceAttributeService { + + @Resource + private RecipeDeviceAttributeMapper recipeDeviceAttributeMapper; + + + +// @Override +// public Long createRecipeDeviceAttribute(RecipeDeviceAttributeSaveReqVO createReqVO) { +// // 插入 +// RecipeDeviceAttributeDO recipeDeviceAttribute = BeanUtils.toBean(createReqVO, RecipeDeviceAttributeDO.class); +// recipeDeviceAttributeMapper.insert(recipeDeviceAttribute); +// // 返回 +// return recipeDeviceAttribute.getId(); +// } + @Override + public Boolean createRecipeDeviceAttributeBatch(RecipeDeviceAttributeSaveReqVO createReqVO) { + // 1. 非空校验:ids集合不能为空 + if (CollectionUtils.isEmpty(createReqVO.getIds())) { + throw new IllegalArgumentException("批量创建失败:属性ID集合(ids)不能为空"); + } + // 2. 非空校验:基础字段(如recipe_id)不能为空 + if (createReqVO.getRecipeId() == null) { + throw new IllegalArgumentException("批量创建失败:配方ID(recipeId)不能为空"); + } + + List attributeList = createReqVO.getIds().stream() + .map(attributeId -> { + RecipeDeviceAttributeDO attributeDO = BeanUtils.toBean(createReqVO, RecipeDeviceAttributeDO.class); + attributeDO.setAttributeId(attributeId); + return attributeDO; + }) + .collect(Collectors.toList()); + +// 4. 批量插入(调整接收类型) + Boolean insertSuccess = recipeDeviceAttributeMapper.insertBatch(attributeList); + +// 5. 返回是否批量插入成功 + return insertSuccess; + } + + @Override + public void updateRecipeDeviceAttribute(RecipeDeviceAttributeSaveReqVO updateReqVO) { + // 校验存在 + validateRecipeDeviceAttributeExists(updateReqVO.getId()); + // 更新 + RecipeDeviceAttributeDO updateObj = BeanUtils.toBean(updateReqVO, RecipeDeviceAttributeDO.class); + recipeDeviceAttributeMapper.updateById(updateObj); + } + + @Override + public void deleteRecipeDeviceAttribute(Long id) { + // 校验存在 + validateRecipeDeviceAttributeExists(id); + // 删除 + recipeDeviceAttributeMapper.deleteById(id); + } + + private void validateRecipeDeviceAttributeExists(Long id) { + if (recipeDeviceAttributeMapper.selectById(id) == null) { + throw exception(RECIPE_DEVICE_ATTRIBUTE_NOT_EXISTS); + } + } + + @Override + public RecipeDeviceAttributeDO getRecipeDeviceAttribute(Long id) { + return recipeDeviceAttributeMapper.selectById(id); + } + + @Override + public PageResult getRecipeDeviceAttributePage(RecipeDeviceAttributePageReqVO pageReqVO) { + return recipeDeviceAttributeMapper.selectPage(pageReqVO); + } + +} \ No newline at end of file diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipepoint/RecipePointService.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipepoint/RecipePointService.java index a50071eb1..bd2b42d7e 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipepoint/RecipePointService.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipepoint/RecipePointService.java @@ -8,14 +8,14 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageParam; /** - * 配方点位配置表(配方与设备点位关联) Service 接口 + * 手动配置参数表(绑定配方) Service 接口 * * @author 内蒙必硕 */ public interface RecipePointService { /** - * 创建配方点位配置表(配方与设备点位关联) + * 创建手动配置参数表(绑定配方) * * @param createReqVO 创建信息 * @return 编号 @@ -23,32 +23,32 @@ public interface RecipePointService { Long createRecipePoint(@Valid RecipePointSaveReqVO createReqVO); /** - * 更新配方点位配置表(配方与设备点位关联) + * 更新手动配置参数表(绑定配方) * * @param updateReqVO 更新信息 */ void updateRecipePoint(@Valid RecipePointSaveReqVO updateReqVO); /** - * 删除配方点位配置表(配方与设备点位关联) + * 删除手动配置参数表(绑定配方) * * @param id 编号 */ void deleteRecipePoint(Long id); /** - * 获得配方点位配置表(配方与设备点位关联) + * 获得手动配置参数表(绑定配方) * * @param id 编号 - * @return 配方点位配置表(配方与设备点位关联) + * @return 手动配置参数表(绑定配方) */ RecipePointDO getRecipePoint(Long id); /** - * 获得配方点位配置表(配方与设备点位关联)分页 + * 获得手动配置参数表(绑定配方)分页 * * @param pageReqVO 分页查询 - * @return 配方点位配置表(配方与设备点位关联)分页 + * @return 手动配置参数表(绑定配方)分页 */ PageResult getRecipePointPage(RecipePointPageReqVO pageReqVO); diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipepoint/RecipePointServiceImpl.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipepoint/RecipePointServiceImpl.java index b3b1de02f..999836e33 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipepoint/RecipePointServiceImpl.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipepoint/RecipePointServiceImpl.java @@ -18,7 +18,7 @@ import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionU import static cn.iocoder.yudao.module.iot.enums.ErrorCodeConstants.*; /** - * 配方点位配置表(配方与设备点位关联) Service 实现类 + * 手动配置参数表(绑定配方) Service 实现类 * * @author 内蒙必硕 */ diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipetype/RecipeTypeService.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipetype/RecipeTypeService.java index 1962a4c03..9804c24d7 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipetype/RecipeTypeService.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipetype/RecipeTypeService.java @@ -52,4 +52,14 @@ public interface RecipeTypeService { */ PageResult getRecipeTypePage(RecipeTypePageReqVO pageReqVO); + + /** + * 获得配方类型表全部数据(支持带查询条件) + * @param pageReqVO 查询条件(仅用业务字段,忽略分页字段) + * @return 所有配方类型数据 + */ + PageResult getRecipeTypeAll(RecipeTypePageReqVO pageReqVO); + + + } \ No newline at end of file diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipetype/RecipeTypeServiceImpl.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipetype/RecipeTypeServiceImpl.java index 7bd061cdd..3850a6562 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipetype/RecipeTypeServiceImpl.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipetype/RecipeTypeServiceImpl.java @@ -71,4 +71,12 @@ public class RecipeTypeServiceImpl implements RecipeTypeService { return recipeTypeMapper.selectPage(pageReqVO); } + @Override + public PageResult getRecipeTypeAll(RecipeTypePageReqVO pageReqVO) { + // 调用Mapper查询全部数据(复用原有分页的查询条件,只是不分页) + List list = recipeTypeMapper.selectList(pageReqVO); + // 封装成PageResult返回(总数=列表长度,保持返回格式和分页接口一致) + return new PageResult<>(list, (long) list.size()); + } + } \ No newline at end of file diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/resources/mapper/recipedeviceattribute/RecipeDeviceAttributeMapper.xml b/yudao-module-iot/yudao-module-iot-biz/src/main/resources/mapper/recipedeviceattribute/RecipeDeviceAttributeMapper.xml new file mode 100644 index 000000000..2d198001a --- /dev/null +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/resources/mapper/recipedeviceattribute/RecipeDeviceAttributeMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file