From 4f3a98f19143865cdc1de4791e8a95d96bd40c65 Mon Sep 17 00:00:00 2001
From: maven <2163098428@qq.com>
Date: 星期五, 01 八月 2025 13:27:59 +0800
Subject: [PATCH] yys 密码已重置

---
 cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExamineRecordServiceImpl.java |  238 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 238 insertions(+), 0 deletions(-)

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
new file mode 100644
index 0000000..7f2d705
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExamineRecordServiceImpl.java
@@ -0,0 +1,238 @@
+package com.ruoyi.device.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+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;
+import com.ruoyi.device.mapper.DeviceMapper;
+import com.ruoyi.device.pojo.Device;
+import com.ruoyi.device.pojo.DeviceExaminePlanDetails;
+import com.ruoyi.device.pojo.DeviceExamineRecord;
+import com.ruoyi.device.pojo.DeviceExamineRecordDetail;
+import com.ruoyi.device.service.DeviceExamineRecordDetailService;
+import com.ruoyi.device.service.DeviceExamineRecordService;
+import com.ruoyi.framework.exception.ErrorException;
+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;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * <p>
+ * 璁惧鏍告煡璁板綍琛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-16 07:14:28
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class DeviceExamineRecordServiceImpl extends ServiceImpl<DeviceExamineRecordMapper, DeviceExamineRecord> implements DeviceExamineRecordService {
+
+    @Resource
+    private DeviceExamineRecordDetailService deviceExamineRecordDetailService;
+    @Resource
+    private DeviceExaminePlanDetailsMapper deviceExaminePlanDetailsMapper;
+    @Resource
+    private DeviceMapper deviceMapper;
+    @Resource
+    private UserMapper userMapper;
+    @Resource
+    private ThreadPoolTaskExecutor threadPoolTaskExecutor;
+
+    @Resource
+    private InformationNotificationService informationNotificationService;
+
+    /**
+     * 鏌ヨ鏍告煡璁板綍
+     *
+     * @return
+     */
+    @Override
+    public DeviceExamineRecordDto getExamineRecord(Integer planDetailsId) {
+        DeviceExamineRecordDto deviceExamineRecord = baseMapper.getExamineRecord(planDetailsId);
+
+        // 鍒ゆ柇鏄惁涓虹┖
+        if (deviceExamineRecord == null) {
+            deviceExamineRecord = new DeviceExamineRecordDto();
+            // 鏌ヨ璁惧璇︽儏
+            DeviceExaminePlanDetails deviceExaminePlanDetails = deviceExaminePlanDetailsMapper.selectById(planDetailsId);
+            Device device = deviceMapper.selectById(deviceExaminePlanDetails.getDeviceId());
+            if (device != null) {
+                deviceExamineRecord.setDeviceName(device.getDeviceName());
+                deviceExamineRecord.setDeviceNumber(device.getManagementNumber());
+                deviceExamineRecord.setPlanDetailsId(deviceExaminePlanDetails.getPlanDetailsId());
+            }
+        } else {
+            // 鏌ヨ璇︽儏
+            List<DeviceExamineRecordDetail> list = deviceExamineRecordDetailService.list(Wrappers.<DeviceExamineRecordDetail>lambdaQuery()
+                    .eq(DeviceExamineRecordDetail::getRecordId, deviceExamineRecord.getRecordId()));
+            deviceExamineRecord.setRecordDetailList(list);
+        }
+
+        return deviceExamineRecord;
+    }
+
+    /**
+     * 鏂板鏍告煡璁板綍
+     *
+     * @return
+     */
+    @Override
+    public boolean addExamineRecord(DeviceExamineRecordDto deviceExamineRecordDto) {
+        if (deviceExamineRecordDto.getPlanDetailsId() == null) {
+            throw new ErrorException("缂哄皯璁″垝璇︾粏淇℃伅id");
+        }
+        if (deviceExamineRecordDto.getRecordId() == null) {
+            Integer userId = SecurityUtils.getUserId().intValue();
+            User user = userMapper.selectById(SecurityUtils.getUserId());
+            deviceExamineRecordDto.setCheckerUserId(userId);
+            deviceExamineRecordDto.setCheckerUser(user.getName());
+
+            // 鏌ヨ瀹℃煡浜篿d
+            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);
+                    }
+                });
+            }
+
+        }
+        this.saveOrUpdate(deviceExamineRecordDto);
+
+        // 鍒犻櫎鍏ㄩ儴璇︽儏
+        deviceExamineRecordDetailService.remove(Wrappers.<DeviceExamineRecordDetail>lambdaQuery()
+                .eq(DeviceExamineRecordDetail::getRecordId, deviceExamineRecordDto.getRecordId()));
+        //娣诲姞璇︽儏
+        if (CollectionUtils.isNotEmpty(deviceExamineRecordDto.getRecordDetailList())) {
+            for (DeviceExamineRecordDetail deviceExamineRecordDetail : deviceExamineRecordDto.getRecordDetailList()) {
+                deviceExamineRecordDetail.setRecordId(deviceExamineRecordDto.getRecordId());
+            }
+            deviceExamineRecordDetailService.saveBatch(deviceExamineRecordDto.getRecordDetailList());
+        }
+
+        return true;
+    }
+
+
+    /**
+     * 澶嶆牳鏍告煡璁板綍
+     *
+     * @return
+     */
+    @Override
+    public boolean reviewExamineRecord(DeviceExamineRecordDto dto) {
+        if (dto.getPlanDetailsId() == null) {
+            throw new ErrorException("缂哄皯璁″垝璇︾粏淇℃伅id");
+        }
+        LambdaUpdateWrapper<DeviceExamineRecord> wrapper = Wrappers.<DeviceExamineRecord>lambdaUpdate()
+                .eq(DeviceExamineRecord::getPlanDetailsId, dto.getPlanDetailsId())
+                .set(DeviceExamineRecord::getReviewStatus, dto.getReviewStatus())
+                .set(DeviceExamineRecord::getReviewRemark, dto.getReviewRemark());
+
+        // 涓�0娓呴櫎瀹℃牳浜�
+        if (dto.getReviewStatus().equals(0)) {
+            wrapper.set(DeviceExamineRecord::getReviewUserId, null)
+                    .set(DeviceExamineRecord::getReviewUser, null);
+        }
+
+        this.update(wrapper);
+        return true;
+    }
+
+    /**
+     * 瀵煎嚭澶嶆牳鏍告煡璁板綍
+     *
+     * @param planDetailsId 澶嶆牳鏍告煡璁板綍id
+     * @return
+     */
+    @Override
+    public void exportReviewExamineRecordDetail(Integer planDetailsId, HttpServletResponse response) {
+        // 鏌ヨ澶嶆牳鏍告煡璁板綍
+        DeviceExamineRecordDto deviceExamineRecordDto = baseMapper.selectReviewExamineRecordDto(planDetailsId);
+
+        // 鏌ヨ澶嶆牳鏍告煡璁板綍璇︽儏
+        List<DeviceExamineRecordDetail> deviceExamineRecordDetailList = deviceExamineRecordDetailService.list(Wrappers.<DeviceExamineRecordDetail>lambdaQuery().eq(DeviceExamineRecordDetail::getRecordId, deviceExamineRecordDto.getRecordId()));
+
+        // 鑾峰彇璺緞
+        InputStream inputStream = this.getClass().getResourceAsStream("/static/word/examine-record.docx");
+        Configure configure = Configure.builder()
+                .bind("deviceExamineRecordDetailList", new HackLoopTableRenderPolicy())
+                .build();
+        XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+                new HashMap<String, Object>() {{
+                    put("deviceExamineRecordDto", deviceExamineRecordDto);
+                    put("deviceExamineRecordDetailList", deviceExamineRecordDetailList);
+                    //鑾峰彇鏍告煡浜虹殑绛惧悕鍦板潃
+                    put("checkerUserUrl", UserUtils.getFinalUserSignatureUrl(deviceExamineRecordDto.getCheckerUserId()));
+                    //鑾峰彇瀹℃煡浜虹殑绛惧悕鍦板潃
+                    put("reviewUserUrl", UserUtils.getFinalUserSignatureUrl(deviceExamineRecordDto.getReviewUserId()));
+                }});
+
+        try {
+            response.setContentType("application/msword");
+            String deviceName = StringUtils.isNotEmpty(deviceExamineRecordDto.getDeviceName()) ? deviceExamineRecordDto.getDeviceName() : "";
+            String fileName = URLEncoder.encode(
+                    deviceName+ "鏍告煡璁板綍", "UTF-8");
+            response.setHeader("Content-disposition",
+                    "attachment;filename=" + fileName + ".docx");
+            OutputStream os = response.getOutputStream();
+            template.write(os);
+            os.flush();
+            os.close();
+            inputStream.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new RuntimeException("瀵煎嚭澶辫触");
+        }
+    }
+}

--
Gitblit v1.9.3