From ec33a83aa39eedaf39675d4ef7be5f133f556846 Mon Sep 17 00:00:00 2001
From: yb <1113799@qq.com>
Date: 星期四, 11 九月 2025 17:37:36 +0800
Subject: [PATCH] 倍率统计报表算法调整

---
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentMagnificationServiceImpl.java |   75 +++++++++++++++++++++++++++++--------
 1 files changed, 58 insertions(+), 17 deletions(-)

diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentMagnificationServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentMagnificationServiceImpl.java
index 8ce35e0..ff20242 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentMagnificationServiceImpl.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentMagnificationServiceImpl.java
@@ -8,8 +8,12 @@
 import org.apache.shiro.SecurityUtils;
 import org.jeecg.common.constant.CommonConstant;
 import org.jeecg.common.system.vo.LoginUser;
-import org.jeecg.modules.mdc.dto.*;
-import org.jeecg.modules.mdc.entity.*;
+import org.jeecg.modules.mdc.dto.MdcEquProDto;
+import org.jeecg.modules.mdc.dto.MdcEquipmentMagnificationDto;
+import org.jeecg.modules.mdc.entity.Equipment;
+import org.jeecg.modules.mdc.entity.MdcDriveTypeParamConfig;
+import org.jeecg.modules.mdc.entity.MdcEquipmentMagnification;
+import org.jeecg.modules.mdc.entity.MdcEquipmentRunningSection;
 import org.jeecg.modules.mdc.mapper.MdcEquipmentMagnificationMapper;
 import org.jeecg.modules.mdc.service.*;
 import org.jeecg.modules.mdc.util.DateUtils;
@@ -17,7 +21,6 @@
 import org.jeecg.modules.mdc.vo.MdcMagnificationEquipmentVo;
 import org.jeecg.modules.mdc.vo.MdcMagnificationVo;
 import org.jeecg.modules.system.entity.MdcProduction;
-import org.jeecg.modules.system.entity.SysDepart;
 import org.jeecg.modules.system.service.IMdcProductionService;
 import org.jeecg.modules.system.service.ISysDepartService;
 import org.jeecgframework.poi.excel.def.NormalExcelConstants;
