From e206ea8f7dbb655c0d8868996dae8ff1ff5ed11a Mon Sep 17 00:00:00 2001
From: huang <1532065656@qq.com>
Date: 星期四, 12 六月 2025 16:41:19 +0800
Subject: [PATCH] 修改看板大屏,动态获取数据

---
 JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/md/service/impl/TaskingLogServiceImpl.java |  338 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 335 insertions(+), 3 deletions(-)

diff --git a/JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/md/service/impl/TaskingLogServiceImpl.java b/JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/md/service/impl/TaskingLogServiceImpl.java
index 8e2fedc..6a8b100 100644
--- a/JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/md/service/impl/TaskingLogServiceImpl.java
+++ b/JiuMuMesParent/moduleService/DeviceInteractionModule/src/main/java/com/mes/md/service/impl/TaskingLogServiceImpl.java
@@ -3,8 +3,10 @@
 import cn.smallbun.screw.core.util.CollectionUtils;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.github.yulichang.base.MPJBaseServiceImpl;
+import com.mes.md.entity.KBBTJPDrawingBP;
 import com.mes.md.entity.KBBTProgramsOperationLogBP;
 import com.mes.md.entity.TaskingLog;
+import com.mes.md.mapper.KBBTJPDrawingBPMapper;
 import com.mes.md.mapper.KBBTProgramsOperationLogBPMapper;
 import com.mes.md.mapper.TaskingLogMapper;
 import com.mes.md.service.TaskingLogService;
@@ -12,9 +14,8 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
+import java.text.SimpleDateFormat;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -31,11 +32,191 @@
 
     @Autowired
     KBBTProgramsOperationLogBPMapper kBBTProgramsOperationLogBPMapper;
+    @Autowired
+    KBBTJPDrawingBPMapper kBBTJPDrawingBPMapper;
+
+    @Override
+    public List<Map> selectMechanicalReport(int dayCount, Date startDate, Date endDate, String taskType, String operationRecord, String lineType) {
+        try {
+            // 鏋勫缓鏌ヨ鏉′欢
+            QueryWrapper<TaskingLog> taskingWrapper = new QueryWrapper<>();
+
+            // 娣诲姞瀹屽伐鐘舵�佽繃婊�
+            taskingWrapper.eq("work_state", "瀹屽伐");
+
+            // 鏃堕棿鑼冨洿澶勭悊
+            if (startDate != null && endDate != null) {
+                taskingWrapper.ge("operation_record_time", startDate)
+                        .le("operation_record_time", endDate);
+            } else if (dayCount > 0) {
+                // 濡傛灉娌℃湁鏃堕棿鑼冨洿锛屼娇鐢ㄩ粯璁ょ殑dayCount
+                Calendar cal = Calendar.getInstance();
+                cal.setTime(new Date());
+                cal.set(Calendar.HOUR_OF_DAY, 0);
+                cal.set(Calendar.MINUTE, 0);
+                cal.set(Calendar.SECOND, 0);
+                cal.set(Calendar.MILLISECOND, 0);
+                cal.add(Calendar.DATE, 1 - dayCount);
+                Date defaultStartDate = cal.getTime();
+                Date defaultEndDate = new Date();
+                
+                taskingWrapper.ge("operation_record_time", defaultStartDate)
+                        .le("operation_record_time", defaultEndDate);
+            }
+
+            // 娣诲姞鍙�夋潯浠�
+            if (taskType != null && !taskType.isEmpty()) {
+                taskingWrapper.eq("task_type", taskType);
+            }
+            if (operationRecord != null && !operationRecord.isEmpty()) {
+                taskingWrapper.like("operation_record", operationRecord);
+            }
+            if (lineType != null && !lineType.isEmpty()) {
+                taskingWrapper.apply("operation_record REGEXP '.*[^0-9]" + lineType + "$'");
+            }
+            
+            // 鎸夋椂闂存帓搴忥紙闄嶅簭)
+            //taskingWrapper.orderByDesc("operation_record_time");
+            //(鍗囧簭)
+            taskingWrapper.orderByAsc("operation_record_time");
+            // 鍏堟寜sortOrder鎺掑簭锛屽啀鎸夋椂闂存帓搴�
+            //taskingWrapper.orderByAsc("sort_order", "operation_record_time");
+            
+            // 鎵ц鏌ヨ
+            List<Map<String, Object>> taskingList = baseMapper.selectMaps(taskingWrapper);
+
+            // 鐩存帴杩斿洖鏌ヨ缁撴灉
+            return new ArrayList<>(taskingList);
+        } catch (Exception e) {
+            log.error("鏌ヨ寮傚父", e);
+            throw e;
+        }
+    }
 
     public List<TaskingLog> findTaskingLog(){
         return new ArrayList<TaskingLog>();
     }
 
