wanshenmean
4 天以前 f7ec7a32e8cddcb976093c826e3a0d1ed61fb335
feat(任务服务): 扩展任务更新接口以支持地址信息

修改 UpdateTaskByStatusAsync 方法,接受 UpdateTaskDto 对象而非单独参数
在 UpdateTaskDto 中添加 NextAddress 和 CurrentAddress 字段
更新相关调用以传递地址信息
调整模拟器配置端口和协议模板
已添加1个文件
已修改12个文件
309 ■■■■ 文件已修改
Code/CLAUDE.md 132 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/TaskInfo/UpdateTaskDto.cs 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Flows/InboundTaskFlowService.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Flows/OutboundTaskFlowService.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Flows/RelocationTaskFlowService.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/ManualInbound/ManualInboundTaskHandler.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Task/UpdateTaskDto.cs 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_WCS.cs 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code/测试工具/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Server/Data/instance-1001/config.json 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code/测试工具/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Server/Data/instance-1002/config.json 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code/测试工具/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Server/Data/protocol-templates.json 124 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code/CLAUDE.md
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,132 @@
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## é¡¹ç›®æ¦‚è¿°
**WIDESEA** æ˜¯ä¸€ä¸ªå·¥ä¸šä»“储自动化系统,包含两个核心子系统:
- **WCS**(仓库控制系统):直接控制堆垛机、输送线、机器人、穿梭车等物理设备,与 PLC é€šä¿¡
- **WMS**(仓库管理系统):管理库存、入库、出库任务、盘点等业务逻辑
两个系统通过 HTTP API äº¤äº’,WMS ä¾èµ– WCS å®Œæˆè®¾å¤‡è°ƒåº¦ã€‚
## æž„建命令
```bash
# WCS åŽç«¯ï¼ˆç«¯å£ 9292)
dotnet build WCS/WIDESEAWCS_Server/WIDESEAWCS_Server.sln
dotnet run --project WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/WIDESEAWCS_Server.csproj
# WMS åŽç«¯ï¼ˆç«¯å£ 9291)
dotnet build WMS/WIDESEA_WMSServer/WIDESEA_WMSServer.sln
dotnet run --project WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_WMSServer.csproj
# WCS å‰ç«¯
cd WCS/WIDESEAWCS_Client && npm run serve
# WMS å‰ç«¯
cd WMS/WIDESEA_WMSClient && npm run serve
# S7 æ¨¡æ‹Ÿå™¨
cd æµ‹è¯•工具/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Web && npm run dev
```
## æž¶æž„概览
```
┌─────────────────────────────────────────────────────────────┐
│                        WCS (端口 9292)                       â”‚
│  â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”  â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”  â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”  â”‚
│  â”‚   Quartz    â”‚  â”‚  Communicator â”‚  â”‚   Redis L1+L2      â”‚  â”‚
│  â”‚   Jobs      â”‚→ â”‚  (PLC协议)    â”‚  â”‚   Cache            â”‚  â”‚
│  â””─────────────┘  â””──────────────┘  â””────────────────────┘  â”‚
│         â†“                                                    â”‚
│  â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”     â”‚
│  â”‚  TcpSocketServer (端口 2000) / WebSocket (端口 9296) â”‚     â”‚
│  â””─────────────────────────────────────────────────────┘     â”‚
└─────────────────────────────────────────────────────────────┘
                              â†‘ HTTP API
                              â†“
┌─────────────────────────────────────────────────────────────┐
│                        WMS (端口 9291)                       â”‚
│  â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”  â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”  â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”  â”‚
│  â”‚   Tasks     â”‚  â”‚    Stock     â”‚  â”‚    Inbound/        â”‚  â”‚
│  â”‚   Service   â”‚  â”‚    Service   â”‚  â”‚    Outbound        â”‚  â”‚
│  â””─────────────┘  â””──────────────┘  â””────────────────────┘  â”‚
└─────────────────────────────────────────────────────────────┘
```
## WCS é¡¹ç›®ç»“æž„
| é¡¹ç›® | ç”¨é€” |
|------|------|
| `WIDESEAWCS_Server` | ä¸» API å…¥å£ï¼ˆç«¯å£ 9292) |
| `WIDESEAWCS_Core` | æ¡†æž¶ï¼ˆæ•°æ®åº“、缓存、DI、日志) |
| `WIDESEAWCS_Common` | å¸¸é‡ã€æžšä¸¾ã€Redis é”® |
| `WIDESEAWCS_Model` | å®žä½“模型 |
| `WIDESEAWCS_DTO` | æ•°æ®ä¼ è¾“对象 |
| `WIDESEAWCS_Communicator` | å·¥ä¸šåè®®ï¼ˆModbus、S7、Omron ç­‰ï¼‰ |
| `WIDESEAWCS_Tasks` | åŽå°è®¾å¤‡æŽ§åˆ¶ä½œä¸š |
| `WIDESEAWCS_QuartzJob` | Quartz.NET è°ƒåº¦ |
**详细 WCS è§„范**:见 `WCS/WIDESEAWCS_Server/CLAUDE.md`
## WMS é¡¹ç›®ç»“æž„
| é¡¹ç›® | ç”¨é€” |
|------|------|
| `WIDESEA_WMSServer` | ä¸» API å…¥å£ï¼ˆç«¯å£ 9291) |
| `WIDESEA_Core` | æ¡†æž¶å·¥å…· |
| `WIDESEA_Common` | å¸¸é‡ã€æžšä¸¾ |
| `WIDESEA_Model` | å®žä½“模型 |
| `WIDESEA_*Service` | ä¸šåŠ¡é€»è¾‘æœåŠ¡ |
## å…³é”®è®¾è®¡
- **ORM**:SqlSugar(支持多数据库)
- **依赖注入**:Autofac,通过 `AutofacModuleRegister` æ³¨å†Œ
- **缓存**:Redis L1(内存)+ L2(Redis)混合缓存
- **调度**:Quartz.NET
- **实时通信**:SignalR WebSocket
- **设备协议**:存储在数据库 `Dt_DeviceProtocol` è¡¨ï¼Œéžé…ç½®æ–‡ä»¶
## æŠ€æœ¯æ ˆ
- **后端**:.NET 6/8,ASP.NET Core,C# 12
- **前端**:Vue 3,Element Plus,Vite,Pinia
- **数据库**:SQL Server
- **缓存**:Redis
## æ³¨é‡Šä¸Žæ–‡æ¡£ (强制)
- **XML æ–‡æ¡£æ³¨é‡Š**: æ‰€æœ‰ `public` ç±»ã€æŽ¥å£ã€æ–¹æ³•、属性**必须**包含 XML æ–‡æ¡£æ³¨é‡Š (`/// <summary>...</summary>`),解释其用途、参数和返回值。
- **行内注释**: å¯¹äºŽå¤æ‚的业务逻辑、算法实现或非直观的代码块,**必须**添加 `//` è¡Œå†…注释解释“为什么这么做”。
- **TODO æ ‡è®°**: å¦‚果代码未完成或有临时方案,必须使用 `// TODO: è¯´æ˜Ž` æ ‡è®°ã€‚
## é€šç”¨è§„范
- **异步编程**: æ‰€æœ‰ I/O æ“ä½œå¿…须使用 `async/await`。库代码请使用 `ConfigureAwait(false)`。
- **命名**:
  - æŽ¥å£ä»¥ "I" å¼€å¤´ (例如: `IUserService`)。
  - ç±»åã€æ–¹æ³•名使用 **PascalCase**。
  - ç§æœ‰å­—段、局部变量使用 **camelCase**。
