From 43f0633906b9cadcfa2376494a9ee86e062a6f43 Mon Sep 17 00:00:00 2001
From: maven <2163098428@qq.com>
Date: 星期一, 16 三月 2026 11:40:48 +0800
Subject: [PATCH] yys  更新首页接口

---
 src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java |  174 ++++++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 152 insertions(+), 22 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 7e96c10..6b75167 100644
--- a/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
+++ b/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
@@ -32,11 +32,7 @@
 import com.ruoyi.procurementrecord.utils.StockUtils;
 import com.ruoyi.production.dto.ProductOrderDto;
 import com.ruoyi.production.dto.ProductWorkOrderDto;
-import com.ruoyi.production.mapper.ProductOrderMapper;
-import com.ruoyi.production.mapper.ProductWorkOrderMapper;
-import com.ruoyi.production.mapper.ProductionProductInputMapper;
-import com.ruoyi.production.mapper.ProductionProductOutputMapper;
-import com.ruoyi.production.mapper.SalesLedgerProductionAccountingMapper;
+import com.ruoyi.production.mapper.*;
 import com.ruoyi.production.pojo.ProductWorkOrder;
 import com.ruoyi.project.system.domain.SysDept;
 import com.ruoyi.project.system.domain.SysUser;
@@ -143,6 +139,9 @@
 
     @Autowired
     private QualityUnqualifiedMapper qualityUnqualifiedMapper;
+
+    @Autowired
+    private ProductProcessMapper productProcessMapper;
 
     @Override
     public HomeBusinessDto business() {
@@ -1729,8 +1728,7 @@
                     BigDecimal finishQty = item.getQuantity() != null ? item.getQuantity() : BigDecimal.ZERO;
                     BigDecimal scrapQty = item.getScrapQty() != null ? item.getScrapQty() : BigDecimal.ZERO;
 
-                    dto.setFinishQuantity(
-                            dto.getFinishQuantity() != null ? dto.getFinishQuantity().add(finishQty) : finishQty);
+                    dto.setFinishQuantity(dto.getFinishQuantity() != null ? dto.getFinishQuantity().add(finishQty) : finishQty);
                 }
             }
 
