Преглед на файлове

新增总产量/合格率功能

zhangxin преди 1 месец
родител
ревизия
717edf4b1e

+ 19 - 0
prod-line-imes/src/main/java/com/huaxia/imes/controller/MesLineController.java

@@ -102,4 +102,23 @@ public class MesLineController extends BaseController {
         return mesLineService.queryDay();
     }
 
+
+    /**
+     * 获取本月总产量
+     * @return
+     */
+    @GetMapping("/month_total")
+    public R<Long> getMonthTotal(){
+        return mesLineService.getMonthTotal();
+    }
+
+
+    /**
+     * 获取合格率(星期1-7)
+     * @return
+     */
+    @GetMapping("/pass_rate")
+    public R<Map<String,Map<String,Object>>> getPassRate(){
+        return mesLineService.getPassRate();
+    }
 }

+ 86 - 0
prod-line-imes/src/main/java/com/huaxia/imes/service/MesLineService.java

@@ -219,4 +219,90 @@ public class MesLineService extends ServiceImpl<MesLineMapper, MesLine> implemen
         }
         return R.ok(lineSummary);
     }
+
+    /**
+     * 获取本月总产量
+     *
+     * @return
+     */
+    public R<Long> getMonthTotal() {
+        //获取当前时间
+        LocalDate now = LocalDate.now();
+        //获取本月的开始时间和结束时间
+        LocalDate startOfMonth = now.withDayOfMonth(1);
+        LocalDate endOfMonth = now.withDayOfMonth(now.lengthOfMonth());
+        //按月份查询数据
+        LambdaQueryWrapper<MesLine> wr = new LambdaQueryWrapper<>();
+        wr.between(MesLine::getCreateTime, startOfMonth, endOfMonth);
+        List<MesLine> list = mesLineMapper.selectList(wr);
+        //开始累加本月总产量
+        Long total = 0L;
+        if (list != null && !list.isEmpty()) {
+            for (MesLine mesLine : list) {
+                total += mesLine.getCurrentQty();
+            }
+        }
+        return R.ok(total);
+    }
+
+    /**
+     * 获取合格率 星期1-7
+     *
+     * @return
+     */
+    public R<Map<String, Map<String,Object>>> getPassRate() {
+        //获取当前日期
+        LocalDate now = LocalDate.now();
+        //计算本周的星期一
+        LocalDate mondayOfWeek = now.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
+        // 计算本周的星期天
+        LocalDate sundayOfWeek = now.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY));
+        //获取星期一致星期天的数据
+        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<>();
+        //添加星期一-星期日
+        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) {
+                // 获取创建日期
+                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);
+                    Map<String, Object> dayStats = weekMap.get(dayOfWeekName);
+
+                    // 累加总产量
+                    Long totalOutput = (Long) dayStats.getOrDefault("产量", 0L);
+                    totalOutput += mesLine.getCurrentQty();
+                    dayStats.put("产量", totalOutput);
+
+                    // 累加不合格数量
+                    Long totalPoorQty = (Long) dayStats.getOrDefault("不合格数", 0L);
+                    totalPoorQty += mesLine.getPoorQty();
+                    dayStats.put("不合格数", totalPoorQty);
+
+                    // 计算合格数量
+                    Long totalQualifiedQty = totalOutput - totalPoorQty;
+                    dayStats.put("合格数", totalQualifiedQty);
+
+                    // 更新合格率
+                    if (totalOutput > 0) {
+                        double qualificationRate = ((double) totalQualifiedQty / (double) totalOutput) * 100;
+                        dayStats.put("合格率", String.format(Locale.US, "%.2f%%", qualificationRate));
+                    } else {
+                        dayStats.put("合格率", "0.00%");
+                    }
+                }
+            }
+
+        }
+        return R.ok(weekMap);
+    }
 }