引入WMS仓储主数据与关系管理全流程能力

后端实现基于EF Core的库区/库位/容器/物料/关系/历史等模型、服务与RESTful接口,支持多数据库Provider。前端新增类型、API与聚合页面,支持主数据及容器位置/物料关系的增删改查、绑定/解绑、装料/卸料、历史追溯。完善权限、菜单与文档,平台具备完整WMS能力。
This commit is contained in:
ArtoriasWu
2026-06-22 09:15:42 +08:00
parent e9847f581c
commit f2ef32a22b
33 changed files with 2979 additions and 0 deletions
+1
View File
@@ -0,0 +1 @@
Gl4ghnjUoi2/dEh1Uv4DE5qjuqefIqSpVwg5/ZbIlvdq1g93+vFuwX30N+NRSdzU
+61
View File
@@ -0,0 +1,61 @@
{
"section": "auth",
"version": 1,
"updatedAt": "2026-06-08T09:43:37.4979022+00:00",
"payload": {
"roles": [
{
"id": "role-admin",
"name": "\u7BA1\u7406\u5458",
"scope": "Platform",
"permissions": [
"*"
],
"widgetGrants": []
},
{
"id": "role-ops",
"name": "\u8FD0\u8425",
"scope": "RCSMonitor",
"permissions": [
"ops.car.pause",
"ops.car.resume",
"ops.car.gohome",
"ops.task.pause",
"ops.task.cancel",
"ops.task.reassign",
"ops.task.boostPriority",
"monitor.note.write"
],
"widgetGrants": [
{
"widgetId": "MapEditor",
"visibility": "readonly"
},
{
"widgetId": "CadToolbar",
"visibility": "hidden"
}
]
}
],
"users": [
{
"id": "u-admin",
"username": "admin",
"roles": [
"role-admin"
],
"enabled": true
},
{
"id": "u-ops",
"username": "ops",
"roles": [
"role-ops"
],
"enabled": true
}
]
}
}
+21
View File
@@ -0,0 +1,21 @@
{
"section": "charge",
"version": 1,
"updatedAt": "2026-06-08T09:43:37.4849334+00:00",
"payload": {
"allowMidTaskCharge": false,
"idleChargeAfterSec": 300,
"priority": [
{
"id": "CP1",
"condition": "soc\u003C0.2",
"weight": 100
},
{
"id": "CP2",
"condition": "idle\u003E5min",
"weight": 30
}
]
}
}
+20
View File
@@ -0,0 +1,20 @@
{
"section": "deployment",
"version": 7,
"updatedAt": "2026-06-09T01:43:46.9419888+00:00",
"payload": {
"configured": true,
"platformType": "standard",
"modules": [
"wms"
],
"navigationKinds": [
"qrcode",
"laser"
],
"scenarios": [
"tpl-p2p"
],
"updatedBy": "admin"
}
}
+64
View File
@@ -0,0 +1,64 @@
{
"section": "device",
"version": 1,
"updatedAt": "2026-06-08T09:43:37.5034914+00:00",
"payload": {
"drivers": [
{
"id": "drv-elev",
"deviceType": "\u7535\u68AF",
"driverName": "OpcUaElevatorDriver",
"version": "1.2.0"
},
{
"id": "drv-chrg",
"deviceType": "\u5145\u7535\u6869",
"driverName": "ModbusChargerDriver",
"version": "1.0.5"
},
{
"id": "drv-cam",
"deviceType": "\u6444\u50CF\u5934",
"driverName": "OnvifCameraDriver",
"version": "2.1.0"
}
],
"devices": [
{
"id": "dev-elev-1",
"name": "#1 \u7535\u68AF",
"deviceType": "\u7535\u68AF",
"protocol": "opc-ua",
"address": "opc.tcp://10.0.2.20:4840",
"driverId": "drv-elev",
"enabled": true
},
{
"id": "dev-chrg-1",
"name": "\u5145\u7535\u6869-A1",
"deviceType": "\u5145\u7535\u6869",
"protocol": "modbus-tcp",
"address": "10.0.2.30:502",
"driverId": "drv-chrg",
"enabled": true
}
],
"healthPolicy": {
"heartbeatSec": 5,
"offlineSec": 30
},
"alarmPolicy": {
"enabled": true,
"rules": [
{
"level": "warn",
"condition": "offline\u003E30s"
},
{
"level": "error",
"condition": "driverException"
}
]
}
}
}
+43
View File
@@ -0,0 +1,43 @@
{
"section": "fleet",
"version": 1,
"updatedAt": "2026-06-08T09:43:37.5109848+00:00",
"payload": {
"groups": [
{
"id": "G-A",
"name": "A \u533A\u8F66\u961F",
"floor": "F1",
"region": "A",
"carIds": [
"C01",
"C02",
"C03"
]
},
{
"id": "G-B",
"name": "B \u533A\u8F66\u961F",
"floor": "F1",
"region": "B",
"carIds": [
"C04",
"C05"
]
}
],
"ota": {
"enabled": true,
"batchSize": 2,
"rollbackOnFail": true
},
"batchOps": {
"confirmationRequired": true,
"maxBatch": 10
},
"networkDiag": {
"rttThresholdMs": 80,
"packetLossThreshold": 0.02
}
}
}
+32
View File
@@ -0,0 +1,32 @@
{
"section": "integrations",
"version": 1,
"updatedAt": "2026-06-08T09:43:37.4625787+00:00",
"payload": {
"mes": [
{
"id": "mes-1",
"name": "MES \u4E3B\u7EBF",
"url": "http://mes.lan/api",
"enabled": true
}
],
"wms": [
{
"id": "wms-1",
"name": "WMS \u4ED3\u50A8",
"url": "http://wms.lan/api",
"enabled": true
}
],
"rcs": [],
"ptl": [
{
"id": "ptl-1",
"name": "PTL \u62E3\u9009",
"url": "http://ptl.lan/api",
"enabled": true
}
]
}
}
+41
View File
@@ -0,0 +1,41 @@
{
"section": "location",
"version": 1,
"updatedAt": "2026-06-08T09:43:37.5220964+00:00",
"payload": {
"locations": [
{
"id": "L01",
"code": "A-01",
"name": "A \u533A\u8D27\u67B6 1",
"siteId": "S001",
"capacity": 20,
"occupied": 12
},
{
"id": "L02",
"code": "A-02",
"name": "A \u533A\u8D27\u67B6 2",
"siteId": "S002",
"capacity": 20,
"occupied": 7
},
{
"id": "L03",
"code": "B-01",
"name": "B \u533A\u7F13\u5B58",
"siteId": "S003",
"capacity": 30,
"occupied": 25
}
],
"inventoryRules": [
{
"id": "IR1",
"itemType": "PalletA",
"minQty": 5,
"maxQty": 30
}
]
}
}
+36
View File
@@ -0,0 +1,36 @@
{
"section": "ops",
"version": 1,
"updatedAt": "2026-06-08T09:43:37.5273514+00:00",
"payload": {
"playback": {
"retentionDays": 30,
"samplingHz": 5
},
"logRetention": {
"hotDays": 7,
"coldDays": 180
},
"version": {
"keepReleases": 5
},
"monitor": {
"car": {
"propertyKeys": [],
"statusKeys": [],
"actionKeys": []
},
"site": {
"propertyKeys": [],
"statusKeys": [],
"actionKeys": []
},
"track": {
"propertyKeys": [],
"statusKeys": [],
"actionKeys": []
},
"carActionByType": {}
}
}
}
+26
View File
@@ -0,0 +1,26 @@
{
"section": "routing",
"version": 1,
"updatedAt": "2026-06-08T09:43:37.4685445+00:00",
"payload": {
"algorithm": "astar",
"weights": {
"distance": 1,
"congestion": 0.5,
"turnPenalty": 0.2
},
"avoidance": [
{
"id": "AV1",
"zoneId": "Z-NORTH",
"rule": "no-entry-while-loading"
}
],
"zoneSpeedLimits": [
{
"zoneId": "Z-NARROW",
"maxSpeedMps": 0.5
}
]
}
}
+49
View File
@@ -0,0 +1,49 @@
{
"section": "scenario",
"version": 1,
"updatedAt": "2026-06-08T09:43:37.5171692+00:00",
"payload": {
"templates": [
{
"id": "tpl-sps",
"name": "SPS \u7269\u6599\u914D\u9001",
"category": "SPS",
"version": "1.0.0",
"baselineJson": "{}"
},
{
"id": "tpl-pack",
"name": "\u7535\u6C60 Pack \u81EA\u52A8\u5316\u4EA7\u7EBF",
"category": "BatteryPack",
"version": "1.0.0",
"baselineJson": "{}"
},
{
"id": "tpl-loop",
"name": "\u73AF\u7EBF\u8FD0\u884C",
"category": "Loop",
"version": "1.0.0",
"baselineJson": "{}"
},
{
"id": "tpl-p2p",
"name": "\u70B9\u5BF9\u70B9\u67D4\u6027\u642C\u8FD0",
"category": "P2P",
"version": "1.0.0",
"baselineJson": "{}"
}
],
"dslPolicy": {
"enabled": true,
"schemaVersion": "1"
},
"lowCode": {
"enabled": false,
"editor": "json"
},
"versionPolicy": {
"keepVersions": 10,
"allowRollback": true
}
}
}
+20
View File
@@ -0,0 +1,20 @@
{
"section": "system",
"version": 1,
"updatedAt": "2026-06-08T09:43:37.4470202+00:00",
"payload": {
"dispatchLoopHz": 50,
"log": {
"level": "info",
"rollDays": 7,
"maxSizeMB": 256
},
"security": {
"jwtExpireMin": 1440,
"enableSwagger": false,
"corsWhitelist": [
"http://localhost:5173"
]
}
}
}
+10
View File
@@ -0,0 +1,10 @@
{
"section": "task",
"version": 1,
"updatedAt": "2026-06-08T09:43:37.4893595+00:00",
"payload": {
"mode": "leastLoad",
"loadBalance": true,
"maxQueuePerCar": 3
}
}
+33
View File
@@ -0,0 +1,33 @@
{
"section": "traffic",
"version": 1,
"updatedAt": "2026-06-08T09:43:37.4927371+00:00",
"payload": {
"intersections": [
{
"id": "IX1",
"siteIds": [
"S006",
"S007"
],
"mode": "mutex"
}
],
"mutex": [
{
"id": "MZ1",
"zoneIds": [
"Z-CROSS"
]
}
],
"yields": [
{
"id": "YD1",
"from": "A \u533A",
"to": "B \u533A",
"condition": "priority\u003Cpeer"
}
]
}
}
+19
View File
@@ -0,0 +1,19 @@
{
"section": "vehicle",
"version": 1,
"updatedAt": "2026-06-08T09:43:37.4789283+00:00",
"payload": {
"lowBatteryThreshold": 0.3,
"criticalBatteryThreshold": 0.15,
"faultReport": {
"enabled": true,
"emailTo": [
"ops@example.com"
]
},
"autoRepair": {
"enabled": false,
"cooldownSec": 600
}
}
}
+18
View File
@@ -0,0 +1,18 @@
{
"section": "widget",
"version": 1,
"updatedAt": "2026-06-08T09:43:37.5362337+00:00",
"payload": {
"items": [
{
"id": "widget-call-button",
"name": "\u547C\u53EB\u6309\u94AE",
"schemaJson": "{\u0022fields\u0022:[{\u0022name\u0022:\u0022siteId\u0022}]}",
"layoutJson": "{\u0022x\u0022:0,\u0022y\u0022:0,\u0022w\u0022:2,\u0022h\u0022:1}",
"bindToScopes": [
"RCSMonitor"
]
}
]
}
}
Binary file not shown.
+94
View File
@@ -0,0 +1,94 @@
{
"version": 1,
"roles": [
{
"id": "role-admin",
"name": "\u8D85\u7EA7\u7BA1\u7406\u5458",
"description": "\u62E5\u6709\u5168\u90E8\u9875\u9762\u4E0E\u64CD\u4F5C\u6743\u9650\u7684\u5185\u7F6E\u89D2\u8272",
"scope": "*",
"pages": [
"*"
],
"ops": [
"*"
],
"widgetGrants": [],
"system": true
},
{
"id": "role-ops",
"name": "\u8FD0\u8425\u4EBA\u5458",
"description": "\u8FD0\u8425\u76D1\u63A7\u7AEF\u9ED8\u8BA4\u89D2\u8272\uFF1A\u53EF\u6267\u884C\u8FD0\u7EF4\u64CD\u4F5C\u3001\u67E5\u770B\u76D1\u63A7",
"scope": "RCSMonitor",
"pages": [
"monitor-dashboard",
"monitor-map",
"monitor-ops",
"monitor-notes"
],
"ops": [
"ops.car.pause",
"ops.car.resume",
"ops.car.gohome",
"ops.car.resetSession",
"ops.car.manualCharge",
"ops.task.pause",
"ops.task.cancel",
"ops.task.reassign",
"ops.task.boostPriority",
"monitor.note.write"
],
"widgetGrants": [
{
"widgetId": "MapEditor",
"visibility": "readonly"
},
{
"widgetId": "CadToolbar",
"visibility": "hidden"
},
{
"widgetId": "CarPanel",
"visibility": "readonly"
},
{
"widgetId": "MissionEditor",
"visibility": "readonly"
},
{
"widgetId": "OpsActionPanel",
"visibility": "interactive"
},
{
"widgetId": "ConfigCenter",
"visibility": "hidden"
}
],
"system": true
}
],
"users": [
{
"id": "u-admin",
"username": "admin",
"displayName": "\u7CFB\u7EDF\u7BA1\u7406\u5458",
"enabled": true,
"roleIds": [
"role-admin"
],
"salt": "pQlotjtkEe0S5MTxecJd4A==",
"passwordHash": "qs6A3I/Y3OwV\u002Bs95orIWvzcUz8bF4ZY9l1jq4SQd1cI="
},
{
"id": "u-ops",
"username": "ops",
"displayName": "\u8FD0\u8425\u4EBA\u5458",
"enabled": true,
"roleIds": [
"role-ops"
],
"salt": "G6c5\u002BnLEjf3fEor1LgNjyg==",
"passwordHash": "Zb1QiDzHctduFbZGKniTEy4OLJIvIOeoyLfc\u002Bo0y\u002BVg="
}
]
}