浏览代码

调整染整重量计算

wukai 4 天之前
父节点
当前提交
c68731b870

+ 1 - 1
jjt-admin/src/test/java/com/jjt/task/YhjTaskTest.java

@@ -56,7 +56,7 @@ public class YhjTaskTest {
 
     @Test
     public void day(){
-        String st = "2025-07-11";
+        String st = "2025-07-13";
         LocalDate localDate = LocalDate.parse(st);
         dayService.day(localDate);
     }

+ 23 - 7
jjt-biz/src/main/java/com/jjt/biz/service/impl/ApiYrServiceImpl.java

@@ -103,24 +103,42 @@ public class ApiYrServiceImpl implements IApiYrService {
         AtomicInteger open = new AtomicInteger();
         //处理印花机运行数据
         List<TwinCalcHourYhj> calcList = redisCache.getCacheObject(CacheConstants.YHJ_TODAY);
-        Map<Integer, Map<String, Integer>> sumByDeviceAndTeam = calcList.stream()
+        Map<Integer, List<TwinCalcHourYhj>> calcListByDevice = calcList.stream()
+                .collect(Collectors.groupingBy(TwinCalcHourYhj::getDeviceId));
+
+        Map<Integer, Map<String, AbstractMap.SimpleEntry<Integer, BigDecimal>>> sumByDeviceAndTeam = calcList.stream()
                 .collect(Collectors.groupingBy(
                         TwinCalcHourYhj::getDeviceId,
                         Collectors.groupingBy(
                                 TwinCalcHourYhj::getTeam,
-                                Collectors.summingInt(TwinCalcHourYhj::getLength)
+                                Collectors.collectingAndThen(
+                                        Collectors.toList(),
+                                        list1 -> {
+                                            int length = list1.stream().mapToInt(TwinCalcHourYhj::getLength).sum();
+                                            BigDecimal weight = list1.stream().map(TwinCalcHourYhj::getWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
+                                            return new AbstractMap.SimpleEntry<>(length, weight);
+                                        }
+                                )
                         )
                 ));
         AtomicInteger openTimes = new AtomicInteger(0);
         sumByDeviceAndTeam.forEach((deviceId, teamMap) -> {
             Pair<Integer, Integer> pair = deviceStatus.get(deviceId);
 
-            Integer lengthA = teamMap.get("A");
-            Integer lengthB = teamMap.get("B");
+            Integer lengthA = teamMap.get("A").getKey();
+            Integer lengthB = teamMap.get("B").getKey();
             if (lengthB == null) {
                 lengthB = 0;
             }
             Integer length = lengthA + lengthB;
+
+            BigDecimal weightA = teamMap.get("A").getValue();
+            BigDecimal weightB = teamMap.get("B").getValue();
+            if (weightB == null) {
+                weightB = BigDecimal.ZERO;
+            }
+            BigDecimal weight = weightA.add(weightB);
+            
             YrProdEfficiencyVO vo = arr[deviceId];
             if (pair != null) {
                 vo.setTotal(pair.getKey());
@@ -143,9 +161,7 @@ public class ApiYrServiceImpl implements IApiYrService {
                 vo.setEffA(BigDecimal.ZERO);
                 vo.setEffB(BigDecimal.ZERO);
             }
-            BigDecimal weightA = BigDecimal.valueOf(lengthA).divide(BigDecimal.valueOf(1000), 2, RoundingMode.HALF_UP);
-            BigDecimal weightB = BigDecimal.valueOf(lengthB).divide(BigDecimal.valueOf(1000), 2, RoundingMode.HALF_UP);
-            BigDecimal weight = BigDecimal.valueOf(length).divide(BigDecimal.valueOf(1000), 2, RoundingMode.HALF_UP);
+
             vo.setLengthA(BigDecimal.valueOf(lengthA));
             vo.setLengthB(BigDecimal.valueOf(lengthB));
             vo.setWeightA(weightA);

+ 0 - 1
jjt-biz/src/main/java/com/jjt/elec/controller/ElecPriceController.java

@@ -104,7 +104,6 @@ public class ElecPriceController extends BaseController {
             end = start.withDayOfMonth(start.lengthOfMonth());
         }
         while (!start.isAfter(end)) {
-            System.err.println(start);
             workshopCalcService.calc(start);
             start = start.plusDays(1);
         }

+ 7 - 6
jjt-biz/src/main/java/com/jjt/ws/service/impl/TwinRzCalcMonthServiceImpl.java

@@ -16,10 +16,7 @@ import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.time.LocalDate;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * 染整月统计Service业务层处理
@@ -145,8 +142,12 @@ public class TwinRzCalcMonthServiceImpl implements ITwinRzCalcMonthService {
         List<TwinCalcDayYhj> yhjList = yhjService.selectTwinCalcDayYhjList(search);
         Integer totalLength = yhjList.stream()
                 .map(TwinCalcDayYhj::getLength)
-                .filter(java.util.Objects::nonNull)
+                .filter(Objects::nonNull)
                 .reduce(0, Integer::sum);
+        BigDecimal totalWeight = yhjList.stream()
+                .map(TwinCalcDayYhj::getWeight)
+                .filter(Objects::nonNull)
+                .reduce(BigDecimal.ZERO, BigDecimal::add);
         TwinRzCalcMonth vo = selectExists(date);
         for (TwinWorkshopCalc calc : calcList) {
             switch (calc.getWsCode()) {
@@ -198,7 +199,7 @@ public class TwinRzCalcMonthServiceImpl implements ITwinRzCalcMonthService {
 //            BigDecimal baseL = BigDecimal.valueOf(120000).multiply(BigDecimal.valueOf(0.95 + (Math.random()) * 0.1));
 //            BigDecimal length = vo.getDPrice().multiply(baseL).divide(baseD, 2, RoundingMode.HALF_UP);
             BigDecimal length = BigDecimal.valueOf(totalLength);
-            BigDecimal weight = length.divide(BigDecimal.valueOf(1000), 2, RoundingMode.HALF_UP);
+            BigDecimal weight = totalWeight;
             vo.setLength(length);
             vo.setWeight(weight);
             BigDecimal lp = vo.getTotalPrice().divide(vo.getLength(), 6, RoundingMode.HALF_UP);