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/DeviceImpowerServiceImpl.java |  300 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 300 insertions(+), 0 deletions(-)

diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceImpowerServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceImpowerServiceImpl.java
new file mode 100644
index 0000000..c190fa1
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceImpowerServiceImpl.java
@@ -0,0 +1,300 @@
+package com.ruoyi.device.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.ruoyi.common.constant.MenuJumpPathConstants;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.core.domain.entity.InformationNotification;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.WxCpUtils;
+import com.ruoyi.device.dto.DeviceImpowerDetailsDto;
+import com.ruoyi.device.dto.DeviceImpowerDto;
+import com.ruoyi.device.mapper.DeviceImpowerDetailsMapper;
+import com.ruoyi.device.pojo.DeviceImpower;
+import com.ruoyi.device.mapper.DeviceImpowerMapper;
+import com.ruoyi.device.pojo.DeviceImpower;
+import com.ruoyi.device.pojo.DeviceImpowerDetails;
+import com.ruoyi.device.service.DeviceImpowerService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.device.service.DeviceImpowerDetailsService;
+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.apache.commons.collections4.CollectionUtils;
+import org.springframework.beans.BeanUtils;
+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.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.HashMap;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 璁惧浣跨敤琛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author
+ * @since 2025-04-17 03:23:23
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class DeviceImpowerServiceImpl extends ServiceImpl<DeviceImpowerMapper, DeviceImpower> implements DeviceImpowerService {
+
+
+    @Resource
+    private DeviceImpowerDetailsService deviceImpowerDetailsService;
+
+    @Resource
+    private DeviceImpowerDetailsMapper deviceImpowerDetailsMapper;
+    @Resource
+    private ThreadPoolTaskExecutor threadPoolTaskExecutor;
+    @Resource
+    private InformationNotificationService informationNotificationService;
+
+    @Resource
+    private UserMapper userMapper;
+
+    /**
+     * 鍒嗛〉鏌ヨ璁惧浣跨敤
+     *
+     * @param page
+     * @return
+     */
+    @Override
+    public Result<IPage<DeviceImpower>> selectDeviceImpowerByPage(Page page, DeviceImpowerDto deviceImpowerDto) {
+        IPage<DeviceImpower> iPage = baseMapper.selectDeviceParameterPage(page, QueryWrappers.queryWrappers(deviceImpowerDto));
+        return Result.success(iPage);
+    }
+
+
+    /**
+     * 鏂板璁惧浣跨敤
+     *
+     * @param deviceImpowerDto 璁惧浣跨敤
+     */
+    @Override
+    public Result addImpower(DeviceImpowerDto deviceImpowerDto) {
+        Integer userId = SecurityUtils.getUserId().intValue();
+        User user = userMapper.selectById(userId);
+        deviceImpowerDto.setCompilerId(userId);
+        deviceImpowerDto.setCompiler(user.getName());
+        deviceImpowerDto.setDatePreparation(LocalDateTime.now());
+
+        // 鏌ヨ瀹℃牳浜篿d
+        if (deviceImpowerDto.getAuditId() != null) {
+            User auditUser = userMapper.selectById(deviceImpowerDto.getAuditId());
+            deviceImpowerDto.setAudit(auditUser.getName());
+        }
+        this.saveOrUpdate(deviceImpowerDto);
+
+        // 璇︽儏璧嬪�煎苟淇濆瓨
+        List<DeviceImpowerDetailsDto> deviceImpowerDetails = deviceImpowerDto.getDeviceImpowerDetails();
+        if (CollectionUtils.isNotEmpty(deviceImpowerDetails)) { // 璇︽儏涓嶄负绌�
+            List<DeviceImpowerDetails> collect = deviceImpowerDetails.stream().map(detailsDto -> {
+                detailsDto.setImpowerId(deviceImpowerDto.getImpowerId()); // 浣跨敤ID
+                DeviceImpowerDetails details = new DeviceImpowerDetails();
+                BeanUtils.copyProperties(detailsDto, details);
+                return details;
+            }).collect(Collectors.toList());
+            deviceImpowerDetailsService.saveBatch(collect);
+        }
+
+        return Result.success();
+    }
+
+    /**
+     * 淇敼璁惧浣跨敤
+     *
+     * @param deviceImpowerDto 璁惧浣跨敤
+     */
+    @Override
+    public Result updateImpower(DeviceImpowerDto deviceImpowerDto) {
+        // 鏌ヨ瀹℃牳浜篿d
+        if (deviceImpowerDto.getAuditId() != null) {
+            User auditUser = userMapper.selectById(deviceImpowerDto.getAuditId());
+            deviceImpowerDto.setAudit(auditUser.getName());
+        }
+        this.saveOrUpdate(deviceImpowerDto);
+
+        // 鍒犻櫎鍘熸湰鐨勮鎯�
+        deviceImpowerDetailsService.remove(Wrappers.<DeviceImpowerDetails>lambdaQuery().eq(DeviceImpowerDetails::getImpowerId, deviceImpowerDto.getImpowerId()));
+        // 璇︽儏璧嬪�煎苟淇濆瓨
+        List<DeviceImpowerDetailsDto> deviceImpowerDetails = deviceImpowerDto.getDeviceImpowerDetails();
+        if (CollectionUtils.isNotEmpty(deviceImpowerDetails)) { // 璇︽儏涓嶄负绌�
+            List<DeviceImpowerDetails> collect = deviceImpowerDetails.stream().map(detailsDto -> {
+                detailsDto.setImpowerId(deviceImpowerDto.getImpowerId()); // 浣跨敤ID
+                DeviceImpowerDetails details = new DeviceImpowerDetails();
+                BeanUtils.copyProperties(detailsDto, details);
+                return details;
+            }).collect(Collectors.toList());
+            deviceImpowerDetailsService.saveBatch(collect);
+        }
+        return Result.success();
+    }
+
+    /**
+     * 鍒犻櫎璁惧浣跨敤
+     *
+     * @param deviceImpowerDto 璁惧浣跨敤
+     */
+    @Override
+    public Result deleteImpower(DeviceImpowerDto deviceImpowerDto) {
+        this.removeById(deviceImpowerDto);
+        deviceImpowerDetailsService.remove(Wrappers.<DeviceImpowerDetails>lambdaQuery().eq(DeviceImpowerDetails::getImpowerId, deviceImpowerDto.getImpowerId()));
+        return Result.success();
+    }
+
+    /**
+     * 鏌ヨ璁惧浣跨敤璇︽儏
+     *
+     * @param impowerId 璁惧浣跨敤id
+     */
+    @Override
+    public Result<DeviceImpowerDto> getImpowerDetail(Integer impowerId) {
+        // 鏌ヨ璁惧浣跨敤
+        DeviceImpower deviceImpower = baseMapper.selectById(impowerId);
+        // 鏌ヨ璇︽儏
+        DeviceImpowerDto deviceImpowerDto = new DeviceImpowerDto();
+        BeanUtils.copyProperties(deviceImpower, deviceImpowerDto);
+        deviceImpowerDto.setDeviceImpowerDetails(deviceImpowerDetailsMapper.deviceImpowerDetailsList(impowerId));
+        return Result.success(deviceImpowerDto);
+    }
+
+    /**
+     * 鎻愪氦鎵瑰噯
+     * @param deviceImpowerDto
+     * @return
+     */
+    @Override
+    public Result submitReviewImpowerStatus(DeviceImpowerDto deviceImpowerDto) {
+        User audit = userMapper.selectById(deviceImpowerDto.getAuditId());
+        this.update(Wrappers.<DeviceImpower>lambdaUpdate()
+                .eq(DeviceImpower::getImpowerId, deviceImpowerDto.getImpowerId())
+                .set(DeviceImpower::getAuditId, audit.getId())
+                .set(DeviceImpower::getAudit, audit.getName())
+                .set(DeviceImpower::getAuditDate, null)
+                .set(DeviceImpower::getStatus, null)
+                .set(DeviceImpower::getAuditRemark, null));
+
+        DeviceImpower deviceImpower = baseMapper.selectById(deviceImpowerDto.getImpowerId());
+
+//        // 鍙戦�佹秷鎭�
+//        Integer userId = SecurityUtils.getUserId().intValue();
+//        User user = userMapper.selectById(userId);
+//        // 娑堟伅鍙戦��
+//        InformationNotification info = new InformationNotification();
+//        // 鍙戦�佷汉
+//        info.setCreateUser(user.getName());
+//        info.setMessageType("6");
+//        info.setTheme("CNAS璁惧浣跨敤鎵瑰噯閫氱煡");
+//        info.setContent(deviceImpower.getPlanYear() + "骞寸殑璁惧浣跨敤寰呮壒鍑�");
+//        info.setSenderId(userId);
+//        // 鎺ユ敹浜�
+//        info.setConsigneeId(audit.getId());
+//        info.setJumpPath(MenuJumpPathConstants.DEVICE);
+//        informationNotificationService.addInformationNotification(info);
+//
+//        // 鍙戦�佷紒涓氬井淇¢�氱煡
+//        threadPoolTaskExecutor.execute(() -> {
+//            String message = "";
+//            message += "CNAS璁惧浣跨敤鏍搁�氱煡";
+//            message += "\n璇峰幓璧勬簮绠$悊-璁惧涓�灞傜洰褰�-璁惧浣跨敤濉啓";
+//            message += "\n" + deviceImpower.getPlanYear() + "骞寸殑璁惧浣跨敤寰呮壒鍑�";
+//            //鍙戦�佷紒涓氬井淇℃秷鎭�氱煡
+//            try {
+//                WxCpUtils.inform(audit.getAccount(), message, null);
+//            } catch (Exception e) {
+//                throw new RuntimeException(e);
+//            }
+//        });
+        return Result.success();
+    }
+
+    /**
+     *
+     *
+     * @param deviceImpowerDto
+     */
+    @Override
+    public Result reviewImpowerStatus(DeviceImpowerDto deviceImpowerDto) {
+        LambdaUpdateWrapper<DeviceImpower> wrapper = Wrappers.<DeviceImpower>lambdaUpdate()
+                .eq(DeviceImpower::getImpowerId, deviceImpowerDto.getImpowerId())
+                .set(DeviceImpower::getAuditDate, LocalDateTime.now())
+                .set(DeviceImpower::getStatus, deviceImpowerDto.getStatus())        // 瀹℃牳鐘舵��
+                .set(DeviceImpower::getAuditRemark, deviceImpowerDto.getAuditRemark());// 瀹℃牳澶囨敞
+
+        this.update(wrapper); // 鏇存柊
+        return Result.success();
+    }
+
+    /**
+     * 瀵煎嚭璁惧浣跨敤
+     *
+     * @param impowerId 璁惧浣跨敤id
+     */
+    @Override
+    public Result exportDeviceImpowerDto(Integer impowerId, HttpServletResponse response) {
+        // 鏌ヨ璁惧浣跨敤鎺堟潈璁″垝
+        DeviceImpower deviceImpower = baseMapper.selectById(impowerId);
+        DeviceImpowerDto deviceImpowerDto = new DeviceImpowerDto();
+        BeanUtils.copyProperties(deviceImpower, deviceImpowerDto);
+        // 鏍煎紡鍖栨棩鏈熶腑鑻辨枃
+        DateTimeFormatter formatterCH = DateTimeFormatter.ofPattern("yyyy 骞� MM 鏈� dd 鏃�");
+        DateTimeFormatter formatterEN = DateTimeFormatter.ofPattern("yyyy 'Year' MM 'Month' dd 'Day'");
+        deviceImpowerDto.setAuditDateCH(deviceImpower.getAuditDate() == null ? null : deviceImpower.getAuditDate().format(formatterCH));
+        deviceImpowerDto.setAuditDateEN(deviceImpower.getAuditDate() == null ? null : deviceImpower.getAuditDate().format(formatterEN));
+
+        // 鏌ヨ璁惧淇濆吇璁″垝璇︽儏
+        List<DeviceImpowerDetailsDto> deviceImpowerDetailsDtoList = deviceImpowerDetailsMapper.deviceImpowerDetailsList(impowerId);
+        // 璁剧疆搴忓彿
+        deviceImpowerDetailsDtoList.forEach(deviceImpowerDetails -> {
+            deviceImpowerDetails.setIndex(deviceImpowerDetailsDtoList.indexOf(deviceImpowerDetails) + 1);
+        });
+
+        // 鑾峰彇璺緞
+        InputStream inputStream = this.getClass().getResourceAsStream("/static/word/device-impower.docx");
+        Configure configure = Configure.builder()
+                .bind("deviceImpowerDetailsDtoList", new HackLoopTableRenderPolicy())
+                .build();
+        XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+                new HashMap<String, Object>() {{
+                    put("deviceImpower", deviceImpowerDto);
+                    put("deviceImpowerDetailsDtoList", deviceImpowerDetailsDtoList);
+                    // 鎺堟潈浜哄湴鍧�
+                    put("auditUrl", UserUtils.getFinalUserSignatureUrl(deviceImpower.getAuditId()));
+                }});
+
+        try {
+            response.setContentType("application/msword");
+            String fileName = URLEncoder.encode(
+                    "璁惧浣跨敤鎺堟潈", "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("瀵煎嚭澶辫触");
+        }
+        return Result.success();
+    }
+}

--
Gitblit v1.9.3