|  | @@ -135,7 +135,7 @@ public class MesLineService extends ServiceImpl<MesLineMapper, MesLine> implemen
 | 
	
		
			
				|  |  |       *
 | 
	
		
			
				|  |  |       * @return
 | 
	
		
			
				|  |  |       */
 | 
	
		
			
				|  |  | -    public R<Map<String, Map<String, Long>>> countDay() {
 | 
	
		
			
				|  |  | +    public R<Map<String, Map<String, Map<String, Object>>>> countDay() {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          //获取当前时间
 | 
	
		
			
				|  |  |          LocalDate now = LocalDate.now();
 | 
	
	
		
			
				|  | @@ -147,35 +147,46 @@ public class MesLineService extends ServiceImpl<MesLineMapper, MesLine> implemen
 | 
	
		
			
				|  |  |          LambdaQueryWrapper<MesLine> wr = new LambdaQueryWrapper<>();
 | 
	
		
			
				|  |  |          wr.between(MesLine::getCreateTime, mondayOfWeek, sundayOfWeek);
 | 
	
		
			
				|  |  |          List<MesLine> boy = mesLineMapper.selectList(wr);
 | 
	
		
			
				|  |  | -        Map<String, Map<String, Long>> map = new LinkedHashMap<>();//格式 key:星期几 value:数量
 | 
	
		
			
				|  |  | +        //格式 key:产线名称 value:星期几 key:产量 value:数量
 | 
	
		
			
				|  |  | +        Map<String, Map<String, Map<String, Object>>> newMap = new LinkedHashMap<>();
 | 
	
		
			
				|  |  |          // 初始化Map中的键,并设置默认值为0
 | 
	
		
			
				|  |  |          for (DayOfWeek dayOfWeek : DayOfWeek.values()) {
 | 
	
		
			
				|  |  |              String dayOfWeekName = dayOfWeek.getDisplayName(TextStyle.FULL, Locale.CHINA);
 | 
	
		
			
				|  |  | -            map.put(dayOfWeekName, new HashMap<>());
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        //判断集合
 | 
	
		
			
				|  |  | -        if (boy != null && !boy.isEmpty()) {
 | 
	
		
			
				|  |  | -            for (MesLine mesLine : boy) {
 | 
	
		
			
				|  |  | -                try {
 | 
	
		
			
				|  |  | -                    //获取星期几
 | 
	
		
			
				|  |  | -                    LocalDate date = mesLine.getCreateTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
 | 
	
		
			
				|  |  | -                    String week = date.getDayOfWeek().getDisplayName(TextStyle.FULL, Locale.CHINA);
 | 
	
		
			
				|  |  | -                    Long count = mesLine.getCurrentQty();//获取产量
 | 
	
		
			
				|  |  | -                    String lineName = mesLine.getLineName();//获取产线名称
 | 
	
		
			
				|  |  | +            if (boy != null && !boy.isEmpty()) {
 | 
	
		
			
				|  |  | +                for (MesLine mesLine : boy) {
 | 
	
		
			
				|  |  | +                    String lineName = mesLine.getLineName();
 | 
	
		
			
				|  |  |                      if (StringUtils.isBlank(lineName)) {
 | 
	
		
			
				|  |  |                          continue;
 | 
	
		
			
				|  |  |                      }
 | 
	
		
			
				|  |  | -                    // 获取内层Map
 | 
	
		
			
				|  |  | -                    Map<String, Long> innerMap = map.get(week);
 | 
	
		
			
				|  |  | -                    // 更新内层Map中的产量
 | 
	
		
			
				|  |  | -                    innerMap.put(lineName, innerMap.getOrDefault(lineName, 0L) + count);
 | 
	
		
			
				|  |  | -                } catch (Exception e) {
 | 
	
		
			
				|  |  | -                    log.warn("数据转换异常", e);
 | 
	
		
			
				|  |  | +                    Map<String, Map<String, Object>> dayMap = newMap.computeIfAbsent(lineName, k -> new LinkedHashMap<>());
 | 
	
		
			
				|  |  | +                    Map<String, Object> statsMap = dayMap.computeIfAbsent(dayOfWeekName, k -> new HashMap<String, Object>() {{
 | 
	
		
			
				|  |  | +                        put("产量", 0L);
 | 
	
		
			
				|  |  | +                    }});
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | +        //遍历集合
 | 
	
		
			
				|  |  | +        if (boy != null && !boy.isEmpty()) {
 | 
	
		
			
				|  |  | +            for (MesLine mesLine : boy) {
 | 
	
		
			
				|  |  | +                // 获取星期几
 | 
	
		
			
				|  |  | +                LocalDate date = mesLine.getCreateTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
 | 
	
		
			
				|  |  | +                String week = date.getDayOfWeek().getDisplayName(TextStyle.FULL, Locale.CHINA);
 | 
	
		
			
				|  |  | +                Long count = mesLine.getCurrentQty(); // 获取产量
 | 
	
		
			
				|  |  | +                String lineName = mesLine.getLineName(); // 获取产线名称
 | 
	
		
			
				|  |  | +                if (StringUtils.isBlank(lineName)) {
 | 
	
		
			
				|  |  | +                    continue;
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                //获取内层
 | 
	
		
			
				|  |  | +                Map<String, Map<String, Object>> dayMap = newMap.get(lineName);
 | 
	
		
			
				|  |  | +                Map<String, Object> statsMap = dayMap.get(week);
 | 
	
		
			
				|  |  | +                // 更新内层Map中的产量
 | 
	
		
			
				|  |  | +                Long totalOutPut = (Long) statsMap.getOrDefault("产量", 0L);
 | 
	
		
			
				|  |  | +                totalOutPut += count;
 | 
	
		
			
				|  |  | +                statsMap.put("产量", totalOutPut);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        return R.ok(map);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        return R.ok(newMap);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -243,7 +254,7 @@ public class MesLineService extends ServiceImpl<MesLineMapper, MesLine> implemen
 | 
	
		
			
				|  |  |       *
 | 
	
		
			
				|  |  |       * @return
 | 
	
		
			
				|  |  |       */
 | 
	
		
			
				|  |  | -    public R<Map<String,Long>> getMonthTotal() {
 | 
	
		
			
				|  |  | +    public R<Map<String, Long>> getMonthTotal() {
 | 
	
		
			
				|  |  |          //获取当前时间
 | 
	
		
			
				|  |  |          LocalDate now = LocalDate.now();
 | 
	
		
			
				|  |  |          //获取本月的开始时间和结束时间
 | 
	
	
		
			
				|  | @@ -255,13 +266,13 @@ public class MesLineService extends ServiceImpl<MesLineMapper, MesLine> implemen
 | 
	
		
			
				|  |  |          List<MesLine> list = mesLineMapper.selectList(wr);
 | 
	
		
			
				|  |  |          // 开始累加本月各产线总产量
 | 
	
		
			
				|  |  |          Map<String, Long> totalByLine = new HashMap<>();
 | 
	
		
			
				|  |  | -        if (list != null && !list.isEmpty()){
 | 
	
		
			
				|  |  | +        if (list != null && !list.isEmpty()) {
 | 
	
		
			
				|  |  |              for (MesLine mesLine : list) {
 | 
	
		
			
				|  |  |                  String lineName = mesLine.getLineName();
 | 
	
		
			
				|  |  |                  Long currentQty = mesLine.getCurrentQty();
 | 
	
		
			
				|  |  | -                if (totalByLine.containsKey(lineName)){
 | 
	
		
			
				|  |  | +                if (totalByLine.containsKey(lineName)) {
 | 
	
		
			
				|  |  |                      totalByLine.put(lineName, totalByLine.get(lineName) + currentQty);
 | 
	
		
			
				|  |  | -                }else {
 | 
	
		
			
				|  |  | +                } else {
 | 
	
		
			
				|  |  |                      totalByLine.put(lineName, currentQty);
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -275,7 +286,7 @@ public class MesLineService extends ServiceImpl<MesLineMapper, MesLine> implemen
 | 
	
		
			
				|  |  |       *
 | 
	
		
			
				|  |  |       * @return
 | 
	
		
			
				|  |  |       */
 | 
	
		
			
				|  |  | -    public R<Map<String, List<Map<String, Map<String, Object>>>>> getPassRate() {
 | 
	
		
			
				|  |  | +    public R< Map<String, Map<String, Map<String, Object>>>> getPassRate() {
 | 
	
		
			
				|  |  |          //获取当前日期
 | 
	
		
			
				|  |  |          LocalDate now = LocalDate.now();
 | 
	
		
			
				|  |  |          //计算本周的星期一
 | 
	
	
		
			
				|  | @@ -286,18 +297,30 @@ public class MesLineService extends ServiceImpl<MesLineMapper, MesLine> implemen
 | 
	
		
			
				|  |  |          LambdaQueryWrapper<MesLine> wr = new LambdaQueryWrapper<>();
 | 
	
		
			
				|  |  |          wr.between(MesLine::getCreateTime, mondayOfWeek, sundayOfWeek);
 | 
	
		
			
				|  |  |          List<MesLine> boy = mesLineMapper.selectList(wr);
 | 
	
		
			
				|  |  | -        //创建Map 用于存储统计结果  星期一:合格率
 | 
	
		
			
				|  |  | -        Map<String, Map<String, Object>> weekMap = new LinkedHashMap<>();
 | 
	
		
			
				|  |  | -        //存储的数据格式 key:产线名称 value:星期几 value:{产量:0,合格数量:0,不合格数量:0,合格率}
 | 
	
		
			
				|  |  | -        Map<String, List<Map<String, Map<String, Object>>>> map = new LinkedHashMap<>();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +        //存储的数据格式 key:产线名称  value:星期几  key:产量,value:数量
 | 
	
		
			
				|  |  | +        Map<String, Map<String, Map<String, Object>>> map = new LinkedHashMap<>();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        //添加星期一-星期日
 | 
	
		
			
				|  |  | -       /* for (DayOfWeek dayOfWeek : DayOfWeek.values()) {
 | 
	
		
			
				|  |  | +        //初始化每周的数据
 | 
	
		
			
				|  |  | +        for (DayOfWeek dayOfWeek : DayOfWeek.values()) {
 | 
	
		
			
				|  |  |              String dayOfWeekName = dayOfWeek.getDisplayName(TextStyle.FULL, Locale.CHINA);
 | 
	
		
			
				|  |  | -            weekMap.put(dayOfWeekName, new HashMap<>());
 | 
	
		
			
				|  |  | +            if (boy != null && !boy.isEmpty()) {
 | 
	
		
			
				|  |  | +                for (MesLine mesLine : boy) {
 | 
	
		
			
				|  |  | +                    //获取产线名称
 | 
	
		
			
				|  |  | +                    String lineName = mesLine.getLineName();
 | 
	
		
			
				|  |  | +                    if (StringUtils.isBlank(lineName)) {
 | 
	
		
			
				|  |  | +                        continue;
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                    Map<String, Map<String, Object>> dayMap = map.computeIfAbsent(lineName, k -> new LinkedHashMap<>());
 | 
	
		
			
				|  |  | +                    dayMap.putIfAbsent(dayOfWeekName, new HashMap<String, Object>() {{
 | 
	
		
			
				|  |  | +                        put("产量", 0L);
 | 
	
		
			
				|  |  | +                        put("不合格数量", 0L);
 | 
	
		
			
				|  |  | +                        put("合格数量", 0L);
 | 
	
		
			
				|  |  | +                        put("合格率", "0.00%");
 | 
	
		
			
				|  |  | +                    }});
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -        //遍历集合,统计每条产线的数据
 | 
	
		
			
				|  |  | +        // 遍历集合,统计每条产线的数据
 | 
	
		
			
				|  |  |          if (boy != null && !boy.isEmpty()) {
 | 
	
		
			
				|  |  |              for (MesLine mesLine : boy) {
 | 
	
		
			
				|  |  |                  // 获取创建日期
 | 
	
	
		
			
				|  | @@ -305,105 +328,38 @@ public class MesLineService extends ServiceImpl<MesLineMapper, MesLine> implemen
 | 
	
		
			
				|  |  |                  if (createTime.isAfter(mondayOfWeek.minusDays(1)) && createTime.isBefore(sundayOfWeek.plusDays(1))) {
 | 
	
		
			
				|  |  |                      DayOfWeek dayOfWeek = createTime.getDayOfWeek();
 | 
	
		
			
				|  |  |                      String dayOfWeekName = dayOfWeek.getDisplayName(TextStyle.FULL, Locale.CHINA);
 | 
	
		
			
				|  |  | -                    Map<String, Object> dayStats = weekMap.get(dayOfWeekName);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +                    String lineName = mesLine.getLineName();
 | 
	
		
			
				|  |  | +                    if (StringUtils.isBlank(lineName)) {
 | 
	
		
			
				|  |  | +                        continue;
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                    Map<String, Map<String, Object>> dayMap = map.get(lineName);
 | 
	
		
			
				|  |  | +                    Map<String, Object> stats = dayMap.get(dayOfWeekName);
 | 
	
		
			
				|  |  |                      // 累加总产量
 | 
	
		
			
				|  |  | -                    Long totalOutput = (Long) dayStats.getOrDefault("产量", 0L);
 | 
	
		
			
				|  |  | +                    Long totalOutput = (Long) stats.getOrDefault("产量", 0L);
 | 
	
		
			
				|  |  |                      Long count = mesLine.getCurrentQty();//产量+不合格数
 | 
	
		
			
				|  |  |                      Long poorQty = mesLine.getPoorQty();//不合格数量
 | 
	
		
			
				|  |  |                      totalOutput += (count + poorQty);
 | 
	
		
			
				|  |  | -                    dayStats.put("产量", totalOutput);
 | 
	
		
			
				|  |  | +                    stats.put("产量", totalOutput);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                      // 累加不合格数量
 | 
	
		
			
				|  |  | -                    Long totalPoorQty = (Long) dayStats.getOrDefault("不合格数量", 0L);
 | 
	
		
			
				|  |  | +                    Long totalPoorQty = (Long) stats.getOrDefault("不合格数量", 0L);
 | 
	
		
			
				|  |  |                      totalPoorQty += mesLine.getPoorQty();
 | 
	
		
			
				|  |  | -                    dayStats.put("不合格数量", totalPoorQty);
 | 
	
		
			
				|  |  | +                    stats.put("不合格数量", totalPoorQty);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                      //计算合格数量
 | 
	
		
			
				|  |  | -                    Long totalQualifiedQty = (Long) dayStats.getOrDefault("合格数量", 0L);
 | 
	
		
			
				|  |  | +                    Long totalQualifiedQty = (Long) stats.getOrDefault("合格数量", 0L);
 | 
	
		
			
				|  |  |                      totalQualifiedQty += count;
 | 
	
		
			
				|  |  | -                    dayStats.put("合格数量", totalQualifiedQty);
 | 
	
		
			
				|  |  | +                    stats.put("合格数量", totalQualifiedQty);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                      // 更新合格率
 | 
	
		
			
				|  |  |                      if (totalOutput > 0) {
 | 
	
		
			
				|  |  |                          double qualificationRate = ((double) totalQualifiedQty / (double) totalOutput) * 100;
 | 
	
		
			
				|  |  | -                        dayStats.put("合格率", String.format(Locale.US, "%.2f%%", qualificationRate));
 | 
	
		
			
				|  |  | +                        stats.put("合格率", String.format(Locale.US, "%.2f%%", qualificationRate));
 | 
	
		
			
				|  |  |                      } else {
 | 
	
		
			
				|  |  | -                        dayStats.put("合格率", "0.00%");
 | 
	
		
			
				|  |  | -                    }
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        return R.ok(weekMap);*/
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        //初始化每周的数据
 | 
	
		
			
				|  |  | -        for (DayOfWeek dayOfWeek : DayOfWeek.values()) {
 | 
	
		
			
				|  |  | -            String dayOfWeekName = dayOfWeek.getDisplayName(TextStyle.FULL, Locale.CHINA);
 | 
	
		
			
				|  |  | -            if (boy != null && !boy.isEmpty()) {
 | 
	
		
			
				|  |  | -                for (MesLine mesLine : boy) {
 | 
	
		
			
				|  |  | -                    //获取产线名称
 | 
	
		
			
				|  |  | -                    String lineName = mesLine.getLineName();
 | 
	
		
			
				|  |  | -                    if (!map.containsKey(lineName)) {
 | 
	
		
			
				|  |  | -                        map.put(lineName, new ArrayList<>());
 | 
	
		
			
				|  |  | -                    }
 | 
	
		
			
				|  |  | -                    //通过key 获取对应的list
 | 
	
		
			
				|  |  | -                    List<Map<String, Map<String, Object>>> mapList = map.get(lineName);
 | 
	
		
			
				|  |  | -                    boolean found = false;
 | 
	
		
			
				|  |  | -                    for (Map<String, Map<String, Object>> dayData : mapList) {
 | 
	
		
			
				|  |  | -                        if (dayData.containsKey(dayOfWeekName)) {
 | 
	
		
			
				|  |  | -                            found = true;
 | 
	
		
			
				|  |  | -                            break;
 | 
	
		
			
				|  |  | -                        }
 | 
	
		
			
				|  |  | -                    }
 | 
	
		
			
				|  |  | -                    if (!found) {
 | 
	
		
			
				|  |  | -                        Map<String, Map<String, Object>> dayData = new HashMap<>();
 | 
	
		
			
				|  |  | -                        dayData.put(dayOfWeekName, new HashMap<>());
 | 
	
		
			
				|  |  | -                        mapList.add(dayData);
 | 
	
		
			
				|  |  | +                        stats.put("合格率", "0.00%");
 | 
	
		
			
				|  |  |                      }
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        // 遍历集合,统计每条产线的数据
 | 
	
		
			
				|  |  | -        if (boy != null && !boy.isEmpty()) {
 | 
	
		
			
				|  |  | -            for (MesLine mesLine : boy) {
 | 
	
		
			
				|  |  | -                // 获取创建日期
 | 
	
		
			
				|  |  | -                LocalDate createTime = mesLine.getCreateTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
 | 
	
		
			
				|  |  | -                if (createTime.isAfter(mondayOfWeek.minusDays(1)) && createTime.isBefore(sundayOfWeek.plusDays(1))) {
 | 
	
		
			
				|  |  | -                    DayOfWeek dayOfWeek = createTime.getDayOfWeek();
 | 
	
		
			
				|  |  | -                    String dayOfWeekName = dayOfWeek.getDisplayName(TextStyle.FULL, Locale.CHINA);
 | 
	
		
			
				|  |  | -                    String lineName = mesLine.getLineName();
 | 
	
		
			
				|  |  | -                    List<Map<String, Map<String, Object>>> lineData = map.get(lineName);
 | 
	
		
			
				|  |  | -                    for (Map<String, Map<String, Object>> dayData : lineData) {
 | 
	
		
			
				|  |  | -                        if (dayData.containsKey(dayOfWeekName)) {
 | 
	
		
			
				|  |  | -                            Map<String, Object> stats = dayData.get(dayOfWeekName);
 | 
	
		
			
				|  |  | -                            // 累加总产量
 | 
	
		
			
				|  |  | -                            Long totalOutput = (Long) stats.getOrDefault("产量", 0L);
 | 
	
		
			
				|  |  | -                            Long count = mesLine.getCurrentQty();//产量+不合格数
 | 
	
		
			
				|  |  | -                            Long poorQty = mesLine.getPoorQty();//不合格数量
 | 
	
		
			
				|  |  | -                            totalOutput += (count + poorQty);
 | 
	
		
			
				|  |  | -                            stats.put("产量", totalOutput);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                            // 累加不合格数量
 | 
	
		
			
				|  |  | -                            Long totalPoorQty = (Long) stats.getOrDefault("不合格数量", 0L);
 | 
	
		
			
				|  |  | -                            totalPoorQty += mesLine.getPoorQty();
 | 
	
		
			
				|  |  | -                            stats.put("不合格数量", totalPoorQty);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                            //计算合格数量
 | 
	
		
			
				|  |  | -                            Long totalQualifiedQty = (Long) stats.getOrDefault("合格数量", 0L);
 | 
	
		
			
				|  |  | -                            totalQualifiedQty += count;
 | 
	
		
			
				|  |  | -                            stats.put("合格数量", totalQualifiedQty);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                            // 更新合格率
 | 
	
		
			
				|  |  | -                            if (totalOutput > 0) {
 | 
	
		
			
				|  |  | -                                double qualificationRate = ((double) totalQualifiedQty / (double) totalOutput) * 100;
 | 
	
		
			
				|  |  | -                                stats.put("合格率", String.format(Locale.US, "%.2f%%", qualificationRate));
 | 
	
		
			
				|  |  | -                            } else {
 | 
	
		
			
				|  |  | -                                stats.put("合格率", "0.00%");
 | 
	
		
			
				|  |  | -                            }
 | 
	
		
			
				|  |  | -                        }
 | 
	
		
			
				|  |  | -                    }
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          }
 |