- **命名空间**: ä½¿ç”¨ **文件作用域命名空间** (`namespace MyApp.Api;`)。
- å½“需要对两个或以上的数据库执行修改/添加操作并保证事务一致性时,请使用工作单元管理器(`IUnitOfWorkManage`)的事务方法:
  - **同步场景**:调用 `BeginTran(Func<WebResponseContent> func)`,传入同步委托。
  - **异步场景**:调用 `BeginTranAsync(Func<Task<WebResponseContent>> funcAsync)`,传入异步委托。
  **注意**:`IUnitOfWorkManage` éœ€é€šè¿‡ä¾èµ–注入(DI)获取。该方法会自动管理事务的提交与回滚,只需确保所有数据库操作在传入的委托内完成。
## ðŸš« ä¸¥ç¦äº‹é¡¹
- **严禁** ç”Ÿæˆæ²¡æœ‰æ³¨é‡Šçš„代码 (尤其是公共方法)。
- **严禁** ä½¿ç”¨ `Task.Result` æˆ– `Task.Wait()`。
- **严禁** åœ¨å¼‚步上下文中使用 `.ToList()` (必须用 `.ToListAsync()`)。
- **严禁** ç›´æŽ¥æš´éœ²å®žä½“ (Entity),必须使用 DTO。
- **严禁** æ•获 `Exception` è€Œä¸è®°å½•日志。
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/TaskInfo/UpdateTaskDto.cs
@@ -20,5 +20,16 @@
        /// newStatus - æ–°çŠ¶æ€ï¼Œå¿…å¡«é¡¹ï¼Œç”¨äºŽæŒ‡å®šä»»åŠ¡çš„æ–°çŠ¶æ€
        /// </summary>
        public int NewStatus { get; set; }
        /// <summary>
        /// NextAddress - ä¸‹ä¸€åœ°å€ï¼Œå¿…填项,用于指定任务的下一位置
        /// </summary>
        public string? NextAddress { get; set; }
        /// <summary>
        /// currentAddress - å½“前地址,必填项,用于指定任务的当前位置
        /// </summary>
        public string? CurrentAddress { get; set; }
    }
}
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Flows/InboundTaskFlowService.cs
@@ -137,7 +137,7 @@
        {
            var result = _httpClientHelper.Post<WebResponseContent>(
                nameof(ConfigKey.UpdateTaskByStatus),
                new UpdateTaskDto { Id = task.TaskNum, NewStatus = task.TaskStatus }.ToJson());
                new UpdateTaskDto { Id = task.TaskNum, NewStatus = task.TaskStatus, NextAddress = task.NextAddress, CurrentAddress = task.CurrentAddress }.ToJson());
            if (!result.IsSuccess || !result.Data.Status)
                return WebResponseContent.Instance.Error($"调用WMS接口更新任务状态失败,任务号:【{task.TaskNum}】,错误信息:【{result.Data?.Message}】");
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Flows/OutboundTaskFlowService.cs
@@ -225,7 +225,7 @@
        {
            var result = _httpClientHelper.Post<WebResponseContent>(
                nameof(ConfigKey.UpdateTaskByStatus),
                new UpdateTaskDto { Id = task.TaskNum, NewStatus = task.TaskStatus }.ToJson());
                new UpdateTaskDto { Id = task.TaskNum, NewStatus = task.TaskStatus, NextAddress = task.NextAddress, CurrentAddress = task.CurrentAddress }.ToJson());
            if (!result.IsSuccess || !result.Data.Status)
                return WebResponseContent.Instance.Error($"调用WMS接口更新任务状态失败,任务号:【{task.TaskNum}】,错误信息:【{result.Data?.Message}】");
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Flows/RelocationTaskFlowService.cs
@@ -102,7 +102,7 @@
        {
            var result = _httpClientHelper.Post<WebResponseContent>(
                nameof(ConfigKey.UpdateTaskByStatus),
                new UpdateTaskDto { Id = task.TaskNum, NewStatus = task.TaskStatus }.ToJson());
                new UpdateTaskDto { Id = task.TaskNum, NewStatus = task.TaskStatus, NextAddress = task.NextAddress, CurrentAddress = task.CurrentAddress }.ToJson());
            if (!result.IsSuccess || !result.Data.Status)
                return WebResponseContent.Instance.Error($"调用WMS接口更新任务状态失败,任务号:【{task.TaskNum}】,错误信息:【{result.Data?.Message}】");
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/ManualInbound/ManualInboundTaskHandler.cs
@@ -49,7 +49,7 @@
                // å†™å…¥èµ·å§‹åœ°å€
                conveyorLine.SetValue(ConveyorLineDBNameNew.Source, short.Parse(task.SourceAddress ?? "0"), childDeviceCode);
                // å†™å…¥ç›®æ ‡åœ°å€
                conveyorLine.SetValue(ConveyorLineDBNameNew.Target, short.Parse(task.TargetAddress ?? "0"), childDeviceCode);
                conveyorLine.SetValue(ConveyorLineDBNameNew.Target, short.Parse(task.NextAddress ?? "0"), childDeviceCode);
                // æ›´æ–°ä»»åŠ¡çŠ¶æ€åˆ°ä¸‹ä¸€é˜¶æ®µ
                var updateResult = _taskService.UpdateTaskStatusToNext(task);
