| | |
| | | "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": { |
| | |
| | | "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", |
| | |
| | | "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": { |
| | |
| | | "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", |
| | |
| | | "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": { |
| | |
| | | "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", |
| | |
| | | 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/'; |
| | |
| | | *代码由框架生成,任何更改都可能导致被代码生成器覆盖 |
| | | *业务请在@/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"; |
| | |
| | | ]); |
| | | 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", |
| | |
| | | /// <summary> |
| | | /// 库存状态 |
| | | /// </summary> |
| | | [ImporterHeader(Name = "创建者")] |
| | | [ExporterHeader(DisplayName = "创建者")] |
| | | [ImporterHeader(Name = "库存状态")] |
| | | [ExporterHeader(DisplayName = "库存状态")] |
| | | [SugarColumn(IsNullable = true, ColumnDescription = "库存状态")] |
| | | public int StockStatus { get; set; } |
| | | |
| | |
| | | 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) |
| | |
| | | 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) |
| | |
| | | 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; |
| | | } |
| | |
| | | { |
| | | "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" |
| | | //} |
| | | ] |
| | | } |