+    /**
+     * 鏌ヨ dayCount 澶�  瀹屽伐鏁伴噺-鍒嗙嚎璺�
+     */
+    @Override
+    public List<Map> selectTaskingLog(int dayCount) {
+        Calendar cal = Calendar.getInstance();
+        //璁剧疆褰撳墠鏃堕棿
+        cal.setTime(new Date());
+        cal.set(Calendar.HOUR_OF_DAY, 0);
+        cal.set(Calendar.MINUTE, 0);
+        cal.set(Calendar.SECOND, 0);
+        cal.set(Calendar.MILLISECOND, 0);
+        cal.add(Calendar.DATE, 1-dayCount);
+        Date startDate = cal.getTime();
+
+        QueryWrapper<KBBTJPDrawingBP> queryWrapper = new QueryWrapper<>();
+        queryWrapper.select("CAST(PlanDate AS DATE) AS CreateDate,isNull(sum(task_quantity),0) as task_quantity_sum")
+                .gt("PlanDate",startDate).groupBy("CAST(PlanDate AS DATE)")
+                .orderByAsc("CAST(PlanDate AS DATE)");
+        List<Map> list=kBBTJPDrawingBPMapper.selectMaps((QueryWrapper)queryWrapper);
+
+        List<Map<String, Object>> listTasking1 = baseMapper.selectMaps(new QueryWrapper<TaskingLog>()
+                .select("task_type, operation_record, operation_mode, DATE_FORMAT(operation_record_time, '%Y-%m-%d') as operation_record_time, count(*) as count")
+                .eq("operation_record", "鏃嬭浆1")
+                .eq("operation_mode", "缁撴潫")
+                .gt("operation_record_time", startDate)
+                .groupBy("task_type", "operation_record", "operation_mode", "DATE_FORMAT(operation_record_time, '%Y-%m-%d')")
+                .orderByAsc("DATE_FORMAT(operation_record_time, '%Y-%m-%d')"));
+        List<Map<String, Object>> listTasking2 = baseMapper.selectMaps(new QueryWrapper<TaskingLog>()
+                .select("task_type,operation_record,operation_mode,DATE_FORMAT(operation_record_time, '%Y-%m-%d') as operation_record_time,count(1) as count")
+                .eq("operation_record", "鏃嬭浆2")
+                .eq("operation_mode", "缁撴潫")
+                .gt("operation_record_time", startDate)
+                .groupBy("task_type", "operation_record", "operation_mode", "DATE_FORMAT(operation_record_time, '%Y-%m-%d')")
+                .orderByAsc("DATE_FORMAT(operation_record_time, '%Y-%m-%d')"));
+
+        //鏍囧噯涓婄墖璁板綍
+        List<Map<String, Object>> loadTaskingList1 = baseMapper.selectMaps(new QueryWrapper<TaskingLog>()
+                .select("task_type, operation_record, operation_mode, DATE_FORMAT(operation_record_time, '%Y-%m-%d') as operation_record_time, count(*) as count")
+                .eq("task_type", "鏍囧噯")
+                .eq("operation_record", "涓婄墖1")
+                .eq("operation_mode", "缁撴潫")
+                .gt("operation_record_time", startDate)
+                .groupBy("task_type", "operation_record", "operation_mode", "DATE_FORMAT(operation_record_time, '%Y-%m-%d')")
+                .orderByAsc("DATE_FORMAT(operation_record_time, '%Y-%m-%d')"));
+        List<Map<String, Object>> loadTaskingList2 = baseMapper.selectMaps(new QueryWrapper<TaskingLog>()
+                .select("task_type, operation_record, operation_mode, DATE_FORMAT(operation_record_time, '%Y-%m-%d') as operation_record_time, count(*) as count")
+                .eq("task_type", "鏍囧噯")
+                .eq("operation_record", "涓婄墖2")
+                .eq("operation_mode", "缁撴潫")
+                .gt("operation_record_time", startDate)
+                .groupBy("task_type", "operation_record", "operation_mode", "DATE_FORMAT(operation_record_time, '%Y-%m-%d')")
+                .orderByAsc("DATE_FORMAT(operation_record_time, '%Y-%m-%d')"));
+
+        // 瀛樺偍姣忔潯绾胯矾鐨勬暟鎹�
+        Map<String, Map<String, Integer>> lineDataMap = new HashMap<>();
+        lineDataMap.put("line1", new HashMap<>());
+        lineDataMap.put("line2", new HashMap<>());
+
+        // 澶勭悊绗竴鏉$嚎璺暟鎹�
+        // 澶勭悊鏃嬭浆1缁撴潫璁板綍
+        for (Map<String, Object> map : listTasking1) {
+            String date = map.get("operation_record_time").toString();
+            int count = Integer.parseInt(map.get("count").toString());
+            Map<String, Integer> line1Map = lineDataMap.get("line1");
+            line1Map.put(date, line1Map.getOrDefault(date, 0) + count);
+        }
+        // 澶勭悊绾胯矾1涓婄墖璁板綍
+        for (Map<String, Object> map : loadTaskingList1) {
+            String date = map.get("operation_record_time").toString();
+            int count = Integer.parseInt(map.get("count").toString());
+            Map<String, Integer> line1Map = lineDataMap.get("line1");
+            line1Map.put(date, line1Map.getOrDefault(date, 0) + count);
+        }
+
+        // 澶勭悊绗簩鏉$嚎璺暟鎹�
+        // 澶勭悊鏃嬭浆2缁撴潫璁板綍
+        for (Map<String, Object> map : listTasking2) {
+            String date = map.get("operation_record_time").toString();
+            int count = Integer.parseInt(map.get("count").toString());
+            Map<String, Integer> line2Map = lineDataMap.get("line2");
+            line2Map.put(date, line2Map.getOrDefault(date, 0) + count);
+        }
+        // 澶勭悊绾胯矾2涓婄墖璁板綍
+        for (Map<String, Object> map : loadTaskingList2) {
+            String date = map.get("operation_record_time").toString();
+            int count = Integer.parseInt(map.get("count").toString());
+            Map<String, Integer> line2Map = lineDataMap.get("line2");
+            line2Map.put(date, line2Map.getOrDefault(date, 0) + count);
+        }
+
+
+        //log.info("瀹㈡埛琛ㄨ鍒掗噺锛歿},{},{}",list,listTasking1,listTasking2);
+        List<Map> Result=new ArrayList<>();
+        for (int i=0;i<dayCount;i++){
+            Date thisdate=cal.getTime();
+            cal.add(Calendar.DATE, 1);
+            Map thisMap=new HashMap<>();
+
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+            String dateString = sdf.format(thisdate);
+            thisMap.put("date",dateString);
+            
+            // 鑾峰彇涓�绾挎暟鎹�
+            thisMap.put("line1", lineDataMap.get("line1").getOrDefault(dateString, 0));
+            
+            // 鑾峰彇浜岀嚎鏁版嵁
+            thisMap.put("line2", lineDataMap.get("line2").getOrDefault(dateString, 0));
+
+            if (list.size()>0 && list.get(0).get("CreateDate").toString().equals(dateString)){
+                thisMap.put("plan",list.get(0).get("task_quantity_sum"));
+                list.remove(0);
+            }else{
+                thisMap.put("plan",0);
+            }
+            Result.add(thisMap);
+        }
+
+        return Result;
+    }
     /**
      * 鍥炰紶鎶ュ伐鏁版嵁+ 璁惧鐜荤拑杩囩墖璁板綍缁� 涔濈墽
      */