@@ -1746,9 +1744,11 @@
                     .filter(i -> i.getCreateTime() != null)
                     .collect(Collectors.groupingBy(
                             i -> i.getCreateTime().toLocalDate().toString(),
-                            Collectors.reducing(BigDecimal.ZERO,
-                                    i -> i.getQuantity() != null ? i.getQuantity() : BigDecimal.ZERO,
-                                    BigDecimal::add)));
+                            Collectors.reducing(BigDecimal.ZERO, i -> {
+                                BigDecimal qty = (i.getQuantity() != null) ? i.getQuantity() : BigDecimal.ZERO;
+                                BigDecimal scrap = (i.getScrapQty() != null) ? i.getScrapQty() : BigDecimal.ZERO;
+                                return qty.subtract(scrap);
+                            }, BigDecimal::add)));
 
             finishMap.forEach((date, qty) -> {
                 WorkOrderEfficiencyDto dto = dateMap.getOrDefault(date, new WorkOrderEfficiencyDto());
@@ -1894,21 +1894,21 @@
 
 
     @Override
-    public List<QualityQualifiedAnalysisDto> rawMaterialDetection(Integer type) {
+    public QualityQualifiedAnalysisDto rawMaterialDetection(Integer type) {
         return commonDetection(type, 0);
     }
 
     @Override
-    public List<QualityQualifiedAnalysisDto> processDetection(Integer type) {
+    public QualityQualifiedAnalysisDto processDetection(Integer type) {
         return commonDetection(type, 1);
     }
 
     @Override
-    public List<QualityQualifiedAnalysisDto> factoryDetection(Integer type) {
+    public QualityQualifiedAnalysisDto factoryDetection(Integer type) {
         return commonDetection(type, 2);
     }
 
-    private List<QualityQualifiedAnalysisDto> commonDetection(Integer type, Integer inspectType) {
+    private QualityQualifiedAnalysisDto commonDetection(Integer type, Integer inspectType) {
 
         LocalDate[] range = calcDateRange(type);
         LocalDate startDate = range[0];
@@ -1958,7 +1958,7 @@
         return new LocalDate[]{startDate, endDate};
     }
 
-    private List<QualityQualifiedAnalysisDto> buildQualifiedAnalysis(List<QualityInspect> list) {
+    private QualityQualifiedAnalysisDto buildQualifiedAnalysis(List<QualityInspect> list) {
         List<QualityQualifiedAnalysisDto> result = new ArrayList<>();
         QualityQualifiedAnalysisDto dto = new QualityQualifiedAnalysisDto();
 
@@ -1967,8 +1967,7 @@
             dto.setUnqualifiedCount(0);
             dto.setQualifiedRate(BigDecimal.ZERO.setScale(2));
             dto.setUnqualifiedRate(BigDecimal.ZERO.setScale(2));
-            result.add(dto);
-            return result;
+            return dto;
         }
 
         BigDecimal qualifiedCount = BigDecimal.ZERO;
@@ -1990,8 +1989,7 @@
         if (totalCount.compareTo(BigDecimal.ZERO) == 0) {
             dto.setQualifiedRate(BigDecimal.ZERO.setScale(2));
             dto.setUnqualifiedRate(BigDecimal.ZERO.setScale(2));
-            result.add(dto);
-            return result;
+            return dto;
         }
 
         BigDecimal hundred = BigDecimal.valueOf(100);
@@ -2004,8 +2002,7 @@
                 .multiply(hundred)
                 .setScale(2, RoundingMode.HALF_UP));
 
-        result.add(dto);
-        return result;
+        return dto;
     }
 
     @Override
@@ -2173,7 +2170,8 @@
             // 缁勮鏄庣粏
             NonComplianceWarningDto.Item child = new NonComplianceWarningDto.Item();
             // child.setProductTitle(item.getProductName());
-            child.setProductTitle(parent.getProductName());
+            child.setParentProductTitle(parent.getProductName());
+            child.setProductTitle(item.getProductName());
             child.setDescription(item.getDefectivePhenomena());
             child.setDate(formatDate(item.getCheckTime()));
             children.add(child);
@@ -2412,4 +2410,136 @@
         return result;
     }
 
+    @Override
+    public QualityStatisticsDto qualityInspectionStatistics(Integer type) {
+        LocalDate today = LocalDate.now();
+        LocalDate startDate;
+        LocalDate endDate;
+
+        switch (type) {
+            case 1: // 鏈懆
+                startDate = today.with(DayOfWeek.MONDAY);
+                endDate = today.with(DayOfWeek.SUNDAY);
+                break;
+            case 2: // 鏈湀
+                startDate = today.with(TemporalAdjusters.firstDayOfMonth());
+                endDate = today.with(TemporalAdjusters.lastDayOfMonth());
+                break;
+            case 3: // 鏈搴�
+                int currentMonth = today.getMonthValue();
+                int startMonth = ((currentMonth - 1) / 3) * 3 + 1;
+                startDate = LocalDate.of(today.getYear(), startMonth, 1);
+                endDate = startDate.plusMonths(2).with(TemporalAdjusters.lastDayOfMonth());
+                break;
+            default:
+                startDate = today.with(DayOfWeek.MONDAY);
+                endDate = today.with(DayOfWeek.SUNDAY);
+        }
+
+        List<QualityInspect> qualityInspectList = qualityInspectMapper
+                .selectList(new LambdaQueryWrapper<QualityInspect>()
+                        .ge(QualityInspect::getCheckTime, startDate)
+                        .le(QualityInspect::getCheckTime, endDate)
+                        .eq(QualityInspect::getInspectState, 1));
+
+        QualityStatisticsDto dto = new QualityStatisticsDto();
+        dto.setSupplierNum(sumQuantity(qualityInspectList, 0)); // 鍘熸潗鏂�
+        dto.setProcessNum(sumQuantity(qualityInspectList, 1)); // 杩囩▼
+        dto.setFactoryNum(sumQuantity(qualityInspectList, 2)); // 鍑哄巶
+
+        // 4. 澶勭悊鍥捐〃椤� (Item)
+        List<QualityStatisticsItem> itemList = new ArrayList<>();
+
+        Map<QualityInspect, LocalDate> dateMap = qualityInspectList.stream()
+                .collect(Collectors.toMap(
+                        i -> i,
+                        i -> i.getCheckTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate()));
+        if (type == 3) {
+            // 瀛e害妯″紡锛氭寜鏈堝垎缁�
+            Map<String, List<QualityInspect>> groupByMonth = qualityInspectList.stream()
+                    .collect(Collectors.groupingBy(i -> {
+                        LocalDate ld = dateMap.get(i);
+                        return ld.format(DateTimeFormatter.ofPattern("yyyy-MM"));
+                    }));
+
+            for (int i = 0; i < 3; i++) {
+                LocalDate monthDate = startDate.plusMonths(i);
+                String monthStr = monthDate.format(DateTimeFormatter.ofPattern("yyyy-MM"));
+                itemList.add(buildItem(monthStr, groupByMonth.getOrDefault(monthStr, new ArrayList<>())));
+            }
+        } else {
+            // 鍛ㄦ垨鏈堟ā寮忥細鎸夊ぉ鍒嗙粍
+            Map<String, List<QualityInspect>> groupByDay = qualityInspectList.stream()
+                    .collect(Collectors.groupingBy(i -> {
+                        LocalDate ld = dateMap.get(i);
+                        return ld.format(DateTimeFormatter.ofPattern("MM/dd"));
+                    }));
+            long days = ChronoUnit.DAYS.between(startDate, endDate);
+            for (int i = 0; i <= days; i++) {
+                LocalDate tempDay = startDate.plusDays(i);
+                String dayStr = tempDay.format(DateTimeFormatter.ofPattern("MM/dd"));
+                itemList.add(buildItem(dayStr, groupByDay.getOrDefault(dayStr, new ArrayList<>())));
+            }
+        }
+
+        dto.setItem(itemList);
+        return dto;
+    }
+
+    private BigDecimal sumQuantity(List<QualityInspect> list, Integer type) {
+        return list.stream()
+                .filter(i -> i.getInspectType().equals(type))
+                .map(QualityInspect::getQuantity)
+                .filter(Objects::nonNull)
+                .reduce(BigDecimal.ZERO, BigDecimal::add);
+    }
+
+    private QualityStatisticsItem buildItem(String dateLabel, List<QualityInspect> list) {
+        QualityStatisticsItem item = new QualityStatisticsItem();
+        item.setDate(dateLabel);
+
+        item.setSupplierNum(list.stream().filter(i -> i.getInspectType() == 0).map(QualityInspect::getQuantity)
+                .reduce(BigDecimal.ZERO, BigDecimal::add));
+        item.setProcessNum(list.stream().filter(i -> i.getInspectType() == 1).map(QualityInspect::getQuantity)
+                .reduce(BigDecimal.ZERO, BigDecimal::add));
+        item.setFactoryNum(list.stream().filter(i -> i.getInspectType() == 2).map(QualityInspect::getQuantity)
+                .reduce(BigDecimal.ZERO, BigDecimal::add));
+
+        return item;
+    }
+
+    @Override
+    public List<processDataProductionStatisticsDto> processDataProductionStatistics(Integer type,
+                                                                                    List<Long> processIds) {
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        Long userId = SecurityUtils.isAdmin(loginUser.getUserId()) ? null : loginUser.getUserId();
+
+        LocalDate today = LocalDate.now();
+        LocalDate startDate;
+        LocalDate endDate;
+
+        switch (type) {
+            case 1:
+                startDate = today;
+                endDate = today;
+                break;
+            case 2:
+                startDate = today.with(DayOfWeek.MONDAY);
+                endDate = today.with(DayOfWeek.SUNDAY);
+                break;
+            case 3:
+                startDate = today.with(TemporalAdjusters.firstDayOfMonth());
+                endDate = today.with(TemporalAdjusters.lastDayOfMonth());
+                break;
+            default:
+                startDate = today;
+                endDate = today;
+        }
+
+        LocalDateTime startDateTime = startDate.atStartOfDay();
+        LocalDateTime endDateTime = endDate.atTime(LocalTime.MAX);
+
+        return productProcessMapper.calculateProductionStatistics(startDateTime, endDateTime, userId, processIds);
+    }
+
 }
\ No newline at end of file

--
Gitblit v1.9.3