qinchulong
2025-03-01 de9b341ccc98d554f0c324478acab26d7d3cdafd
新增错误信息显示

新增错误信息显示
已修改9个文件
已添加5个文件
575 ■■■■ 文件已修改
项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.json 136 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/StockEnum/stockEnum.cs 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemServices/Idt_ErrormsginfoService.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/System/dt_batchInfo.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/System/dt_errorInfo.cs 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/WMSPart/Dt_LocationInfo.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/System/ErrorInfoController.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Program.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_SystemServices/dt_errormsginfoService.cs 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs 166 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/OHT/OHTJob.cs 138 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/OHT/OHTTaskCommand.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.json
@@ -3,16 +3,40 @@
  "WorkspaceRootPath": "F:\\Git\u9879\u76EE\\YangJiPingKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\",
  "Documents": [
    {
      "AbsoluteMoniker": "D:0:0:{7F200FE8-CAF6-4131-BD25-8D438FE0ABAC}|WIDESEAWCS_Model\\WIDESEAWCS_Model.csproj|f:\\git\u9879\u76EE\\yangjipingku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_model\\models\\wmspart\\dt_locationinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{7F200FE8-CAF6-4131-BD25-8D438FE0ABAC}|WIDESEAWCS_Model\\WIDESEAWCS_Model.csproj|solutionrelative:wideseawcs_model\\models\\wmspart\\dt_locationinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|f:\\git\u9879\u76EE\\yangjipingku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_server\\controllers\\wmspart\\locationinfocontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\controllers\\wmspart\\locationinfocontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{7F200FE8-CAF6-4131-BD25-8D438FE0ABAC}|WIDESEAWCS_Model\\WIDESEAWCS_Model.csproj|f:\\git\u9879\u76EE\\yangjipingku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_model\\models\\system\\dt_errorinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{7F200FE8-CAF6-4131-BD25-8D438FE0ABAC}|WIDESEAWCS_Model\\WIDESEAWCS_Model.csproj|solutionrelative:wideseawcs_model\\models\\system\\dt_errorinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{7F200FE8-CAF6-4131-BD25-8D438FE0ABAC}|WIDESEAWCS_Model\\WIDESEAWCS_Model.csproj|f:\\git\u9879\u76EE\\yangjipingku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_model\\models\\system\\dt_batchinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{7F200FE8-CAF6-4131-BD25-8D438FE0ABAC}|WIDESEAWCS_Model\\WIDESEAWCS_Model.csproj|solutionrelative:wideseawcs_model\\models\\system\\dt_batchinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{83F18A31-5983-4587-A0B2-414BF70E50B5}|WIDESEAWCS_TaskInfoService\\WIDESEAWCS_TaskInfoService.csproj|f:\\git\u9879\u76EE\\yangjipingku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_taskinfoservice\\taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{83F18A31-5983-4587-A0B2-414BF70E50B5}|WIDESEAWCS_TaskInfoService\\WIDESEAWCS_TaskInfoService.csproj|solutionrelative:wideseawcs_taskinfoservice\\taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{7F200FE8-CAF6-4131-BD25-8D438FE0ABAC}|WIDESEAWCS_Model\\WIDESEAWCS_Model.csproj|F:\\Git\u9879\u76EE\\YangJiPingKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\wideseawcs_model\\models\\wmspart\\dt_stockinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{7F200FE8-CAF6-4131-BD25-8D438FE0ABAC}|WIDESEAWCS_Model\\WIDESEAWCS_Model.csproj|solutionrelative:wideseawcs_model\\models\\wmspart\\dt_stockinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|F:\\Git\u9879\u76EE\\YangJiPingKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\wideseawcs_tasks\\oht\\ohtjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\oht\\ohtjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{9FBC654C-51DE-422D-9E1E-6A38268DE1E2}|WIDESEAWCS_Common\\WIDESEAWCS_Common.csproj|f:\\git\u9879\u76EE\\yangjipingku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_common\\taskenum\\taskstatusenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{9FBC654C-51DE-422D-9E1E-6A38268DE1E2}|WIDESEAWCS_Common\\WIDESEAWCS_Common.csproj|solutionrelative:wideseawcs_common\\taskenum\\taskstatusenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{9FBC654C-51DE-422D-9E1E-6A38268DE1E2}|WIDESEAWCS_Common\\WIDESEAWCS_Common.csproj|f:\\git\u9879\u76EE\\yangjipingku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_common\\taskenum\\tasktypeenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{9FBC654C-51DE-422D-9E1E-6A38268DE1E2}|WIDESEAWCS_Common\\WIDESEAWCS_Common.csproj|solutionrelative:wideseawcs_common\\taskenum\\tasktypeenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{7279A2AE-8D1F-4E66-A73A-01AF7927A336}|WIDESEAWCS_ITaskInfoService\\WIDESEAWCS_ITaskInfoService.csproj|f:\\git\u9879\u76EE\\yangjipingku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_itaskinfoservice\\itaskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{7279A2AE-8D1F-4E66-A73A-01AF7927A336}|WIDESEAWCS_ITaskInfoService\\WIDESEAWCS_ITaskInfoService.csproj|solutionrelative:wideseawcs_itaskinfoservice\\itaskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    }
  ],
  "DocumentGroupContainers": [
@@ -22,43 +46,121 @@
      "DocumentGroups": [
        {
          "DockedWidth": 200,
          "SelectedChildIndex": 1,
          "SelectedChildIndex": 0,
          "Children": [
            {
              "$type": "Document",
              "DocumentIndex": 1,
              "Title": "Dt_StockInfo.cs",
              "DocumentMoniker": "F:\\Git\u9879\u76EE\\YangJiPingKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Model\\Models\\WMSPart\\Dt_StockInfo.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Model\\Models\\WMSPart\\Dt_StockInfo.cs",
              "ToolTip": "F:\\Git\u9879\u76EE\\YangJiPingKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Model\\Models\\WMSPart\\Dt_StockInfo.cs",
              "RelativeToolTip": "WIDESEAWCS_Model\\Models\\WMSPart\\Dt_StockInfo.cs",
              "ViewState": "AQIAAAAAAAAAAAAAAADwvw4AAAAdAAAA",
              "DocumentIndex": 0,
              "Title": "Dt_LocationInfo.cs",
              "DocumentMoniker": "F:\\Git\u9879\u76EE\\YangJiPingKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Model\\Models\\WMSPart\\Dt_LocationInfo.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Model\\Models\\WMSPart\\Dt_LocationInfo.cs",
              "ToolTip": "F:\\Git\u9879\u76EE\\YangJiPingKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Model\\Models\\WMSPart\\Dt_LocationInfo.cs",
              "RelativeToolTip": "WIDESEAWCS_Model\\Models\\WMSPart\\Dt_LocationInfo.cs",
              "ViewState": "AQIAABEAAAAAAAAAAAAIwBoAAAAeAAAA",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-02-28T16:09:28.316Z",
              "WhenOpened": "2025-03-01T13:24:50.229Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 0,
              "DocumentIndex": 1,
              "Title": "LocationInfoController.cs",
              "DocumentMoniker": "F:\\Git\u9879\u76EE\\YangJiPingKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\WMSPart\\LocationInfoController.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Controllers\\WMSPart\\LocationInfoController.cs",
              "ToolTip": "F:\\Git\u9879\u76EE\\YangJiPingKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\WMSPart\\LocationInfoController.cs",
              "RelativeToolTip": "WIDESEAWCS_Server\\Controllers\\WMSPart\\LocationInfoController.cs",
              "ViewState": "AQIAABQAAAAAAAAAAAAIwBMAAAAxAAAA",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-01T13:10:30.756Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 3,
              "Title": "dt_batchInfo.cs",
              "DocumentMoniker": "F:\\Git\u9879\u76EE\\YangJiPingKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Model\\Models\\System\\dt_batchInfo.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Model\\Models\\System\\dt_batchInfo.cs",
              "ToolTip": "F:\\Git\u9879\u76EE\\YangJiPingKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Model\\Models\\System\\dt_batchInfo.cs",
              "RelativeToolTip": "WIDESEAWCS_Model\\Models\\System\\dt_batchInfo.cs",
              "ViewState": "AQIAAAMAAAAAAAAAAADwvxoAAAApAAAA",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-01T12:57:42.442Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 2,
              "Title": "dt_errorInfo.cs",
              "DocumentMoniker": "F:\\Git\u9879\u76EE\\YangJiPingKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Model\\Models\\System\\dt_errorInfo.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Model\\Models\\System\\dt_errorInfo.cs",
              "ToolTip": "F:\\Git\u9879\u76EE\\YangJiPingKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Model\\Models\\System\\dt_errorInfo.cs",
              "RelativeToolTip": "WIDESEAWCS_Model\\Models\\System\\dt_errorInfo.cs",
              "ViewState": "AQIAAAAAAAAAAAAAAADwvxAAAAAVAAAA",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-01T12:57:28.109Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 7,
              "Title": "TaskTypeEnum.cs",
              "DocumentMoniker": "F:\\Git\u9879\u76EE\\YangJiPingKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Common\\TaskEnum\\TaskTypeEnum.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Common\\TaskEnum\\TaskTypeEnum.cs",
              "ToolTip": "F:\\Git\u9879\u76EE\\YangJiPingKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Common\\TaskEnum\\TaskTypeEnum.cs",
              "RelativeToolTip": "WIDESEAWCS_Common\\TaskEnum\\TaskTypeEnum.cs",
              "ViewState": "AQIAAAkAAAAAAAAAAAAAACcAAAAQAAAA",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-01T10:49:19.145Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 6,
              "Title": "TaskStatusEnum.cs",
              "DocumentMoniker": "F:\\Git\u9879\u76EE\\YangJiPingKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Common\\TaskEnum\\TaskStatusEnum.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Common\\TaskEnum\\TaskStatusEnum.cs",
              "ToolTip": "F:\\Git\u9879\u76EE\\YangJiPingKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Common\\TaskEnum\\TaskStatusEnum.cs",
              "RelativeToolTip": "WIDESEAWCS_Common\\TaskEnum\\TaskStatusEnum.cs",
              "ViewState": "AQIAAEMAAAAAAAAAAAAQwGAAAAAdAAAA",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-01T10:44:46.357Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 8,
              "Title": "ITaskService.cs",
              "DocumentMoniker": "F:\\Git\u9879\u76EE\\YangJiPingKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_ITaskInfoService\\ITaskService.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_ITaskInfoService\\ITaskService.cs",
              "ToolTip": "F:\\Git\u9879\u76EE\\YangJiPingKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_ITaskInfoService\\ITaskService.cs",
              "RelativeToolTip": "WIDESEAWCS_ITaskInfoService\\ITaskService.cs",
              "ViewState": "AQIAAFgAAAAAAAAAAAAjwGoAAAANAAAA",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-03-01T08:22:29.442Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 4,
              "Title": "TaskService.cs",
              "DocumentMoniker": "F:\\Git\u9879\u76EE\\YangJiPingKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\TaskService.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_TaskInfoService\\TaskService.cs",
              "ToolTip": "F:\\Git\u9879\u76EE\\YangJiPingKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\TaskService.cs",
              "RelativeToolTip": "WIDESEAWCS_TaskInfoService\\TaskService.cs",
              "ViewState": "AQIAADQAAAAAAAAAAAAIwEMAAAANAAAA",
              "ViewState": "AQIAAKABAAAAAAAAAAAAAKkBAAAAAAAA",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-02-28T15:19:29.662Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 2,
              "DocumentIndex": 5,
              "Title": "OHTJob.cs",
              "DocumentMoniker": "F:\\Git\u9879\u76EE\\YangJiPingKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\OHT\\OHTJob.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\OHT\\OHTJob.cs",
              "ToolTip": "F:\\Git\u9879\u76EE\\YangJiPingKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\OHT\\OHTJob.cs",
              "RelativeToolTip": "WIDESEAWCS_Tasks\\OHT\\OHTJob.cs",
              "ViewState": "AQIAAHwAAAAAAAAAAAAYwIIAAAAiAAAA",
              "ViewState": "AQIAAJEAAAAAAAAAAAArwKwAAAAlAAAA",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-02-28T15:12:12.623Z",
              "EditorCaption": ""
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/StockEnum/stockEnum.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEAWCS_Common.StockEnum
{
    public enum stockEnum
    {
        /// <summary>
        /// ç©ºé—²
        /// </summary>
        [Description("空闲")]
        Free = 0,
        /// <summary>
        /// é”å®š
        /// </summary>
        [Description("预定")]
        Lock = 1,
    }
}
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs
@@ -16,9 +16,9 @@
        InNew = 200,
        /// <summary>
        /// å¤©è½¦å–货完成
        /// å¤©è½¦å…¥åº“取货完成
        /// </summary>
        [Description("天车取货完成")]
        [Description("天车入库取货完成")]
        Line_Ingrab = 210,
        /// <summary>
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemServices/Idt_ErrormsginfoService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Core.BaseServices;
using WIDESEAWCS_Model.Models;
namespace WIDESEAWCS_ISystemServices
{
    public interface Idt_ErrormsginfoService : IService<dt_errorInfo>
    {
    }
}
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs
@@ -29,6 +29,7 @@
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Core.BaseRepository;
using WIDESEAWCS_Model.Models.System;
namespace WIDESEAWCS_ITaskInfoService
{
@@ -193,7 +194,7 @@
        /// </summary>
        /// <param name="taskNum">任务编号</param>
        /// <returns>返回处理结果</returns>
        WebResponseContent StackCraneTaskCompleted(int taskNum);
        WebResponseContent StackCraneTaskCompleted(int taskNum,float weight);
        /// <summary>
        /// æ¢å¤æŒ‚起任务
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/System/dt_batchInfo.cs
@@ -11,7 +11,7 @@
    /// <summary>
    /// æ‰¹æ¬¡ä¿¡æ¯
    /// </summary>
    [SugarTable(nameof(dt_batchInfo), "库存信息")]
    [SugarTable(nameof(dt_batchInfo), "批次信息")]
    public class dt_batchInfo : BaseEntity
    {
        /// <summary>
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/System/dt_errorInfo.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Core.DB.Models;
namespace WIDESEAWCS_Model.Models
{
    /// <summary>
    /// é”™è¯¯ä¿¡æ¯
    /// </summary>
    [SugarTable(nameof(dt_batchInfo), "错误信息")]
    public class dt_errorInfo : BaseEntity
    {
        /// <summary>
        /// ä¸»é”®
        /// </summary>
        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "主键")]
        public int Id { get; set; }
        /// <summary>
        /// æè¿°
        /// </summary>
        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "描述")]
        public string mesg { get; set; }
        /// <summary>
        /// é”™è¯¯ä¿¡æ¯
        /// </summary>
        [SugarColumn(IsNullable = true, Length = 255, ColumnDescription = "错误信息")]
        public string errormsg { get; set; }
    }
}
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/WMSPart/Dt_LocationInfo.cs
@@ -23,7 +23,7 @@
        /// <summary>
        /// ä»“库编号
        /// </summary>
        [SugarColumn(IsNullable = false, ColumnDescription = "仓库编号")]
        [SugarColumn(IsNullable = true, ColumnDescription = "仓库编号")]
        public int WarehouseId { get; set; }
        /// <summary>
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/System/ErrorInfoController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
using Microsoft.AspNetCore.Mvc;
using WIDESEAWCS_Core.BaseController;
using WIDESEAWCS_ISystemServices;
using WIDESEAWCS_Model.Models;
namespace WIDESEAWCS_Server.Controllers.System
{
    [Route("api/Batch")]
    [ApiController]
    public class ErrorInfoController : ApiBaseController<Idt_ErrormsginfoService, dt_errorInfo>
    {
        private readonly IHttpContextAccessor _httpContextAccessor;
        public ErrorInfoController(Idt_ErrormsginfoService service, IHttpContextAccessor httpContextAccessor) : base(service)
        {
            _httpContextAccessor = httpContextAccessor;
        }
    }
}
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Program.cs
@@ -23,6 +23,7 @@
using Microsoft.AspNetCore.Builder;
using WIDESEAWCS_Server.HostedService;
using WIDESEAWCS_Server.Filter;
using WIDESEAWCS_Tasks.OHT;
var builder = WebApplication.CreateBuilder(args);
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_SystemServices/dt_errormsginfoService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
using AutoMapper;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Core.BaseRepository;
using WIDESEAWCS_Core.BaseServices;
using WIDESEAWCS_ISystemServices;
using WIDESEAWCS_Model.Models;
namespace WIDESEAWCS_SystemServices
{
    public class dt_errormsginfoService : ServiceBase<dt_errorInfo, IRepository<dt_errorInfo>>, Idt_ErrormsginfoService
    {
        private readonly IMapper _mapper;
        /// <summary>
        /// ä»“储层(数据库访问)
        /// </summary>
        public IRepository<dt_errorInfo> Repository => BaseDal;
        public dt_errormsginfoService(IRepository<dt_errorInfo> BaseDal, IMapper mapper) : base(BaseDal)
        {
            _mapper = mapper;
        }
    }
}
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -16,8 +16,11 @@
#endregion << ç‰ˆ æœ¬ æ³¨ é‡Š >>
using AutoMapper;
using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
using SqlSugar;
using System.Diagnostics.CodeAnalysis;
using WIDESEAWCS_Common.LocationEnum;
using WIDESEAWCS_Common.StockEnum;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.BaseRepository;
@@ -27,6 +30,7 @@
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_IWMSPart;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_Model.Models.System;
using WIDESEAWCS_QuartzJob.Models;
using WIDESEAWCS_QuartzJob.Service;
@@ -40,7 +44,8 @@
        private readonly IRepository<Dt_StockInfo> _stockRepository;
        private readonly IRepository<Dt_LocationInfo> _locationRepository;
        private readonly IRepository<dt_batchInfo> _batchinfoRepository;
        private readonly IRepository<Dt_Task_hty> _taskhtyRepository;
        private readonly IUnitOfWorkManage _unitOfWorkManage;
        private readonly IMapper _mapper;
        private Dictionary<string, OrderByType> _taskOrderBy = new()
@@ -60,12 +65,16 @@
        /// </summary>
        public IRepository<Dt_Task> Repository => BaseDal;
        //SBText ITaskService.text { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }
        public TaskService(IRepository<Dt_Task> BaseDal, IRouterService routerService, 
            ITaskExecuteDetailService taskExecuteDetailService, 
            IRepository<Dt_TaskExecuteDetail> taskExecuteDetailRepository,
            IRepository<Dt_StockInfo> stockRepository,
            IRepository<Dt_LocationInfo> locationRepository,
            IRepository<dt_batchInfo> batchRepository,
            IRepository<Dt_Task_hty> taskhtyRepository,
            IUnitOfWorkManage unitOfWorkManage,
            IMapper mapper) : base(BaseDal)
        {
            _routerService = routerService;
@@ -74,6 +83,8 @@
            _stockRepository = stockRepository;
            _locationRepository = locationRepository;
            _batchinfoRepository = batchRepository;
            _taskhtyRepository = taskhtyRepository;
            _unitOfWorkManage = unitOfWorkManage;
            _mapper = mapper;
        }
@@ -222,12 +233,39 @@
        /// <param name="deviceNo">设备编号</param>
        /// <param name="currentAddress">当前地址</param>
        /// <returns>返回任务实体对象,可能为null</returns>
        public Dt_Task QueryStackerCraneTask(string deviceNo, string currentAddress = "")
        public Dt_Task QueryStackerCraneTask(string workTpe, string currentAddress = "")
        {
            if (string.IsNullOrEmpty(currentAddress))
                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew), TaskOrderBy);
            else
                return BaseDal.QueryFirst(x => x.Roadway == deviceNo && x.CurrentAddress == currentAddress && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew), TaskOrderBy);
            Dt_Task task = new Dt_Task();
            try
            {
                //优先查询当前任务池中是否有取货完成的任务
                task = BaseDal.QueryFirst(v => v.TaskState == (int)TaskInStatusEnum.Line_Ingrab || v.TaskState == (int)TaskOutStatusEnum.SC_OutExecuting);
                if (task != null)
                {
                    //优先返回执行到一半的任务继续执行
                    return task;
                }
                //查询当前任务池中是否存在状态为非新建的
                task= BaseDal.QueryFirst(v => v.TaskState != (int)TaskInStatusEnum.InNew || v.TaskState != (int)TaskOutStatusEnum.OutNew);
                if (task != null)
                {
                    throw new Exception($"当前任务池中存在执行中的任务,任务号:【{task.TaskNum}】");
                }
                if (workTpe.Equals("In"))
                {
                    task = BaseDal.QueryData(v=>v.TaskType==(int)TaskInboundTypeEnum.Inbound && v.TaskState==(int)TaskInStatusEnum.InNew).OrderBy(v=>v.CreateDate).First();
                }
                else if (workTpe.Equals("Out"))
                {
                    task = BaseDal.QueryData(v => v.TaskType == (int)TaskOutboundTypeEnum.Outbound && v.TaskState == (int)TaskOutStatusEnum.OutNew).OrderBy(v => v.CreateDate).First();
                }
            }
            catch (Exception)
            {
                //将错误信息更新至错误信息记录表
            }
            return task;
        }
        /// <summary>
@@ -331,19 +369,19 @@
            {
                Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
                if (task == null) return WebResponseContent.Instance.Error($"未找到该任务信息,任务号:【{taskNum}】");
                if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
                {
                    task.TaskState = (int)TaskOutStatusEnum.OutPending;
                }
                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)
                {
                    task.TaskState = (int)TaskInStatusEnum.InPending;
                }
                //if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
                //{
                //    task.TaskState = (int)TaskOutStatusEnum.OutPending;
                //}
                //else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)
                //{
                //    task.TaskState = (int)TaskInStatusEnum.InPending;
                //}
                task.ExceptionMessage = message;
                task.ModifyDate = DateTime.Now;
                BaseDal.UpdateData(task);
                _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, task.ExceptionMessage);
                //_taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, task.ExceptionMessage);
                content = WebResponseContent.Instance.OK();
            }
