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-process/src/main/java/com/ruoyi/process/service/impl/InconsistentDistributionServiceImpl.java |  232 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 232 insertions(+), 0 deletions(-)

diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/impl/InconsistentDistributionServiceImpl.java b/cnas-process/src/main/java/com/ruoyi/process/service/impl/InconsistentDistributionServiceImpl.java
new file mode 100644
index 0000000..c6dba83
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/service/impl/InconsistentDistributionServiceImpl.java
@@ -0,0 +1,232 @@
+package com.ruoyi.process.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+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.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
+import com.ruoyi.process.dto.InconsistentDistributionDto;
+import com.ruoyi.process.dto.InconsistentDistributionProportionDto;
+import com.ruoyi.process.mapper.InconsistentDistributionMapper;
+import com.ruoyi.process.pojo.InconsistentDistribution;
+import com.ruoyi.process.pojo.InconsistentDistributionDetail;
+import com.ruoyi.process.service.InconsistentDistributionDetailService;
+import com.ruoyi.process.service.InconsistentDistributionService;
+import lombok.AllArgsConstructor;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.net.URLEncoder;
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * <p>
+ * 涓嶇鍚堥」鐨勫垎甯� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author
+ * @since 2024-11-15 09:53:20
+ */
+@Service
+@AllArgsConstructor
+@Transactional(rollbackFor = Exception.class)
+public class InconsistentDistributionServiceImpl extends ServiceImpl<InconsistentDistributionMapper, InconsistentDistribution> implements InconsistentDistributionService {
+
+    private InconsistentDistributionDetailService inconsistentDistributionDetailService;
+
+
+    /**
+     * 涓嶇鍚堥」鍒嗗竷鏌ヨ
+     * @param page
+     * @param inconsistentDistributionDto
+     * @return
+     */
+    @Override
+    public IPage<InconsistentDistributionDto> pageInconsistentDistribution(Page page, InconsistentDistribution inconsistentDistributionDto) {
+        return baseMapper.pageInconsistentDistribution(page, QueryWrappers.queryWrappers(inconsistentDistributionDto));
+    }
+
+    /**
+     * 涓嶇鍚堥」鍒嗗竷鏂板
+     * @param inconsistentDistributionDto
+     * @return
+     */
+    @Override
+    public boolean addInconsistentDistribution(InconsistentDistributionDto inconsistentDistributionDto) {
+        baseMapper.insert(inconsistentDistributionDto);
+        // 鏂板璇︽儏
+        for (InconsistentDistributionDetail distributionDetail : inconsistentDistributionDto.getDistributionDetailList()) {
+            distributionDetail.setDistributionId(inconsistentDistributionDto.getDistributionId());
+        }
+        inconsistentDistributionDetailService.saveBatch(inconsistentDistributionDto.getDistributionDetailList());
+        return true;
+    }
+
+    /**
+     * 涓嶇鍚堥」鍒嗗竷淇敼
+     * @param inconsistentDistributionDto
+     * @return
+     */
+    @Override
+    public boolean updateInconsistentDistribution(InconsistentDistributionDto inconsistentDistributionDto) {
+        inconsistentDistributionDetailService.updateBatchById(inconsistentDistributionDto.getDistributionDetailList());
+        return true;
+    }
+
+    /**
+     * 涓嶇鍚堥」鍒嗗竷鍒犻櫎
+     * @param distributionId
+     * @return
+     */
+    @Override
+    public boolean delInconsistentDistribution(Integer distributionId) {
+        inconsistentDistributionDetailService.remove(Wrappers.<InconsistentDistributionDetail>lambdaQuery()
+                .eq(InconsistentDistributionDetail::getDistributionId, distributionId));
+        baseMapper.deleteById(distributionId);
+        return true;
+    }
+
+    /**
+     * 涓嶇鍚堥」鍒嗗竷鏌ョ湅璇︽儏
+     * @param distributionId
+     * @return
+     */
+    @Override
+    public InconsistentDistributionDto getInconsistentDistributionOne(Integer distributionId) {
+        InconsistentDistributionDto distributionDto = new InconsistentDistributionDto();
+        InconsistentDistribution inconsistentDistribution = baseMapper.selectById(distributionId);
+        BeanUtils.copyProperties(distributionDto, inconsistentDistribution);
+        // 鏌ヨ璇︾粏
+        List<InconsistentDistributionDetail> distributionDetailList = inconsistentDistributionDetailService.list(Wrappers.<InconsistentDistributionDetail>lambdaQuery()
+                .eq(InconsistentDistributionDetail::getDistributionId, distributionId));
+
+        // 涓讳换姹囨��
+        int directorSum = distributionDetailList.stream()
+                .filter(detail -> detail.getDirector() != null)
+                .mapToInt(InconsistentDistributionDetail::getDirector)
+                .sum();
+
+        // 鎶�鏈礋璐d汉姹囨��
+        int technologySum = distributionDetailList.stream()
+                .filter(detail -> detail.getTechnology() != null)
+                .mapToInt(InconsistentDistributionDetail::getTechnology)
+                .sum();
+
+        // 璐ㄩ噺璐熻矗浜烘眹鎬�
+        int qualitySum = distributionDetailList.stream()
+                .filter(detail -> detail.getQuality() != null)
+                .mapToInt(InconsistentDistributionDetail::getQuality)
+                .sum();
+
+        // 缁煎悎瀹ゆ眹鎬�
+        int comprehensiveSum = distributionDetailList.stream()
+                .filter(detail -> detail.getComprehensive() != null)
+                .mapToInt(InconsistentDistributionDetail::getComprehensive)
+                .sum();
+
+        // 璇曢獙瀹ゆ眹鎬�
+        int testingSum = distributionDetailList.stream()
+                .filter(detail -> detail.getTesting() != null)
+                .mapToInt(InconsistentDistributionDetail::getTesting)
+                .sum();
+
+        // 鎬绘暟姹囨��
+        int sum = directorSum + technologySum + qualitySum + comprehensiveSum + testingSum;
+
+        //璁$畻鍚堣
+        for (InconsistentDistributionDetail distributionDetail : distributionDetailList) {
+            // 鎬绘暟
+            Integer total = (distributionDetail.getDirector() != null ? distributionDetail.getDirector() : 0)
+                    + (distributionDetail.getTechnology() != null ? distributionDetail.getTechnology() : 0)
+                    + (distributionDetail.getQuality() != null ? distributionDetail.getQuality() : 0)
+                    + (distributionDetail.getComprehensive() != null ? distributionDetail.getComprehensive() : 0)
+                    + (distributionDetail.getTesting() != null ? distributionDetail.getTesting() : 0);
+            distributionDetail.setTotal(total);
+            // 鍗犳瘮
+            distributionDetail.setProportion(calculatePercentage(total, sum));
+        }
+        // 娣诲姞鏈�鍚庝竴琛屽崰姣斿璞�
+        InconsistentDistributionProportionDto proportionDto = new InconsistentDistributionProportionDto();
+        proportionDto.setEssentials("鍗犳瘮 %");
+        proportionDto.setDirector(calculatePercentage(directorSum, sum));
+        proportionDto.setTechnology(calculatePercentage(technologySum, sum));
+        proportionDto.setQuality(calculatePercentage(qualitySum, sum));
+        proportionDto.setComprehensive(calculatePercentage(comprehensiveSum, sum));
+        proportionDto.setTesting(calculatePercentage(testingSum, sum));
+        proportionDto.setTotal(sum);
+
+        distributionDto.setDistributionDetailList(distributionDetailList);
+        distributionDto.setDistributionProportion(proportionDto);
+
+        return distributionDto;
+    }
+
+    /**
+     * 璁$畻鍗犳瘮
+     * @return
+     */
+    public BigDecimal calculatePercentage(Integer numeratorNum, Integer denominatorNum) {
+        BigDecimal numerator = new BigDecimal(numeratorNum);
+        BigDecimal denominator = new BigDecimal(denominatorNum);
+
+        // 妫�鏌ラ櫎鏁版槸鍚︿负0
+        if (denominator.compareTo(BigDecimal.ZERO) == 0) {
+            return BigDecimal.ZERO;
+        }
+        BigDecimal ratio = numerator.divide(denominator, 4, RoundingMode.HALF_UP); // 淇濈暀4浣嶅皬鏁�
+        BigDecimal percentage = ratio.multiply(new BigDecimal("100"));
+        BigDecimal percentageRounded = percentage.setScale(2, RoundingMode.HALF_UP);
+        return percentageRounded;
+    }
+
+
+    /**
+     * 瀵煎嚭涓嶇鍚堢殑鍒嗗竷
+     * @param distributionId
+     * @param response
+     */
+    @Override
+    public void exportInconsistentDistribution(Integer distributionId, HttpServletResponse response) {
+        InconsistentDistributionDto inconsistentDistributionOne = getInconsistentDistributionOne(distributionId);
+
+        // 鑾峰彇璺緞
+        InputStream inputStream = this.getClass().getResourceAsStream("/static/inconsistent-distribution.docx");
+        Configure configure = Configure.builder()
+                .bind("distributionDetailList", new HackLoopTableRenderPolicy())
+                .build();
+        XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+                new HashMap<String, Object>() {{
+                    put("distributionDetailList", inconsistentDistributionOne.getDistributionDetailList());
+                    put("proport", inconsistentDistributionOne.getDistributionProportion());
+                }});
+
+        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("瀵煎嚭澶辫触");
+        }
+
+    }
+
+}

--
Gitblit v1.9.3