From 867793e0bd4d8e84b8ae98e31d5d722fdb73cee9 Mon Sep 17 00:00:00 2001
From: chenyong <chenyong@hnkhzn.com>
Date: 星期三, 18 六月 2025 19:15:59 +0800
Subject: [PATCH] 更新生产统计,修改大屏库存数据展示

---
 Code Management/WMS/WIDESEA_WMSClient/src/views/widesea_wms/taskinfo/Dt_CL.vue                   |   15 +
 Code Management/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json                         |   96 +++++------
 Code Management/WMS/WIDESEA_WMSClient/src/api/http.js                                            |    8 
 Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Partial/Dt_TaskService.cs |  120 +++++++++++---
 Code Management/WMS/WIDESEA_WMSClient/package-lock.json                                          |  204 +++++++++++++-----------
 5 files changed, 258 insertions(+), 185 deletions(-)

diff --git a/Code Management/WMS/WIDESEA_WMSClient/package-lock.json b/Code Management/WMS/WIDESEA_WMSClient/package-lock.json
index 1f45467..cb2517e 100644
--- a/Code Management/WMS/WIDESEA_WMSClient/package-lock.json
+++ b/Code Management/WMS/WIDESEA_WMSClient/package-lock.json
@@ -660,93 +660,6 @@
         "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
         "wrap-ansi": "^8.1.0",
         "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
-      },
-      "dependencies": {
-        "ansi-regex": {
-          "version": "5.0.1",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
-          "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
-          "dev": true
-        },
-        "ansi-styles": {
-          "version": "4.3.0",
-          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-          "dev": true,
-          "requires": {
-            "color-convert": "^2.0.1"
-          }
-        },
-        "emoji-regex": {
-          "version": "8.0.0",
-          "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
-          "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
-          "dev": true
-        },
-        "string-width-cjs": {
-          "version": "npm:string-width@4.2.3",
-          "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
-          "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
-          "dev": true,
-          "requires": {
-            "emoji-regex": "^8.0.0",
-            "is-fullwidth-code-point": "^3.0.0",
-            "strip-ansi": "^6.0.1"
-          },
-          "dependencies": {
-            "strip-ansi": {
-              "version": "6.0.1",
-              "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
-              "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
-              "dev": true,
-              "requires": {
-                "ansi-regex": "^5.0.1"
-              }
-            }
-          }
-        },
-        "strip-ansi-cjs": {
-          "version": "npm:strip-ansi@6.0.1",
-          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
-          "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
-          "dev": true,
-          "requires": {
-            "ansi-regex": "^5.0.1"
-          }
-        },
-        "wrap-ansi-cjs": {
-          "version": "npm:wrap-ansi@7.0.0",
-          "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
-          "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^4.0.0",
-            "string-width": "^4.1.0",
-            "strip-ansi": "^6.0.0"
-          },
-          "dependencies": {
-            "string-width": {
-              "version": "4.2.3",
-              "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
-              "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
-              "dev": true,
-              "requires": {
-                "emoji-regex": "^8.0.0",
-                "is-fullwidth-code-point": "^3.0.0",
-                "strip-ansi": "^6.0.1"
-              }
-            },
-            "strip-ansi": {
-              "version": "6.0.1",
-              "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
-              "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
-              "dev": true,
-              "requires": {
-                "ansi-regex": "^5.0.1"
-              }
-            }
-          }
-        }
       }
     },
     "@jridgewell/gen-mapping": {
@@ -843,6 +756,11 @@
       "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
       "dev": true,
       "optional": true
+    },
+    "@popperjs/core": {
+      "version": "npm:@sxzz/popperjs-es@2.11.7",
+      "resolved": "https://registry.npmjs.org/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz",
+      "integrity": "sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ=="
     },
     "@rushstack/eslint-patch": {
       "version": "1.10.4",
@@ -2240,13 +2158,6 @@
         "lodash-unified": "^1.0.2",
         "memoize-one": "^6.0.0",
         "normalize-wheel-es": "^1.2.0"
-      },
-      "dependencies": {
-        "@popperjs/core": {
-          "version": "npm:@sxzz/popperjs-es@2.11.7",
-          "resolved": "https://registry.npmjs.org/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz",
-          "integrity": "sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ=="
-        }
       }
     },
     "emoji-regex": {
@@ -5054,6 +4965,40 @@
         "strip-ansi": "^7.0.1"
       }
     },