Code/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Task/UpdateTaskDto.cs
@@ -19,5 +19,15 @@
        /// </summary>
        [Required(ErrorMessage = "新状态不能为空")]
        public int NewStatus { get; set; }
        /// <summary>
        /// NextAddress - ä¸‹ä¸€åœ°å€ï¼Œå¿…填项,用于指定任务的下一位置
        /// </summary>
        public string? NextAddress { get; set; }
        /// <summary>
        /// currentAddress - å½“前地址,必填项,用于指定任务的当前位置
        /// </summary>
        public string? CurrentAddress { get; set; }
    }
}
Code/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs
@@ -103,7 +103,7 @@
        /// <param name="taskId"></param>
        /// <param name="newStatus"></param>
        /// <returns></returns>
        Task<WebResponseContent> UpdateTaskByStatusAsync(int taskId, int newStatus);
        Task<WebResponseContent> UpdateTaskByStatusAsync(UpdateTaskDto taskDto);
        /// <summary>
        /// å †åž›æœºå–放货完成后物流通知化成分容柜完成信号
Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_WCS.cs
@@ -567,18 +567,20 @@
        /// <param name="taskId"></param>
        /// <param name="newStatus"></param>
        /// <returns></returns>
        public async Task<WebResponseContent> UpdateTaskByStatusAsync(int taskId, int newStatus)
        public async Task<WebResponseContent> UpdateTaskByStatusAsync(UpdateTaskDto taskDto)
        {
            try
            {
                var tasks = await BaseDal.QueryFirstAsync(s => s.TaskNum == taskId);
                if (tasks == null)
                var taskInfo = await BaseDal.QueryFirstAsync(s => s.TaskNum == taskDto.Id);
                if (taskInfo == null)
                    return WebResponseContent.Instance.Error("未找到对应的任务");
                tasks.TaskStatus = newStatus;
                await BaseDal.UpdateDataAsync(tasks);
                taskInfo.TaskStatus = taskDto.NewStatus;
                taskInfo.NextAddress = taskDto.NextAddress;
                taskInfo.CurrentAddress = taskDto.CurrentAddress;
                await BaseDal.UpdateDataAsync(taskInfo);
                return WebResponseContent.Instance.OK("修改成功", tasks);
                return WebResponseContent.Instance.OK("修改成功", taskInfo);
            }
            catch (Exception ex)
            {
@@ -930,7 +932,7 @@
                    }
                };
                await _unitOfWorkManage.BeginTranAsync(async () =>
               return await _unitOfWorkManage.BeginTranAsync(async () =>
                {
                    // 4. ä¿å­˜åˆ°æ•°æ®åº“
                    var result = await BaseDal.AddDataAsync(task) > 0;
Code/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs
@@ -142,7 +142,7 @@
        [HttpGet, HttpPost, Route("UpdateTaskByStatus"), AllowAnonymous]
        public async Task<WebResponseContent?> UpdateTaskByStatusAsync([FromBody] UpdateTaskDto taskDto)
        {
            return await Service.UpdateTaskByStatusAsync(taskDto.Id, taskDto.NewStatus);
            return await Service.UpdateTaskByStatusAsync(taskDto);
        }
        /// <summary>
Code/²âÊÔ¹¤¾ß/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Server/Data/instance-1001/config.json
@@ -2,7 +2,7 @@
  "id": "1001",
  "name": "A\u533A_\u4E00\u6CE8\u8F93\u9001\u7EBF",
  "plcType": "S71500",
  "port": 105,
  "port": 103,
  "activationKey": "",
  "autoStart": false,
  "protocolTemplateId": "protocol-1001",
Code/²âÊÔ¹¤¾ß/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Server/Data/instance-1002/config.json
@@ -2,7 +2,7 @@
  "id": "1002",
  "name": "A\u533A_\u6362\u76D8\u8F93\u9001\u7EBF",
  "plcType": "S71500",
  "port": 108,
  "port": 104,
  "activationKey": "",
  "autoStart": false,
  "protocolTemplateId": "protocol-1002",
Code/²âÊÔ¹¤¾ß/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Server/Data/protocol-templates.json
@@ -705,7 +705,7 @@
        "dbNumber": 50,
        "offset": 18,
        "bit": 1,
        "dataType": 3,
        "dataType": 0,
        "length": 22,
        "direction": 2
      },
@@ -849,7 +849,7 @@
        "dbNumber": 50,
        "offset": 578,
        "bit": 1,
        "dataType": 3,
        "dataType": 0,
        "length": 22,
        "direction": 2
      },
@@ -993,7 +993,7 @@
        "dbNumber": 50,
        "offset": 1378,
        "bit": 1,
        "dataType": 3,
        "dataType": 0,
        "length": 22,
        "direction": 2
      },