@@ -355,17 +393,38 @@
        }
        /// <summary>
        /// æ›´æ–°ä»»åŠ¡çŠ¶æ€ä¿¡æ¯ï¼Œå¹¶åŒæ­¥è‡³WMS
        /// æ›´æ–°ä»»åŠ¡çŠ¶æ€ä¿¡æ¯
        /// </summary>
        /// <param name="taskNum">任务号</param>
        /// <param name="status">任务状态</param>
        public void UpdateTaskStatus(int taskNum, int status)
        {
            Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
            if (task == null) return;
            task.TaskState = status;
            task.ModifyDate = DateTime.Now;
            BaseDal.UpdateData(task);
            try
            {
                Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
                if (status == 2 && task.TaskType == (int)TaskInboundTypeEnum.Inbound)
                {
                    task.TaskState = (int)TaskInStatusEnum.Line_InGrabExecuting;
                }
                else if (status == 2 && task.TaskType == (int)TaskOutboundTypeEnum.Outbound)
                {
                    task.TaskState = (int)TaskOutStatusEnum.Line_OutGrabExecuting;
                }
                if (status == 3 && task.TaskType == (int)TaskInboundTypeEnum.Inbound)
                {
                    task.TaskState = (int)TaskInStatusEnum.Line_InDownExecuting;
                }
                else if (status == 3 && task.TaskType == (int)TaskOutboundTypeEnum.Outbound)
                {
                    task.TaskState = (int)TaskOutStatusEnum.Line_OutWownExecuting;
                }
                task.ModifyDate = DateTime.Now;
                BaseDal.UpdateData(task);
            }
            catch (Exception ex)
            {
            }
        }
        /// <summary>