+    "string-width-cjs": {
+      "version": "npm:string-width@4.2.3",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+      "dev": true,
+      "requires": {
+        "emoji-regex": "^8.0.0",
+        "is-fullwidth-code-point": "^3.0.0",
+        "strip-ansi": "^6.0.1"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "5.0.1",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+          "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+          "dev": true
+        },
+        "emoji-regex": {
+          "version": "8.0.0",
+          "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+          "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+          "dev": true
+        },
+        "strip-ansi": {
+          "version": "6.0.1",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+          "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^5.0.1"
+          }
+        }
+      }
+    },
     "string.prototype.padend": {
       "version": "3.1.6",
       "resolved": "https://registry.npmmirror.com/string.prototype.padend/-/string.prototype.padend-3.1.6.tgz",
@@ -5115,6 +5060,23 @@
       "dev": true,
       "requires": {
         "ansi-regex": "^6.0.1"
+      }
+    },
+    "strip-ansi-cjs": {
+      "version": "npm:strip-ansi@6.0.1",
+      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+      "dev": true,
+      "requires": {
+        "ansi-regex": "^5.0.1"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "5.0.1",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+          "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+          "dev": true
+        }
       }
     },
     "strip-bom": {
@@ -5899,6 +5861,60 @@
         "strip-ansi": "^7.0.1"
       }
     },
