08d4252c79d088d7bf97a08d314ec8577d96e2d2..867793e0bd4d8e84b8ae98e31d5d722fdb73cee9
4 天以前 chenyong
更新生产统计,修改大屏库存数据展示
867793 对比 | 目录
4 天以前 刘磊
字段名称修正
40a36a 对比 | 目录
已修改6个文件
447 ■■■■■ 文件已修改
Code Management/WMS/WIDESEA_WMSClient/package-lock.json 204 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code Management/WMS/WIDESEA_WMSClient/src/api/http.js 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code Management/WMS/WIDESEA_WMSClient/src/views/widesea_wms/taskinfo/Dt_CL.vue 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code Management/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/BasicModel/DtStockInfo_Hty.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Partial/Dt_TaskService.cs 120 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code Management/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json 96 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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",
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/';
Code Management/WMS/WIDESEA_WMSClient/src/views/widesea_wms/taskinfo/Dt_CL.vue
@@ -4,10 +4,10 @@
 *代码由框架生成,任何更改都可能导致被代码生成器覆盖
 *业务请在@/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",
Code Management/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/BasicModel/DtStockInfo_Hty.cs
@@ -103,8 +103,8 @@
        /// <summary>
        /// 库存状态
        /// </summary>
        [ImporterHeader(Name = "创建者")]
        [ExporterHeader(DisplayName = "创建者")]
        [ImporterHeader(Name = "库存状态")]
        [ExporterHeader(DisplayName = "库存状态")]
        [SugarColumn(IsNullable = true, ColumnDescription = "库存状态")]
        public int StockStatus { get; set; }
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);
        }
    }
    }
}
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;
}
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", //当前项目的主库,所对应的连接字符串的Enabled必须为true
  //连接字符串
  //"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时,开放所有IP均可访问。
    // 支持多个域名端口,注意端口号后不要带/斜杆:比如localhost:8000/,是错的
    // 注意,http://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", //当前项目的主库,所对应的连接字符串的Enabled必须为true
    //连接字符串
    //"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时,开放所有IP均可访问。
        // 支持多个域名端口,注意端口号后不要带/斜杆:比如localhost:8000/,是错的
        // 注意,http://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 //是否每次启动都清除Redis缓存
    }
  },
  "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"
        //}
    ]
}