From e19c5c816f8abfbbdb197e698cae285ab434fddb Mon Sep 17 00:00:00 2001
From: zhuo <2089219845@qq.com>
Date: 星期六, 29 三月 2025 18:01:10 +0800
Subject: [PATCH] 质量监督监控添加退回流程

---
 cnas-device/src/main/java/com/ruoyi/device/service/DataConfigService.java                   |   29 +++
 cnas-process/src/main/java/com/ruoyi/process/service/QualityMonitorService.java             |    6 
 cnas-process/src/main/java/com/ruoyi/process/service/impl/QualitySuperviseServiceImpl.java  |  182 +++++++++++++++++----
 cnas-process/src/main/resources/mapper/QualityMonitorDetailsMapper.xml                      |    3 
 cnas-device/src/main/java/com/ruoyi/device/service/impl/DataConfigServiceImpl.java          |   77 ++++++---
 cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceServiceImpl.java              |    4 
 cnas-process/src/main/java/com/ruoyi/process/dto/QualitySuperviseDetailsDto.java            |    6 
 cnas-device/src/main/java/com/ruoyi/device/mapper/DataConfigMapper.java                     |    5 
 cnas-process/src/main/java/com/ruoyi/process/dto/QualityMonitorDetailsDto.java              |    2 
 cnas-process/src/main/java/com/ruoyi/process/controller/QualityMonitorController.java       |   10 
 cnas-process/src/main/java/com/ruoyi/process/service/impl/QualityMonitorServiceImpl.java    |   28 ++-
 cnas-process/src/main/resources/mapper/QualitySuperviseDetailsMapper.xml                    |    9 
 cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExamineRecordServiceImpl.java |   39 ++++
 cnas-device/src/main/java/com/ruoyi/device/controller/DeviceController.java                 |   45 +++--
 cnas-device/src/main/resources/mapper/DataConfigMapper.xml                                  |   29 ---
 15 files changed, 332 insertions(+), 142 deletions(-)

diff --git a/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceController.java b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceController.java
index 574cb60..d7925c9 100644
--- a/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceController.java
+++ b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceController.java
@@ -49,13 +49,14 @@
     @Autowired
     private DataConfigService dataConfigService;
 
+    @ApiOperation(value = "鏌ヨ璁惧璇︽儏")
+    @GetMapping("/getDeviceById")
+    public Result getDeviceById(Integer deviceId){
+        return Result.success(deviceService.getById(deviceId));
+    }
 
-    @ApiOperation(value = "鏌ョ湅璁惧浜岀淮鐮佹寜閽�")
-    @GetMapping("/showDeviceQrCodeButton")
-    public void showDeviceQrCodeButton() { }
 
     //璁惧宸ュ叿鏄庣粏
-
     @ApiOperation(value = "鏌ヨ璁惧璇︽儏鍒楄〃")
     @GetMapping("/selectDeviceParameter")
     public Result selectDeviceParameter(Page page, DeviceDto itemParameter, Boolean laboratoryNameIsNull){
@@ -153,10 +154,10 @@
         return deviceService.dataAcquisition(request, dto);
     }
 
-    @ApiOperation(value = "缁存姢鏁伴噰閰嶇疆")
-    @PostMapping("/saveDataAcquisitionConfiguration")
-    public Result<?> saveDataAcquisitionConfiguration(@RequestBody DataConfigDto dataConfigList) {
-        dataConfigService.saveDataAcquisitionConfiguration(dataConfigList.getDeviceId(), dataConfigList);
+    @ApiOperation(value = "缁存姢璁惧鏂囦欢閰嶇疆")
+    @PostMapping("/saveDeviceFileConfiguration")
+    public Result<?> saveDeviceFileConfiguration(@RequestBody DataConfigDto dataConfigList) {
+        dataConfigService.saveDeviceFileConfiguration(dataConfigList);
         return Result.success();
     }
 
@@ -166,21 +167,33 @@
         return dataConfigService.queryDataAcquisitionConfiguration(dataConfig);
     }
 
+    @ApiOperation(value = "鏌ヨ妫�楠岄」鏁伴噰閰嶇疆")
+    @GetMapping("/queryProductConfiguration")
+    public Result<?> queryProductConfiguration(DataConfig dataConfig) {
+        return dataConfigService.queryProductConfiguration(dataConfig);
+    }
 