@@ -493,7 +552,7 @@
        /// </summary>
        /// <param name="taskNum">任务编号</param>
        /// <returns>返回处理结果</returns>
        public WebResponseContent StackCraneTaskCompleted(int taskNum)
        public WebResponseContent StackCraneTaskCompleted(int taskNum,float weight)
        {
            WebResponseContent content = new WebResponseContent();
            try
@@ -505,18 +564,77 @@
                }
                if (nawtask.TaskType == (int)TaskInboundTypeEnum.Inbound)
                {
                    var batck = _batchinfoRepository.QueryFirst(v=>v.Id==1);
                    //新建库存
                    Dt_StockInfo stock = new Dt_StockInfo();
                    stock.LocationCode = nawtask.TargetAddress;
                    stock.Weight = (decimal)weight;
                    stock.StockStatus = (int)stockEnum.Lock;
                    stock.BatchNo = batck.Batch;
                    //修改货位信息
                    var location = _locationRepository.QueryFirst(v=>v.LocationCode==nawtask.TargetAddress);
                    location.LocationStatus = (int)LocationStatusEnum.InStock;
                    //处理任务信息
                    Dt_Task_hty taskhty = new Dt_Task_hty();
                    taskhty.TaskNum = nawtask.TaskNum;
                    taskhty.Roadway = nawtask.Roadway;
                    taskhty.TaskType = nawtask.TaskType;
                    taskhty.TaskState = (int)TaskInStatusEnum.Line_InFinish;
                    taskhty.SourceAddress = nawtask.SourceAddress;
                    taskhty.TargetAddress = nawtask.TargetAddress;
                    taskhty.ExceptionMessage = nawtask.ExceptionMessage;
                    taskhty.Grade = nawtask.Grade;
                    taskhty.Dispatchertime = nawtask.Dispatchertime;
                    taskhty.Remark = nawtask.Remark;
                    //开始数据库事务
                    _unitOfWorkManage.BeginTran();
                    _stockRepository.AddData(stock);
                    _locationRepository.UpdateData(location);
                    _taskhtyRepository.AddData(taskhty);
                    BaseDal.DeleteData(nawtask);
                    //提交事务
                    _unitOfWorkManage.CommitTran();
                }
                else if (nawtask.TaskType == (int)TaskOutboundTypeEnum.Outbound)
                {
                    //查找库存
                    var stock = _stockRepository.QueryFirst(v=>v.LocationCode== nawtask.TargetAddress);
                    if (stock == null)
                    {
                        throw new Exception($"未找到库存信息货位号:【{nawtask.TargetAddress}】");
                    }
                    //修改货位状态
                    var location = _locationRepository.QueryFirst(v => v.LocationCode == nawtask.TargetAddress);
                    location.LocationStatus = (int)LocationStatusEnum.Free;
                    //准备历史任务数据
                    Dt_Task_hty taskhty = new Dt_Task_hty();
                    taskhty.TaskNum = nawtask.TaskNum;
                    taskhty.Roadway = nawtask.Roadway;
                    taskhty.TaskType = nawtask.TaskType;
                    taskhty.TaskState = (int)TaskInStatusEnum.Line_InFinish;
                    taskhty.SourceAddress = nawtask.SourceAddress;
                    taskhty.TargetAddress = nawtask.TargetAddress;
                    taskhty.ExceptionMessage = nawtask.ExceptionMessage;
                    taskhty.Grade = nawtask.Grade;
                    taskhty.Dispatchertime = nawtask.Dispatchertime;
                    taskhty.Remark = nawtask.Remark;
                    //开始数据库事务
                    _unitOfWorkManage.BeginTran();
                    _stockRepository.DeleteData(stock);
                    _locationRepository.UpdateData(location);
                    _taskhtyRepository.AddData(taskhty);
                    BaseDal.DeleteData(nawtask);
                    //提交事务
                    _unitOfWorkManage.CommitTran();
                }
                content = WebResponseContent.Instance.OK();
            }
            catch (Exception ex)
            {
                //回滚事务
                _unitOfWorkManage.RollbackTran();
                content = WebResponseContent.Instance.Error($"任务完成异常,任务号:【{taskNum}】");
                UpdateTaskExceptionMessage(taskNum,ex.Message);
            }
            return content;
        }
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/OHT/OHTJob.cs
@@ -31,6 +31,7 @@
    [DisallowConcurrentExecution]
    public class OHTJob : JobBase, IJob
    {
        public static string InorOut = "In";
        private readonly ITaskService _taskService;
        WebSocketServer _webSocketServer;
        public OHTJob(ITaskService taskService, WebSocketServer webSocketServer)
@@ -38,7 +39,6 @@
            _taskService = taskService;//注入
            _webSocketServer = webSocketServer;
        }
        public Task Execute(IJobExecutionContext context)
        {
           
@@ -53,6 +53,7 @@
                    //device.SetValue  å†™å…¥
                    //_taskService.Repository; //仓储层,进行数据库访问
                    OHTReadData oHTReadData = new OHTReadData();
                    #region è¯»å–天车设备数据
                    oHTReadData.R_HeartBeat = device.GetValue<DeviceDBName, bool>(DeviceDBName.R_HeartBeat);
                    oHTReadData.R_RunMode = device.GetValue<DeviceDBName, short>(DeviceDBName.R_RunMode);
@@ -91,23 +92,24 @@
                    string ohtData = JsonConvert.SerializeObject(oHTReadData);
                    _webSocketServer.PublishAllClientPayload(ohtData);
                    #region å¤©è½¦å®Œæˆä»»åŠ¡é€»è¾‘
                    //因为天的任务需要分段发送,所以取货完成与放货完成需要单独做逻辑控制
                    //判断天车当前有没有取货完成任务信号
                    if (oHTReadData.R_RunState == (int)RunStateEnum.PickUpCompleted && oHTReadData.R_TaskState==(int)TaskStateEnum.TaskComplete)
                    if (oHTReadData.R_RunState == (int)RunStateEnum.PickUpCompleted && oHTReadData.R_TaskState == (int)TaskStateEnum.TaskComplete)
                    {
                        //天车取货完成逻辑
                        var nawtask = _taskService.QueryTakNnmTask(oHTReadData.R_TaskNumber);
                        if (nawtask==null)
                        if (nawtask == null)
                        {
                            throw new Exception(string.Format("天车取货完成任务未查询到任务号{0}",oHTReadData.R_TaskNumber));
                            throw new Exception(string.Format("天车取货完成任务未查询到任务号{0}", oHTReadData.R_TaskNumber));
                        }
                        if (nawtask.TaskType== (int)TaskInboundTypeEnum.Inbound)
                        if (nawtask.TaskType == (int)TaskInboundTypeEnum.Inbound)
                        {
                            //如果任务的状态是天车入库取货执行中
                            if (nawtask.TaskState==(int)TaskInStatusEnum.Line_InGrabExecuting)
                            if (nawtask.TaskState == (int)TaskInStatusEnum.Line_InGrabExecuting)
                            {
                                WebResponseContent result=_taskService.UpdateTaskStatusToLine_Ingrab(nawtask);
                                if (result.Status)
                                WebResponseContent result = _taskService.UpdateTaskStatusToLine_Ingrab(nawtask);
                                if (result.Status)
                                {
                                    device.SetValue(DeviceDBName.W_ConfirmSignal, 3);
                                }
@@ -125,19 +127,26 @@
                                }
                            }
                        }
                        return Task.CompletedTask;
                    }
                    else if (oHTReadData.R_RunState == (int)RunStateEnum.PutCompleted && oHTReadData.R_TaskState == (int)TaskStateEnum.TaskComplete)
                    {
                        //天车放货完成逻辑
                        _taskService.StackCraneTaskCompleted(oHTReadData.R_TaskNumber);
                        WebResponseContent result = _taskService.StackCraneTaskCompleted(oHTReadData.R_TaskNumber, oHTReadData.weight);
                        if (result.Status)
                        {
                            device.SetValue(DeviceDBName.W_ConfirmSignal, 3);
                        }
                        return Task.CompletedTask;
                    }
                    #endregion
                    #region å¤©è½¦å‘送任务逻辑
                    if (oHTReadData.R_RunMode == (int)RunModeEnum.Automatic && oHTReadData.R_AlarmCode == (int)AlarmCodeEnum.Normal)
                    {
                        if (oHTReadData.R_RunState == (int)RunStateEnum.Standby)
                        {
                            Dt_Task? task = GetTask();
                            Dt_Task? task = GetTask(InorOut);
                            if (task != null)
                            {
                                OHTTaskCommand? oHTTaskCommand = ConvertToOHTTaskCommand(task);
@@ -147,41 +156,34 @@
                                    device.SetValue(DeviceDBName.W_Task_Type, oHTTaskCommand.W_Task_Type);
                                    device.SetValue(DeviceDBName.W_Pick_Line, oHTTaskCommand.W_Pick_Line);
                                    device.SetValue(DeviceDBName.W_Pick_Column, oHTTaskCommand.W_Pick_Column);
                                    device.SetValue(DeviceDBName.W_Pick_Layer, oHTTaskCommand.W_Pick_Layer);
                                    device.SetValue(DeviceDBName.W_Put_Line, oHTTaskCommand.W_Put_Line);
                                    device.SetValue(DeviceDBName.W_Put_Column, oHTTaskCommand.W_Put_Column);
                                    device.SetValue(DeviceDBName.W_Put_Layer, oHTTaskCommand.W_Put_Layer);
                                    device.SetValue(DeviceDBName.W_Catch_1, oHTTaskCommand.W_Catch_1);
                                    device.SetValue(DeviceDBName.W_Catch_2, oHTTaskCommand.W_Catch_2);
                                    device.SetValue(DeviceDBName.W_TaskNumber, oHTTaskCommand.W_TaskNumber);
                                    device.SetValue(DeviceDBName.W_TaskNumber, oHTTaskCommand.W_TaskNumber);
                                    device.SetValue(DeviceDBName.W_CheckValue, oHTTaskCommand.W_CheckValue);
                                    //确认信号写入1,任务下达完成
                                    device.SetValue(DeviceDBName.W_ConfirmSignal, 1);
                                    Thread.Sleep(500);
                                    //WCS检测到天车的R_TaskState=1,通过W_ConfirmSignalç½®2表示让天车开始执行任务
                                    int R_TaskState = device.GetValue<DeviceDBName, short>(DeviceDBName.R_TaskState);
                                    if (R_TaskState == 1)
                                    {
                                        device.SetValue(DeviceDBName.W_ConfirmSignal, 2);
                                    }
                                    //下发成功,修改任务状态
                                    _taskService.UpdateTaskStatus(task.TaskNum, oHTTaskCommand.W_Task_Type);
                                }
                            }
                        }
                    }
                    WriteInfo(device.DeviceName, "infoLog");
                    WriteDebug(device.DeviceName, "debugLog");
                    #endregion
                }
                catch (Exception ex)
                {
                    WriteError(device.DeviceName, "错误", ex);
                }
            }
            return Task.CompletedTask;
        }