+    "wrap-ansi-cjs": {
+      "version": "npm:wrap-ansi@7.0.0",
+      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+      "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+      "dev": true,
+      "requires": {
+        "ansi-styles": "^4.0.0",
+        "string-width": "^4.1.0",
+        "strip-ansi": "^6.0.0"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "5.0.1",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+          "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+          "dev": true
+        },
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+          "dev": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "emoji-regex": {
+          "version": "8.0.0",
+          "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+          "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+          "dev": true
+        },
+        "string-width": {
+          "version": "4.2.3",
+          "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+          "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+          "dev": true,
+          "requires": {
+            "emoji-regex": "^8.0.0",
+            "is-fullwidth-code-point": "^3.0.0",
+            "strip-ansi": "^6.0.1"
+          }
+        },
+        "strip-ansi": {
+          "version": "6.0.1",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+          "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^5.0.1"
+          }
+        }
+      }
+    },
     "wrappy": {
       "version": "1.0.2",
       "resolved": "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz",
diff --git a/Code Management/WMS/WIDESEA_WMSClient/src/api/http.js b/Code Management/WMS/WIDESEA_WMSClient/src/api/http.js
index f4ca1d1..fd526c5 100644
--- a/Code Management/WMS/WIDESEA_WMSClient/src/api/http.js
+++ b/Code Management/WMS/WIDESEA_WMSClient/src/api/http.js
@@ -11,15 +11,15 @@
 let loadingInstance
 let loadingStatus = false
 if (process.env.NODE_ENV == 'development') {
-   axios.defaults.baseURL = 'http://localhost:5000/';
-  // axios.defaults.baseURL = 'http://192.168.65.253:5000/';
+  //  axios.defaults.baseURL = 'http://localhost:5000/';
+  axios.defaults.baseURL = 'http://192.168.20.253:5000/';
 }
 else if (process.env.NODE_ENV == 'debug') {
-  axios.defaults.baseURL = 'http://192.168.65.253:5000/';
+  axios.defaults.baseURL = 'http://192.168.20.253:5000/';
 }
 else if (process.env.NODE_ENV == 'production') {
   // axios.defaults.baseURL = 'http://127.0.0.1:5000/';
-  axios.defaults.baseURL = 'http://192.168.65.253:5000/';
+  axios.defaults.baseURL = 'http://192.168.20.253:5000/';
 }
 
 //axios.defaults.baseURL = 'http://api.volcore.xyz/';
diff --git a/Code Management/WMS/WIDESEA_WMSClient/src/views/widesea_wms/taskinfo/Dt_CL.vue b/Code Management/WMS/WIDESEA_WMSClient/src/views/widesea_wms/taskinfo/Dt_CL.vue
index 804d4b7..e78c0fe 100644
--- a/Code Management/WMS/WIDESEA_WMSClient/src/views/widesea_wms/taskinfo/Dt_CL.vue
+++ b/Code Management/WMS/WIDESEA_WMSClient/src/views/widesea_wms/taskinfo/Dt_CL.vue
@@ -4,10 +4,10 @@
  *浠g爜鐢辨鏋剁敓鎴�,浠讳綍鏇存敼閮藉彲鑳藉鑷磋浠g爜鐢熸垚鍣ㄨ鐩�
  *涓氬姟璇峰湪@/extension/widesea_wms/taskinfo/Dt_Task.js姝ゅ缂栧啓
  -->
-<template>
+ <template>
     <view-grid ref="grid" :columns="columns" :detail="detail" :editFormFields="editFormFields"
         :editFormOptions="editFormOptions" 
-        :table="table" :extend="extend" />
+        :table="table" />
 </template>
 <script>
 import extend from "@/extension/widesea_wms/taskinfo/Dt_Task_Hty.jsx";
@@ -54,11 +54,12 @@
         ]);
         const columns = ref([{ field: 'TaskId', title: '涓婚敭', type: 'string', width: 110, hidden: true, readonly: true, require: true, align: 'left' },
         { field: 'hour', title: '鏃ユ湡', type: 'int', width: 110, align: 'left', sort: true },
-        { field: 'count', title: '瀹炴鍑哄簱', type: 'string', width: 150, align: 'left' },
-        { field: 'pnboundNo', title: '鍗曟嵁鍙�', type: 'string', width: 110, align: 'left' ,hidden: true},
-        { field: 'groupID', title: '搴撳瓨ID', type: 'int', width: 110, hidden: true, align: 'left' },
-        { field: 'groupDetailId', title: '缁勭洏鏄庣粏ID', type: 'int', width: 110, hidden: true, align: 'left' },
-        { field: 'roadway', title: '搴�', type: 'string', width: 110, align: 'left' },]);
+        { field: 'roadway', title: '搴�', type: 'string', width: 110, align: 'left' },
+        { field: 'taskType100Count', title: '瀹炴鍑哄簱', type: 'string', width: 150, align: 'left' },
+        { field: 'taskType104Count', title: '绌烘鍑哄簱', type: 'string', width: 110, align: 'left' },
+        { field: 'taskType200Count', title: '瀹炴鍏ュ簱', type: 'string', width: 110, align: 'left' },
+        { field: 'taskType204Count', title: '绌烘鍏ュ簱', type: 'string', width: 110, align: 'left' },
+       ]);
         const detail = ref({
             cnName: "#detailCnName",
             table: "#detailTable",
diff --git a/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Partial/Dt_TaskService.cs b/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Partial/Dt_TaskService.cs
index 260b51e..19282f0 100644
--- a/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Partial/Dt_TaskService.cs
+++ b/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Partial/Dt_TaskService.cs
@@ -1444,20 +1444,7 @@
             var now = DateTime.Now;
             var startOfDay = new DateTime(now.Year, now.Month, now.Day);
             var endOfDay = startOfDay.AddDays(1);
-            var filteredItems = _stockInfoRepository.Db.Queryable<DtStockInfo>()
-                                .Where(x => x.OutboundTime >= startOfDay && x.OutboundTime < endOfDay && x.IsFull)
-                                .Includes(x => x.StockInfoDetails)
-                                .ToList();
-
-            var result = filteredItems
-                .GroupBy(x => x.AreaCode)
-                .Select(g => new GroupedStockInfo
-                {
-                    AreaCode = g.Key,
-                    TotalQuantity = g.Sum(item => item.StockInfoDetails?.Count ?? 0),
-                    Items = g.ToList()
-                })
-                .ToList();
+            var result = _stockInfoRepository.Db.Queryable<DtStockInfo>().ToList();
             return content.OK(data: result);
         }
         catch (Exception ex)
@@ -1546,41 +1533,103 @@
             var now = DateTime.Now;
             var thirtyDaysAgo = now.AddDays(-30);
             var roadwayMappings = new Dictionary<string, string> {
-                    { "JZ", "闈欑疆搴�" },
-                    { "CH", "闄堝寲搴�" },
-                    { "FR", "鍒嗗搴�" },
-                    { "GW", "楂樻俯搴�" },
-                    { "CW", "甯告俯搴�" }
-                };
-
+    { "JZ", "闈欑疆搴�" },
+    { "CH", "闄堝寲搴�" },
+    { "FR", "鍒嗗搴�" },
+    { "GW", "楂樻俯搴�" },
+    { "CW", "甯告俯搴�" }
+};
             var roadwayKeys = roadwayMappings.Keys.ToArray();
