zhuo
2025-03-29 e19c5c816f8abfbbdb197e698cae285ab434fddb
质量监督监控添加退回流程
已修改15个文件
474 ■■■■ 文件已修改
cnas-device/src/main/java/com/ruoyi/device/controller/DeviceController.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/mapper/DataConfigMapper.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/service/DataConfigService.java 29 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/service/impl/DataConfigServiceImpl.java 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExamineRecordServiceImpl.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/resources/mapper/DataConfigMapper.xml 29 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/controller/QualityMonitorController.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/dto/QualityMonitorDetailsDto.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/dto/QualitySuperviseDetailsDto.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/service/QualityMonitorService.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/service/impl/QualityMonitorServiceImpl.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/java/com/ruoyi/process/service/impl/QualitySuperviseServiceImpl.java 182 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/resources/mapper/QualityMonitorDetailsMapper.xml 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-process/src/main/resources/mapper/QualitySuperviseDetailsMapper.xml 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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 = "左侧设备树形栏")
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);
}
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);
}
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);
    }
}
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);
                    }
                });
            }
        }
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);
    }
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>
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));
    }
    /**
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:已批准")
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;
}
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);
    /**
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));
    }
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));
        // 查询上一个月第一条的记录信息, 判断被监督人去另外一个
        if (detailsRecord == null) {
            // 查询详情信息
            QualitySuperviseDetails qualitySuperviseDetails = qualitySuperviseDetailsMapper.selectById(superviseDetailsId);
            // 查询上一个月第一条的记录信息, 判断被监督人去另外一个
            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);
        //获取技术负责人的签名地址
        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 @@
        // 被监督人
        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);//责任部门
        according.setActionsUserId(user.getId());//处理人id
        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());//纠正负责人id
        according.setCorrectUserName(user.getName());//纠正负责人
            according.setResponsibleDepartment(departmentLimsName);//责任部门
            according.setActionsUserId(user.getId());//处理人id
            according.setActionsUserName(user.getName());//处理人
        according.setQualityManagerUserId(user.getId());//质量负责人id
        according.setQualityManagerUserName(user.getName());//质量负责人
        according.setIsFinish(1);
            according.setCorrectUserId(user.getId());//纠正负责人id
            according.setCorrectUserName(user.getName());//纠正负责人
            according.setQualityManagerUserId(user.getId());//质量负责人id
            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());//提出人id
        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);//原因分析责任部门
        correct.setCauseUserId(user.getId());//1原因分析人id
        correct.setCauseUserName(user.getName());// 1原因分析人
        if (detailsCorrect.getIsFinish().equals(1)) {
            correct.setCauseDepartment(departmentLimsName);//原因分析责任部门
            correct.setCauseUserId(user.getId());//1原因分析人id
            correct.setCauseUserName(user.getName());// 1原因分析人
        correct.setCorrectDepartment(departmentLimsName);//2纠正责任部门
        correct.setCorrectUserId(user.getId());//2纠正人id
        correct.setCorrectUserName(user.getName());// 2纠正人
            correct.setCorrectDepartment(departmentLimsName);//2纠正责任部门
            correct.setCorrectUserId(user.getId());//2纠正人id
            correct.setCorrectUserName(user.getName());// 2纠正人
        correct.setValidationDepartment(departmentLimsName);//3验证部门
        correct.setValidationUserId(user.getId());//3验证人id
        correct.setValidationUserName(user.getName());// 3验证人
        correct.setIsFinish(1);
            correct.setValidationDepartment(departmentLimsName);//3验证部门
            correct.setValidationUserId(user.getId());//3验证人id
            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;
    }
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
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