-    @ApiOperation(value = "鍒犻櫎鏁伴噰閰嶇疆")
-    @DeleteMapping("/deleteDataAcquisitionConfiguration")
-    public Result<?> deleteDataAcquisitionConfiguration(@RequestParam("ids") String ids) {
-        List<String> split = Arrays.asList(ids.split(","));
-        List<String> collect = split.stream().distinct().collect(Collectors.toList());
-        dataConfigService.removeBatchByIds(collect);
+    @ApiOperation(value = "缁存姢鏁伴噰閰嶇疆")
+    @PostMapping("/saveDataAcquisitionConfiguration")
+    public Result<?> saveDataAcquisitionConfiguration(@RequestBody DataConfigDto dataConfigList) {
+        dataConfigService.saveDataAcquisitionConfiguration(dataConfigList);
         return Result.success();
     }
 
 
     @ApiOperation(value = "鏌ヨ缁戝畾浜嗕絾鏄病鏈夐厤缃殑妫�楠岄」")
     @GetMapping("/getNoConfigProduct")
-    public Result<?> getNoConfigProduct(Integer deviceId) {
-        return Result.success(dataConfigService.getNoConfigProduct(deviceId));
+    public Result<?> getNoConfigProduct(Page page, Integer deviceId) {
+        return Result.success(dataConfigService.getNoConfigProduct(page, deviceId));
+    }
+
+    @ApiOperation(value = "鍒犻櫎鏁伴噰閰嶇疆")
+    @DeleteMapping("/  ")
+    public Result<?> deleteDataAcquisitionConfiguration(@RequestParam("ids") String ids) {
+        List<String> split = Arrays.asList(ids.split(","));
+        List<String> collect = split.stream().distinct().collect(Collectors.toList());
+        dataConfigService.removeBatchByIds(collect);
+        return Result.success();
     }
 
     @ApiOperation(value = "宸︿晶璁惧鏍戝舰鏍�")
diff --git a/cnas-device/src/main/java/com/ruoyi/device/mapper/DataConfigMapper.java b/cnas-device/src/main/java/com/ruoyi/device/mapper/DataConfigMapper.java
index a178ada..18f5c99 100644
--- a/cnas-device/src/main/java/com/ruoyi/device/mapper/DataConfigMapper.java
+++ b/cnas-device/src/main/java/com/ruoyi/device/mapper/DataConfigMapper.java
@@ -1,8 +1,11 @@
 package com.ruoyi.device.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.device.dto.DeviceConfigDtoPage;
 import com.ruoyi.device.pojo.DataConfig;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -25,5 +28,5 @@
      * @param deviceId
      * @return
      */
-    List<DataConfig> getNoConfigProduct(Integer deviceId);
+    IPage<DataConfig> getNoConfigProduct(@Param("page") Page page, @Param("deviceId") Integer deviceId);
 }
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/DataConfigService.java b/cnas-device/src/main/java/com/ruoyi/device/service/DataConfigService.java
index 607608c..0232400 100644
--- a/cnas-device/src/main/java/com/ruoyi/device/service/DataConfigService.java
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/DataConfigService.java
@@ -1,5 +1,7 @@
 package com.ruoyi.device.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ruoyi.common.core.domain.Result;
 import com.ruoyi.device.dto.DataConfigDto;
@@ -17,16 +19,37 @@
  */
 public interface DataConfigService extends IService<DataConfig> {
 
-    void deleteDataConfig();
 
-    void saveDataAcquisitionConfiguration(Integer deviceId, DataConfigDto dataConfigList);
+    /**
+     * 缁存姢璁惧鏂囦欢閰嶇疆
+     * @param dataConfigList
+     */
+    void saveDeviceFileConfiguration(DataConfigDto dataConfigList);
 
+    /**
+     * 鏁伴噰閰嶇疆
+     * @param dataConfigList
+     */
+    void saveDataAcquisitionConfiguration(DataConfigDto dataConfigList);
+
+    /**
+     * 鏌ヨ鏁伴噰閰嶇疆
+     * @param dataConfig
+     * @return
+     */
     Result<?> queryDataAcquisitionConfiguration(DataConfig dataConfig);
+
+    /**
+     * 鏌ヨ妫�楠岄」鏁伴噰閰嶇疆
+     * @param dataConfig
+     * @return
+     */
+    Result<?> queryProductConfiguration(DataConfig dataConfig);
 
     /**
      * 鏌ヨ浜嗙粦瀹氫絾鏄病鏈夐厤缃殑妫�楠岄」
      * @param deviceId
      * @return
      */
-    List<DataConfig> getNoConfigProduct(Integer deviceId);
+    IPage<DataConfig> getNoConfigProduct(Page page, Integer deviceId);
 }
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DataConfigServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DataConfigServiceImpl.java
index cde5054..b7a30f7 100644
--- a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DataConfigServiceImpl.java
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DataConfigServiceImpl.java
@@ -1,8 +1,10 @@
 package com.ruoyi.device.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.core.domain.Result;
 import com.ruoyi.device.dto.DataConfigDto;
@@ -33,44 +35,61 @@
 
     private DataConfigMapper dataConfigMapper;
 
+    /**
+     * 缁存姢璁惧鏂囦欢閰嶇疆
+     * @param dataConfigList
+     */
     @Override
-    public void deleteDataConfig() {
-        List<Integer> integers = dataConfigMapper.deleteDataConfig();
-        if (!integers.isEmpty()) {
-            dataConfigMapper.deleteBatchIds(integers);
+    public void saveDeviceFileConfiguration(DataConfigDto dataConfigList) {
+        if (dataConfigList.getDeviceId() == null) {
+            throw new RuntimeException("缂哄皯璁惧Id");
         }
+
+        Device device = new Device();
+        BeanUtils.copyProperties(dataConfigList, device);
+        device.setId(dataConfigList.getDeviceId());
+        deviceMapper.updateById(device);
     }
 
+    /**
+     * 鏁伴噰閰嶇疆
+     * @param dataConfigList
+     */
     @Override
-    public void saveDataAcquisitionConfiguration(Integer deviceId, DataConfigDto dataConfigList) {
-        if (dataConfigList.getIsDevice()) {
-            Device device = new Device();
-            BeanUtils.copyProperties(dataConfigList, device);
-            device.setId(deviceId);
-            deviceMapper.updateById(device);
-        } else {
-            this.saveOrUpdateBatch(dataConfigList.getDataConfigList());
+    public void saveDataAcquisitionConfiguration(DataConfigDto dataConfigList) {
+        if (dataConfigList.getDeviceId() == null) {
+            throw new RuntimeException("缂哄皯璁惧id");
         }
+
+        for (DataConfig dataConfig : dataConfigList.getDataConfigList()) {
+            if (dataConfig.getStructureItemParameterId() == null) {
+                throw new RuntimeException("缂哄皯妫�楠岄」id");
+            }
+            dataConfig.setDeviceId(dataConfigList.getDeviceId());
+        }
+
+        this.saveOrUpdateBatch(dataConfigList.getDataConfigList());
+
     }
 
     @Override
     public Result<?> queryDataAcquisitionConfiguration(DataConfig dataConfig) {
-        if (dataConfig.getIsDevice()) {
-            LambdaQueryWrapper<DataConfig> wrapper = Wrappers.<DataConfig>lambdaQuery()
-                    .eq(DataConfig::getDeviceId, dataConfig.getDeviceId())
-                    .eq(DataConfig::getInspectionItem, dataConfig.getInspectionItem())
-                    .eq(DataConfig::getInspectionItemSubclass, dataConfig.getInspectionItemSubclass());
-            if (StringUtils.isNotBlank(dataConfig.getInspectionItemClass())) {
-                wrapper.eq(DataConfig::getInspectionItemClass, dataConfig.getInspectionItemClass());
-            }
-            if (dataConfig.getStructureItemParameterId() != null) {
-                wrapper.eq(DataConfig::getStructureItemParameterId, dataConfig.getStructureItemParameterId());
-            }
-            List<DataConfig> list = baseMapper.selectList(wrapper);
-            return Result.success(list);
-        } else {
-            return Result.success(dataConfigMapper.selectDataConfigList(dataConfig.getDeviceId()));
+        return Result.success(dataConfigMapper.selectDataConfigList(dataConfig.getDeviceId()));
+
+    }
+
+    /**
+     * 鏌ヨ妫�楠岄」鏁伴噰閰嶇疆
+     * @param dataConfig
+     * @return
+     */
+    @Override
+    public Result<?> queryProductConfiguration(DataConfig dataConfig) {
+        if (dataConfig.getStructureItemParameterId() == null) {
+            throw new RuntimeException("缂哄皯妫�娴嬮」id");
         }
+        List<DataConfig> list = baseMapper.selectList(Wrappers.<DataConfig>lambdaQuery().eq(DataConfig::getStructureItemParameterId, dataConfig.getStructureItemParameterId()));
+        return Result.success(list);
     }
 
     /**
@@ -79,7 +98,7 @@
      * @return
      */
     @Override
-    public List<DataConfig> getNoConfigProduct(Integer deviceId) {
-        return baseMapper.getNoConfigProduct(deviceId);
+    public IPage<DataConfig> getNoConfigProduct(Page page, Integer deviceId) {
+        return baseMapper.getNoConfigProduct(page, deviceId);
     }
 }
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExamineRecordServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExamineRecordServiceImpl.java
index afb5242..bf1136c 100644
--- a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExamineRecordServiceImpl.java
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExamineRecordServiceImpl.java
@@ -7,8 +7,11 @@
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.deepoove.poi.XWPFTemplate;
 import com.deepoove.poi.config.Configure;
+import com.ruoyi.common.constant.MenuJumpPathConstants;
+import com.ruoyi.common.core.domain.entity.InformationNotification;
 import com.ruoyi.common.core.domain.entity.User;
 import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.WxCpUtils;
 import com.ruoyi.device.dto.DeviceExamineRecordDto;
 import com.ruoyi.device.mapper.DeviceExaminePlanDetailsMapper;
 import com.ruoyi.device.mapper.DeviceExamineRecordMapper;
@@ -23,6 +26,8 @@
 import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
 import com.ruoyi.inspect.util.UserUtils;
 import com.ruoyi.system.mapper.UserMapper;
+import com.ruoyi.system.service.InformationNotificationService;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -54,6 +59,11 @@
     private DeviceMapper deviceMapper;
     @Resource
     private UserMapper userMapper;
+    @Resource
+    private ThreadPoolTaskExecutor threadPoolTaskExecutor;
+
+    @Resource
+    private InformationNotificationService informationNotificationService;
 
     /**
      * 鏌ヨ鏍告煡璁板綍
@@ -105,6 +115,35 @@
             if (deviceExamineRecordDto.getReviewUserId() != null) {
                 User reviewUser = userMapper.selectById(deviceExamineRecordDto.getReviewUserId());
                 deviceExamineRecordDto.setReviewUser(reviewUser.getName());
+
+                // 娑堟伅鍙戦��
+                InformationNotification info = new InformationNotification();
+                // 鍙戦�佷汉
+                info.setCreateUser(user.getName());
+                info.setMessageType("6");
+                info.setTheme("CNAS璁惧鏍告煡璁″垝寰呮壒鍑�");
+                info.setContent("璁惧缂栧彿涓�: " + deviceExamineRecordDto.getDeviceNumber() + " 璁惧鏍告煡璁″垝寰呭鎵�");
+                info.setSenderId(userId);
+                // 鎺ユ敹浜�
+                info.setConsigneeId(deviceExamineRecordDto.getReviewUserId());
+                info.setJumpPath(MenuJumpPathConstants.DEVICE);
+                informationNotificationService.addInformationNotification(info);
+
+                // 鍙戦�佷紒涓氬井淇¢�氱煡
+                threadPoolTaskExecutor.execute(() -> {
+                    // 鏌ヨ鍙戦�佷汉
+                    User people = userMapper.selectById(deviceExamineRecordDto.getReviewUserId());
+                    String message = "";
+                    message += "CNAS璁惧鏍告煡璁″垝寰呮壒鍑�";
+                    message += "\n璇峰幓璧勬簮瑕佹眰-璁惧-璁惧鏍告煡璁″垝瀹℃壒";
+                    message += "\n" + "璁惧缂栧彿涓�: " + deviceExamineRecordDto.getDeviceNumber() + "璁惧鏍告煡璁″垝寰呭鎵�";
+                    //鍙戦�佷紒涓氬井淇℃秷鎭�氱煡
+                    try {
+                        WxCpUtils.inform(people.getAccount(), message, null);
+                    } catch (Exception e) {
+                        throw new RuntimeException(e);
+                    }
+                });
             }
 
         }
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceServiceImpl.java
index 99bbc0b..66e5a2a 100644
--- a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceServiceImpl.java
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceServiceImpl.java
@@ -93,10 +93,6 @@
     @Transactional(rollbackFor = Exception.class)
     @Override
     public int upDeviceParameter(Device itemParameter) {
-        // 鍒犻櫎鏁伴噰闆嗛厤缃暟鎹�
-        dataConfigService.deleteDataConfig();
-        // 闇�瑕佸悓鏃舵洿鏀� device琛�
-
 
         return deviceMapper.updateById(itemParameter);
     }
diff --git a/cnas-device/src/main/resources/mapper/DataConfigMapper.xml b/cnas-device/src/main/resources/mapper/DataConfigMapper.xml
index d5782b9..a24e029 100644
--- a/cnas-device/src/main/resources/mapper/DataConfigMapper.xml
+++ b/cnas-device/src/main/resources/mapper/DataConfigMapper.xml
@@ -13,31 +13,10 @@
     </resultMap>
 
     <select id="selectDataConfigList" resultType="com.ruoyi.device.dto.DeviceConfigDtoPage">
-        SELECT d.device_name,
-               d.file_type,
-               d.collect_url,
-               d.storage_url,
-               d.ip,
-               d.entrust_code,
-               d.sample_code,
-               d.db_file_name,
-               ip.inspection_item,
-               ip.inspection_item_class,
-               if(ip.inspection_item_subclass is not null and ip.inspection_item_subclass != '',
-                  ip.inspection_item_subclass, ip.inspection_item)                            inspection_item_subclass,
-               ip.sample,
-               ddc.formula,
-               ddc.referx,
-               ddc.refery,
-               ddc.x,
-               ddc.y,
-               ddc.another_name,
-               ddc.matching_name,
-               ddc.id,
-               ip.id                                                                          structureItemParameterId
-        FROM device d
-                 left join structure_item_parameter ip on FIND_IN_SET(ip.id, d.ins_product_ids)
-                 left join device_data_config ddc on ddc.device_id = d.id and ddc.structure_item_parameter_id = ip.id
+        SELECT ddc.*,
+               d.device_name
+        FROM device_data_config ddc
+                 left join device d on ddc.device_id = d.id
         where d.id = #{deviceId}
     </select>
 
diff --git a/cnas-process/src/main/java/com/ruoyi/process/controller/QualityMonitorController.java b/cnas-process/src/main/java/com/ruoyi/process/controller/QualityMonitorController.java
index a76e400..3a4a0a3 100644
--- a/cnas-process/src/main/java/com/ruoyi/process/controller/QualityMonitorController.java
+++ b/cnas-process/src/main/java/com/ruoyi/process/controller/QualityMonitorController.java
@@ -237,14 +237,14 @@
 
     /**
      * 鏂板鐩戞帶璇勪环闄勪欢琛�
-     * @param detailsEvaluateId
+     * @param qualityMonitorDetailsId
      * @param file
      * @return
      */
     @ApiOperation(value = "鏂板鐩戞帶璇勪环闄勪欢琛�")
     @PostMapping("/uploadEvaluateFile")
-    public Result<?> uploadEvaluateFile(Integer detailsEvaluateId, MultipartFile file) {
-        return Result.success(qualityMonitorService.uploadEvaluateFile(detailsEvaluateId, file));
+    public Result<?> uploadEvaluateFile(Integer qualityMonitorDetailsId, MultipartFile file) {
+        return Result.success(qualityMonitorService.uploadEvaluateFile(qualityMonitorDetailsId, file));
     }
 
 
@@ -254,8 +254,8 @@
      */
     @ApiOperation(value = "鏌ヨ鐩戞帶璇勪环闄勪欢鍒楄〃")
     @GetMapping("/getEvaluateFileList")
-    public Result<List<QualityMonitorDetailsEvaluateFile>> getEvaluateFileList(Integer detailsEvaluateId) {
-        return Result.success(qualityMonitorService.getEvaluateFileList(detailsEvaluateId));
+    public Result<List<QualityMonitorDetailsEvaluateFile>> getEvaluateFileList(Integer qualityMonitorDetailsId) {
+        return Result.success(qualityMonitorService.getEvaluateFileList(qualityMonitorDetailsId));
     }
 
     /**
diff --git a/cnas-process/src/main/java/com/ruoyi/process/dto/QualityMonitorDetailsDto.java b/cnas-process/src/main/java/com/ruoyi/process/dto/QualityMonitorDetailsDto.java
index d9f2538..04800cb 100644
--- a/cnas-process/src/main/java/com/ruoyi/process/dto/QualityMonitorDetailsDto.java
+++ b/cnas-process/src/main/java/com/ruoyi/process/dto/QualityMonitorDetailsDto.java
@@ -11,7 +11,7 @@
 @Data
 public class QualityMonitorDetailsDto extends QualityMonitorDetails {
 
-    @ApiModelProperty("瀹炴柦鐘舵��, 0: 鏈紑濮�, 1:寰呮壒鍑�, 2:宸叉壒鍑�")
+    @ApiModelProperty("瀹炴柦鐘舵��, 0: 鏈紑濮�, 1:寰呮壒鍑�, 2:涓嶆壒鍑�, 3:宸叉壒鍑�")
     private Integer detailsRatifyStatus;
 
     @ApiModelProperty("鎶ュ憡鐘舵��, 0: 鏈紑濮�, 1:寰呮彁浜�, 2:琛ユ壒鍑�, 3:宸叉壒鍑�")
diff --git a/cnas-process/src/main/java/com/ruoyi/process/dto/QualitySuperviseDetailsDto.java b/cnas-process/src/main/java/com/ruoyi/process/dto/QualitySuperviseDetailsDto.java
index 055aa81..642848f 100644
--- a/cnas-process/src/main/java/com/ruoyi/process/dto/QualitySuperviseDetailsDto.java
+++ b/cnas-process/src/main/java/com/ruoyi/process/dto/QualitySuperviseDetailsDto.java
@@ -23,12 +23,12 @@
     @ApiModelProperty("鐩戠潱鍘熷洜绫诲瀷, 1:瀹氭湡鐩戠潱, 2:鍔ㄦ�佺洃鐫�")
     private Integer causeType;
 
-    @ApiModelProperty("璁板綍鐘舵��, 0: 鏈紑濮�, 1:寰呮壒鍑�, 2:宸叉壒鍑�")
+    @ApiModelProperty("璁板綍鐘舵��, 0: 鏈紑濮�, 1:寰呮壒鍑�, 2:涓嶆壒鍑�, 3:宸叉壒鍑�")
     private Integer recordStatus;
 
-    @ApiModelProperty("鎺у埗鐘舵��, 0: 鏈紑濮�, 1:寰呮壒鍑�, 2:宸叉壒鍑�")
+    @ApiModelProperty("鎺у埗鐘舵��, 0: 鏈紑濮�, 1:寰呮壒鍑�, 2:涓嶆壒鍑�, 3:宸叉壒鍑�")
     private Integer accordingStatus;
 
-    @ApiModelProperty("绾犳鐘舵��, 0: 鏈紑濮�, 1:寰呮壒鍑�, 2:宸叉壒鍑�")
+    @ApiModelProperty("绾犳鐘舵��, 0: 鏈紑濮�, 1:寰呮壒鍑�, 2:涓嶆壒鍑�, 3:宸叉壒鍑�")
     private Integer correctStatus;
 }
diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/QualityMonitorService.java b/cnas-process/src/main/java/com/ruoyi/process/service/QualityMonitorService.java
index b3f4a42..2d3e230 100644
--- a/cnas-process/src/main/java/com/ruoyi/process/service/QualityMonitorService.java
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/QualityMonitorService.java
@@ -124,17 +124,17 @@
 
     /**
      * 鏂板鐩戞帶璇勪环闄勪欢琛�
-     * @param detailsEvaluateId
+     * @param qualityMonitorDetailsId
      * @param file
      * @return
      */
-    boolean uploadEvaluateFile(Integer detailsEvaluateId, MultipartFile file);
+    boolean uploadEvaluateFile(Integer qualityMonitorDetailsId, MultipartFile file);
 
     /**
      * 鏌ヨ鐩戞帶璇勪环闄勪欢鍒楄〃
      * @return
      */
-    List<QualityMonitorDetailsEvaluateFile> getEvaluateFileList(Integer detailsEvaluateId);
+    List<QualityMonitorDetailsEvaluateFile> getEvaluateFileList(Integer qualityMonitorDetailsId);
 
 
     /**
diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/impl/QualityMonitorServiceImpl.java b/cnas-process/src/main/java/com/ruoyi/process/service/impl/QualityMonitorServiceImpl.java
index 16d1e15..ce42d05 100644
--- a/cnas-process/src/main/java/com/ruoyi/process/service/impl/QualityMonitorServiceImpl.java
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/impl/QualityMonitorServiceImpl.java
@@ -21,6 +21,7 @@
 import com.ruoyi.common.utils.QueryWrappers;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.WxCpUtils;
+import com.ruoyi.device.pojo.DeviceExamineRecord;
 import com.ruoyi.framework.exception.ErrorException;
 import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
 import com.ruoyi.inspect.util.UserUtils;
@@ -460,7 +461,10 @@
                 }
             });
         }
-
+        // 娓呯┖鐘舵��
+        qualityMonitorDetailsRatifyService.update(Wrappers.<QualityMonitorDetailsRatify>lambdaUpdate()
+                .eq(QualityMonitorDetailsRatify::getDetailsRatifyId, qualityMonitorDetailsRatify.getDetailsRatifyId())
+                .set(QualityMonitorDetailsRatify::getIsFinish, null));
         return true;
     }
 
@@ -471,10 +475,16 @@
      */
     @Override
     public boolean addQualityMonitorRatifyOpinion(QualityMonitorDetailsRatify qualityMonitorDetailsRatify) {
-        qualityMonitorDetailsRatifyService.update(Wrappers.<QualityMonitorDetailsRatify>lambdaUpdate()
+        LambdaUpdateWrapper<QualityMonitorDetailsRatify> wrapper = Wrappers.<QualityMonitorDetailsRatify>lambdaUpdate()
                 .eq(QualityMonitorDetailsRatify::getDetailsRatifyId, qualityMonitorDetailsRatify.getDetailsRatifyId())
                 .set(QualityMonitorDetailsRatify::getRatifyOpinion, qualityMonitorDetailsRatify.getRatifyOpinion())
-                .set(QualityMonitorDetailsRatify::getIsFinish, 1));
+                .set(QualityMonitorDetailsRatify::getIsFinish, qualityMonitorDetailsRatify.getIsFinish());
+        // 涓�0娓呴櫎瀹℃牳浜�
+        if (qualityMonitorDetailsRatify.getIsFinish().equals(0)) {
+            wrapper.set(QualityMonitorDetailsRatify::getRatifyUserId, null);
+        }
+
+        qualityMonitorDetailsRatifyService.update(wrapper);
         return true;
     }
 
@@ -631,13 +641,13 @@
 
     /**
      * 鏂板鐩戞帶璇勪环闄勪欢琛�
-     * @param detailsEvaluateId
+     * @param qualityMonitorDetailsId
      * @param file
      * @return
      */
     @Override
-    public boolean uploadEvaluateFile(Integer detailsEvaluateId, MultipartFile file) {
-        if (detailsEvaluateId == null) {
+    public boolean uploadEvaluateFile(Integer qualityMonitorDetailsId, MultipartFile file) {
+        if (qualityMonitorDetailsId == null) {
             throw new ErrorException("缂哄皯鐩戞帶璇︽儏id");
         }
 
@@ -647,7 +657,7 @@
         String filename = file.getOriginalFilename();
         String contentType = file.getContentType();
         QualityMonitorDetailsEvaluateFile evaluateFile = new QualityMonitorDetailsEvaluateFile();
-        evaluateFile.setDetailsEvaluateId(detailsEvaluateId);
+        evaluateFile.setDetailsEvaluateId(qualityMonitorDetailsId);
         evaluateFile.setFileName(filename);
         if (contentType != null && contentType.startsWith("image/")) {
             // 鏄浘鐗�
@@ -681,9 +691,9 @@
      * @return
      */
     @Override
-    public List<QualityMonitorDetailsEvaluateFile> getEvaluateFileList(Integer detailsEvaluateId) {
+    public List<QualityMonitorDetailsEvaluateFile> getEvaluateFileList(Integer qualityMonitorDetailsId) {
         return qualityMonitorDetailsEvaluateFileMapper.selectList(Wrappers.<QualityMonitorDetailsEvaluateFile>lambdaQuery()
-                .eq(QualityMonitorDetailsEvaluateFile::getDetailsEvaluateId, detailsEvaluateId));
+                .eq(QualityMonitorDetailsEvaluateFile::getDetailsEvaluateId, qualityMonitorDetailsId));
     }
 
 
diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/impl/QualitySuperviseServiceImpl.java b/cnas-process/src/main/java/com/ruoyi/process/service/impl/QualitySuperviseServiceImpl.java
index 4f429a8..52044aa 100644
--- a/cnas-process/src/main/java/com/ruoyi/process/service/impl/QualitySuperviseServiceImpl.java
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/impl/QualitySuperviseServiceImpl.java
@@ -3,6 +3,7 @@
 import com.alibaba.excel.EasyExcel;
 import com.alibaba.excel.context.AnalysisContext;
 import com.alibaba.excel.event.AnalysisEventListener;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
@@ -21,6 +22,7 @@
 import com.ruoyi.common.utils.QueryWrappers;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.WxCpUtils;
+import com.ruoyi.device.pojo.DeviceExamineRecord;
 import com.ruoyi.framework.exception.ErrorException;
 import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
 import com.ruoyi.inspect.util.UserUtils;
@@ -177,6 +179,7 @@
 
                     detailsUploadList.add(superviseDetails);
                 }
+
                 @Override
                 public void doAfterAllAnalysed(AnalysisContext analysisContext) {
 
@@ -349,8 +352,30 @@
         QualitySuperviseDetailsRecord detailsRecord;
         detailsRecord = qualitySuperviseDetailsRecordMapper.selectOne(Wrappers.<QualitySuperviseDetailsRecord>lambdaQuery()
                 .eq(QualitySuperviseDetailsRecord::getSuperviseDetailsId, superviseDetailsId));
+
+        // 鏌ヨ涓婁竴涓湀绗竴鏉$殑璁板綍淇℃伅, 鍒ゆ柇琚洃鐫d汉鍘诲彟澶栦竴涓�
         if (detailsRecord == null) {
+
+            // 鏌ヨ璇︽儏淇℃伅
+            QualitySuperviseDetails qualitySuperviseDetails = qualitySuperviseDetailsMapper.selectById(superviseDetailsId);
+            // 鏌ヨ涓婁竴涓湀绗竴鏉$殑璁板綍淇℃伅, 鍒ゆ柇琚洃鐫d汉鍘诲彟澶栦竴涓�
+
+            QualitySuperviseDetailsRecord laseRecord = qualitySuperviseDetailsRecordMapper.selectOne(Wrappers.<QualitySuperviseDetailsRecord>lambdaQuery()
+                    .last("limit 1"));
+
+
             detailsRecord = new QualitySuperviseDetailsRecord();
+            detailsRecord.setSuperviseDetailsId(superviseDetailsId);
+            detailsRecord.setTestMember(qualitySuperviseDetails.getSupervisee());
+            detailsRecord.setSupervisor(null);
+
+            detailsRecord.setPersonnel("()鏈夌浉搴旀娴嬪憳鐨勪笂宀楄瘉");
+            detailsRecord.setEnvironment("娓╁害锛�()鈩� 婀垮害锛�()%");
+            detailsRecord.setInspectionRecord("妫�娴嬩汉鍛�()杩涜妫�娴嬭褰曪紝璁板綍鍐呭鐪熷疄鏈夋晥");
+            detailsRecord.setExaminingReport("鐢�()榛勭瀹炲嚭绀虹殑妫�娴嬫姤鍛婄鍚堣鑼冭姹�");
+            detailsRecord.setSupervisionEvaluation("妫�娴嬫寜鐓ц姹傝繘琛岋紝鍒ゅ畾涓烘弧鎰�");
+            detailsRecord.setHandlingAdvice("/");
+
         }
         // 娣诲姞鎵瑰噯浜哄悕绉�
         if (detailsRecord.getRatifyUserId() != null) {
@@ -370,7 +395,11 @@
         if (qualitySuperviseDetailsRecord.getSuperviseDetailsId() == null) {
             throw new ErrorException("缂哄皯鐩戠潱璇︾粏淇℃伅id");
         }
-        qualitySuperviseDetailsRecordMapper.insert(qualitySuperviseDetailsRecord);
+        if (qualitySuperviseDetailsRecord.getSuperviseDetailsRecordId() == null) {
+            qualitySuperviseDetailsRecordMapper.insert(qualitySuperviseDetailsRecord);
+        } else {
+            qualitySuperviseDetailsRecordMapper.updateById(qualitySuperviseDetailsRecord);
+        }
 
         if (qualitySuperviseDetailsRecord.getRatifyUserId() != null) {
 
@@ -408,6 +437,10 @@
                 }
             });
         }
+        // 娓呯┖鐘舵��
+        qualitySuperviseDetailsRecordMapper.update(null, Wrappers.<QualitySuperviseDetailsRecord>lambdaUpdate()
+                .eq(QualitySuperviseDetailsRecord::getSuperviseDetailsRecordId, qualitySuperviseDetailsRecord.getSuperviseDetailsRecordId())
+                .set(QualitySuperviseDetailsRecord::getIsFinish, null));
 
         return true;
     }
@@ -419,16 +452,27 @@
      */
     @Override
     public boolean addSuperviseRecordOpinion(QualitySuperviseDetailsRecord qualitySuperviseDetailsRecord) {
-        if (qualitySuperviseDetailsRecord.getIsAccording() == null) {
-            throw new ErrorException("缂哄皯鏈�缁堢粨鏋�");
+        if (qualitySuperviseDetailsRecord.getIsFinish() == null) {
+            throw new RuntimeException("缂哄皯璁板綍缁撴灉鐘舵��");
         }
 
-        qualitySuperviseDetailsRecordMapper.update(null, Wrappers.<QualitySuperviseDetailsRecord>lambdaUpdate()
+        LambdaUpdateWrapper<QualitySuperviseDetailsRecord> wrapper = Wrappers.<QualitySuperviseDetailsRecord>lambdaUpdate()
                 .eq(QualitySuperviseDetailsRecord::getSuperviseDetailsId, qualitySuperviseDetailsRecord.getSuperviseDetailsId())
                 .set(QualitySuperviseDetailsRecord::getRatifyOpinion, qualitySuperviseDetailsRecord.getRatifyOpinion())
-                .set(QualitySuperviseDetailsRecord::getRatifyTime, LocalDateTime.now())
                 .set(QualitySuperviseDetailsRecord::getIsAccording, qualitySuperviseDetailsRecord.getIsAccording())
-                .set(QualitySuperviseDetailsRecord::getIsFinish, 1));
+                .set(QualitySuperviseDetailsRecord::getIsFinish, qualitySuperviseDetailsRecord.getIsFinish());
+
+        // 涓�0娓呴櫎瀹℃牳浜�
+        if (qualitySuperviseDetailsRecord.getIsFinish().equals(0)) {
+            wrapper.set(QualitySuperviseDetailsRecord::getRatifyUserId, null)
+                    .set(QualitySuperviseDetailsRecord::getRatifyTime, null);
+        } else {
+            wrapper.set(QualitySuperviseDetailsRecord::getRatifyTime, LocalDateTime.now());
+        }
+
+        qualitySuperviseDetailsRecordMapper.update(null, wrapper);
+
+
         return true;
     }
 
@@ -439,7 +483,7 @@
      */
     @Override
     public void exportSuperviseDetailRecord(Integer superviseDetailsId, HttpServletResponse response) {
-        QualitySuperviseDetailsRecord recordDto =  qualitySuperviseDetailsRecordMapper.selectSuperviseDetailRecord(superviseDetailsId);
+        QualitySuperviseDetailsRecord recordDto = qualitySuperviseDetailsRecordMapper.selectSuperviseDetailRecord(superviseDetailsId);
 
         //鑾峰彇鎶�鏈礋璐d汉鐨勭鍚嶅湴鍧�
         String ratifyUrl = null;
@@ -491,10 +535,10 @@
     public boolean addSuperviseDetailAccording(QualitySuperviseDetailsAccording detailsAccording) {
         QualitySuperviseDetailsAccording according = new QualitySuperviseDetailsAccording();
         // 褰撳墠鐧诲綍鐢ㄦ埛淇℃伅鍜岄儴闂�
-        User user = userMapper.selectById( SecurityUtils.getUserId().intValue());
+        User user = userMapper.selectById(SecurityUtils.getUserId().intValue());
         String departmentLimsName = userMapper.selectUserDepartmentLimsName(user.getId());
         switch (detailsAccording.getFlowType()) {
-                // 涓嶇鍚堝伐浣滄儏鍐佃褰�
+            // 涓嶇鍚堝伐浣滄儏鍐佃褰�
             case 0:
                 if (detailsAccording.getSuperviseDetailsId() == null) {
                     throw new ErrorException("缂哄皯璐ㄩ噺鐩戠潱璇︽儏Id");
@@ -527,7 +571,7 @@
                 qualitySuperviseDetailsAccordingMapper.insert(according);
                 break;
 
-                // 1澶勭悊鎺柦
+            // 1澶勭悊鎺柦
             case 1:
                 according.setSuperviseDetailsAccordingId(detailsAccording.getSuperviseDetailsAccordingId());
                 according.setEliminateMeasure(detailsAccording.getEliminateMeasure());//娓呴櫎涓嶇鍚堟帾鏂�
@@ -542,7 +586,7 @@
                 qualitySuperviseDetailsAccordingMapper.updateById(according);
                 break;
 
-                // 绾犳鎺柦
+            // 绾犳鎺柦
             case 2:
                 according.setSuperviseDetailsAccordingId(detailsAccording.getSuperviseDetailsAccordingId());
                 according.setCorrectContent(detailsAccording.getCorrectContent());//绾犳鎺柦鍐呭
@@ -557,7 +601,7 @@
                 qualitySuperviseDetailsAccordingMapper.updateById(according);
                 break;
 
-                //鏄惁閫氱煡瀹㈡埛鍙仮澶嶅伐浣�
+            //鏄惁閫氱煡瀹㈡埛鍙仮澶嶅伐浣�
             case 3:
                 according.setSuperviseDetailsAccordingId(detailsAccording.getSuperviseDetailsAccordingId());
                 according.setNotifyCustomer(detailsAccording.getNotifyCustomer());//閫氱煡瀹㈡埛
@@ -592,7 +636,12 @@
         // 琚洃鐫d汉
         User supervisedUser = userMapper.selectById(detailsAccording.getSupervisedUserId());
         detailsAccording.setSupervisedUserName(supervisedUser.getName());//琚洃鐫�
-        qualitySuperviseDetailsAccordingMapper.insert(detailsAccording);
+
+        if (detailsAccording.getSuperviseDetailsAccordingId() == null) {
+            qualitySuperviseDetailsAccordingMapper.insert(detailsAccording);
+        } else {
+            qualitySuperviseDetailsAccordingMapper.updateById(detailsAccording);
+        }
 
         if (detailsAccording.getApproverUserId() != null) {
             // 鏌ヨ璇︽儏淇℃伅
@@ -628,6 +677,11 @@
             });
         }
 
+        // 娓呯┖鐘舵��
+        qualitySuperviseDetailsAccordingMapper.update(null, Wrappers.<QualitySuperviseDetailsAccording>lambdaUpdate()
+                .eq(QualitySuperviseDetailsAccording::getSuperviseDetailsAccordingId, detailsAccording.getSuperviseDetailsAccordingId())
+                .set(QualitySuperviseDetailsAccording::getIsFinish, null));
+
         return true;
     }
 
@@ -639,22 +693,41 @@
      */
     @Override
     public boolean approverEquipSuperviseDetailAccording(QualitySuperviseDetailsAccording detailsAccording) {
+        if (detailsAccording.getIsFinish() == null) {
+            throw new RuntimeException("缂哄皯鎵瑰噯鐘舵��");
+        }
+
         QualitySuperviseDetailsAccording according = new QualitySuperviseDetailsAccording();
         according.setSuperviseDetailsAccordingId(detailsAccording.getSuperviseDetailsAccordingId());
-        // 褰撳墠鐧诲綍鐢ㄦ埛淇℃伅鍜岄儴闂�
-        User user = userMapper.selectById(SecurityUtils.getUserId().intValue());
-        String departmentLimsName = userMapper.selectUserDepartmentLimsName(user.getId());
 
-        according.setResponsibleDepartment(departmentLimsName);//璐d换閮ㄩ棬
-        according.setActionsUserId(user.getId());//澶勭悊浜篿d
-        according.setActionsUserName(user.getName());//澶勭悊浜�
+        if (detailsAccording.getIsFinish().equals(1)) {
+            // 褰撳墠鐧诲綍鐢ㄦ埛淇℃伅鍜岄儴闂�
+            User user = userMapper.selectById(SecurityUtils.getUserId().intValue());
+            String departmentLimsName = userMapper.selectUserDepartmentLimsName(user.getId());
 
-        according.setCorrectUserId(user.getId());//绾犳璐熻矗浜篿d
-        according.setCorrectUserName(user.getName());//绾犳璐熻矗浜�
+            according.setResponsibleDepartment(departmentLimsName);//璐d换閮ㄩ棬
+            according.setActionsUserId(user.getId());//澶勭悊浜篿d
+            according.setActionsUserName(user.getName());//澶勭悊浜�
 
-        according.setQualityManagerUserId(user.getId());//璐ㄩ噺璐熻矗浜篿d
-        according.setQualityManagerUserName(user.getName());//璐ㄩ噺璐熻矗浜�
-        according.setIsFinish(1);
+            according.setCorrectUserId(user.getId());//绾犳璐熻矗浜篿d
+            according.setCorrectUserName(user.getName());//绾犳璐熻矗浜�
+
+            according.setQualityManagerUserId(user.getId());//璐ㄩ噺璐熻矗浜篿d
+            according.setQualityManagerUserName(user.getName());//璐ㄩ噺璐熻矗浜�
+        } else {
+            qualitySuperviseDetailsAccordingMapper.update(null, Wrappers.<QualitySuperviseDetailsAccording>lambdaUpdate()
+                    .eq(QualitySuperviseDetailsAccording::getSuperviseDetailsAccordingId, detailsAccording.getSuperviseDetailsAccordingId())
+                    .set(QualitySuperviseDetailsAccording::getResponsibleDepartment, null)
+                    .set(QualitySuperviseDetailsAccording::getActionsUserId, null)
+                    .set(QualitySuperviseDetailsAccording::getActionsUserName, null)
+                    .set(QualitySuperviseDetailsAccording::getCorrectUserId, null)
+                    .set(QualitySuperviseDetailsAccording::getCorrectUserName, null)
+                    .set(QualitySuperviseDetailsAccording::getQualityManagerUserId, null)
+                    .set(QualitySuperviseDetailsAccording::getQualityManagerUserName, null)
+                    .set(QualitySuperviseDetailsAccording::getApproverUserId, null));
+        }
+
+        according.setIsFinish(detailsAccording.getIsFinish());
         qualitySuperviseDetailsAccordingMapper.updateById(according);
         return true;
     }
@@ -675,6 +748,7 @@
             detailsAccording = new QualitySuperviseDetailsAccording();
             // 鏌ヨ鐩戠潱璁″垝璇︽儏
             QualitySuperviseDetails superviseDetails = qualitySuperviseDetailsMapper.selectById(superviseDetailsId);
+            superviseDetails.setSuperviseDetailsId(superviseDetailsId);
             detailsAccording.setSupervisedUserId(superviseDetails.getSupervisedUserId());
             detailsAccording.setSupervisedUserName(superviseDetails.getSupervisee());
         }
@@ -779,7 +853,7 @@
         String departmentLimsName = userMapper.selectUserDepartmentLimsName(user.getId());
 
         switch (detailsCorrect.getFlowType()) {
-                // 涓嶅悎鏍兼彁鍑�
+            // 涓嶅悎鏍兼彁鍑�
             case 0:
                 if (detailsCorrect.getSuperviseDetailsId() == null) {
                     throw new ErrorException("缂哄皯璐ㄩ噺鐩戠潱璇︽儏Id");
@@ -803,7 +877,7 @@
 
                 break;
 
-                // 鍘熷洜鍒嗘瀽
+            // 鍘熷洜鍒嗘瀽
             case 1:
                 correct.setSuperviseDetailsCorrectId(detailsCorrect.getSuperviseDetailsCorrectId());
                 correct.setCauseResult(detailsCorrect.getCauseResult());//鍘熷洜鍒嗘瀽
@@ -819,7 +893,7 @@
                 qualitySuperviseDetailsCorrectMapper.updateById(correct);
                 break;
 
-                // 绾犳鎺柦
+            // 绾犳鎺柦
             case 2:
                 correct.setSuperviseDetailsCorrectId(detailsCorrect.getSuperviseDetailsCorrectId());
                 correct.setCorrectResult(detailsCorrect.getCorrectResult());//2绾犳鎺柦
@@ -836,7 +910,7 @@
                 qualitySuperviseDetailsCorrectMapper.updateById(correct);
                 break;
 
-                // 楠岃瘉缁撴灉
+            // 楠岃瘉缁撴灉
             case 3:
                 correct.setSuperviseDetailsCorrectId(detailsCorrect.getSuperviseDetailsCorrectId());
                 correct.setValidationResult(detailsCorrect.getValidationResult());//3楠岃瘉缁撴灉
@@ -866,7 +940,11 @@
         detailsCorrect.setRaiseDepartment(departmentLimsName);//鎻愬嚭閮ㄩ棬
         detailsCorrect.setRaiseUserId(user.getId());//鎻愬嚭浜篿d
         detailsCorrect.setRaiseUserName(user.getName());// 鎻愬嚭浜�
-        qualitySuperviseDetailsCorrectMapper.insert(detailsCorrect);
+        if (detailsCorrect.getSuperviseDetailsCorrectId() == null) {
+            qualitySuperviseDetailsCorrectMapper.insert(detailsCorrect);
+        } else {
+            qualitySuperviseDetailsCorrectMapper.updateById(detailsCorrect);
+        }
 
         if (detailsCorrect.getApproverUserId() != null) {
             // 鏌ヨ璇︽儏淇℃伅
@@ -902,6 +980,10 @@
             });
         }
 
+        // 娓呯┖鐘舵��
+        qualitySuperviseDetailsCorrectMapper.update(null, Wrappers.<QualitySuperviseDetailsCorrect>lambdaUpdate()
+                .eq(QualitySuperviseDetailsCorrect::getSuperviseDetailsCorrectId, detailsCorrect.getSuperviseDetailsCorrectId())
+                .set(QualitySuperviseDetailsCorrect::getIsFinish, null));
         return true;
     }
 
@@ -911,24 +993,45 @@
      */
     @Override
     public boolean approveEquipSuperviseDetailCorrect(QualitySuperviseDetailsCorrect detailsCorrect) {
+        if (detailsCorrect.getIsFinish() == null) {
+            throw new RuntimeException("缂哄皯鎵瑰噯鐘舵��");
+        }
+
         QualitySuperviseDetailsCorrect correct = new QualitySuperviseDetailsCorrect();
         // 褰撳墠鐧诲綍鐢ㄦ埛淇℃伅鍜岄儴闂�
         User user = userMapper.selectById(SecurityUtils.getUserId().intValue());
         String departmentLimsName = userMapper.selectUserDepartmentLimsName(user.getId());
         correct.setSuperviseDetailsCorrectId(detailsCorrect.getSuperviseDetailsCorrectId());
 
-        correct.setCauseDepartment(departmentLimsName);//鍘熷洜鍒嗘瀽璐d换閮ㄩ棬
-        correct.setCauseUserId(user.getId());//1鍘熷洜鍒嗘瀽浜篿d
-        correct.setCauseUserName(user.getName());// 1鍘熷洜鍒嗘瀽浜�
+        if (detailsCorrect.getIsFinish().equals(1)) {
+            correct.setCauseDepartment(departmentLimsName);//鍘熷洜鍒嗘瀽璐d换閮ㄩ棬
+            correct.setCauseUserId(user.getId());//1鍘熷洜鍒嗘瀽浜篿d
+            correct.setCauseUserName(user.getName());// 1鍘熷洜鍒嗘瀽浜�
 
-        correct.setCorrectDepartment(departmentLimsName);//2绾犳璐d换閮ㄩ棬
-        correct.setCorrectUserId(user.getId());//2绾犳浜篿d
-        correct.setCorrectUserName(user.getName());// 2绾犳浜�
+            correct.setCorrectDepartment(departmentLimsName);//2绾犳璐d换閮ㄩ棬
+            correct.setCorrectUserId(user.getId());//2绾犳浜篿d
+            correct.setCorrectUserName(user.getName());// 2绾犳浜�
 
-        correct.setValidationDepartment(departmentLimsName);//3楠岃瘉閮ㄩ棬
-        correct.setValidationUserId(user.getId());//3楠岃瘉浜篿d
-        correct.setValidationUserName(user.getName());// 3楠岃瘉浜�
-        correct.setIsFinish(1);
+            correct.setValidationDepartment(departmentLimsName);//3楠岃瘉閮ㄩ棬
+            correct.setValidationUserId(user.getId());//3楠岃瘉浜篿d
+            correct.setValidationUserName(user.getName());// 3楠岃瘉浜�
+        } else {
+            qualitySuperviseDetailsCorrectMapper.update(null, Wrappers.<QualitySuperviseDetailsCorrect>lambdaUpdate()
+                    .eq(QualitySuperviseDetailsCorrect::getSuperviseDetailsCorrectId, detailsCorrect.getSuperviseDetailsCorrectId())
+                    .set(QualitySuperviseDetailsCorrect::getCauseDepartment, null)
+                    .set(QualitySuperviseDetailsCorrect::getCauseUserId, null)
+                    .set(QualitySuperviseDetailsCorrect::getCauseUserName, null)
+                    .set(QualitySuperviseDetailsCorrect::getCorrectDepartment, null)
+                    .set(QualitySuperviseDetailsCorrect::getCorrectUserId, null)
+                    .set(QualitySuperviseDetailsCorrect::getCorrectUserName, null)
+                    .set(QualitySuperviseDetailsCorrect::getValidationDepartment, null)
+                    .set(QualitySuperviseDetailsCorrect::getValidationUserId, null)
+                    .set(QualitySuperviseDetailsCorrect::getValidationUserName, null)
+                    .set(QualitySuperviseDetailsCorrect::getApproverUserId, null)
+            );
+        }
+
+        correct.setIsFinish(detailsCorrect.getIsFinish());
         qualitySuperviseDetailsCorrectMapper.updateById(correct);
 
         return true;
@@ -948,6 +1051,7 @@
 
         if (detailsCorrect == null) {
             detailsCorrect = new QualitySuperviseDetailsCorrect();
+            detailsCorrect.setSuperviseDetailsId(superviseDetailsId);
         }
         return detailsCorrect;
     }
diff --git a/cnas-process/src/main/resources/mapper/QualityMonitorDetailsMapper.xml b/cnas-process/src/main/resources/mapper/QualityMonitorDetailsMapper.xml
index e47b813..0e80c86 100644
--- a/cnas-process/src/main/resources/mapper/QualityMonitorDetailsMapper.xml
+++ b/cnas-process/src/main/resources/mapper/QualityMonitorDetailsMapper.xml
@@ -5,7 +5,8 @@
         select * from (
         SELECT cqmd.*,
         CASE
-        WHEN cqmder.is_finish = 1 THEN 2
+        WHEN cqmder.is_finish = 1 THEN 3
+        WHEN cqmder.is_finish = 0 THEN 2
         WHEN cqmder.quality_monitor_details_id IS NOT NULL THEN 1
         ELSE 0 END details_ratify_status,
         CASE
diff --git a/cnas-process/src/main/resources/mapper/QualitySuperviseDetailsMapper.xml b/cnas-process/src/main/resources/mapper/QualitySuperviseDetailsMapper.xml
index 9877619..0e8b619 100644
--- a/cnas-process/src/main/resources/mapper/QualitySuperviseDetailsMapper.xml
+++ b/cnas-process/src/main/resources/mapper/QualitySuperviseDetailsMapper.xml
@@ -10,17 +10,20 @@
         ca.is_correct,
         cc.supervise_details_correct_id,
         case
-        when cr.is_finish = 1 then 2
+        when cr.is_finish = 1 then 3
+        when cr.is_finish = 0 then 2
         when cr.supervise_details_record_id is not null then 1
         else 0
         end record_status,
         case
-        when ca.is_finish = 1 then 2
+        when ca.is_finish = 1 then 3
+        when ca.is_finish = 0 then 2
         when ca.supervise_details_according_id is not null then 1
         else 0
         end according_status,
         case
-        when cc.is_finish = 1 then 2
+        when cc.is_finish = 1 then 3
+        when cc.is_finish = 0 then 2
         when cc.supervise_details_correct_id is not null then 1
         else 0
         end correct_status

--
Gitblit v1.9.3