+            var taskTypes = new[] { 100, 104, 200, 204 };
 
             var taskHty = _task_HtyRepository.Db.Queryable<Dt_Task_Hty>()
                 .Where(it =>
                     it.CreateDate >= thirtyDaysAgo &&
                     it.CreateDate <= now &&
-                    it.TaskType == 100 &&
+                    taskTypes.Contains(it.TaskType) &&
                     roadwayKeys.Any(rk => it.Roadway.Contains(rk)))
                 .ToList()
                 .Select(t => new {
                     OriginalRoadway = t.Roadway,
-                    MatchedKey = roadwayKeys.FirstOrDefault(rk => t.Roadway.Contains(rk)),
+                    RoadwayKey = roadwayKeys.FirstOrDefault(rk => t.Roadway.Contains(rk)),
+                    TaskType = t.TaskType,
                     CreateDate = t.CreateDate
                 })
-                .Where(t => t.MatchedKey != null)
+                .Where(t => t.RoadwayKey != null)
                 .GroupBy(t => new {
-                    RoadwayKey = t.MatchedKey,
+                    RoadwayKey = t.RoadwayKey,
                     Date = t.CreateDate.Date,
                     Hour = t.CreateDate.Hour
                 })
                 .OrderByDescending(group => group.Key.Date)
                 .ThenByDescending(group => group.Key.Hour)
