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