@@ -196,36 +198,65 @@
        {
            OHTTaskCommand oHtTaskCommand = new OHTTaskCommand();
            oHtTaskCommand.W_Task_Type = 1;
            oHtTaskCommand.W_Load_Layer = 0;
            oHtTaskCommand.W_Pick_Line = 1;
            string[] SourceCodes = task.SourceAddress.Split("-");
            if (SourceCodes.Length == 3)
            if (task.TaskState==(int)TaskInStatusEnum.InNew || task.TaskState == (int)TaskOutStatusEnum.OutNew)
            {
                oHtTaskCommand.W_Pick_Line = Convert.ToInt16(SourceCodes[1]);
                oHtTaskCommand.W_Put_Column = Convert.ToInt16(SourceCodes[2]);
                oHtTaskCommand.W_Put_Layer = Convert.ToInt16(SourceCodes[3]);
                oHtTaskCommand.W_Task_Type = 2;
                string[] SourceCodes = task.SourceAddress.Split("-");
                if (SourceCodes.Length == 3)
                {
                    oHtTaskCommand.W_Pick_Line = Convert.ToInt16(SourceCodes[0]);
                    oHtTaskCommand.W_Pick_Column = Convert.ToInt16(SourceCodes[1]);
                    oHtTaskCommand.W_Put_Line = 0;
                    oHtTaskCommand.W_Put_Column = 0;
                }
                else
                {
                    //数据配置错误
                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"任务源地址配置错误!");
                    return null;
                }
                oHtTaskCommand.W_CheckValue = task.TaskType + Convert.ToInt16(SourceCodes[0]) + Convert.ToInt16(SourceCodes[1]);
            }
            else
            else if (task.TaskState == (int)TaskInStatusEnum.Line_Ingrab || task.TaskState == (int)TaskOutStatusEnum.SC_OutExecuting)
            {
                //数据配置错误
                _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"任务源地址配置错误!");
                return null;
                oHtTaskCommand.W_Task_Type = 3;
                string[] SourceCodes = task.TargetAddress.Split("-");
                if (SourceCodes.Length == 3)
                {
                    oHtTaskCommand.W_Pick_Line = 0;
                    oHtTaskCommand.W_Pick_Column =0;
                    oHtTaskCommand.W_Put_Line = Convert.ToInt16(SourceCodes[0]);
                    oHtTaskCommand.W_Put_Column = Convert.ToInt16(SourceCodes[1]);
                }
                else
                {
                    //数据配置错误
                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"任务源地址配置错误!");
                    return null;
                }
                oHtTaskCommand.W_CheckValue = task.TaskType + Convert.ToInt16(SourceCodes[0]) + Convert.ToInt16(SourceCodes[1]);
            }
            string[] targetCodes = task.TargetAddress.Split("-");
            if (targetCodes.Length == 3)
            if (task.WMSId==1)
            {
                oHtTaskCommand.W_Put_Line = Convert.ToInt16(targetCodes[1]);
                oHtTaskCommand.W_Put_Column = Convert.ToInt16(targetCodes[2]);
                oHtTaskCommand.W_Put_Layer = Convert.ToInt16(targetCodes[3]);
                oHtTaskCommand.W_Catch_1 = 1;
                oHtTaskCommand.W_Catch_2 = 0;
                oHtTaskCommand.W_CheckValue += 1;
            }
            else
            else if (task.WMSId == 2)
            {
                //数据配置错误
                _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"任务目标地址配置错误");
                return null;
                oHtTaskCommand.W_Catch_1 = 0;
                oHtTaskCommand.W_Catch_2 = 1;
                oHtTaskCommand.W_CheckValue += 1;
            }
            else if (task.WMSId == 3)
            {
                oHtTaskCommand.W_Catch_1 = 1;
                oHtTaskCommand.W_Catch_2 = 1;
                oHtTaskCommand.W_CheckValue += 2;
            }
            oHtTaskCommand.W_TaskNumber = task.TaskNum;
            oHtTaskCommand.W_CheckValue += task.TaskNum;
            return oHtTaskCommand;
        }