-                .Select(group => new {
-                    Hour = $"{group.Key.Date:yyyy/M/d} {group.Key.Hour}:00",
-                    Count = group.Count(),
-                    Roadway = roadwayMappings[group.Key.RoadwayKey] // 鏄犲皠涓轰腑鏂囧悕绉�
+                .Select(group => new TaskHourData
+                {
+                    Hour = $"{group.Key.Date:yyyy/M/d} {(group.Key.Hour == 23 ? "23:00-24:00" : $"{group.Key.Hour}:00-{group.Key.Hour + 1}:00")}",
+                    Roadway = roadwayMappings[group.Key.RoadwayKey],
+                    TaskType100Count = group.Count(t => t.TaskType == 100),
+                    TaskType104Count = group.Count(t => t.TaskType == 104),
+                    TaskType200Count = group.Count(t => t.TaskType == 200),
+                    TaskType204Count = group.Count(t => t.TaskType == 204)
                 })
                 .ToList();
+
+            // 鎸夋棩鏈熷拰搴撲綅鍒嗙粍锛屾壘鍑烘瘡澶╃殑鏈�鍚庝竴涓皬鏃�
+            var dailyLastHours = taskHty
+                .GroupBy(item => new {
+                    Date = DateTime.Parse(item.Hour.Split(' ')[0]),
+                    item.Roadway
+                })
+                .Select(group => new {
+                    Date = group.Key.Date,
+                    Roadway = group.Key.Roadway,
+                    LastHour = group.Max(item => int.Parse(item.Hour.Split(' ')[1].Split(':')[0]))
+                })
+                .ToList();
+
+            // 鐢熸垚姹囨�绘暟鎹紙璋冩暣Hour鏍煎紡涓�"鏃ユ湡+鏃ユ眹鎬�"锛�
+            var summaryItems = dailyLastHours
+                .Select(dailyLastHour => {
+                    // 鎵惧埌璇ユ棩鏈熻搴撲綅鐨勬墍鏈夊皬鏃舵暟鎹�
+                    var dailyItems = taskHty
+                        .Where(item =>
+                            DateTime.Parse(item.Hour.Split(' ')[0]) == dailyLastHour.Date &&
+                            item.Roadway == dailyLastHour.Roadway)
+                        .ToList();
+
+                    return new TaskHourData
+                    {
+                        Hour = $"{dailyLastHour.Date:yyyy/M/d}鏃ユ眹鎬�", // 淇敼Hour鏍煎紡
+                        Roadway = dailyLastHour.Roadway,
+                        TaskType100Count = dailyItems.Sum(item => item.TaskType100Count),
+                        TaskType104Count = dailyItems.Sum(item => item.TaskType104Count),
+                        TaskType200Count = dailyItems.Sum(item => item.TaskType200Count),
+                        TaskType204Count = dailyItems.Sum(item => item.TaskType204Count),
+                        IsSummary = true
+                    };
+                })
+                .ToList();
+
+            // 灏嗘眹鎬绘暟鎹坊鍔犲埌缁撴灉涓�
+            taskHty = taskHty.Concat(summaryItems).ToList();
+
+            // 璋冩暣鎺掑簭閫昏緫锛氬厛鎸夋棩鏈熼檷搴忥紝鍐嶆寜鏄惁姹囨�伙紙姹囨�诲湪鍓嶏級锛屾渶鍚庢寜灏忔椂闄嶅簭
+            taskHty = taskHty
+                .OrderByDescending(item => {
+                    var datePart = item.Hour.Contains("鏃ユ眹鎬�")
+                ? item.Hour.Split("鏃ユ眹鎬�")[0]
+                : item.Hour.Split(' ')[0];
+                    return DateTime.Parse(datePart);
+                })
+            .ThenByDescending(item => item.IsSummary) // 姹囨�绘暟鎹帓鍦ㄥ墠闈�
+            .ThenByDescending(item => {
+                if (!item.IsSummary && item.Hour.Contains(' '))
+                {
+                    return int.Parse(item.Hour.Split(' ')[1].Split(':')[0]);
+                }
+                return 0;
+            })
+            .ToList();
             return content.OK1(total1: taskHty.Count, data: taskHty);
         }
         catch (Exception ex)
@@ -1588,4 +1637,15 @@
             return content.Error(ex.Message);
         }
     }