@@ -31,6 +34,7 @@
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.util.*;
+import java.util.stream.Collectors;
 
 @Service
 public class MdcEquipmentMagnificationServiceImpl extends ServiceImpl<MdcEquipmentMagnificationMapper, MdcEquipmentMagnification> implements IMdcEquipmentMagnificationService {
@@ -54,12 +58,15 @@
     @Override
     public void savesEquipmentMagnifications(String dateTime) {
         List<MdcEquipmentMagnification> magnifications = new ArrayList<>();
+        List<Equipment> equipmentList = equipmentService.list();
+        Map<String,List<MdcDriveTypeParamConfig>> map = new HashMap<>();
+        Date now =  DateUtils.plusTime(DateUtils.getNow(), -1);
         //涓昏酱鍊嶇巼
         //杩涚粰鍊嶇巼
        /* Equipment e = equipmentService.getById("12345678");
         List<Equipment> equipmentList = new ArrayList<>();
         equipmentList.add(e);*/
-        if (org.apache.commons.lang.StringUtils.isNotBlank(dateTime)) {
+        if (StringUtils.isNotBlank(dateTime)) {
             try {
                 Date initDate = DateUtils.toDate(dateTime, "yyyyMMdd");
                 String date = DateUtils.format(initDate,DateUtils.STR_DATE);
@@ -69,23 +76,30 @@
             } catch (Exception ee) {
                 log.error("鍙傛暟鏍煎紡涓嶅", ee);
             }
+
+
         }
-        List<Equipment> equipmentList = equipmentService.list();
-        Map<String,List<MdcDriveTypeParamConfig>> map = new HashMap<>();
-        Date now =  DateUtils.plusTime(DateUtils.getNow(), -1);
         for (Equipment equipment : equipmentList) {
             Date start = null;
+            List<String> dates = new ArrayList<>();
             //鏌ヨ鏈�鍚庝竴鏉¤褰�
-            MdcEquipmentMagnification mdcMagnification = super.baseMapper.getMaxStaticsData(equipment.getEquipmentid());
-            if (mdcMagnification == null) {
-                start = DateUtils.plusTime(DateUtils.getNow(), -20);
+            if (StringUtils.isNotBlank(dateTime)) {
+                Date initDate = DateUtils.toDate(dateTime, "yyyyMMdd");
+                String date = DateUtils.format(initDate,DateUtils.STR_DATE);
+                dates.add(date);
             } else {
-                start = DateUtils.toDate(mdcMagnification.getTheDate(),DateUtils.STR_DATE );
-                if (now.toString().equals(start.toString())) {
-                    continue;
+                MdcEquipmentMagnification mdcMagnification = super.baseMapper.getMaxStaticsData(equipment.getEquipmentid());
+                if (mdcMagnification == null) {
+                    start = DateUtils.plusTime(DateUtils.getNow(), -20);
+                } else {
+                    start = DateUtils.toDate(mdcMagnification.getTheDate(),DateUtils.STR_DATE );
+                    if (now.toString().equals(start.toString())) {
+                        continue;
+                    }
                 }
+                dates = DateUtils.getDatesStringList(start,now);
             }
-            List<String> dates = DateUtils.getDatesStringList(start,now);
+
             List<MdcDriveTypeParamConfig> list = new ArrayList<>();
             if (!map.containsKey(equipment.getDrivetype())) {
                 MdcDriveTypeParamConfig config1 = mdcDriveTypeParamConfigService.getEnglishName(spindlebeilv,equipment.getDrivetype());
@@ -123,8 +137,6 @@
         if (!magnifications.isEmpty() && magnifications.size() > 0) {
             saveBatch(magnifications);
         }
-        //鏁版嵁淇濆瓨
-        return;
     }
 
     @Override
@@ -329,19 +341,48 @@
         avg.setEquipmentName("骞冲潎鍊�");
         avg.setEquipmentType("骞冲潎鍊�");
         //璁$畻骞冲潎鍊�
-        avg.setMdcBeilvVoList(null);
+        avg.setMdcBeilvVoList(calculateOpenAverage(result.getMdcMagnificationVos()));
         result.getMdcMagnificationVos().add(avg);
+        return result;
+    }
+
+    /**
+     * 璁$畻骞冲潎鍊�
+     *
+     * @param mdcMagnificationVos
+     * @return
+     */
+    private List<MdcEquipmentMagnificationDto> calculateOpenAverage(List<MdcMagnificationEquipmentVo> mdcMagnificationVos) {
+        List<MdcEquipmentMagnificationDto> result = new ArrayList<>();
+        List<MdcEquipmentMagnificationDto> dataList = new ArrayList<>();
+        for (MdcMagnificationEquipmentVo mdcMagnificationEquipmentVo : mdcMagnificationVos) {
+            dataList.addAll(mdcMagnificationEquipmentVo.getMdcBeilvVoList());
+        }
+        dataList.parallelStream().collect(Collectors.groupingBy(MdcEquipmentMagnificationDto::getTheDate, Collectors.toList()))
+                .forEach((theDate, mert) -> {
+                    mert.stream().reduce((a, b) -> new MdcEquipmentMagnificationDto(
+                            a.getTheDate(),
+                            a.getFeedbeilv().add(b.getFeedbeilv()),
+                            a.getSpindlebeilv().add(b.getSpindlebeilv()))).ifPresent(result::add);
+                });
+        for (MdcEquipmentMagnificationDto mdcEquipmentMagnificationDto : result) {
+            mdcEquipmentMagnificationDto.setFeedbeilv(mdcEquipmentMagnificationDto.getFeedbeilv().divide(new BigDecimal(mdcMagnificationVos.size()), 2, RoundingMode.HALF_UP));
+            mdcEquipmentMagnificationDto.setSpindlebeilv(mdcEquipmentMagnificationDto.getSpindlebeilv().divide(new BigDecimal(mdcMagnificationVos.size()), 2, RoundingMode.HALF_UP));
+        }
+        result.sort(Comparator.comparing(MdcEquipmentMagnificationDto::getTheDate));
         return result;
     }
 
     private MdcEquipmentMagnificationDto setDataList(List<MdcEquipmentMagnificationDto> list,String date,String equipmentId,MdcEquipmentMagnificationDto mdcMagnificationDto) {
         MdcEquipmentMagnificationDto result = new MdcEquipmentMagnificationDto();
+        result.setTheDate(date);
         if (list != null && list.size() > 0) {
             for (MdcEquipmentMagnificationDto mdcEquipmentMagnificationDto : list) {
                 if (date.equals(mdcEquipmentMagnificationDto.getTheDate()) && mdcEquipmentMagnificationDto.getEquipmentId().equals(equipmentId)) {
                     result.setEquipmentId(equipmentId);
                     result.setSpindlebeilv(mdcEquipmentMagnificationDto.getSpindlebeilv());
                     result.setFeedbeilv(mdcEquipmentMagnificationDto.getFeedbeilv());
+                    result.setTheDate(date);
                 }
             }
         } else {

--
Gitblit v1.9.3