@@ -1137,8 +1137,8 @@
        "dbNumber": 50,
        "offset": 1618,
        "bit": 1,
        "dataType": 3,
        "length": 22,
        "dataType": 0,
        "length": 20,
        "direction": 2
      }
    ]
@@ -1367,14 +1367,14 @@
        "dbNumber": 50,
        "offset": 18,
        "bit": 1,
        "dataType": 3,
        "length": 22,
        "dataType": 0,
        "length": 20,
        "direction": 2
      },
      {
        "fieldKey": "11010_TaskNo",
        "dbNumber": 50,
        "offset": 400,
        "offset": 360,
        "bit": 1,
        "dataType": 1,
        "length": 1,
@@ -1383,7 +1383,7 @@
      {
        "fieldKey": "11010_Source",
        "dbNumber": 50,
        "offset": 402,
        "offset": 362,
        "bit": 1,
        "dataType": 1,
        "length": 1,
@@ -1392,7 +1392,7 @@
      {
        "fieldKey": "11010_Target",
        "dbNumber": 50,
        "offset": 404,
        "offset": 364,
        "bit": 1,
        "dataType": 1,
        "length": 1,
@@ -1401,7 +1401,7 @@
      {
        "fieldKey": "11010_BoxType",
        "dbNumber": 50,
        "offset": 406,
        "offset": 366,
        "bit": 1,
        "dataType": 0,
        "length": 1,
@@ -1410,7 +1410,7 @@
      {
        "fieldKey": "11010_CV_State",
        "dbNumber": 50,
        "offset": 407,
        "offset": 367,
        "bit": 1,
        "dataType": 0,
        "length": 1,
@@ -1419,7 +1419,7 @@
      {
        "fieldKey": "11010_CV_ERRCode",
        "dbNumber": 50,
        "offset": 408,
        "offset": 368,
        "bit": 1,
        "dataType": 0,
        "length": 1,
@@ -1428,7 +1428,7 @@
      {
        "fieldKey": "11010_WCS_STB",
        "dbNumber": 50,
        "offset": 409,
        "offset": 369,
        "bit": 1,
        "dataType": 0,
        "length": 1,
@@ -1437,7 +1437,7 @@
      {
        "fieldKey": "11010_WCS_ACK",
        "dbNumber": 50,
        "offset": 410,
        "offset": 370,
        "bit": 1,
        "dataType": 0,
        "length": 1,
@@ -1446,7 +1446,7 @@
      {
        "fieldKey": "11010_PLC_STB",
        "dbNumber": 50,
        "offset": 411,
        "offset": 371,
        "bit": 1,
        "dataType": 0,
        "length": 1,
@@ -1455,7 +1455,7 @@
      {
        "fieldKey": "11010_PLC_ACK",
        "dbNumber": 50,
        "offset": 412,
        "offset": 372,
        "bit": 1,
        "dataType": 0,
        "length": 1,
@@ -1464,7 +1464,7 @@
      {
        "fieldKey": "11010_PLC_REQ",
        "dbNumber": 50,
        "offset": 413,
        "offset": 373,
        "bit": 1,
        "dataType": 0,
        "length": 1,
@@ -1473,7 +1473,7 @@
      {
        "fieldKey": "11010_WCS_ERRCode",
        "dbNumber": 50,
        "offset": 414,
        "offset": 374,
        "bit": 1,
        "dataType": 0,
        "length": 1,
@@ -1482,7 +1482,7 @@
      {
        "fieldKey": "11010_WCS_Special",
        "dbNumber": 50,
        "offset": 415,
        "offset": 375,
        "bit": 1,
        "dataType": 0,
        "length": 1,
@@ -1491,7 +1491,7 @@
      {
        "fieldKey": "11010_Equ_Auto",
        "dbNumber": 50,
        "offset": 416,
        "offset": 376,
        "bit": 1,
        "dataType": 0,
        "length": 1,
@@ -1500,7 +1500,7 @@
      {
        "fieldKey": "11010_Last_pallet",
        "dbNumber": 50,
        "offset": 417,
        "offset": 377,
        "bit": 1,
        "dataType": 0,
        "length": 1,
@@ -1509,16 +1509,16 @@
      {
        "fieldKey": "11010_Barcode",
        "dbNumber": 50,
        "offset": 418,
        "offset": 378,
        "bit": 1,
        "dataType": 3,
        "length": 22,
        "dataType": 0,
        "length": 20,
        "direction": 2
      },
      {
        "fieldKey": "11020_TaskNo",
        "dbNumber": 50,
        "offset": 800,
        "offset": 760,
        "bit": 1,
        "dataType": 1,
        "length": 1,
@@ -1527,7 +1527,7 @@
      {
        "fieldKey": "11020_Source",
        "dbNumber": 50,
        "offset": 802,
        "offset": 762,
        "bit": 1,
        "dataType": 1,
        "length": 1,
@@ -1536,7 +1536,7 @@
      {
        "fieldKey": "11020_Target",
        "dbNumber": 50,
        "offset": 804,
        "offset": 764,
        "bit": 1,
        "dataType": 1,
        "length": 1,
@@ -1545,7 +1545,7 @@
      {
        "fieldKey": "11020_BoxType",
        "dbNumber": 50,
        "offset": 806,
        "offset": 766,
        "bit": 1,
        "dataType": 0,
        "length": 1,
@@ -1554,7 +1554,7 @@
      {
        "fieldKey": "11020_CV_State",
        "dbNumber": 50,
        "offset": 807,
        "offset": 767,
        "bit": 1,
        "dataType": 0,
        "length": 1,
@@ -1563,7 +1563,7 @@
      {
        "fieldKey": "11020_CV_ERRCode",
        "dbNumber": 50,
        "offset": 808,
        "offset": 768,
        "bit": 1,
        "dataType": 0,
        "length": 1,
@@ -1572,7 +1572,7 @@
      {
        "fieldKey": "11020_WCS_STB",
        "dbNumber": 50,
        "offset": 809,
        "offset": 769,
        "bit": 1,
        "dataType": 0,
        "length": 1,
@@ -1581,7 +1581,7 @@
      {
        "fieldKey": "11020_WCS_ACK",
        "dbNumber": 50,
        "offset": 810,
        "offset": 770,
        "bit": 1,
        "dataType": 0,
        "length": 1,
@@ -1590,7 +1590,7 @@
      {
        "fieldKey": "11020_PLC_STB",
        "dbNumber": 50,
        "offset": 811,
        "offset": 771,
        "bit": 1,
        "dataType": 0,
        "length": 1,
@@ -1599,7 +1599,7 @@
      {
        "fieldKey": "11020_PLC_ACK",
        "dbNumber": 50,
        "offset": 812,
        "offset": 772,
        "bit": 1,
        "dataType": 0,
        "length": 1,
@@ -1608,7 +1608,7 @@
      {
        "fieldKey": "11020_PLC_REQ",
        "dbNumber": 50,
        "offset": 813,
        "offset": 773,
        "bit": 1,
        "dataType": 0,
        "length": 1,
@@ -1617,7 +1617,7 @@
      {
        "fieldKey": "11020_WCS_ERRCode",
        "dbNumber": 50,
        "offset": 814,
        "offset": 774,
        "bit": 1,
        "dataType": 0,
        "length": 1,
@@ -1626,7 +1626,7 @@
      {
        "fieldKey": "11020_WCS_Special",
        "dbNumber": 50,
        "offset": 815,
        "offset": 775,
        "bit": 1,
        "dataType": 0,
        "length": 1,
@@ -1635,7 +1635,7 @@
      {
        "fieldKey": "11020_Equ_Auto",
        "dbNumber": 50,
        "offset": 816,
        "offset": 776,
        "bit": 1,
        "dataType": 0,
        "length": 1,
@@ -1644,7 +1644,7 @@
      {
        "fieldKey": "11020_Last_pallet",
        "dbNumber": 50,
        "offset": 817,
        "offset": 777,
        "bit": 1,
        "dataType": 0,
        "length": 1,
@@ -1653,16 +1653,16 @@
      {
        "fieldKey": "11020_Barcode",
        "dbNumber": 50,
        "offset": 818,
        "offset": 778,
        "bit": 1,
        "dataType": 3,
        "dataType": 0,
        "length": 22,
        "direction": 2
      },
      {
        "fieldKey": "11026_TaskNo",
        "dbNumber": 50,
        "offset": 1040,
        "offset": 1000,
        "bit": 1,
        "dataType": 1,
        "length": 1,
@@ -1671,7 +1671,7 @@
      {
        "fieldKey": "11026_Source",
        "dbNumber": 50,
        "offset": 1042,
        "offset": 1002,
        "bit": 1,
        "dataType": 1,
        "length": 1,
@@ -1680,7 +1680,7 @@
      {
        "fieldKey": "11026_Target",
        "dbNumber": 50,
        "offset": 1044,
        "offset": 1004,
        "bit": 1,
        "dataType": 1,
        "length": 1,
@@ -1689,7 +1689,7 @@
      {
        "fieldKey": "11026_BoxType",
        "dbNumber": 50,
        "offset": 1046,
        "offset": 1006,
        "bit": 1,
        "dataType": 0,
        "length": 1,
@@ -1698,7 +1698,7 @@
      {
        "fieldKey": "11026_CV_State",
        "dbNumber": 50,
        "offset": 1047,
        "offset": 1007,
        "bit": 1,
        "dataType": 0,
        "length": 1,
@@ -1707,7 +1707,7 @@
      {
        "fieldKey": "11026_CV_ERRCode",
        "dbNumber": 50,
        "offset": 1048,
        "offset": 1008,
        "bit": 1,
        "dataType": 0,
        "length": 1,
@@ -1716,7 +1716,7 @@
      {
        "fieldKey": "11026_WCS_STB",
        "dbNumber": 50,
        "offset": 1049,
        "offset": 1009,
        "bit": 1,
        "dataType": 0,
        "length": 1,
@@ -1725,7 +1725,7 @@
      {
        "fieldKey": "11026_WCS_ACK",
        "dbNumber": 50,
        "offset": 1050,
        "offset": 1010,
        "bit": 1,
        "dataType": 0,
        "length": 1,
@@ -1734,7 +1734,7 @@
      {
        "fieldKey": "11026_PLC_STB",
        "dbNumber": 50,
        "offset": 1051,
        "offset": 1011,
        "bit": 1,
        "dataType": 0,
        "length": 1,
@@ -1743,7 +1743,7 @@
      {
        "fieldKey": "11026_PLC_ACK",
        "dbNumber": 50,
        "offset": 1052,
        "offset": 1012,
        "bit": 1,
        "dataType": 0,
        "length": 1,
@@ -1752,7 +1752,7 @@
      {
        "fieldKey": "11026_PLC_REQ",
        "dbNumber": 50,
        "offset": 1053,
        "offset": 1013,
        "bit": 1,
        "dataType": 0,
        "length": 1,
@@ -1761,7 +1761,7 @@
      {
        "fieldKey": "11026_WCS_ERRCode",
        "dbNumber": 50,
        "offset": 1054,
        "offset": 1014,
        "bit": 1,
        "dataType": 0,
        "length": 1,
@@ -1770,7 +1770,7 @@
      {
        "fieldKey": "11026_WCS_Special",
        "dbNumber": 50,
        "offset": 1055,
        "offset": 1015,
        "bit": 1,
        "dataType": 0,
        "length": 1,
@@ -1779,7 +1779,7 @@
      {
        "fieldKey": "11026_Equ_Auto",
        "dbNumber": 50,
        "offset": 1056,
        "offset": 1016,
        "bit": 1,
        "dataType": 0,
        "length": 1,
@@ -1788,7 +1788,7 @@
      {
        "fieldKey": "11026_Last_pallet",
        "dbNumber": 50,
        "offset": 1057,
        "offset": 1017,
        "bit": 1,
        "dataType": 0,
        "length": 1,
@@ -1797,9 +1797,9 @@
      {
        "fieldKey": "11026_Barcode",
        "dbNumber": 50,
        "offset": 1058,
        "offset": 1018,
        "bit": 1,
        "dataType": 3,
        "dataType": 0,
        "length": 22,
        "direction": 2
      }
@@ -1950,7 +1950,7 @@
        "dbNumber": 50,
        "offset": 18,
        "bit": 1,
        "dataType": 3,
        "dataType": 0,
        "length": 20,
        "direction": 2
      },
@@ -2094,7 +2094,7 @@
        "dbNumber": 50,
        "offset": 338,
        "bit": 1,
        "dataType": 3,
        "dataType": 0,
        "length": 20,
        "direction": 2
      },
@@ -2238,7 +2238,7 @@
        "dbNumber": 50,
        "offset": 618,
        "bit": 1,
        "dataType": 3,
        "dataType": 0,
        "length": 22,
        "direction": 2
      }