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/service/impl/DeviceStateServiceImpl.java |   62 ++++++++++++++++++++++++++++++
 1 files changed, 61 insertions(+), 1 deletions(-)

diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceStateServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceStateServiceImpl.java
index e2acac2..06ce59a 100644
--- a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceStateServiceImpl.java
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceStateServiceImpl.java
@@ -9,12 +9,19 @@
 import com.deepoove.poi.config.Configure;
 import com.ruoyi.basic.mapper.LaboratoryMapper;
 import com.ruoyi.basic.pojo.Laboratory;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.device.dto.DeviceStateDto;
+import com.ruoyi.device.mapper.DeviceMapper;
 import com.ruoyi.device.mapper.DeviceStateMapper;
+import com.ruoyi.device.pojo.Device;
 import com.ruoyi.device.pojo.DeviceState;
 import com.ruoyi.device.service.DeviceStateService;
 import com.ruoyi.inspect.util.UserUtils;
+import com.ruoyi.system.mapper.UserMapper;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import jakarta.annotation.Resource;
 import jakarta.servlet.http.HttpServletResponse;
@@ -37,6 +44,59 @@
 
     @Resource
     private LaboratoryMapper laboratoryMapper;
+    @Resource
+    private UserMapper userMapper;
+    @Resource
+    private DeviceMapper deviceMapper;
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean saveDeviceState(DeviceState deviceState) {
+        User user = userMapper.selectById(SecurityUtils.getUserId().intValue());
+        if (deviceState.getStateId() != null) {
+            DeviceState existing = baseMapper.selectById(deviceState.getStateId());
+            if (existing == null) {
+                throw new ServiceException("鍗曟嵁涓嶅瓨鍦�");
+            }
+            if ("鍏抽棴".equals(existing.getCurrentState())) {
+                throw new ServiceException("璇ユ祦绋嬪凡缁撴潫锛屼笉鑳藉啀鎿嶄綔");
+            }
+            if (StringUtils.isNotBlank(existing.getCurrentResponsible())
+                    && !existing.getCurrentResponsible().equals(user.getName())) {
+                throw new ServiceException("鎮ㄤ笉鏄綋鍓嶇幆鑺傝矗浠讳汉锛屾棤鏉冩搷浣�");
+            }
+        }
+        boolean saved = saveOrUpdate(deviceState);
+        if (saved && "鍏抽棴".equals(deviceState.getCurrentState())) {
+            updateDeviceStatus(deviceState);
+        }
+        return saved;
+    }
+
+    /**
+     * 娴佺▼鏈�缁堟壒鍑嗗悗锛屾妸鍋滅敤/鍚敤缁撴灉鍚屾鍒拌澶囨。妗堢姸鎬�
+     */
+    private void updateDeviceStatus(DeviceState deviceState) {
+        if (deviceState.getDeviceId() == null) {
+            return;
+        }
+        Device device = deviceMapper.selectById(deviceState.getDeviceId());
+        if (device == null) {
+            return;
+        }
+        Integer status = null;
+        if ("0scrap".equals(deviceState.getDeviceStatus())) {
+            status = 3;
+        } else if ("1startUsing".equals(deviceState.getDeviceStatus())) {
+            status = 0;
+        } else if ("2stopUsing".equals(deviceState.getDeviceStatus())) {
+            status = 2;
+        }
+        if (status != null) {
+            device.setDeviceStatus(status);
+            deviceMapper.updateById(device);
+        }
+    }
 
     @Override
     public IPage<DeviceStateDto> getDeviceStatePage(Integer deviceId, Page page, String processNumber) {
@@ -86,7 +146,7 @@
         try {
             response.setContentType("application/msword");
             String fileName = URLEncoder.encode(
-                    "璁惧缁存姢淇濆吇璁板綍", "UTF-8");
+                    "璁惧鍋滅敤鍚敤璁板綍", "UTF-8");
             response.setHeader("Content-disposition",
                     "attachment;filename=" + fileName + ".docx");
             OutputStream os = response.getOutputStream();

--
Gitblit v1.9.3