From 2ed500595e8e56431d9ddefb19c30a566f416e55 Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期四, 02 四月 2026 15:42:44 +0800
Subject: [PATCH] fix: 首页趋势换成周、月、年

---
 src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java |   81 ++++++++++++++++++++++++++++++++++++++++
 1 files changed, 81 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java b/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
index 1df045f..996cd1c 100644
--- a/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
+++ b/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
@@ -36,6 +36,8 @@
 import com.ruoyi.productionPlan.enums.AddressRegionEnum;
 import com.ruoyi.productionPlan.mapper.SalesDeliveryMapper;
 import com.ruoyi.productionPlan.pojo.SalesDelivery;
+import com.ruoyi.productionPlan.pojo.ProductionPlan;
+import com.ruoyi.productionPlan.service.ProductionPlanService;
 import com.ruoyi.project.system.domain.SysDept;
 import com.ruoyi.project.system.domain.SysDictData;
 import com.ruoyi.project.system.mapper.SysDeptMapper;
@@ -3621,4 +3623,83 @@
         map.put("materialInspection", materialInspection);
         return map;
     }
+
+    @Autowired
+    private ProductionPlanService productionPlanService;
+
+    @Override
+    public List<PlanTrendsDto> planTrends(Integer type) {
+        LocalDate now = LocalDate.now();
+        LocalDate startDate;
+        DateTimeFormatter formatter;
+        int points;
+
+        if (type == null) type = 1;
+
+        if (type == 1) { // 鍛�
+            startDate = now.with(DayOfWeek.MONDAY);
+            points = (int) ChronoUnit.DAYS.between(startDate, now) + 1;
+            formatter = DateTimeFormatter.ofPattern("MM-dd");
+        } else if (type == 2) { // 鏈�
+            startDate = now.with(TemporalAdjusters.firstDayOfMonth());
+            points = now.getDayOfMonth();
+            formatter = DateTimeFormatter.ofPattern("MM-dd");
+        } else { // 骞�
+            startDate = now.with(TemporalAdjusters.firstDayOfYear());
+            points = now.getMonthValue();
+            formatter = DateTimeFormatter.ofPattern("yyyy-MM");
+        }
+
+        Map<String, PlanTrendsDto> resultMap = new LinkedHashMap<>();
+        for (int i = 0; i < points; i++) {
+            String label = (type == 3) 
+                ? startDate.plusMonths(i).format(formatter) 
+                : startDate.plusDays(i).format(formatter);
+            PlanTrendsDto dto = new PlanTrendsDto();
+            dto.setDateStr(label);
+            dto.setPlannedVolume(BigDecimal.ZERO);
+            dto.setLowerVolume(BigDecimal.ZERO);
+            dto.setCompletionVolume(BigDecimal.ZERO);
+            resultMap.put(label, dto);
+        }
+        //  缁熻璁″垝閲�   
+        List<ProductionPlan> plans = productionPlanService.list(Wrappers.<ProductionPlan>lambdaQuery()
+                .ge(ProductionPlan::getStartDate, Date.from(startDate.atStartOfDay(ZoneId.systemDefault()).toInstant())));
+        for (ProductionPlan plan : plans) {
+            if (plan.getStartDate() == null || plan.getVolume() == null) continue;
+            LocalDate d = plan.getStartDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
+            String label = d.format(formatter);
+            if (resultMap.containsKey(label)) {
+                PlanTrendsDto dto = resultMap.get(label);
+                dto.setPlannedVolume(dto.getPlannedVolume().add(plan.getVolume()));
+            }
+        }
+        //  缁熻涓嬪彂閲�
+        List<ProductOrder> orders = productOrderMapper.selectList(Wrappers.<ProductOrder>lambdaQuery()
+                .ge(ProductOrder::getStartTime, startDate.atStartOfDay()));
+        for (ProductOrder order : orders) {
+            if (order.getStartTime() == null || order.getQuantity() == null) continue;
+            LocalDate d = order.getStartTime().toLocalDate();
+            String label = d.format(formatter);
+            if (resultMap.containsKey(label)) {
+                PlanTrendsDto dto = resultMap.get(label);
+                dto.setLowerVolume(dto.getLowerVolume().add(order.getQuantity()));
+            }
+        }
+        //  缁熻瀹屾垚閲�
+        List<ProductionProductOutput> outputs = productionProductOutputMapper.selectList(Wrappers.<ProductionProductOutput>lambdaQuery()
+                .ge(ProductionProductOutput::getCreateTime, startDate.atStartOfDay()));
+        for (ProductionProductOutput output : outputs) {
+            if (output.getCreateTime() == null || output.getQuantity() == null) continue;
+            LocalDate d = output.getCreateTime().toLocalDate();
+            String label = d.format(formatter);
+            if (resultMap.containsKey(label)) {
+                PlanTrendsDto dto = resultMap.get(label);
+                dto.setCompletionVolume(dto.getCompletionVolume().add(output.getQuantity()));
+            }
+        }
+
+        return new ArrayList<>(resultMap.values());
+    }
+
 }

--
Gitblit v1.9.3