@@ -234,15 +265,22 @@
        /// èŽ·å–ä»»åŠ¡
        /// </summary>
        /// <returns></returns>
        private Dt_Task? GetTask()
        private Dt_Task? GetTask(string workType)
        {
            Dt_Task task;
            task = _taskService.QueryStackerCraneTask("R01");
            task = _taskService.QueryStackerCraneTask(workType);
            if (task!=null && (task.TaskState==(int)TaskInStatusEnum.InNew|| task.TaskState == (int)TaskOutStatusEnum.OutNew))
            {
                if (task.TaskType == (int)TaskInboundTypeEnum.Inbound)
                {
                    InorOut = "Out";
                }
                else
                {
                    InorOut = "In";
                }
            }
            return task;
        }
    }
}
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/OHT/OHTTaskCommand.cs
@@ -66,16 +66,16 @@
        /// <summary>
        /// ä»»åŠ¡å·
        /// </summary>
        public short W_TaskNumber { get; set; }
        public int W_TaskNumber { get; set; }
        /// <summary>
        /// æ ¡éªŒå€¼  (任务类型+装车层数+取行+取列+取层+放行+放列+放层+W_Catch_1+W_Catch_2+任务号)
        /// </summary>
        public short W_CheckValue { get; set; }
        public int W_CheckValue { get; set; }
        /// <summary>
        /// ç¡®è®¤ä¿¡å·
        /// </summary>
        public int W_ConfirmSignal { get; set; }
        public short W_ConfirmSignal { get; set; }
    }
}