@@ -60,6 +241,7 @@
                 newData.setScanId(item.getScanId());
                 newData.setProgramId(item.getProgramId());
                 newData.setBatchNumber(item.getBatchNumber() == null ? "" : item.getBatchNumber());
+                newData.setLineConfigurationId(item.getLineConfigurationId());
                 newData.setTaskType(item.getTaskType());
                 newData.setLength(item.getLength());
                 newData.setWidth(item.getWidth());
@@ -77,6 +259,10 @@
                 newData.setR_3_2(item.getR_3_2());
                 newData.setR_4_1(item.getR_4_1());
                 newData.setR_4_2(item.getR_4_2());
+                newData.setSilkScreenY(item.getSilkScreenY());
+                newData.setOperationRecord(item.getOperationRecord());
+                newData.setOperationMode(item.getOperationMode());
+                newData.setOperationRecordTime(item.getOperationRecordTime());
                 newData.setCreateDate(new Date());
                 kBBTProgramsOperationLogBPMapper.insert(newData);
                 return newData;
@@ -90,4 +276,150 @@
         }
         return 0;
     }
+
+
+    /**
+     * 鏌ヨ鍗曞皬鏃朵骇閲�
+     * @param dayCount 鏌ヨ澶╂暟
+     * @return Map 鍖呭惈姣忓ぉ涓ゆ潯绾跨殑骞冲潎灏忔椂浜ч噺
+     */
+    @Override
+    public Map<String, Object> findHourlyOutput(int dayCount) {
+        try {
+            // 璁$畻寮�濮嬫椂闂�
+            Calendar cal = Calendar.getInstance();
+            cal.setTime(new Date());
+            cal.set(Calendar.HOUR_OF_DAY, 0);
+            cal.set(Calendar.MINUTE, 0);
+            cal.set(Calendar.SECOND, 0);
+            cal.set(Calendar.MILLISECOND, 0);
+            cal.add(Calendar.DATE, -dayCount + 1);
+            Date startDate = cal.getTime();
+
+            // 鏌ヨ涓�绾挎暟鎹紝鎸夊ぉ鍒嗙粍缁熻鎬讳骇閲忓拰宸ヤ綔灏忔椂鏁�
+            QueryWrapper<TaskingLog> line1Query = new QueryWrapper<>();
+            line1Query.select(
+                    "DATE_FORMAT(operation_record_time, '%Y-%m-%d') as date",
+                    "COUNT(*) as total_count",
+                    "COUNT(DISTINCT DATE_FORMAT(operation_record_time, '%H')) as working_hours"
+                )
+                .eq("operation_record", "鏃嬭浆1")
+                .eq("operation_mode", "缁撴潫")
+                .ge("operation_record_time", startDate)
+                .groupBy("DATE_FORMAT(operation_record_time, '%Y-%m-%d')")
+                .orderByAsc("date");
+            List<Map<String, Object>> line1Results = baseMapper.selectMaps(line1Query);
+
+            // 鏌ヨ浜岀嚎鏁版嵁锛屾寜澶╁垎缁勭粺璁℃�讳骇閲忓拰宸ヤ綔灏忔椂鏁�
+            QueryWrapper<TaskingLog> line2Query = new QueryWrapper<>();
+            line2Query.select(
+                    "DATE_FORMAT(operation_record_time, '%Y-%m-%d') as date",
+                    "COUNT(*) as total_count",
+                    "COUNT(DISTINCT DATE_FORMAT(operation_record_time, '%H')) as working_hours"
+                )
+                .eq("operation_record", "鏃嬭浆2")
+                .eq("operation_mode", "缁撴潫")
+                .ge("operation_record_time", startDate)
+                .groupBy("DATE_FORMAT(operation_record_time, '%Y-%m-%d')")
+                .orderByAsc("date");
+            List<Map<String, Object>> line2Results = baseMapper.selectMaps(line2Query);
+
+            // 鍚堝苟缁撴灉
+            Map<String, Object> result = new HashMap<>();
+            Map<String, Map<String, Object>> dailyStats = new HashMap<>();
+
+            // 澶勭悊涓�绾挎暟鎹�
+            for (Map<String, Object> line1Data : line1Results) {
+                String date = (String) line1Data.get("date");
+                int totalCount = ((Number) line1Data.get("total_count")).intValue();
+                int workingHours = ((Number) line1Data.get("working_hours")).intValue();
+                
+                Map<String, Object> dailyData = new HashMap<>();
+                dailyData.put("date", date);
+                dailyData.put("line1Count", totalCount);
+                dailyData.put("line1Hours", workingHours);
+                dailyData.put("line1HourlyAvg", workingHours > 0 ? totalCount / workingHours : 0);
+                
+                dailyStats.put(date, dailyData);
+            }
+
+            // 澶勭悊浜岀嚎鏁版嵁
+            for (Map<String, Object> line2Data : line2Results) {
+                String date = (String) line2Data.get("date");
+                int totalCount = ((Number) line2Data.get("total_count")).intValue();
+                int workingHours = ((Number) line2Data.get("working_hours")).intValue();
+                
+                Map<String, Object> dailyData = dailyStats.computeIfAbsent(date, k -> {
+                    Map<String, Object> newData = new HashMap<>();
+                    newData.put("date", date);
+                    return newData;
+                });
+                
+                dailyData.put("line2Count", totalCount);
+                dailyData.put("line2Hours", workingHours);
+                dailyData.put("line2HourlyAvg", workingHours > 0 ? totalCount / workingHours : 0);
+            }
+
+            // 杞崲涓烘渶缁堢殑杩斿洖鏍煎紡
+            List<Map<String, Object>> finalStats = new ArrayList<>(dailyStats.values());
+
+            // 鎸夋棩鏈熸帓搴�
+            finalStats.sort((a, b) -> ((String)a.get("date")).compareTo((String)b.get("date")));
+
+            result.put("dailyStats", finalStats);
+            return result;
+        } catch (Exception e) {
+            log.error("璁$畻鍗曞皬鏃朵骇閲忓け璐�", e);
+            throw new RuntimeException("璁$畻鍗曞皬鏃朵骇閲忓け璐�: " + e.getMessage());
+        }
+    }
+
+    /**
+     * 鏌ヨ搴撲綅鏁版嵁
+     * 鎸夊簱浣嶇粺璁★細
+     * - 鏍囧噯宸ヨ壓锛氱粺璁′笂鐗�1鍜屼笂鐗�2鐨勮褰�
+     * - 瀹氬埗宸ヨ壓锛氱粺璁℃棆杞�1鍜屾棆杞�2鐨勮褰�
+     */
+    @Override
+    public List<Map<String, Object>> selectWareHouse(int dayCount) {
+        try {
+            // 璁$畻寮�濮嬫椂闂�
+            Calendar cal = Calendar.getInstance();
+            cal.setTime(new Date());
+            cal.set(Calendar.HOUR_OF_DAY, 0);
+            cal.set(Calendar.MINUTE, 0);
+            cal.set(Calendar.SECOND, 0);
+            cal.set(Calendar.MILLISECOND, 0);
+            cal.add(Calendar.DATE, -dayCount + 1);  
+            Date startDate = cal.getTime();
+            
+            // 浣跨敤QueryWrapper鏋勫缓鏌ヨ
+            QueryWrapper<TaskingLog> queryWrapper = new QueryWrapper<>();
+            queryWrapper.select(
+                    "DATE_FORMAT(operation_record_time, '%Y-%m-%d') as date",
+                    "warehouse",
+                    "COUNT(*) as count"
+                )
+                .and(wrapper -> wrapper
+                    .and(w -> w
+                        .eq("task_type", "鏍囧噯")
+                        .in("operation_record", "涓婄墖1", "涓婄墖2")
+                    )
+                    .or(w -> w
+                        .eq("task_type", "瀹氬埗")
+                        .in("operation_record", "鏃嬭浆1", "鏃嬭浆2")
+                    )
+                )
+                .eq("operation_mode", "缁撴潫")
+                .ge("operation_record_time", startDate)
+                .groupBy("DATE_FORMAT(operation_record_time, '%Y-%m-%d')", "warehouse")
+                .orderByAsc("date", "warehouse");
+
+            return baseMapper.selectMaps(queryWrapper);
+
+        } catch (Exception e) {
+            log.error("鏌ヨ搴撲綅鏁版嵁澶辫触", e);
+            throw new RuntimeException("鏌ヨ搴撲綅鏁版嵁澶辫触: " + e.getMessage());
+        }
+    }
 }

--
Gitblit v1.8.0