diff --git a/sql/mysql/mes_data2.sql b/sql/mysql/mes_data2.sql index c631a6ed5f..f677cc5922 100644 --- a/sql/mysql/mes_data2.sql +++ b/sql/mysql/mes_data2.sql @@ -20,3 +20,53 @@ CREATE TABLE `mes_product_process_line` DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = DYNAMIC COMMENT ='产品工艺'; + +CREATE TABLE `mes_energy_device` +( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID', + `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '名称', + `code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '编码', + `device_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '设备类型', + `info` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '信息资料', + `check_cron` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '抄表周期cron', + `last_check_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最后抄表时间', + `last_check_value` decimal(24, 6) DEFAULT NULL COMMENT '最后抄表值', + `unit_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '单位', + + `is_enable` bit(1) NOT NULL DEFAULT b'1' COMMENT '是否启用', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + `tenant_id` bigint DEFAULT NULL COMMENT '租户id', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB + AUTO_INCREMENT = 91 + DEFAULT CHARSET = utf8mb4 + COLLATE = utf8mb4_unicode_ci + ROW_FORMAT = DYNAMIC COMMENT ='能源设备'; + +CREATE TABLE `mes_energy_device_check_record` +( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID', + `device_id` bigint NOT NULL COMMENT '能源设备Id', + `last_check_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '上次抄表时间', + `last_check_value` decimal(24, 6) DEFAULT NULL COMMENT '上次抄表值', + `check_value` decimal(24, 6) DEFAULT NULL COMMENT '抄表值', + `check_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '抄表时间', + `diff_value` decimal(24, 6) DEFAULT NULL COMMENT '差值', + `unit_price` decimal(24, 6) DEFAULT NULL COMMENT '单价', + `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + `tenant_id` bigint DEFAULT NULL COMMENT '租户id', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB + AUTO_INCREMENT = 91 + DEFAULT CHARSET = utf8mb4 + COLLATE = utf8mb4_unicode_ci + ROW_FORMAT = DYNAMIC COMMENT ='抄表记录'; 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 b0355cb412..ababcfbcb7 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 @@ -61,4 +61,7 @@ public interface ErrorCodeConstants { ErrorCode PRODUCE_REPORT_CHANGE_RECORD_NOT_EXISTS = new ErrorCode(5_0084, "报工变更记录不存在"); ErrorCode WORK_REPORT_PLAN_NOT_EXISTS = new ErrorCode(5_0085, "报工分配计划不存在"); + ErrorCode ENERGY_DEVICE_NOT_EXISTS = new ErrorCode(5_0084, "能源抄表记录不存在"); + ErrorCode ENERGY_DEVICE_CHECK_RECORD_NOT_EXISTS = new ErrorCode(5_0085, "能源设备不存在"); + } diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/energydevice/EnergyDeviceCheckRecordController.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/energydevice/EnergyDeviceCheckRecordController.java new file mode 100644 index 0000000000..4bad352d06 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/energydevice/EnergyDeviceCheckRecordController.java @@ -0,0 +1,95 @@ +package cn.iocoder.yudao.module.mes.controller.admin.energydevice; + +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; +import cn.iocoder.yudao.module.mes.controller.admin.energydevice.vo.EnergyDeviceCheckRecordPageReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.energydevice.vo.EnergyDeviceCheckRecordRespVO; +import cn.iocoder.yudao.module.mes.controller.admin.energydevice.vo.EnergyDeviceCheckRecordSaveReqVO; +import cn.iocoder.yudao.module.mes.dal.dataobject.energydevice.EnergyDeviceCheckRecordDO; +import cn.iocoder.yudao.module.mes.dal.mysql.energydevice.EnergyDeviceMapper; +import cn.iocoder.yudao.module.mes.service.energydevice.EnergyDeviceCheckRecordService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; +import java.io.IOException; +import java.util.List; + +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - 抄表记录") +@RestController +@RequestMapping("/mes/energy-device-check-record") +@Validated +public class EnergyDeviceCheckRecordController { + + @Resource + private EnergyDeviceCheckRecordService energyDeviceCheckRecordService; + + + @PostMapping("/create") + @Operation(summary = "创建抄表记录") + @PreAuthorize("@ss.hasPermission('mes:energy-device-check-record:create')") + public CommonResult createEnergyDeviceCheckRecord(@Valid @RequestBody EnergyDeviceCheckRecordSaveReqVO createReqVO) { + return success(energyDeviceCheckRecordService.createEnergyDeviceCheckRecord(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新抄表记录") + @PreAuthorize("@ss.hasPermission('mes:energy-device-check-record:update')") + public CommonResult updateEnergyDeviceCheckRecord(@Valid @RequestBody EnergyDeviceCheckRecordSaveReqVO updateReqVO) { + energyDeviceCheckRecordService.updateEnergyDeviceCheckRecord(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除抄表记录") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('mes:energy-device-check-record:delete')") + public CommonResult deleteEnergyDeviceCheckRecord(@RequestParam("id") Long id) { + energyDeviceCheckRecordService.deleteEnergyDeviceCheckRecord(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得抄表记录") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('mes:energy-device-check-record:query')") + public CommonResult getEnergyDeviceCheckRecord(@RequestParam("id") Long id) { + EnergyDeviceCheckRecordDO energyDeviceCheckRecord = energyDeviceCheckRecordService.getEnergyDeviceCheckRecord(id); + return success(BeanUtils.toBean(energyDeviceCheckRecord, EnergyDeviceCheckRecordRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得抄表记录分页") + @PreAuthorize("@ss.hasPermission('mes:energy-device-check-record:query')") + public CommonResult> getEnergyDeviceCheckRecordPage(@Valid EnergyDeviceCheckRecordPageReqVO pageReqVO) { + PageResult pageResult = energyDeviceCheckRecordService.getEnergyDeviceCheckRecordPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, EnergyDeviceCheckRecordRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出抄表记录 Excel") + @PreAuthorize("@ss.hasPermission('mes:energy-device-check-record:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportEnergyDeviceCheckRecordExcel(@Valid EnergyDeviceCheckRecordPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = energyDeviceCheckRecordService.getEnergyDeviceCheckRecordPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "抄表记录.xls", "数据", EnergyDeviceCheckRecordRespVO.class, + BeanUtils.toBean(list, EnergyDeviceCheckRecordRespVO.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/energydevice/EnergyDeviceController.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/energydevice/EnergyDeviceController.java new file mode 100644 index 0000000000..422bee8eae --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/energydevice/EnergyDeviceController.java @@ -0,0 +1,137 @@ +package cn.iocoder.yudao.module.mes.controller.admin.energydevice; + +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; +import cn.iocoder.yudao.module.mes.controller.admin.energydevice.vo.EnergyDevicePageReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.energydevice.vo.EnergyDeviceRespVO; +import cn.iocoder.yudao.module.mes.controller.admin.energydevice.vo.EnergyDeviceSaveReqVO; +import cn.iocoder.yudao.module.mes.dal.dataobject.energydevice.EnergyDeviceCheckRecordDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.energydevice.EnergyDeviceDO; +import cn.iocoder.yudao.module.mes.service.energydevice.EnergyDeviceService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; +import java.io.IOException; +import java.util.List; + +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - 能源设备") +@RestController +@RequestMapping("/mes/energy-device") +@Validated +public class EnergyDeviceController { + + @Resource + private EnergyDeviceService energyDeviceService; + + @PostMapping("/create") + @Operation(summary = "创建能源设备") + @PreAuthorize("@ss.hasPermission('mes:energy-device:create')") + public CommonResult createEnergyDevice(@Valid @RequestBody EnergyDeviceSaveReqVO createReqVO) { + return success(energyDeviceService.createEnergyDevice(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新能源设备") + @PreAuthorize("@ss.hasPermission('mes:energy-device:update')") + public CommonResult updateEnergyDevice(@Valid @RequestBody EnergyDeviceSaveReqVO updateReqVO) { + energyDeviceService.updateEnergyDevice(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除能源设备") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('mes:energy-device:delete')") + public CommonResult deleteEnergyDevice(@RequestParam("id") Long id) { + energyDeviceService.deleteEnergyDevice(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得能源设备") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('mes:energy-device:query')") + public CommonResult getEnergyDevice(@RequestParam("id") Long id) { + EnergyDeviceDO energyDevice = energyDeviceService.getEnergyDevice(id); + return success(BeanUtils.toBean(energyDevice, EnergyDeviceRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得能源设备分页") + @PreAuthorize("@ss.hasPermission('mes:energy-device:query')") + public CommonResult> getEnergyDevicePage(@Valid EnergyDevicePageReqVO pageReqVO) { + PageResult pageResult = energyDeviceService.getEnergyDevicePage(pageReqVO); + return success(BeanUtils.toBean(pageResult, EnergyDeviceRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出能源设备 Excel") + @PreAuthorize("@ss.hasPermission('mes:energy-device:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportEnergyDeviceExcel(@Valid EnergyDevicePageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = energyDeviceService.getEnergyDevicePage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "能源设备.xls", "数据", EnergyDeviceRespVO.class, + BeanUtils.toBean(list, EnergyDeviceRespVO.class)); + } + + // ==================== 子表(抄表记录) ==================== + + @GetMapping("/energy-device-check-record/page") + @Operation(summary = "获得抄表记录分页") + @Parameter(name = "deviceId", description = "能源设备Id") + @PreAuthorize("@ss.hasPermission('mes:energy-device:query')") + public CommonResult> getEnergyDeviceCheckRecordPage(PageParam pageReqVO, + @RequestParam("deviceId") Long deviceId) { + return success(energyDeviceService.getEnergyDeviceCheckRecordPage(pageReqVO, deviceId)); + } + + @PostMapping("/energy-device-check-record/create") + @Operation(summary = "创建抄表记录") + @PreAuthorize("@ss.hasPermission('mes:energy-device:create')") + public CommonResult createEnergyDeviceCheckRecord(@Valid @RequestBody EnergyDeviceCheckRecordDO energyDeviceCheckRecord) { + return success(energyDeviceService.createEnergyDeviceCheckRecord(energyDeviceCheckRecord)); + } + + @PutMapping("/energy-device-check-record/update") + @Operation(summary = "更新抄表记录") + @PreAuthorize("@ss.hasPermission('mes:energy-device:update')") + public CommonResult updateEnergyDeviceCheckRecord(@Valid @RequestBody EnergyDeviceCheckRecordDO energyDeviceCheckRecord) { + energyDeviceService.updateEnergyDeviceCheckRecord(energyDeviceCheckRecord); + return success(true); + } + + @DeleteMapping("/energy-device-check-record/delete") + @Parameter(name = "id", description = "编号", required = true) + @Operation(summary = "删除抄表记录") + @PreAuthorize("@ss.hasPermission('mes:energy-device:delete')") + public CommonResult deleteEnergyDeviceCheckRecord(@RequestParam("id") Long id) { + energyDeviceService.deleteEnergyDeviceCheckRecord(id); + return success(true); + } + + @GetMapping("/energy-device-check-record/get") + @Operation(summary = "获得抄表记录") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('mes:energy-device:query')") + public CommonResult getEnergyDeviceCheckRecord(@RequestParam("id") Long id) { + return success(energyDeviceService.getEnergyDeviceCheckRecord(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/controller/admin/energydevice/vo/EnergyDeviceCheckRecordPageReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/energydevice/vo/EnergyDeviceCheckRecordPageReqVO.java new file mode 100644 index 0000000000..04090f8daf --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/energydevice/vo/EnergyDeviceCheckRecordPageReqVO.java @@ -0,0 +1,38 @@ +package cn.iocoder.yudao.module.mes.controller.admin.energydevice.vo; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.springframework.format.annotation.DateTimeFormat; + +import java.math.BigDecimal; +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 EnergyDeviceCheckRecordPageReqVO extends PageParam { + + @Schema(description = "能源设备Id", example = "17334") + private Long deviceId; + + @Schema(description = "抄表时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] checkTime; + + @Schema(description = "差值") + private BigDecimal diffValue; + + @Schema(description = "备注", example = "随便") + private String remark; + + @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/energydevice/vo/EnergyDeviceCheckRecordRespVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/energydevice/vo/EnergyDeviceCheckRecordRespVO.java new file mode 100644 index 0000000000..319b0b81a2 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/energydevice/vo/EnergyDeviceCheckRecordRespVO.java @@ -0,0 +1,56 @@ +package cn.iocoder.yudao.module.mes.controller.admin.energydevice.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 抄表记录 Response VO") +@Data +@ExcelIgnoreUnannotated +public class EnergyDeviceCheckRecordRespVO { + + @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "13646") + @ExcelProperty("ID") + private Long id; + + @Schema(description = "能源设备Id", requiredMode = Schema.RequiredMode.REQUIRED, example = "17334") + @ExcelProperty("能源设备Id") + private Long deviceId; + + @Schema(description = "上次抄表时间") + @ExcelProperty("上次抄表时间") + private LocalDateTime lastCheckTime; + + @Schema(description = "上次抄表值") + @ExcelProperty("上次抄表值") + private BigDecimal lastCheckValue; + + @Schema(description = "抄表值", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("抄表值") + private BigDecimal checkValue; + + @Schema(description = "抄表时间") + @ExcelProperty("抄表时间") + private LocalDateTime checkTime; + + @Schema(description = "差值") + @ExcelProperty("差值") + private BigDecimal diffValue; + + @Schema(description = "单价", example = "1868") + @ExcelProperty("单价") + private BigDecimal unitPrice; + + @Schema(description = "备注", example = "随便") + @ExcelProperty("备注") + private String remark; + + @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/energydevice/vo/EnergyDeviceCheckRecordSaveReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/energydevice/vo/EnergyDeviceCheckRecordSaveReqVO.java new file mode 100644 index 0000000000..755f0df67b --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/energydevice/vo/EnergyDeviceCheckRecordSaveReqVO.java @@ -0,0 +1,43 @@ +package cn.iocoder.yudao.module.mes.controller.admin.energydevice.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 抄表记录新增/修改 Request VO") +@Data +public class EnergyDeviceCheckRecordSaveReqVO { + + @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "13646") + private Long id; + + @Schema(description = "能源设备Id", requiredMode = Schema.RequiredMode.REQUIRED, example = "17334") + @NotNull(message = "能源设备Id不能为空") + private Long deviceId; + + @Schema(description = "上次抄表时间") + private LocalDateTime lastCheckTime; + + @Schema(description = "上次抄表值") + private BigDecimal lastCheckValue; + + @Schema(description = "抄表值", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "抄表值不能为空") + private BigDecimal checkValue; + + @Schema(description = "抄表时间") + private LocalDateTime checkTime; + + @Schema(description = "差值") + private BigDecimal diffValue; + + @Schema(description = "单价", example = "1868") + private BigDecimal unitPrice; + + @Schema(description = "备注", example = "随便") + private String remark; + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/energydevice/vo/EnergyDevicePageReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/energydevice/vo/EnergyDevicePageReqVO.java new file mode 100644 index 0000000000..6746c0fe4b --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/energydevice/vo/EnergyDevicePageReqVO.java @@ -0,0 +1,53 @@ +package cn.iocoder.yudao.module.mes.controller.admin.energydevice.vo; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.springframework.format.annotation.DateTimeFormat; + +import java.math.BigDecimal; +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 EnergyDevicePageReqVO extends PageParam { + + @Schema(description = "名称", example = "芋艿") + private String name; + + @Schema(description = "编码") + private String code; + + @Schema(description = "设备类型", example = "1") + private String deviceType; + + @Schema(description = "信息资料") + private String info; + + @Schema(description = "抄表周期cron") + private String checkCron; + + @Schema(description = "最后抄表时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] lastCheckTime; + + @Schema(description = "最后抄表值") + private BigDecimal lastCheckValue; + + @Schema(description = "单位", example = "赵六") + private String unitName; + + @Schema(description = "是否启用") + private Boolean isEnable; + + @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/energydevice/vo/EnergyDeviceRespVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/energydevice/vo/EnergyDeviceRespVO.java new file mode 100644 index 0000000000..8492d9f236 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/energydevice/vo/EnergyDeviceRespVO.java @@ -0,0 +1,64 @@ +package cn.iocoder.yudao.module.mes.controller.admin.energydevice.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import java.util.*; +import java.math.BigDecimal; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; +import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; +import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; + +@Schema(description = "管理后台 - 能源设备 Response VO") +@Data +@ExcelIgnoreUnannotated +public class EnergyDeviceRespVO { + + @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "25931") + @ExcelProperty("ID") + private Long id; + + @Schema(description = "名称", example = "芋艿") + @ExcelProperty("名称") + private String name; + + @Schema(description = "编码") + @ExcelProperty("编码") + private String code; + + @Schema(description = "设备类型", example = "1") + @ExcelProperty(value = "设备类型", converter = DictConvert.class) + @DictFormat("mes_energy_device_type") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中 + private String deviceType; + + @Schema(description = "信息资料") + @ExcelProperty("信息资料") + private String info; + + @Schema(description = "抄表周期cron") + @ExcelProperty("抄表周期cron") + private String checkCron; + + @Schema(description = "最后抄表时间") + @ExcelProperty("最后抄表时间") + private LocalDateTime lastCheckTime; + + @Schema(description = "最后抄表值") + @ExcelProperty("最后抄表值") + private BigDecimal lastCheckValue; + + @Schema(description = "单位", example = "赵六") + @ExcelProperty("单位") + private String unitName; + + @Schema(description = "是否启用", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("是否启用") + private Boolean isEnable; + + @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/energydevice/vo/EnergyDeviceSaveReqVO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/energydevice/vo/EnergyDeviceSaveReqVO.java new file mode 100644 index 0000000000..c71512b66c --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/energydevice/vo/EnergyDeviceSaveReqVO.java @@ -0,0 +1,45 @@ +package cn.iocoder.yudao.module.mes.controller.admin.energydevice.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; + +import javax.validation.constraints.*; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 能源设备新增/修改 Request VO") +@Data +public class EnergyDeviceSaveReqVO { + + @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "25931") + private Long id; + + @Schema(description = "名称", example = "芋艿") + private String name; + + @Schema(description = "编码") + private String code; + + @Schema(description = "设备类型", example = "1") + private String deviceType; + + @Schema(description = "信息资料") + private String info; + + @Schema(description = "抄表周期cron") + private String checkCron; + + @Schema(description = "最后抄表时间") + private LocalDateTime lastCheckTime; + + @Schema(description = "最后抄表值") + private BigDecimal lastCheckValue; + + @Schema(description = "单位", example = "赵六") + private String unitName; + + @Schema(description = "是否启用", requiredMode = Schema.RequiredMode.REQUIRED) + @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/dal/dataobject/energydevice/EnergyDeviceCheckRecordDO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/energydevice/EnergyDeviceCheckRecordDO.java new file mode 100644 index 0000000000..71025438d1 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/energydevice/EnergyDeviceCheckRecordDO.java @@ -0,0 +1,65 @@ +package cn.iocoder.yudao.module.mes.dal.dataobject.energydevice; + +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.*; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * 抄表记录 DO + * + * @author 内蒙必硕 + */ +@TableName("mes_energy_device_check_record") +@KeySequence("mes_energy_device_check_record_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class EnergyDeviceCheckRecordDO extends BaseDO { + + /** + * ID + */ + @TableId + private Long id; + /** + * 能源设备Id + */ + private Long deviceId; + /** + * 上次抄表时间 + */ + private LocalDateTime lastCheckTime; + /** + * 上次抄表值 + */ + private BigDecimal lastCheckValue; + /** + * 抄表值 + */ + private BigDecimal checkValue; + /** + * 抄表时间 + */ + private LocalDateTime checkTime; + /** + * 差值 + */ + private BigDecimal diffValue; + /** + * 单价 + */ + private BigDecimal unitPrice; + /** + * 备注 + */ + private String remark; + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/energydevice/EnergyDeviceDO.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/energydevice/EnergyDeviceDO.java new file mode 100644 index 0000000000..a1a8fbd7a1 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/energydevice/EnergyDeviceDO.java @@ -0,0 +1,71 @@ +package cn.iocoder.yudao.module.mes.dal.dataobject.energydevice; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +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 + * + * @author 内蒙必硕 + */ +@TableName("mes_energy_device") +@KeySequence("mes_energy_device_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class EnergyDeviceDO extends BaseDO { + + /** + * ID + */ + @TableId + private Long id; + /** + * 名称 + */ + private String name; + /** + * 编码 + */ + private String code; + /** + * 设备类型 + * + * 枚举 {@link TODO mes_energy_device_type 对应的类} + */ + private String deviceType; + /** + * 信息资料 + */ + private String info; + /** + * 抄表周期cron + */ + private String checkCron; + /** + * 最后抄表时间 + */ + private LocalDateTime lastCheckTime; + /** + * 最后抄表值 + */ + private BigDecimal lastCheckValue; + /** + * 单位 + */ + private String unitName; + /** + * 是否启用 + */ + 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/dal/mysql/energydevice/EnergyDeviceCheckRecordMapper.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/energydevice/EnergyDeviceCheckRecordMapper.java new file mode 100644 index 0000000000..59e6b32139 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/energydevice/EnergyDeviceCheckRecordMapper.java @@ -0,0 +1,38 @@ +package cn.iocoder.yudao.module.mes.dal.mysql.energydevice; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +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.controller.admin.energydevice.vo.EnergyDeviceCheckRecordPageReqVO; +import cn.iocoder.yudao.module.mes.dal.dataobject.energydevice.EnergyDeviceCheckRecordDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 抄表记录 Mapper + * + * @author 内蒙必硕 + */ +@Mapper +public interface EnergyDeviceCheckRecordMapper extends BaseMapperX { + + default PageResult selectPage(EnergyDeviceCheckRecordPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(EnergyDeviceCheckRecordDO::getDeviceId, reqVO.getDeviceId()) + .betweenIfPresent(EnergyDeviceCheckRecordDO::getCheckTime, reqVO.getCheckTime()) + .eqIfPresent(EnergyDeviceCheckRecordDO::getDiffValue, reqVO.getDiffValue()) + .eqIfPresent(EnergyDeviceCheckRecordDO::getRemark, reqVO.getRemark()) + .betweenIfPresent(EnergyDeviceCheckRecordDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(EnergyDeviceCheckRecordDO::getId)); + } + default PageResult selectPage(PageParam reqVO, Long deviceId) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eq(EnergyDeviceCheckRecordDO::getDeviceId, deviceId) + .orderByDesc(EnergyDeviceCheckRecordDO::getId)); + } + + default int deleteByDeviceId(Long deviceId) { + return delete(EnergyDeviceCheckRecordDO::getDeviceId, deviceId); + } + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/energydevice/EnergyDeviceMapper.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/energydevice/EnergyDeviceMapper.java new file mode 100644 index 0000000000..5ab3210469 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/energydevice/EnergyDeviceMapper.java @@ -0,0 +1,35 @@ +package cn.iocoder.yudao.module.mes.dal.mysql.energydevice; + +import java.util.*; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.mes.dal.dataobject.energydevice.EnergyDeviceDO; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.mes.controller.admin.energydevice.vo.*; + +/** + * 能源设备 Mapper + * + * @author 内蒙必硕 + */ +@Mapper +public interface EnergyDeviceMapper extends BaseMapperX { + + default PageResult selectPage(EnergyDevicePageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .likeIfPresent(EnergyDeviceDO::getName, reqVO.getName()) + .eqIfPresent(EnergyDeviceDO::getCode, reqVO.getCode()) + .eqIfPresent(EnergyDeviceDO::getDeviceType, reqVO.getDeviceType()) + .eqIfPresent(EnergyDeviceDO::getInfo, reqVO.getInfo()) + .eqIfPresent(EnergyDeviceDO::getCheckCron, reqVO.getCheckCron()) + .betweenIfPresent(EnergyDeviceDO::getLastCheckTime, reqVO.getLastCheckTime()) + .eqIfPresent(EnergyDeviceDO::getLastCheckValue, reqVO.getLastCheckValue()) + .likeIfPresent(EnergyDeviceDO::getUnitName, reqVO.getUnitName()) + .eqIfPresent(EnergyDeviceDO::getIsEnable, reqVO.getIsEnable()) + .betweenIfPresent(EnergyDeviceDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(EnergyDeviceDO::getId)); + } + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/energydevice/EnergyDeviceCheckRecordService.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/energydevice/EnergyDeviceCheckRecordService.java new file mode 100644 index 0000000000..dc5fd2ca84 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/energydevice/EnergyDeviceCheckRecordService.java @@ -0,0 +1,55 @@ +package cn.iocoder.yudao.module.mes.service.energydevice; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.mes.controller.admin.energydevice.vo.EnergyDeviceCheckRecordPageReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.energydevice.vo.EnergyDeviceCheckRecordSaveReqVO; +import cn.iocoder.yudao.module.mes.dal.dataobject.energydevice.EnergyDeviceCheckRecordDO; + +import javax.validation.Valid; + +/** + * 抄表记录 Service 接口 + * + * @author 内蒙必硕 + */ +public interface EnergyDeviceCheckRecordService { + + /** + * 创建抄表记录 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createEnergyDeviceCheckRecord(@Valid EnergyDeviceCheckRecordSaveReqVO createReqVO); + + /** + * 更新抄表记录 + * + * @param updateReqVO 更新信息 + */ + void updateEnergyDeviceCheckRecord(@Valid EnergyDeviceCheckRecordSaveReqVO updateReqVO); + + /** + * 删除抄表记录 + * + * @param id 编号 + */ + void deleteEnergyDeviceCheckRecord(Long id); + + /** + * 获得抄表记录 + * + * @param id 编号 + * @return 抄表记录 + */ + EnergyDeviceCheckRecordDO getEnergyDeviceCheckRecord(Long id); + + /** + * 获得抄表记录分页 + * + * @param pageReqVO 分页查询 + * @return 抄表记录分页 + */ + PageResult getEnergyDeviceCheckRecordPage(EnergyDeviceCheckRecordPageReqVO 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/energydevice/EnergyDeviceCheckRecordServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/energydevice/EnergyDeviceCheckRecordServiceImpl.java new file mode 100644 index 0000000000..7f9201221a --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/energydevice/EnergyDeviceCheckRecordServiceImpl.java @@ -0,0 +1,91 @@ +package cn.iocoder.yudao.module.mes.service.energydevice; + +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.energydevice.vo.EnergyDeviceCheckRecordPageReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.energydevice.vo.EnergyDeviceCheckRecordSaveReqVO; +import cn.iocoder.yudao.module.mes.dal.dataobject.energydevice.EnergyDeviceCheckRecordDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.energydevice.EnergyDeviceDO; +import cn.iocoder.yudao.module.mes.dal.mysql.energydevice.EnergyDeviceCheckRecordMapper; +import cn.iocoder.yudao.module.mes.dal.mysql.energydevice.EnergyDeviceMapper; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.ENERGY_DEVICE_CHECK_RECORD_NOT_EXISTS; + +/** + * 抄表记录 Service 实现类 + * + * @author 内蒙必硕 + */ +@Service +@Validated +public class EnergyDeviceCheckRecordServiceImpl implements EnergyDeviceCheckRecordService { + + @Resource + private EnergyDeviceCheckRecordMapper energyDeviceCheckRecordMapper; + @Resource + private EnergyDeviceMapper energyDeviceMapper; + @Override + @Transactional(rollbackFor = Exception.class) + public Long createEnergyDeviceCheckRecord(EnergyDeviceCheckRecordSaveReqVO createReqVO) { + if(createReqVO.getCheckTime()==null) + createReqVO.setCheckTime(LocalDateTime.now()); + EnergyDeviceDO energyDeviceDO = energyDeviceMapper.selectById(createReqVO.getDeviceId()); + // 插入 + EnergyDeviceCheckRecordDO energyDeviceCheckRecord = BeanUtils.toBean(createReqVO, EnergyDeviceCheckRecordDO.class); + energyDeviceCheckRecord.setLastCheckTime(energyDeviceDO.getLastCheckTime()); + energyDeviceCheckRecord.setLastCheckValue(energyDeviceDO.getLastCheckValue()); + + BigDecimal diff = energyDeviceCheckRecord.getCheckValue().subtract(energyDeviceDO.getLastCheckValue()).abs(); + energyDeviceCheckRecord.setDiffValue(diff); + energyDeviceCheckRecordMapper.insert(energyDeviceCheckRecord); + + energyDeviceDO.setLastCheckTime(createReqVO.getCheckTime()); + energyDeviceDO.setLastCheckValue(createReqVO.getCheckValue()); + energyDeviceMapper.updateById(energyDeviceDO); + // 返回 + return energyDeviceCheckRecord.getId(); + } + + @Override + public void updateEnergyDeviceCheckRecord(EnergyDeviceCheckRecordSaveReqVO updateReqVO) { + // 校验存在 + validateEnergyDeviceCheckRecordExists(updateReqVO.getId()); + // 更新 + EnergyDeviceCheckRecordDO updateObj = BeanUtils.toBean(updateReqVO, EnergyDeviceCheckRecordDO.class); + energyDeviceCheckRecordMapper.updateById(updateObj); + } + + @Override + public void deleteEnergyDeviceCheckRecord(Long id) { + // 校验存在 + validateEnergyDeviceCheckRecordExists(id); + // 删除 + energyDeviceCheckRecordMapper.deleteById(id); + } + + private void validateEnergyDeviceCheckRecordExists(Long id) { + if (energyDeviceCheckRecordMapper.selectById(id) == null) { + throw exception(ENERGY_DEVICE_CHECK_RECORD_NOT_EXISTS); + } + } + + @Override + public EnergyDeviceCheckRecordDO getEnergyDeviceCheckRecord(Long id) { + return energyDeviceCheckRecordMapper.selectById(id); + } + + @Override + public PageResult getEnergyDeviceCheckRecordPage(EnergyDeviceCheckRecordPageReqVO pageReqVO) { + return energyDeviceCheckRecordMapper.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/energydevice/EnergyDeviceService.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/energydevice/EnergyDeviceService.java new file mode 100644 index 0000000000..c5a4f9dfd6 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/energydevice/EnergyDeviceService.java @@ -0,0 +1,98 @@ +package cn.iocoder.yudao.module.mes.service.energydevice; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.mes.controller.admin.energydevice.vo.EnergyDevicePageReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.energydevice.vo.EnergyDeviceSaveReqVO; +import cn.iocoder.yudao.module.mes.dal.dataobject.energydevice.EnergyDeviceCheckRecordDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.energydevice.EnergyDeviceDO; + +import javax.validation.Valid; + +/** + * 能源设备 Service 接口 + * + * @author 内蒙必硕 + */ +public interface EnergyDeviceService { + + /** + * 创建能源设备 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createEnergyDevice(@Valid EnergyDeviceSaveReqVO createReqVO); + + /** + * 更新能源设备 + * + * @param updateReqVO 更新信息 + */ + void updateEnergyDevice(@Valid EnergyDeviceSaveReqVO updateReqVO); + + /** + * 删除能源设备 + * + * @param id 编号 + */ + void deleteEnergyDevice(Long id); + + /** + * 获得能源设备 + * + * @param id 编号 + * @return 能源设备 + */ + EnergyDeviceDO getEnergyDevice(Long id); + + /** + * 获得能源设备分页 + * + * @param pageReqVO 分页查询 + * @return 能源设备分页 + */ + PageResult getEnergyDevicePage(EnergyDevicePageReqVO pageReqVO); + + // ==================== 子表(抄表记录) ==================== + + /** + * 获得抄表记录分页 + * + * @param pageReqVO 分页查询 + * @param deviceId 能源设备Id + * @return 抄表记录分页 + */ + PageResult getEnergyDeviceCheckRecordPage(PageParam pageReqVO, Long deviceId); + + /** + * 创建抄表记录 + * + * @param energyDeviceCheckRecord 创建信息 + * @return 编号 + */ + Long createEnergyDeviceCheckRecord(@Valid EnergyDeviceCheckRecordDO energyDeviceCheckRecord); + + /** + * 更新抄表记录 + * + * @param energyDeviceCheckRecord 更新信息 + */ + void updateEnergyDeviceCheckRecord(@Valid EnergyDeviceCheckRecordDO energyDeviceCheckRecord); + + /** + * 删除抄表记录 + * + * @param id 编号 + */ + void deleteEnergyDeviceCheckRecord(Long id); + + /** + * 获得抄表记录 + * + * @param id 编号 + * @return 抄表记录 + */ + EnergyDeviceCheckRecordDO getEnergyDeviceCheckRecord(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/energydevice/EnergyDeviceServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/energydevice/EnergyDeviceServiceImpl.java new file mode 100644 index 0000000000..0b9769d686 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/energydevice/EnergyDeviceServiceImpl.java @@ -0,0 +1,126 @@ +package cn.iocoder.yudao.module.mes.service.energydevice; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.mes.controller.admin.energydevice.vo.EnergyDevicePageReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.energydevice.vo.EnergyDeviceSaveReqVO; +import cn.iocoder.yudao.module.mes.dal.dataobject.energydevice.EnergyDeviceCheckRecordDO; +import cn.iocoder.yudao.module.mes.dal.dataobject.energydevice.EnergyDeviceDO; +import cn.iocoder.yudao.module.mes.dal.mysql.energydevice.EnergyDeviceCheckRecordMapper; +import cn.iocoder.yudao.module.mes.dal.mysql.energydevice.EnergyDeviceMapper; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.ENERGY_DEVICE_CHECK_RECORD_NOT_EXISTS; +import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.ENERGY_DEVICE_NOT_EXISTS; + +/** + * 能源设备 Service 实现类 + * + * @author 内蒙必硕 + */ +@Service +@Validated +public class EnergyDeviceServiceImpl implements EnergyDeviceService { + + @Resource + private EnergyDeviceMapper energyDeviceMapper; + @Resource + private EnergyDeviceCheckRecordMapper energyDeviceCheckRecordMapper; + + @Override + public Long createEnergyDevice(EnergyDeviceSaveReqVO createReqVO) { + // 插入 + EnergyDeviceDO energyDevice = BeanUtils.toBean(createReqVO, EnergyDeviceDO.class); + energyDeviceMapper.insert(energyDevice); + // 返回 + return energyDevice.getId(); + } + + @Override + public void updateEnergyDevice(EnergyDeviceSaveReqVO updateReqVO) { + // 校验存在 + validateEnergyDeviceExists(updateReqVO.getId()); + // 更新 + EnergyDeviceDO updateObj = BeanUtils.toBean(updateReqVO, EnergyDeviceDO.class); + energyDeviceMapper.updateById(updateObj); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteEnergyDevice(Long id) { + // 校验存在 + validateEnergyDeviceExists(id); + // 删除 + energyDeviceMapper.deleteById(id); + + // 删除子表 + deleteEnergyDeviceCheckRecordByDeviceId(id); + } + + private void validateEnergyDeviceExists(Long id) { + if (energyDeviceMapper.selectById(id) == null) { + throw exception(ENERGY_DEVICE_NOT_EXISTS); + } + } + + @Override + public EnergyDeviceDO getEnergyDevice(Long id) { + return energyDeviceMapper.selectById(id); + } + + @Override + public PageResult getEnergyDevicePage(EnergyDevicePageReqVO pageReqVO) { + return energyDeviceMapper.selectPage(pageReqVO); + } + + // ==================== 子表(抄表记录) ==================== + + @Override + public PageResult getEnergyDeviceCheckRecordPage(PageParam pageReqVO, Long deviceId) { + return energyDeviceCheckRecordMapper.selectPage(pageReqVO, deviceId); + } + + @Override + public Long createEnergyDeviceCheckRecord(EnergyDeviceCheckRecordDO energyDeviceCheckRecord) { + energyDeviceCheckRecordMapper.insert(energyDeviceCheckRecord); + return energyDeviceCheckRecord.getId(); + } + + @Override + public void updateEnergyDeviceCheckRecord(EnergyDeviceCheckRecordDO energyDeviceCheckRecord) { + // 校验存在 + validateEnergyDeviceCheckRecordExists(energyDeviceCheckRecord.getId()); + // 更新 + energyDeviceCheckRecordMapper.updateById(energyDeviceCheckRecord); + } + + @Override + public void deleteEnergyDeviceCheckRecord(Long id) { + // 校验存在 + validateEnergyDeviceCheckRecordExists(id); + // 删除 + energyDeviceCheckRecordMapper.deleteById(id); + } + + @Override + public EnergyDeviceCheckRecordDO getEnergyDeviceCheckRecord(Long id) { + return energyDeviceCheckRecordMapper.selectById(id); + } + + private void validateEnergyDeviceCheckRecordExists(Long id) { + if (energyDeviceCheckRecordMapper.selectById(id) == null) { + throw exception(ENERGY_DEVICE_CHECK_RECORD_NOT_EXISTS); + } + } + + private void deleteEnergyDeviceCheckRecordByDeviceId(Long deviceId) { + energyDeviceCheckRecordMapper.deleteByDeviceId(deviceId); + } + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/energydevice/EnergyDeviceMapper.xml b/yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/energydevice/EnergyDeviceMapper.xml new file mode 100644 index 0000000000..484f8ac749 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/energydevice/EnergyDeviceMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/energydevicecheck/EnergyDeviceCheckRecordMapper.xml b/yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/energydevicecheck/EnergyDeviceCheckRecordMapper.xml new file mode 100644 index 0000000000..915839b629 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/resources/mapper/energydevicecheck/EnergyDeviceCheckRecordMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ 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/energydevice/EnergyDeviceCheckRecordServiceImplTest.java b/yudao-module-mes/yudao-module-mes-biz/src/test/java/cn/iocoder/yudao/module/mes/service/energydevice/EnergyDeviceCheckRecordServiceImplTest.java new file mode 100644 index 0000000000..efda20b6f9 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/test/java/cn/iocoder/yudao/module/mes/service/energydevice/EnergyDeviceCheckRecordServiceImplTest.java @@ -0,0 +1,139 @@ +package cn.iocoder.yudao.module.mes.service.energydevice; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; +import cn.iocoder.yudao.module.mes.controller.admin.energydevice.vo.EnergyDeviceCheckRecordPageReqVO; +import cn.iocoder.yudao.module.mes.controller.admin.energydevice.vo.EnergyDeviceCheckRecordSaveReqVO; +import cn.iocoder.yudao.module.mes.dal.dataobject.energydevice.EnergyDeviceCheckRecordDO; +import cn.iocoder.yudao.module.mes.dal.mysql.energydevice.EnergyDeviceCheckRecordMapper; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; +import org.springframework.context.annotation.Import; + +import javax.annotation.Resource; + +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; +import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; +import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId; +import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; +import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.ENERGY_DEVICE_CHECK_RECORD_NOT_EXISTS; +import static org.junit.jupiter.api.Assertions.*; + +/** + * {@link EnergyDeviceCheckRecordServiceImpl} 的单元测试类 + * + * @author 内蒙必硕 + */ +@Import(EnergyDeviceCheckRecordServiceImpl.class) +public class EnergyDeviceCheckRecordServiceImplTest extends BaseDbUnitTest { + + @Resource + private EnergyDeviceCheckRecordServiceImpl energyDeviceCheckRecordService; + + @Resource + private EnergyDeviceCheckRecordMapper energyDeviceCheckRecordMapper; + + @Test + public void testCreateEnergyDeviceCheckRecord_success() { + // 准备参数 + EnergyDeviceCheckRecordSaveReqVO createReqVO = randomPojo(EnergyDeviceCheckRecordSaveReqVO.class).setId(null); + + // 调用 + Long energyDeviceCheckRecordId = energyDeviceCheckRecordService.createEnergyDeviceCheckRecord(createReqVO); + // 断言 + assertNotNull(energyDeviceCheckRecordId); + // 校验记录的属性是否正确 + EnergyDeviceCheckRecordDO energyDeviceCheckRecord = energyDeviceCheckRecordMapper.selectById(energyDeviceCheckRecordId); + assertPojoEquals(createReqVO, energyDeviceCheckRecord, "id"); + } + + @Test + public void testUpdateEnergyDeviceCheckRecord_success() { + // mock 数据 + EnergyDeviceCheckRecordDO dbEnergyDeviceCheckRecord = randomPojo(EnergyDeviceCheckRecordDO.class); + energyDeviceCheckRecordMapper.insert(dbEnergyDeviceCheckRecord);// @Sql: 先插入出一条存在的数据 + // 准备参数 + EnergyDeviceCheckRecordSaveReqVO updateReqVO = randomPojo(EnergyDeviceCheckRecordSaveReqVO.class, o -> { + o.setId(dbEnergyDeviceCheckRecord.getId()); // 设置更新的 ID + }); + + // 调用 + energyDeviceCheckRecordService.updateEnergyDeviceCheckRecord(updateReqVO); + // 校验是否更新正确 + EnergyDeviceCheckRecordDO energyDeviceCheckRecord = energyDeviceCheckRecordMapper.selectById(updateReqVO.getId()); // 获取最新的 + assertPojoEquals(updateReqVO, energyDeviceCheckRecord); + } + + @Test + public void testUpdateEnergyDeviceCheckRecord_notExists() { + // 准备参数 + EnergyDeviceCheckRecordSaveReqVO updateReqVO = randomPojo(EnergyDeviceCheckRecordSaveReqVO.class); + + // 调用, 并断言异常 + assertServiceException(() -> energyDeviceCheckRecordService.updateEnergyDeviceCheckRecord(updateReqVO), ENERGY_DEVICE_CHECK_RECORD_NOT_EXISTS); + } + + @Test + public void testDeleteEnergyDeviceCheckRecord_success() { + // mock 数据 + EnergyDeviceCheckRecordDO dbEnergyDeviceCheckRecord = randomPojo(EnergyDeviceCheckRecordDO.class); + energyDeviceCheckRecordMapper.insert(dbEnergyDeviceCheckRecord);// @Sql: 先插入出一条存在的数据 + // 准备参数 + Long id = dbEnergyDeviceCheckRecord.getId(); + + // 调用 + energyDeviceCheckRecordService.deleteEnergyDeviceCheckRecord(id); + // 校验数据不存在了 + assertNull(energyDeviceCheckRecordMapper.selectById(id)); + } + + @Test + public void testDeleteEnergyDeviceCheckRecord_notExists() { + // 准备参数 + Long id = randomLongId(); + + // 调用, 并断言异常 + assertServiceException(() -> energyDeviceCheckRecordService.deleteEnergyDeviceCheckRecord(id), ENERGY_DEVICE_CHECK_RECORD_NOT_EXISTS); + } + + @Test + @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 + public void testGetEnergyDeviceCheckRecordPage() { + // mock 数据 + EnergyDeviceCheckRecordDO dbEnergyDeviceCheckRecord = randomPojo(EnergyDeviceCheckRecordDO.class, o -> { // 等会查询到 + o.setDeviceId(null); + o.setCheckTime(null); + o.setDiffValue(null); + o.setRemark(null); + o.setCreateTime(null); + }); + energyDeviceCheckRecordMapper.insert(dbEnergyDeviceCheckRecord); + // 测试 deviceId 不匹配 + energyDeviceCheckRecordMapper.insert(cloneIgnoreId(dbEnergyDeviceCheckRecord, o -> o.setDeviceId(null))); + // 测试 checkTime 不匹配 + energyDeviceCheckRecordMapper.insert(cloneIgnoreId(dbEnergyDeviceCheckRecord, o -> o.setCheckTime(null))); + // 测试 diffValue 不匹配 + energyDeviceCheckRecordMapper.insert(cloneIgnoreId(dbEnergyDeviceCheckRecord, o -> o.setDiffValue(null))); + // 测试 remark 不匹配 + energyDeviceCheckRecordMapper.insert(cloneIgnoreId(dbEnergyDeviceCheckRecord, o -> o.setRemark(null))); + // 测试 createTime 不匹配 + energyDeviceCheckRecordMapper.insert(cloneIgnoreId(dbEnergyDeviceCheckRecord, o -> o.setCreateTime(null))); + // 准备参数 + EnergyDeviceCheckRecordPageReqVO reqVO = new EnergyDeviceCheckRecordPageReqVO(); + reqVO.setDeviceId(null); + reqVO.setCheckTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); + reqVO.setDiffValue(null); + reqVO.setRemark(null); + reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); + + // 调用 + PageResult pageResult = energyDeviceCheckRecordService.getEnergyDeviceCheckRecordPage(reqVO); + // 断言 + assertEquals(1, pageResult.getTotal()); + assertEquals(1, pageResult.getList().size()); + assertPojoEquals(dbEnergyDeviceCheckRecord, pageResult.getList().get(0)); + } + +} \ 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/energydevice/EnergyDeviceServiceImplTest.java b/yudao-module-mes/yudao-module-mes-biz/src/test/java/cn/iocoder/yudao/module/mes/service/energydevice/EnergyDeviceServiceImplTest.java new file mode 100644 index 0000000000..bfc56f0e90 --- /dev/null +++ b/yudao-module-mes/yudao-module-mes-biz/src/test/java/cn/iocoder/yudao/module/mes/service/energydevice/EnergyDeviceServiceImplTest.java @@ -0,0 +1,166 @@ +package cn.iocoder.yudao.module.mes.service.energydevice; + +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.mock.mockito.MockBean; + +import javax.annotation.Resource; + +import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; + +import cn.iocoder.yudao.module.mes.controller.admin.energydevice.vo.*; +import cn.iocoder.yudao.module.mes.dal.dataobject.energydevice.EnergyDeviceDO; +import cn.iocoder.yudao.module.mes.dal.mysql.energydevice.EnergyDeviceMapper; +import cn.iocoder.yudao.framework.common.pojo.PageResult; + +import javax.annotation.Resource; +import org.springframework.context.annotation.Import; +import java.util.*; +import java.time.LocalDateTime; + +import static cn.hutool.core.util.RandomUtil.*; +import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; +import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.*; +import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; +import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.*; +import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.*; +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.*; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +/** + * {@link EnergyDeviceServiceImpl} 的单元测试类 + * + * @author 内蒙必硕 + */ +@Import(EnergyDeviceServiceImpl.class) +public class EnergyDeviceServiceImplTest extends BaseDbUnitTest { + + @Resource + private EnergyDeviceServiceImpl energyDeviceService; + + @Resource + private EnergyDeviceMapper energyDeviceMapper; + + @Test + public void testCreateEnergyDevice_success() { + // 准备参数 + EnergyDeviceSaveReqVO createReqVO = randomPojo(EnergyDeviceSaveReqVO.class).setId(null); + + // 调用 + Long energyDeviceId = energyDeviceService.createEnergyDevice(createReqVO); + // 断言 + assertNotNull(energyDeviceId); + // 校验记录的属性是否正确 + EnergyDeviceDO energyDevice = energyDeviceMapper.selectById(energyDeviceId); + assertPojoEquals(createReqVO, energyDevice, "id"); + } + + @Test + public void testUpdateEnergyDevice_success() { + // mock 数据 + EnergyDeviceDO dbEnergyDevice = randomPojo(EnergyDeviceDO.class); + energyDeviceMapper.insert(dbEnergyDevice);// @Sql: 先插入出一条存在的数据 + // 准备参数 + EnergyDeviceSaveReqVO updateReqVO = randomPojo(EnergyDeviceSaveReqVO.class, o -> { + o.setId(dbEnergyDevice.getId()); // 设置更新的 ID + }); + + // 调用 + energyDeviceService.updateEnergyDevice(updateReqVO); + // 校验是否更新正确 + EnergyDeviceDO energyDevice = energyDeviceMapper.selectById(updateReqVO.getId()); // 获取最新的 + assertPojoEquals(updateReqVO, energyDevice); + } + + @Test + public void testUpdateEnergyDevice_notExists() { + // 准备参数 + EnergyDeviceSaveReqVO updateReqVO = randomPojo(EnergyDeviceSaveReqVO.class); + + // 调用, 并断言异常 + assertServiceException(() -> energyDeviceService.updateEnergyDevice(updateReqVO), ENERGY_DEVICE_NOT_EXISTS); + } + + @Test + public void testDeleteEnergyDevice_success() { + // mock 数据 + EnergyDeviceDO dbEnergyDevice = randomPojo(EnergyDeviceDO.class); + energyDeviceMapper.insert(dbEnergyDevice);// @Sql: 先插入出一条存在的数据 + // 准备参数 + Long id = dbEnergyDevice.getId(); + + // 调用 + energyDeviceService.deleteEnergyDevice(id); + // 校验数据不存在了 + assertNull(energyDeviceMapper.selectById(id)); + } + + @Test + public void testDeleteEnergyDevice_notExists() { + // 准备参数 + Long id = randomLongId(); + + // 调用, 并断言异常 + assertServiceException(() -> energyDeviceService.deleteEnergyDevice(id), ENERGY_DEVICE_NOT_EXISTS); + } + + @Test + @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 + public void testGetEnergyDevicePage() { + // mock 数据 + EnergyDeviceDO dbEnergyDevice = randomPojo(EnergyDeviceDO.class, o -> { // 等会查询到 + o.setName(null); + o.setCode(null); + o.setDeviceType(null); + o.setInfo(null); + o.setCheckCron(null); + o.setLastCheckTime(null); + o.setLastCheckValue(null); + o.setUnitName(null); + o.setIsEnable(null); + o.setCreateTime(null); + }); + energyDeviceMapper.insert(dbEnergyDevice); + // 测试 name 不匹配 + energyDeviceMapper.insert(cloneIgnoreId(dbEnergyDevice, o -> o.setName(null))); + // 测试 code 不匹配 + energyDeviceMapper.insert(cloneIgnoreId(dbEnergyDevice, o -> o.setCode(null))); + // 测试 deviceType 不匹配 + energyDeviceMapper.insert(cloneIgnoreId(dbEnergyDevice, o -> o.setDeviceType(null))); + // 测试 info 不匹配 + energyDeviceMapper.insert(cloneIgnoreId(dbEnergyDevice, o -> o.setInfo(null))); + // 测试 checkCron 不匹配 + energyDeviceMapper.insert(cloneIgnoreId(dbEnergyDevice, o -> o.setCheckCron(null))); + // 测试 lastCheckTime 不匹配 + energyDeviceMapper.insert(cloneIgnoreId(dbEnergyDevice, o -> o.setLastCheckTime(null))); + // 测试 lastCheckValue 不匹配 + energyDeviceMapper.insert(cloneIgnoreId(dbEnergyDevice, o -> o.setLastCheckValue(null))); + // 测试 unitName 不匹配 + energyDeviceMapper.insert(cloneIgnoreId(dbEnergyDevice, o -> o.setUnitName(null))); + // 测试 isEnable 不匹配 + energyDeviceMapper.insert(cloneIgnoreId(dbEnergyDevice, o -> o.setIsEnable(null))); + // 测试 createTime 不匹配 + energyDeviceMapper.insert(cloneIgnoreId(dbEnergyDevice, o -> o.setCreateTime(null))); + // 准备参数 + EnergyDevicePageReqVO reqVO = new EnergyDevicePageReqVO(); + reqVO.setName(null); + reqVO.setCode(null); + reqVO.setDeviceType(null); + reqVO.setInfo(null); + reqVO.setCheckCron(null); + reqVO.setLastCheckTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); + reqVO.setLastCheckValue(null); + reqVO.setUnitName(null); + reqVO.setIsEnable(null); + reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); + + // 调用 + PageResult pageResult = energyDeviceService.getEnergyDevicePage(reqVO); + // 断言 + assertEquals(1, pageResult.getTotal()); + assertEquals(1, pageResult.getList().size()); + assertPojoEquals(dbEnergyDevice, pageResult.getList().get(0)); + } + +} \ No newline at end of file diff --git a/yudao-module-mes/yudao-module-mes-biz/src/test/resources/sql/clean.sql b/yudao-module-mes/yudao-module-mes-biz/src/test/resources/sql/clean.sql index 7a68f3c20a..48aa900781 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/test/resources/sql/clean.sql +++ b/yudao-module-mes/yudao-module-mes-biz/src/test/resources/sql/clean.sql @@ -49,6 +49,10 @@ DELETE FROM "mes_produce_report_change_record"; DELETE FROM "mes_work_report_plan"; +-- 将该删表 SQL 语句,添加到 yudao-module-mes-biz 模块的 test/resources/sql/clean.sql 文件里 +DELETE FROM "mes_energy_device_check_record"; +-- 将该删表 SQL 语句,添加到 yudao-module-mes-biz 模块的 test/resources/sql/clean.sql 文件里 +DELETE FROM "mes_energy_device"; diff --git a/yudao-module-mes/yudao-module-mes-biz/src/test/resources/sql/create_tables.sql b/yudao-module-mes/yudao-module-mes-biz/src/test/resources/sql/create_tables.sql index 9ea10a2f1c..114193a339 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/test/resources/sql/create_tables.sql +++ b/yudao-module-mes/yudao-module-mes-biz/src/test/resources/sql/create_tables.sql @@ -522,3 +522,44 @@ CREATE TABLE IF NOT EXISTS "mes_produce_report_change_record" "tenant_id" bigint NULL, PRIMARY KEY ("id") ) COMMENT '报工变更记录'; + + +CREATE TABLE IF NOT EXISTS "mes_energy_device" +( + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "name" varchar, + "code" varchar, + "device_type" varchar, + "info" varchar, + "check_cron" varchar, + "last_check_time" varchar, + "last_check_value" varchar, + "unit_name" varchar, + "is_enable" bit NOT NULL, + "creator" varchar DEFAULT '', + "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar DEFAULT '', + "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + "deleted" bit NOT NULL DEFAULT FALSE, + "tenant_id" bigint, + PRIMARY KEY ("id") +) COMMENT '能源设备'; +CREATE TABLE IF NOT EXISTS "mes_energy_device_check_record" +( + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "device_id" bigint NOT NULL, + "last_check_time" varchar, + "last_check_value" varchar, + "check_value" varchar NOT NULL, + "check_time" varchar, + "diff_value" varchar, + "unit_price" varchar, + "remark" varchar, + "creator" varchar DEFAULT '', + "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar DEFAULT '', + "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + "deleted" bit NOT NULL DEFAULT FALSE, + "tenant_id" bigint, + PRIMARY KEY ("id") +) COMMENT '抄表记录';