From 2f07589b54d56085af77b50d580890cd4130b444 Mon Sep 17 00:00:00 2001
From: 吴羡 <16976746+Xian-TT3@user.noreply.gitee.com>
Date: 星期一, 19 十月 2026 15:19:53 +0800
Subject: [PATCH] 设备模块后端业务规则、计划接口与日期联动

---
 cnas-device/src/main/java/com/ruoyi/device/controller/DeviceMetricRecordController.java |   49 ++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 48 insertions(+), 1 deletions(-)

diff --git a/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceMetricRecordController.java b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceMetricRecordController.java
index 2f52724..6984929 100644
--- a/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceMetricRecordController.java
+++ b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceMetricRecordController.java
@@ -2,12 +2,15 @@
 
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.common.core.domain.Result;
 import com.ruoyi.common.numgen.NumberGenerator;
 import com.ruoyi.common.utils.FileSaveUtil;
 import com.ruoyi.device.dto.DeviceMetricRecordDto;
+import com.ruoyi.device.mapper.DeviceMapper;
+import com.ruoyi.device.pojo.Device;
 import com.ruoyi.device.pojo.DeviceMetricRecord;
 import com.ruoyi.device.pojo.DeviceMetricsCopy;
 import com.ruoyi.device.service.DeviceMetricRecordService;
@@ -18,6 +21,8 @@
 import org.springframework.web.bind.annotation.*;
 
 import java.text.SimpleDateFormat;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
 import java.util.Date;
 import java.util.Locale;
 
@@ -43,6 +48,9 @@
     @Autowired
     private NumberGenerator<DeviceMetricRecord> numberGenerator;
 
+    @Autowired
+    private DeviceMapper deviceMapper;
+
     @Operation(summary = "璁惧鏍″噯鍒嗛〉鏌ヨ")
     @GetMapping("/deviceMetricRecordPage")
     public Result deviceMetricRecordPage(@RequestParam("deviceId") Integer deviceId, Page page, @RequestParam("type") String type) {
@@ -62,12 +70,51 @@
         }
         deviceMetricRecordService.saveOrUpdate(deviceMetricRecordDto);
         if (CollectionUtils.isNotEmpty(deviceMetricRecordDto.getDeviceMetricsCopyList())) {
-            deviceMetricRecordDto.getDeviceMetricsCopyList().forEach(i -> i.setDeviceMetricsId(deviceMetricRecordDto.getId()));
+            // 鏍″噯鏉$洰鏉ヨ嚜鏍″噯椤圭洰缁存姢琛紝涓婚敭涓嶈兘甯﹁繘璁板綍鏄庣粏琛紝鍚﹀垯浼氳鐩栧巻鍙茶褰曠殑鏉$洰
+            deviceMetricRecordDto.getDeviceMetricsCopyList().forEach(i -> {
+                i.setId(null);
+                i.setDeviceMetricsId(deviceMetricRecordDto.getId());
+            });
             deviceMetricsCopyService.saveOrUpdateBatch(deviceMetricRecordDto.getDeviceMetricsCopyList());
         }
+        // 鏍″噯瀹屾垚鍚庯紝鎶婅澶囨。妗堢殑鏈�杩�/涓嬫鏍″噯鏃ユ湡婊氬姩鍒版柊鍛ㄦ湡
+        if ("calibrate".equals(deviceMetricRecordDto.getType()) && deviceMetricRecordDto.getDeviceId() != null
+                && deviceMetricRecordDto.getCalibrationDate() != null) {
+            updateDeviceCalibrationDate(deviceMetricRecordDto);
+        }
         return Result.success();
     }
 
+    /**
+     * 婊氬姩璁惧妗f鐨勬渶杩�/涓嬫鏍″噯鏃ユ湡锛氫粎褰撴湰娆℃牎鍑嗘棩鏈熸瘮妗f涓殑鏈�杩戞牎鍑嗘棩鏈熸洿鏂版椂鐢熸晥
+     */
+    private void updateDeviceCalibrationDate(DeviceMetricRecordDto dto) {
+        Device device = deviceMapper.selectById(dto.getDeviceId());
+        if (device == null) {
+            return;
+        }
+        LocalDateTime calibrationDate = LocalDateTime.ofInstant(dto.getCalibrationDate().toInstant(), ZoneId.systemDefault());
+        if (device.getLastCalibrationDate() != null && !calibrationDate.isAfter(device.getLastCalibrationDate())) {
+            return;
+        }
+        device.setLastCalibrationDate(calibrationDate);
+        LocalDateTime next = null;
+        if (StringUtils.isNotBlank(device.getCalibrationDate())) {
+            try {
+                next = calibrationDate.plusMonths(Long.parseLong(device.getCalibrationDate().trim()));
+            } catch (NumberFormatException ignored) {
+            }
+        }
+        if (next == null && dto.getNextCalibrationDate() != null) {
+            next = LocalDateTime.ofInstant(dto.getNextCalibrationDate().toInstant(), ZoneId.systemDefault());
+        }
+        if (next != null) {
+            device.setNextCalibrationDate(next);
+            device.setActivationDate(next);
+        }
+        deviceMapper.updateById(device);
+    }
+
     @Operation(summary = "璁惧鏍″噯 鍒犻櫎")
     @DeleteMapping("/deleteDeviceMetricRecord")
     public Result deleteDeviceMetricRecord(@RequestParam("id") Integer id) {

--
Gitblit v1.9.3