-    }
\ No newline at end of file
+}
+
+internal class TaskHourData
+{
+    public string Hour { get; set; }
+    public string Roadway { get; set; }
+    public int TaskType100Count { get; set; }
+    public int TaskType104Count { get; set; }
+    public int TaskType200Count { get; set; }
+    public int TaskType204Count { get; set; }
+    public bool IsSummary { get; set; } = false;
+}
\ No newline at end of file
diff --git a/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json b/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json
index 29f1862..353a3e3 100644
--- a/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json
+++ b/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json
@@ -1,53 +1,49 @@
 {
-  "Logging": {
-    "LogLevel": {
-      "Default": "Information",
-      "Microsoft.AspNetCore": "Warning"
-    }
-  },
-  "AllowedHosts": "*",
-  "urls": "http://*:5000",
-  "MainDB": "DB_WIDESEA", //褰撳墠椤圭洰鐨勪富搴擄紝鎵�瀵瑰簲鐨勮繛鎺ュ瓧绗︿覆鐨凟nabled蹇呴』涓簍rue
-  //杩炴帴瀛楃涓�
-  //"ConnectionString": "HTI6FB1H05Krd07mNm9yBCNhofW6edA5zLs9TY~MNthRYW3kn0qKbMIsGp~3yyPDF1YZUCPBQx8U0Jfk4PH~ajNFXVIwlH85M3F~v_qKYQ3CeAz3q1mLVDn8O5uWt1~3Ut2V3KRkEwYHvW2oMDN~QIDXPxDgXN0R2oTIhc9dNu7QNaLEknblqmHhjaNSSpERdDVZIgHnMKejU_SL49tralBkZmDNi0hmkbL~837j1NWe37u9fJKmv91QPb~16JsuI9uu0EvNZ06g6PuZfOSAeFH9GMMIZiketdcJG3tHelo=",
-  //"ConnectionString": "Data Source=192.168.5.251;Initial Catalog=WIDESEA_WMSDB_BBMain;User ID=sa;Password=P@ssw0rd;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
-  "ConnectionString": "Data Source=.\\LIULEI;Initial Catalog=WIDESEA_WMSDBB2F;User ID=sa;Password=123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
-  //"ConnectionString": "Data Source=.\\LIULEI;Initial Catalog=WIDESEA_WMSDB_BBMain;User ID=sa;Password=123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
-  //"ConnectionString": "Data Source=192.168.20.251;Initial Catalog=WIDESEA_WMSDB;User ID=sa;Password=123456@gy;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
-  //"ConnectionStringWCS": "Data Source=192.168.5.251;Initial Catalog=WIDESEAWCS_TEST;User ID=sa;Password=P@ssw0rd;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
-  "ConnectionStringWCS": "Data Source=.\\LIULEI;Initial Catalog=WIDESEA_WCSDBB2F;User ID=sa;Password=123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
-  //璺ㄥ煙
-  "Cors": {
-    "PolicyName": "CorsIpAccess", //绛栫暐鍚嶇О
-    "EnableAllIPs": true, //褰撲负true鏃讹紝寮�鏀炬墍鏈塈P鍧囧彲璁块棶銆�
-    // 鏀寔澶氫釜鍩熷悕绔彛锛屾敞鎰忕鍙e彿鍚庝笉瑕佸甫/鏂滄潌锛氭瘮濡俵ocalhost:8000/锛屾槸閿欑殑
-    // 娉ㄦ剰锛宧ttp://127.0.0.1:1818 鍜� http://localhost:1818 鏄笉涓�鏍风殑
-    "IPs": "http://127.0.0.1:8080,http://localhost:8080,http://127.0.0.1:8081,http://localhost:8081"
-  },
+    "Logging": {
+        "LogLevel": {
+            "Default": "Information",
+            "Microsoft.AspNetCore": "Warning"
+        }
+    },
+    "AllowedHosts": "*",
+    "urls": "http://*:5000",
+    "MainDB": "DB_WIDESEA", //褰撳墠椤圭洰鐨勪富搴擄紝鎵�瀵瑰簲鐨勮繛鎺ュ瓧绗︿覆鐨凟nabled蹇呴』涓簍rue
+    //杩炴帴瀛楃涓�
+    //"ConnectionString": "HTI6FB1H05Krd07mNm9yBCNhofW6edA5zLs9TY~MNthRYW3kn0qKbMIsGp~3yyPDF1YZUCPBQx8U0Jfk4PH~ajNFXVIwlH85M3F~v_qKYQ3CeAz3q1mLVDn8O5uWt1~3Ut2V3KRkEwYHvW2oMDN~QIDXPxDgXN0R2oTIhc9dNu7QNaLEknblqmHhjaNSSpERdDVZIgHnMKejU_SL49tralBkZmDNi0hmkbL~837j1NWe37u9fJKmv91QPb~16JsuI9uu0EvNZ06g6PuZfOSAeFH9GMMIZiketdcJG3tHelo=",
+    //"ConnectionString": "Data Source=192.168.15.253;Initial Catalog=WIDESEA_WMSDB_BBMain;User ID=sa;Password=P@ssw0rd;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
+    "ConnectionString": "Data Source=.;Initial Catalog=WIDESEA_WMSDB_BBMain;User ID=sa;Password=123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
+    //"ConnectionString": "Data Source=.\\LIULEI;Initial Catalog=WIDESEA_WMSDB_BBMain;User ID=sa;Password=123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
+    //"ConnectionString": "Data Source=192.168.20.251;Initial Catalog=WIDESEA_WMSDB;User ID=sa;Password=123456@gy;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
+    //"ConnectionStringWCS": "Data Source=192.168.15.253;Initial Catalog=WIDESEA_WCSDB_BBMain;User ID=sa;Password=P@ssw0rd;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
+    "ConnectionStringWCS": "Data Source=.;Initial Catalog=WIDESEA_WCSDB_BBMain;User ID=sa;Password=123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
+    //璺ㄥ煙
+    "Cors": {
+        "PolicyName": "CorsIpAccess", //绛栫暐鍚嶇О
+        "EnableAllIPs": true, //褰撲负true鏃讹紝寮�鏀炬墍鏈塈P鍧囧彲璁块棶銆�
+        // 鏀寔澶氫釜鍩熷悕绔彛锛屾敞鎰忕鍙e彿鍚庝笉瑕佸甫/鏂滄潌锛氭瘮濡俵ocalhost:8000/锛屾槸閿欑殑
+        // 娉ㄦ剰锛宧ttp://127.0.0.1:1818 鍜� http://localhost:1818 鏄笉涓�鏍风殑
+        "IPs": "http://127.0.0.1:8080,http://localhost:8080,http://127.0.0.1:8081,http://localhost:8081"
+    },
+    "ApiName": "WIDESEA",
+    "ExpMinutes": 120,
 
-  //缂撳瓨璁剧疆
-  "CacheSettings": {
-    "UseRedis": false, //鍚敤redis
-    "RedisSettings": {
-      "Address": "127.0.0.1:6379", //鍦板潃
-      "Password": "123456", //Redis鏈嶅姟瀵嗙爜
-      "Db": 9, //榛樿搴�
-      "ClearRedis": true //鏄惁姣忔鍚姩閮芥竻闄edis缂撳瓨
-    }
-  },
-
-  "ApiName": "WIDESEA",
-  "ExpMinutes": 120,
-
-  // 闇�瑕佺Щ搴撶殑琛�
-  "TransfertRows": "1,4,5,8",
-
-  // 鍏佽鍑哄簱鐨勭紪鐮�
-  "OutBoundMateriel": [
-    {
-      //"MaterielCode": "CC03040001523",
-      //"ProductionLine": "ZJ-7",
-      //"ProcessCode": "CWSC3"
-    }
-  ]
+    // 闇�瑕佺Щ搴撶殑琛�
+    "TransfertRows": "1,4,5,8",
+    "CacheSettings": {
+        "UseRedis": false,
+        "RedisSettings": {
+            "Address": "127.0.0.1:6379",
+            "Password": "123456",
+            "Db": 9,
+            "ClearRedis": true
+        }
+    },
+    // 鍏佽鍑哄簱鐨勭紪鐮�
+    "OutBoundMateriel": [
+        //{
+        //    "MaterielCode": "CC01050001348",
+        //    "ProductionLine": "ZJ-8",
+        //    "ProcessCode": "CH001"
+        //}
+    ]
 }

--
Gitblit v1.9.3