duyongjia
2025-02-25 a205d879fb21a8b60348bf465a970c07b0784945
最新修改
已删除1个文件
已修改11个文件
已添加12个文件
2567 ■■■■■ 文件已修改
项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.json 264 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/HierarchyCache.v1.txt 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/Const/HtmlElementType.cs 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/Enums/LinqExpressionType.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/Helper/Class1.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/Helper/UtilConvert.cs 977 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/LocationEnum/LocationEnum.cs 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/WIDESEAWCS_Common.csproj 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/BasicInfo/InitializationLocationDTO.cs 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/WIDESEAWCS_DTO.csproj 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_IWMSPart/ILocationInfoService.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/System/Sys_DictionaryController.cs 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/WMSPart/LocationInfoController.cs 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/GZJ/GZJJob.cs 135 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/OHT/OHTEnum.cs 230 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/OHT/OHTJob.cs 206 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/OHT/OHTReadData.cs 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/OHT/OHTTaskCommand.cs 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/TestJob.cs 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ZXJ/ZXJJob.cs 135 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目代码/WCS/WIDESEAWCS_Server/WIDESEAWCS_WMSPart/LocationInfoService.cs 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.json
@@ -3,28 +3,68 @@
  "WorkspaceRootPath": "D:\\project\\YangJiPingKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\",
  "Documents": [
    {
      "AbsoluteMoniker": "D:0:0:{A14242DD-DA06-4DC3-8598-1761AA7C76D1}|WIDESEAWCS_SystemServices\\WIDESEAWCS_SystemServices.csproj|d:\\project\\yangjipingku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_systemservices\\sys_userservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{A14242DD-DA06-4DC3-8598-1761AA7C76D1}|WIDESEAWCS_SystemServices\\WIDESEAWCS_SystemServices.csproj|solutionrelative:wideseawcs_systemservices\\sys_userservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|d:\\project\\yangjipingku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_tasks\\gzj\\gzjjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\gzj\\gzjjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|D:\\project\\YangJiPingKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\wideseawcs_server\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|d:\\project\\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:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|d:\\project\\yangjipingku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_tasks\\wideseawcs_tasks.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|",
      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\wideseawcs_tasks.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|"
    },
    {
      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|d:\\project\\yangjipingku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_tasks\\zxj\\zxjjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\zxj\\zxjjob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|d:\\project\\yangjipingku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_tasks\\oht\\ohtreaddata.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\oht\\ohtreaddata.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{83F18A31-5983-4587-A0B2-414BF70E50B5}|WIDESEAWCS_TaskInfoService\\WIDESEAWCS_TaskInfoService.csproj|d:\\project\\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:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|d:\\project\\yangjipingku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_tasks\\oht\\ohttaskcommand.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\oht\\ohttaskcommand.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|D:\\project\\YangJiPingKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\wideseawcs_server\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}",
      "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{B17BAF3C-2BAD-4162-B6DC-46ED7A1E3D8D}|WIDESEAWCS_WMSPart\\WIDESEAWCS_WMSPart.csproj|d:\\project\\yangjipingku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_wmspart\\locationinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{B17BAF3C-2BAD-4162-B6DC-46ED7A1E3D8D}|WIDESEAWCS_WMSPart\\WIDESEAWCS_WMSPart.csproj|solutionrelative:wideseawcs_wmspart\\locationinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|d:\\project\\yangjipingku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_server\\controllers\\system\\sys_dictionarycontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\controllers\\system\\sys_dictionarycontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|d:\\project\\yangjipingku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_server\\controllers\\system\\sys_usercontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "AbsoluteMoniker": "D:0:0:{C2D3D138-9109-481B-8BEB-A27597890B2C}|WIDESEAWCS_DTO\\WIDESEAWCS_DTO.csproj|d:\\project\\yangjipingku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_dto\\basicinfo\\initializationlocationdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{C2D3D138-9109-481B-8BEB-A27597890B2C}|WIDESEAWCS_DTO\\WIDESEAWCS_DTO.csproj|solutionrelative:wideseawcs_dto\\basicinfo\\initializationlocationdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{ADD3F3A3-CDFF-4854-B8C9-058FBDA2CFD4}|WIDESEAWCS_IWMSPart\\WIDESEAWCS_IWMSPart.csproj|d:\\project\\yangjipingku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_iwmspart\\ilocationinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{ADD3F3A3-CDFF-4854-B8C9-058FBDA2CFD4}|WIDESEAWCS_IWMSPart\\WIDESEAWCS_IWMSPart.csproj|solutionrelative:wideseawcs_iwmspart\\ilocationinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{C2D3D138-9109-481B-8BEB-A27597890B2C}|WIDESEAWCS_DTO\\WIDESEAWCS_DTO.csproj|d:\\project\\yangjipingku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_dto\\stackercarnetaskdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{C2D3D138-9109-481B-8BEB-A27597890B2C}|WIDESEAWCS_DTO\\WIDESEAWCS_DTO.csproj|solutionrelative:wideseawcs_dto\\stackercarnetaskdto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{A14242DD-DA06-4DC3-8598-1761AA7C76D1}|WIDESEAWCS_SystemServices\\WIDESEAWCS_SystemServices.csproj|D:\\project\\YangJiPingKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\wideseawcs_systemservices\\sys_userservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{A14242DD-DA06-4DC3-8598-1761AA7C76D1}|WIDESEAWCS_SystemServices\\WIDESEAWCS_SystemServices.csproj|solutionrelative:wideseawcs_systemservices\\sys_userservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|D:\\project\\YangJiPingKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\wideseawcs_server\\controllers\\system\\sys_usercontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\controllers\\system\\sys_usercontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|d:\\project\\yangjipingku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_server\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}",
      "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\appsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}"
    },
    {
      "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|d:\\project\\yangjipingku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_server\\wideseawcs_server.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|",
      "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\wideseawcs_server.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|"
    },
    {
      "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|d:\\project\\yangjipingku\\\u9879\u76EE\u4EE3\u7801\\wcs\\wideseawcs_server\\wideseawcs_server\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
      "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
    }
  ],
  "DocumentGroupContainers": [
@@ -34,8 +74,34 @@
      "DocumentGroups": [
        {
          "DockedWidth": 200,
          "SelectedChildIndex": 5,
          "SelectedChildIndex": 0,
          "Children": [
            {
              "$type": "Document",
              "DocumentIndex": 0,
              "Title": "GZJJob.cs",
              "DocumentMoniker": "D:\\project\\YangJiPingKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\GZJ\\GZJJob.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\GZJ\\GZJJob.cs",
              "ToolTip": "D:\\project\\YangJiPingKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\GZJ\\GZJJob.cs",
              "RelativeToolTip": "WIDESEAWCS_Tasks\\GZJ\\GZJJob.cs",
              "ViewState": "AQIAAB0AAAAAAAAAAAAxwB0AAAAnAAAA",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-02-25T01:19:59.147Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 3,
              "Title": "WIDESEAWCS_Tasks",
              "DocumentMoniker": "D:\\project\\YangJiPingKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj",
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj",
              "ToolTip": "D:\\project\\YangJiPingKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj*",
              "RelativeToolTip": "WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj*",
              "ViewState": "AQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000758|",
              "WhenOpened": "2025-02-25T01:16:32.256Z",
              "EditorCaption": ""
            },
            {
              "$type": "Bookmark",
              "Name": "ST:129:0:{1fc202d4-d401-403c-9834-5b218574bb67}"
@@ -50,33 +116,150 @@
            },
            {
              "$type": "Document",
              "DocumentIndex": 1,
              "DocumentIndex": 2,
              "Title": "OHTJob.cs",
              "DocumentMoniker": "D:\\project\\YangJiPingKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\OHT\\OHTJob.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\OHT\\OHTJob.cs",
              "ToolTip": "D:\\project\\YangJiPingKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\OHT\\OHTJob.cs",
              "RelativeToolTip": "WIDESEAWCS_Tasks\\OHT\\OHTJob.cs",
              "ViewState": "AQIAACUAAAAAAAAAAAAYwBwAAAAgAAAA",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-02-25T01:09:35.247Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 4,
              "Title": "ZXJJob.cs",
              "DocumentMoniker": "D:\\project\\YangJiPingKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ZXJ\\ZXJJob.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\ZXJ\\ZXJJob.cs",
              "ToolTip": "D:\\project\\YangJiPingKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ZXJ\\ZXJJob.cs",
              "RelativeToolTip": "WIDESEAWCS_Tasks\\ZXJ\\ZXJJob.cs",
              "ViewState": "AQIAACwAAAAAAAAAAAAAADEAAAAlAAAA",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-02-25T00:51:27.292Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 6,
              "Title": "TaskService.cs",
              "DocumentMoniker": "D:\\project\\YangJiPingKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\TaskService.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_TaskInfoService\\TaskService.cs",
              "ToolTip": "D:\\project\\YangJiPingKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\TaskService.cs",
              "RelativeToolTip": "WIDESEAWCS_TaskInfoService\\TaskService.cs",
              "ViewState": "AQIAAO0AAAAAAAAAAIA6wMgBAABXAAAA",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-02-24T08:02:07.139Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 5,
              "Title": "OHTReadData.cs",
              "DocumentMoniker": "D:\\project\\YangJiPingKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\OHT\\OHTReadData.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\OHT\\OHTReadData.cs",
              "ToolTip": "D:\\project\\YangJiPingKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\OHT\\OHTReadData.cs",
              "RelativeToolTip": "WIDESEAWCS_Tasks\\OHT\\OHTReadData.cs",
              "ViewState": "AQIAADgAAAAAAAAAAAArwD8AAAAUAAAA",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-02-24T07:55:22.813Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 7,
              "Title": "OHTTaskCommand.cs",
              "DocumentMoniker": "D:\\project\\YangJiPingKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\OHT\\OHTTaskCommand.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\OHT\\OHTTaskCommand.cs",
              "ToolTip": "D:\\project\\YangJiPingKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\OHT\\OHTTaskCommand.cs",
              "RelativeToolTip": "WIDESEAWCS_Tasks\\OHT\\OHTTaskCommand.cs",
              "ViewState": "AQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-02-24T07:53:49.316Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 11,
              "Title": "InitializationLocationDTO.cs",
              "DocumentMoniker": "D:\\project\\YangJiPingKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_DTO\\BasicInfo\\InitializationLocationDTO.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_DTO\\BasicInfo\\InitializationLocationDTO.cs",
              "ToolTip": "D:\\project\\YangJiPingKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_DTO\\BasicInfo\\InitializationLocationDTO.cs",
              "RelativeToolTip": "WIDESEAWCS_DTO\\BasicInfo\\InitializationLocationDTO.cs",
              "ViewState": "AQIAAAMAAAAAAAAAAAAAAA0AAAAPAAAA",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-02-20T06:24:21.85Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 10,
              "Title": "Sys_DictionaryController.cs",
              "DocumentMoniker": "D:\\project\\YangJiPingKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\System\\Sys_DictionaryController.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Controllers\\System\\Sys_DictionaryController.cs",
              "ToolTip": "D:\\project\\YangJiPingKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\System\\Sys_DictionaryController.cs",
              "RelativeToolTip": "WIDESEAWCS_Server\\Controllers\\System\\Sys_DictionaryController.cs",
              "ViewState": "AQIAACQAAAAAAAAAAAAmwCsAAAAMAAAA",
              "ViewState": "AQIAACMAAAAAAAAAAIA5wC0AAAAPAAAA",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-02-18T08:02:00.02Z",
              "WhenOpened": "2025-02-20T03:51:34.737Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 3,
              "DocumentIndex": 13,
              "Title": "StackerCarneTaskDTO.cs",
              "DocumentMoniker": "D:\\project\\YangJiPingKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_DTO\\StackerCarneTaskDTO.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_DTO\\StackerCarneTaskDTO.cs",
              "ToolTip": "D:\\project\\YangJiPingKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_DTO\\StackerCarneTaskDTO.cs",
              "RelativeToolTip": "WIDESEAWCS_DTO\\StackerCarneTaskDTO.cs",
              "ViewState": "AQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-02-20T03:07:50.105Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 12,
              "Title": "ILocationInfoService.cs",
              "DocumentMoniker": "D:\\project\\YangJiPingKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_IWMSPart\\ILocationInfoService.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_IWMSPart\\ILocationInfoService.cs",
              "ToolTip": "D:\\project\\YangJiPingKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_IWMSPart\\ILocationInfoService.cs",
              "RelativeToolTip": "WIDESEAWCS_IWMSPart\\ILocationInfoService.cs",
              "ViewState": "AQIAAA4AAAAAAAAAAAAhwBgAAAAAAAAA",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-02-20T03:03:47.551Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 9,
              "Title": "LocationInfoService.cs",
              "DocumentMoniker": "D:\\project\\YangJiPingKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_WMSPart\\LocationInfoService.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_WMSPart\\LocationInfoService.cs",
              "ToolTip": "D:\\project\\YangJiPingKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_WMSPart\\LocationInfoService.cs",
              "RelativeToolTip": "WIDESEAWCS_WMSPart\\LocationInfoService.cs",
              "ViewState": "AQIAACoAAAAAAAAAAAAqwDYAAAA0AAAA",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-02-20T02:53:02.073Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 8,
              "Title": "appsettings.json",
              "DocumentMoniker": "D:\\project\\YangJiPingKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\appsettings.json",
              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\appsettings.json",
              "ToolTip": "D:\\project\\YangJiPingKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\appsettings.json",
              "RelativeToolTip": "WIDESEAWCS_Server\\appsettings.json",
              "ViewState": "AQIAAAcAAAAAAAAAAAAIwBUAAACUAAAA",
              "ViewState": "AQIAAB4AAAAAAAAAAAAYwCgAAAATAAAA",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|",
              "WhenOpened": "2025-02-18T07:29:50.467Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 0,
              "DocumentIndex": 14,
              "Title": "Sys_UserService.cs",
              "DocumentMoniker": "D:\\project\\YangJiPingKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_SystemServices\\Sys_UserService.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_SystemServices\\Sys_UserService.cs",
@@ -84,12 +267,11 @@
              "RelativeToolTip": "WIDESEAWCS_SystemServices\\Sys_UserService.cs",
              "ViewState": "AQIAACgAAAAAAAAAAAAAwC8AAAAQAAAA",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-02-18T07:20:48.526Z",
              "EditorCaption": ""
              "WhenOpened": "2025-02-18T07:20:48.526Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 2,
              "DocumentIndex": 15,
              "Title": "Sys_UserController.cs",
              "DocumentMoniker": "D:\\project\\YangJiPingKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\System\\Sys_UserController.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Controllers\\System\\Sys_UserController.cs",
@@ -97,46 +279,20 @@
              "RelativeToolTip": "WIDESEAWCS_Server\\Controllers\\System\\Sys_UserController.cs",
              "ViewState": "AQIAADwAAAAAAAAAAAAewEYAAAAIAAAA",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-02-18T07:12:12.812Z",
              "EditorCaption": ""
              "WhenOpened": "2025-02-18T07:12:12.812Z"
            },
            {
              "$type": "Document",
              "DocumentIndex": 4,
              "Title": "WIDESEAWCS_Server",
              "DocumentMoniker": "D:\\project\\YangJiPingKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj",
              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj",
              "ToolTip": "D:\\project\\YangJiPingKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj",
              "RelativeToolTip": "WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj",
              "ViewState": "AQIAABgAAAAAAAAAAAAAAB8AAAACAAAA",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000758|",
              "WhenOpened": "2025-02-18T07:04:34.852Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 5,
              "DocumentIndex": 1,
              "Title": "Program.cs",
              "DocumentMoniker": "D:\\project\\YangJiPingKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Program.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Program.cs",
              "ToolTip": "D:\\project\\YangJiPingKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Program.cs",
              "RelativeToolTip": "WIDESEAWCS_Server\\Program.cs",
              "ViewState": "AQIAAIcAAAAAAAAAAAAlwJEAAAAAAAAA",
              "ViewState": "AQIAAIcAAAAAAAAAAAAnwJQAAAAAAAAA",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-02-18T06:50:46.477Z",
              "EditorCaption": ""
            },
            {
              "$type": "Document",
              "DocumentIndex": 22,
              "Title": "CustomProfile.cs",
              "DocumentMoniker": "E:\\0.\u9879\u76EE\u96C6\\\u682A\u6D32\u4F18\u745E\u79D1\\YangJiPingKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Filter\\CustomProfile.cs",
              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Filter\\CustomProfile.cs",
              "ToolTip": "E:\\0.\u9879\u76EE\u96C6\\\u682A\u6D32\u4F18\u745E\u79D1\\YangJiPingKu\\\u9879\u76EE\u4EE3\u7801\\WCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Filter\\CustomProfile.cs",
              "RelativeToolTip": "WIDESEAWCS_Server\\Filter\\CustomProfile.cs",
              "ViewState": "AgIAAAAAAAAAAAAAAADwvxUAAAArAAAAAAAAAA==",
              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
              "WhenOpened": "2025-02-18T06:25:21.8Z"
            }
          ]
        }
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/HierarchyCache.v1.txt
Binary files differ
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/Const/HtmlElementType.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,32 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEAWCS_Common.Const
{
    public struct HtmlElementType
    {
        public const string drop = "drop";
        public const string droplist = "droplist";
        public const string select = "select";
        public const string selectlist = "selectlist";
        public const string checkbox = "checkbox";
        public const string textarea = "textarea";
        public const string thanorequal = "thanorequal";
        public const string lessorequal = "lessorequal";
        public const string gt = "gt";
        public const string lt = "lt";
        public const string GT = ">";
        public const string LT = "<";
        public const string like = "like";
        public const string ThanOrEqual = ">=";
        public const string LessOrequal = "<=";
        public const string Contains = "in";
        public const string Equal = "=";
    }
}
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/Enums/LinqExpressionType.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEAWCS_Common.Enums
{
    public enum LinqExpressionType
    {
        Equal = 0,//=
        NotEqual = 1,//!=
        GreaterThan,//>
        LessThan,//<
        ThanOrEqual,//>=
        LessThanOrEqual,//<=
        In,
        Contains,//Contains
        NotContains//NotContains
    }
}
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/Helper/Class1.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,12 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEAWCS_Common.Helper
{
    internal class Class1
    {
    }
}
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/Helper/UtilConvert.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,977 @@
using Newtonsoft.Json;
using System.Data;
using System.Reflection;
using System.Text.RegularExpressions;
using System.Web;
using WIDESEAWCS_Common.Const;
using WIDESEAWCS_Common.Enums;
namespace WIDESEAWCS_Common.Helper
{
    public static class UtilConvert
    {
        private static DateTime dateStart = new DateTime(1970, 1, 1, 8, 0, 0);
        private static long longTime = 621355968000000000;
        private static int samllTime = 10000000;
        /// <summary>
        /// æ—¶é—´æˆ³è½¬æ¢æˆæ—¥æœŸ
        /// </summary>
        /// <param name="timeStamp"></param>
        /// <returns></returns>
        public static DateTime GetTimeSpmpToDate(this object timeStamp)
        {
            if (timeStamp == null) return dateStart;
            DateTime dateTime = new DateTime(longTime + Convert.ToInt64(timeStamp) * samllTime, DateTimeKind.Utc).ToLocalTime();
            return dateTime;
        }
        public static string Serialize(this object obj, JsonSerializerSettings formatDate = null)
        {
            if (obj == null) return null;
            formatDate = formatDate ?? new JsonSerializerSettings
            {
                DateFormatString = "yyyy-MM-dd HH:mm:ss"
            };
            return JsonConvert.SerializeObject(obj, formatDate);
        }
        public static T DeserializeObject<T>(this string json)
        {
            if (string.IsNullOrEmpty(json))
            {
                return default(T);
            }
            if (json == "{}")
            {
                json = "[]";
            }
            return JsonConvert.DeserializeObject<T>(json);
        }
        public static string FirstLetterToLower(this string thisValue)
        {
            if (string.IsNullOrEmpty(thisValue)) return string.Empty;
            string result = thisValue.Substring(0, 1).ToLower() + thisValue.Substring(1, thisValue.Length - 1);
            return result;
        }
        public static string FirstLetterToUpper(this string thisValue)
        {
            if (string.IsNullOrEmpty(thisValue)) return string.Empty;
            string result = thisValue.Substring(0, 1).ToUpper() + thisValue.Substring(1, thisValue.Length - 1);
            return result;
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="thisValue"></param>
        /// <returns></returns>
        public static int ObjToInt(this object thisValue)
        {
            int reval = 0;
            if (thisValue == null) return 0;
            if (thisValue is Enum && thisValue != DBNull.Value && Enum.TryParse(thisValue.GetType(), thisValue.ToString(), out var val))
            {
                return Convert.ToInt32(val.ChangeType(typeof(int)));
            }
            if (thisValue != DBNull.Value && int.TryParse(thisValue.ToString(), out reval))
            {
                return reval;
            }
            return reval;
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="thisValue"></param>
        /// <returns></returns>
        public static int DoubleToInt(this double thisValue)
        {
            int reval = 0;
            return Convert.ToInt32(thisValue);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="thisValue"></param>
        /// <param name="errorValue"></param>
        /// <returns></returns>
        public static int ObjToInt(this object thisValue, int errorValue)
        {
            int reval = 0;
            if (thisValue != null && thisValue != DBNull.Value && int.TryParse(thisValue.ToString(), out reval))
            {
                return reval;
            }
            return errorValue;
        }
        public static long ObjToLong(this object thisValue)
        {
            long reval = 0;
            if (thisValue == null) return 0;
            if (thisValue != DBNull.Value && long.TryParse(thisValue.ToString(), out reval))
            {
                return reval;
            }
            return reval;
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="thisValue"></param>
        /// <returns></returns>
        public static double ObjToMoney(this object thisValue)
        {
            double reval = 0;
            if (thisValue != null && thisValue != DBNull.Value && double.TryParse(thisValue.ToString(), out reval))
            {
                return reval;
            }
            return 0;
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="thisValue"></param>
        /// <param name="errorValue"></param>
        /// <returns></returns>
        public static double ObjToMoney(this object thisValue, double errorValue)
        {
            double reval = 0;
            if (thisValue != null && thisValue != DBNull.Value && double.TryParse(thisValue.ToString(), out reval))
            {
                return reval;
            }
            return errorValue;
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="thisValue"></param>
        /// <returns></returns>
        public static string ObjToString(this object thisValue)
        {
            if (thisValue != null) return thisValue.ToString().Trim();
            return "";
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="thisValue"></param>
        /// <returns></returns>
        public static bool IsNotEmptyOrNull(this object thisValue)
        {
            return ObjToString(thisValue) != "" && ObjToString(thisValue) != "undefined" && ObjToString(thisValue) != "null";
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="thisValue"></param>
        /// <param name="errorValue"></param>
        /// <returns></returns>
        public static string ObjToString(this object thisValue, string errorValue)
        {
            if (thisValue != null) return thisValue.ToString().Trim();
            return errorValue;
        }
        public static bool IsNullOrEmpty(this object thisValue) => thisValue == null || thisValue == DBNull.Value || string.IsNullOrWhiteSpace(thisValue.ToString());
        /// <summary>
        ///
        /// </summary>
        /// <param name="thisValue"></param>
        /// <returns></returns>
        public static Decimal ObjToDecimal(this object thisValue)
        {
            Decimal reval = 0;
            if (thisValue != null && thisValue != DBNull.Value && decimal.TryParse(thisValue.ToString(), out reval))
            {
                return reval;
            }
            return 0;
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="thisValue"></param>
        /// <param name="errorValue"></param>
        /// <returns></returns>
        public static Decimal ObjToDecimal(this object thisValue, decimal errorValue)
        {
            Decimal reval = 0;
            if (thisValue != null && thisValue != DBNull.Value && decimal.TryParse(thisValue.ToString(), out reval))
            {
                return reval;
            }
            return errorValue;
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="thisValue"></param>
        /// <returns></returns>
        public static DateTime ObjToDate(this object thisValue)
        {
            DateTime reval = DateTime.MinValue;
            if (thisValue != null && thisValue != DBNull.Value && DateTime.TryParse(thisValue.ToString(), out reval))
            {
                reval = Convert.ToDateTime(thisValue);
            }
            return reval;
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="thisValue"></param>
        /// <param name="errorValue"></param>
        /// <returns></returns>
        public static DateTime ObjToDate(this object thisValue, DateTime errorValue)
        {
            DateTime reval = DateTime.MinValue;
            if (thisValue != null && thisValue != DBNull.Value && DateTime.TryParse(thisValue.ToString(), out reval))
            {
                return reval;
            }
            return errorValue;
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="thisValue"></param>
        /// <returns></returns>
        public static bool ObjToBool(this object thisValue)
        {
            bool reval = false;
            if (thisValue != null && thisValue != DBNull.Value && bool.TryParse(thisValue.ToString(), out reval))
            {
                return reval;
            }
            return reval;
        }
        /// <summary>
        /// èŽ·å–å½“å‰æ—¶é—´çš„æ—¶é—´æˆ³
        /// </summary>
        /// <param name="thisValue"></param>
        /// <returns></returns>
        public static string DateToTimeStamp(this DateTime thisValue)
        {
            TimeSpan ts = thisValue - new DateTime(1970, 1, 1, 0, 0, 0, 0);
            return Convert.ToInt64(ts.TotalSeconds).ToString();
        }
        public static object ChangeType(this object value, Type type)
        {
            if (value == null && type.IsGenericType) return Activator.CreateInstance(type);
            if (value == null) return null;
            if (type == value.GetType()) return value;
            if (type.IsEnum)
            {
                if (value is string)
                    return Enum.Parse(type, value as string);
                else
                    return Enum.ToObject(type, value);
            }
            if (!type.IsInterface && type.IsGenericType)
            {
                Type innerType = type.GetGenericArguments()[0];
                object innerValue = ChangeType(value, innerType);
                return Activator.CreateInstance(type, new object[] { innerValue });
            }
            if (value is string && type == typeof(Guid)) return new Guid(value as string);
            if (value is string && type == typeof(Version)) return new Version(value as string);
            if (!(value is IConvertible)) return value;
            return Convert.ChangeType(value, type);
        }
        public static object ChangeTypeList(this object value, Type type)
        {
            if (value == null) return default;
            var gt = typeof(List<>).MakeGenericType(type);
            dynamic lis = Activator.CreateInstance(gt);
            var addMethod = gt.GetMethod("Add");
            string values = value.ToString();
            if (values != null && values.StartsWith("(") && values.EndsWith(")"))
            {
                string[] splits;
                if (values.Contains("\",\""))
                {
                    splits = values.Remove(values.Length - 2, 2)
                        .Remove(0, 2)
                        .Split("\",\"");
                }
                else
                {
                    splits = values.Remove(0, 1)
                        .Remove(values.Length - 2, 1)
                        .Split(",");
                }
                foreach (var split in splits)
                {
                    var str = split;
                    if (split.StartsWith("\"") && split.EndsWith("\""))
                    {
                        str = split.Remove(0, 1)
                            .Remove(split.Length - 2, 1);
                    }
                    addMethod.Invoke(lis, new object[] { ChangeType(str, type) });
                }
            }
            return lis;
        }
        public static string ToJson(this object value)
        {
            return JsonConvert.SerializeObject(value);
        }
        public static bool IsNumeric(this object value)
        {
            if (value == null)
                return false;
            bool reslut = decimal.TryParse(value.ToString(), out decimal _number);
            return reslut;
        }
        public static bool IsInt(this object obj)
        {
            if (obj == null)
                return false;
            bool reslut = Int32.TryParse(obj.ToString(), out int _number);
            return reslut;
        }
        public static bool IsDate(this object str)
        {
            return str.IsDate(out _);
        }
        public static bool IsDate(this object str, out DateTime dateTime)
        {
            dateTime = DateTime.Now;
            if (str == null || str.ToString() == "")
            {
                return false;
            }
            return DateTime.TryParse(str.ToString(), out dateTime);
        }
        /// <summary>
        /// æ ¹æ®ä¼ å…¥æ ¼å¼åˆ¤æ–­æ˜¯å¦ä¸ºå°æ•°
        /// </summary>
        /// <param name="str"></param>
        /// <param name="formatString">18,5</param>
        /// <returns></returns>
        public static bool IsNumber(this string str, string formatString)
        {
            if (string.IsNullOrEmpty(str)) return false;
            return Regex.IsMatch(str, @"^[+-]?\d*[.]?\d*$");
        }
        public static bool IsGuid(this string guid)
        {
            Guid newId;
            return guid.GetGuid(out newId);
        }
        public static bool GetGuid(this string guid, out Guid outId)
        {
            Guid emptyId = Guid.Empty;
            return Guid.TryParse(guid, out outId);
        }
        /// <summary>
        /// è½¬æ¢ä¸ºçŸ­æ•´åž‹ qy 2024-7-15
        /// </summary>
        /// <param name="data">数据</param>
        public static short ToShort(this object data)
        {
            if (data == null)
                return 0;
            short result;
            var success = short.TryParse(data.ToString(), out result);
            if (success)
                return result;
            try
            {
                return Convert.ToInt16(data);
            }
            catch (Exception)
            {
                return 0;
            }
        }
        /// <summary>
        /// è½¬æ¢ä¸ºé«˜ç²¾åº¦æµ®ç‚¹æ•°,并按指定的小数位4舍5入 qy 2024-7-15
        /// </summary>
        /// <param name="data">数据</param>
        /// <param name="digits">小数位数</param>
        public static decimal ToDecimal(this object data, int digits)
        {
            return Math.Round(ObjToDecimal(data), digits);
        }
        /// <summary>
        /// æžšä¸¾è½¬List qy 2024-7-15
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <returns></returns>
        public static List<object> GetEnumList<T>()
        {
            List<object> list = new List<object>();
            var t = typeof(T);
            foreach (var item in Enum.GetValues(typeof(T)))
            {
                FieldInfo f = t.GetField(Enum.GetName(typeof(T), item));
                var r = (System.ComponentModel.DescriptionAttribute[])f.GetCustomAttributes(typeof(System.ComponentModel.DescriptionAttribute), false);
                list.Add(new { ID = item, value = Enum.GetName(typeof(T), item), name = r[0].Description });
            }
            return list;
        }
        /// <summary>
        /// éªŒè¯åŠ¨æ€ç±»åž‹å…ƒç´ æ˜¯å¦ä¸ºç©º qy 2024-7-15
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        public static bool CheckDynamic(object obj)
        {
            return (obj != null && Convert.ToString(obj) != "") ? true : false;
        }
        /// <summary>
        /// åŠ¨æ€ç±»åž‹å…ƒç´ è½¬å­—ç¬¦ä¸²å¹¶è§£ç  qy 2024-7-15
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        public static string DynamicToString(object obj)
        {
            return CheckDynamic(obj) ? HttpUtility.UrlDecode(Convert.ToString(obj).Trim()) : "";
        }
        /// <summary>
        /// DataTable转为json  qy 2024-7-15
        /// </summary>
        /// <param name="parObjRefDataTable">DataTable</param>
        /// <returns>json数据</returns>
        public static string ToJson(this DataTable parObjRefDataTable)
        {
            List<object> objArrList = new List<object>();
            foreach (DataRow objDataRow in parObjRefDataTable.Rows)
            {
                Dictionary<string, object> objResult = new Dictionary<string, object>();
                foreach (DataColumn objDataColumn in parObjRefDataTable.Columns)
                    objResult.Add(objDataColumn.ColumnName, objDataRow[objDataColumn].ToString());
                objArrList.Add(objResult);
            }
            return ToJson(objArrList);
        }
        /// <summary>
        /// Json转List qy 2024-7-15
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="parJson"></param>
        /// <returns></returns>
        public static List<T> JsonToList<T>(this string parJson)
        {
            if (string.IsNullOrWhiteSpace(parJson))
            {
                return new List<T>();
            }
            else
            {
                return JsonConvert.DeserializeObject<List<T>>(parJson);
            }
        }
        /// <summary>
        /// æ—¥æœŸè½¬ä¸ºunix值
        /// </summary>
        /// <param name="dt"></param>
        /// <param name="utc">T:按UTC时间计算(默认);F:按本地时间计算</param>
        /// <returns></returns>
        public static double ToUnix(this DateTime dt, bool utc = true)
        {
            double intResult = 0;
            System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1));
            intResult = (dt - startTime).TotalSeconds;
            intResult = Math.Round(intResult, 0);
            return intResult;
        }
        #region åˆ¤æ–­æ˜¯å¦ä¸ºå­—符串 qy 2024-7-15
        /// <summary>
        /// åˆ¤æ–­å­—符串是否为合法的json字符串 qy 2024-7-15
        /// </summary>
        /// <param name="json"></param>
        /// <returns></returns>
        public static bool IsJson(string json)
        {
            int errIndex;
            return IsJson(json, out errIndex);
        }
        public static bool IsJson(string json, out int errIndex)
        {
            errIndex = 0;
            if (IsJsonStart(ref json))
            {
                CharState cs = new CharState();
                char c;
                for (int i = 0; i < json.Length; i++)
                {
                    c = json[i];
                    if (SetCharState(c, ref cs) && cs.childrenStart)//设置关键符号状态。
                    {
                        string item = json.Substring(i);
                        int err;
                        int length = GetValueLength(item, true, out err);
                        cs.childrenStart = false;
                        if (err > 0)
                        {
                            errIndex = i + err;
                            return false;
                        }
                        i = i + length - 1;
                    }
                    if (cs.isError)
                    {
                        errIndex = i;
                        return false;
                    }
                }
                return !cs.arrayStart && !cs.jsonStart;
            }
            return false;
        }
        private static bool IsJsonStart(ref string json)
        {
            if (!string.IsNullOrEmpty(json))
            {
                json = json.Trim('\r', '\n', ' ');
                if (json.Length > 1)
                {
                    char s = json[0];
                    char e = json[json.Length - 1];
                    return (s == '{' && e == '}') || (s == '[' && e == ']');
                }
            }
            return false;
        }
        /// <summary>
        /// èŽ·å–å€¼çš„é•¿åº¦ï¼ˆå½“Json值嵌套以"{"或"["开头时) qy 2024-7-15
        /// </summary>
        private static int GetValueLength(string json, bool breakOnErr, out int errIndex)
        {
            errIndex = 0;
            int len = 0;
            if (!string.IsNullOrEmpty(json))
            {
                CharState cs = new CharState();
                char c;
                for (int i = 0; i < json.Length; i++)
                {
                    c = json[i];
                    if (!SetCharState(c, ref cs))//设置关键符号状态。
                    {
                        if (!cs.jsonStart && !cs.arrayStart)//json结束,又不是数组,则退出。
                        {
                            break;
                        }
                    }
                    else if (cs.childrenStart)//正常字符,值状态下。
                    {
                        int length = GetValueLength(json.Substring(i), breakOnErr, out errIndex);//递归子值,返回一个长度。。。
                        cs.childrenStart = false;
                        cs.valueStart = 0;
                        //cs.state = 0;
                        i = i + length - 1;
                    }
                    if (breakOnErr && cs.isError)
                    {
                        errIndex = i;
                        return i;
                    }
                    if (!cs.jsonStart && !cs.arrayStart)//记录当前结束位置。
                    {
                        len = i + 1;//长度比索引+1
                        break;
                    }
                }
            }
            return len;
        }
        /// <summary>
        /// å­—符状态 qy 2024-7-15
        /// </summary>
        private class CharState
        {
            internal bool jsonStart = false;//以 "{"开始了...
            internal bool setDicValue = false;// å¯ä»¥è®¾ç½®å­—典值了。
            internal bool escapeChar = false;//以"\"转义符号开始了
            /// <summary>
            /// æ•°ç»„开始【仅第一开头才算】,值嵌套的以【childrenStart】来标识。
            /// </summary>
            internal bool arrayStart = false;//以"[" ç¬¦å·å¼€å§‹äº†
            internal bool childrenStart = false;//子级嵌套开始了。
            /// <summary>
            /// ã€0 åˆå§‹çŠ¶æ€ï¼Œæˆ– é‡åˆ°â€œ,”逗号】;【1 é‡åˆ°â€œï¼šâ€å†’号】
            /// </summary>
            internal int state = 0;
            /// <summary>
            /// ã€-1 å–值结束】【0 æœªå¼€å§‹ã€‘【1 æ— å¼•号开始】【2 å•引号开始】【3 åŒå¼•号开始】
            /// </summary>
            internal int keyStart = 0;
            /// <summary>
            /// ã€-1 å–值结束】【0 æœªå¼€å§‹ã€‘【1 æ— å¼•号开始】【2 å•引号开始】【3 åŒå¼•号开始】
            /// </summary>
            internal int valueStart = 0;
            internal bool isError = false;//是否语法错误。
            internal void CheckIsError(char c)//只当成一级处理(因为GetLength会递归到每一个子项处理)
            {
                if (keyStart > 1 || valueStart > 1)
                {
                    return;
                }
                //示例 ["aa",{"bbbb":123,"fff","ddd"}]
                switch (c)
                {
                    case '{'://[{ "[{A}]":[{"[{B}]":3,"m":"C"}]}]
                        isError = jsonStart && state == 0;//重复开始错误 åŒæ—¶ä¸æ˜¯å€¼å¤„理。
                        break;
                    case '}':
                        isError = !jsonStart || (keyStart != 0 && state == 0);//重复结束错误 æˆ–者 æå‰ç»“束{"aa"}。正常的有{}
                        break;
                    case '[':
                        isError = arrayStart && state == 0;//重复开始错误
                        break;
                    case ']':
                        isError = !arrayStart || jsonStart;//重复开始错误 æˆ–者 Json æœªç»“束
                        break;
                    case '"':
                    case '\'':
                        isError = !(jsonStart || arrayStart); //json æˆ–数组开始。
                        if (!isError)
                        {
                            //重复开始 [""",{"" "}]
                            isError = (state == 0 && keyStart == -1) || (state == 1 && valueStart == -1);
                        }
                        if (!isError && arrayStart && !jsonStart && c == '\'')//['aa',{}]
                        {
                            isError = true;
                        }
                        break;
                    case ':':
                        isError = !jsonStart || state == 1;//重复出现。
                        break;
                    case ',':
                        isError = !(jsonStart || arrayStart); //json æˆ–数组开始。
                        if (!isError)
                        {
                            if (jsonStart)
                            {
                                isError = state == 0 || (state == 1 && valueStart > 1);//重复出现。
                            }
                            else if (arrayStart)//["aa,] [,]  [{},{}]
                            {
                                isError = keyStart == 0 && !setDicValue;
                            }
                        }
                        break;
                    case ' ':
                    case '\r':
                    case '\n'://[ "a",\r\n{} ]
                    case '\0':
                    case '\t':
                        break;
                    default: //值开头。。
                        isError = (!jsonStart && !arrayStart) || (state == 0 && keyStart == -1) || (valueStart == -1 && state == 1);//
                        break;
                }
                //if (isError)
                //{
                //}
            }
        }
        /// <summary>
        /// è®¾ç½®å­—符状态(返回true则为关键词,返回false则当为普通字符处理) qy 2024-7-15
        /// </summary>
        private static bool SetCharState(char c, ref CharState cs)
        {
            cs.CheckIsError(c);
            switch (c)
            {
                case '{'://[{ "[{A}]":[{"[{B}]":3,"m":"C"}]}]
                    #region å¤§æ‹¬å·
                    if (cs.keyStart <= 0 && cs.valueStart <= 0)
                    {
                        cs.keyStart = 0;
                        cs.valueStart = 0;
                        if (cs.jsonStart && cs.state == 1)
                        {
                            cs.childrenStart = true;
                        }
                        else
                        {
                            cs.state = 0;
                        }
                        cs.jsonStart = true;//开始。
                        return true;
                    }
                    #endregion
                    break;
                case '}':
                    #region å¤§æ‹¬å·ç»“束
                    if (cs.keyStart <= 0 && cs.valueStart < 2 && cs.jsonStart)
                    {
                        cs.jsonStart = false;//正常结束。
                        cs.state = 0;
                        cs.keyStart = 0;
                        cs.valueStart = 0;
                        cs.setDicValue = true;
                        return true;
                    }
                    // cs.isError = !cs.jsonStart && cs.state == 0;
                    #endregion
                    break;
                case '[':
                    #region ä¸­æ‹¬å·å¼€å§‹
                    if (!cs.jsonStart)
                    {
                        cs.arrayStart = true;
                        return true;
                    }
                    else if (cs.jsonStart && cs.state == 1)
                    {
                        cs.childrenStart = true;
                        return true;
                    }
                    #endregion
                    break;
                case ']':
                    #region ä¸­æ‹¬å·ç»“束
                    if (cs.arrayStart && !cs.jsonStart && cs.keyStart <= 2 && cs.valueStart <= 0)//[{},333]//这样结束。
                    {
                        cs.keyStart = 0;
                        cs.valueStart = 0;
                        cs.arrayStart = false;
                        return true;
                    }
                    #endregion
                    break;
                case '"':
                case '\'':
                    #region å¼•号
                    if (cs.jsonStart || cs.arrayStart)
                    {
                        if (cs.state == 0)//key阶段,有可能是数组["aa",{}]
                        {
                            if (cs.keyStart <= 0)
                            {
                                cs.keyStart = (c == '"' ? 3 : 2);
                                return true;
                            }
                            else if ((cs.keyStart == 2 && c == '\'') || (cs.keyStart == 3 && c == '"'))
                            {
                                if (!cs.escapeChar)
                                {
                                    cs.keyStart = -1;
                                    return true;
                                }
                                else
                                {
                                    cs.escapeChar = false;
                                }
                            }
                        }
                        else if (cs.state == 1 && cs.jsonStart)//值阶段必须是Json开始了。
                        {
                            if (cs.valueStart <= 0)
                            {
                                cs.valueStart = (c == '"' ? 3 : 2);
                                return true;
                            }
                            else if ((cs.valueStart == 2 && c == '\'') || (cs.valueStart == 3 && c == '"'))
                            {
                                if (!cs.escapeChar)
                                {
                                    cs.valueStart = -1;
                                    return true;
                                }
                                else
                                {
                                    cs.escapeChar = false;
                                }
                            }
                        }
                    }
                    #endregion
                    break;
                case ':':
                    #region å†’号
                    if (cs.jsonStart && cs.keyStart < 2 && cs.valueStart < 2 && cs.state == 0)
                    {
                        if (cs.keyStart == 1)
                        {
                            cs.keyStart = -1;
                        }
                        cs.state = 1;
                        return true;
                    }
                    // cs.isError = !cs.jsonStart || (cs.keyStart < 2 && cs.valueStart < 2 && cs.state == 1);
                    #endregion
                    break;
                case ',':
                    #region é€—号 //["aa",{aa:12,}]
                    if (cs.jsonStart)
                    {
                        if (cs.keyStart < 2 && cs.valueStart < 2 && cs.state == 1)
                        {
                            cs.state = 0;
                            cs.keyStart = 0;
                            cs.valueStart = 0;
                            //if (cs.valueStart == 1)
                            //{
                            //    cs.valueStart = 0;
                            //}
                            cs.setDicValue = true;
                            return true;
                        }
                    }
                    else if (cs.arrayStart && cs.keyStart <= 2)
                    {
                        cs.keyStart = 0;
                        //if (cs.keyStart == 1)
                        //{
                        //    cs.keyStart = -1;
                        //}
                        return true;
                    }
                    #endregion
                    break;
                case ' ':
                case '\r':
                case '\n'://[ "a",\r\n{} ]
                case '\0':
                case '\t':
                    if (cs.keyStart <= 0 && cs.valueStart <= 0) //cs.jsonStart &&
                    {
                        return true;//跳过空格。
                    }
                    break;
                default: //值开头。。
                    if (c == '\\') //转义符号
                    {
                        if (cs.escapeChar)
                        {
                            cs.escapeChar = false;
                        }
                        else
                        {
                            cs.escapeChar = true;
                            return true;
                        }
                    }
                    else
                    {
                        cs.escapeChar = false;
                    }
                    if (cs.jsonStart || cs.arrayStart) // Json æˆ–数组开始了。
                    {
                        if (cs.keyStart <= 0 && cs.state == 0)
                        {
                            cs.keyStart = 1;//无引号的
                        }
                        else if (cs.valueStart <= 0 && cs.state == 1 && cs.jsonStart)//只有Json开始才有值。
                        {
                            cs.valueStart = 1;//无引号的
                        }
                    }
                    break;
            }
            return false;
        }
        #endregion
        public static LinqExpressionType GetLinqCondition(this string stringType)
        {
            LinqExpressionType linqExpression;
            switch (stringType)
            {
                case HtmlElementType.Contains:
                    linqExpression = LinqExpressionType.In;
                    break;
                case HtmlElementType.ThanOrEqual:
                    linqExpression = LinqExpressionType.ThanOrEqual;
                    break;
                case HtmlElementType.LessOrequal:
                    linqExpression = LinqExpressionType.LessThanOrEqual;
                    break;
                case HtmlElementType.GT:
                    linqExpression = LinqExpressionType.GreaterThan;
                    break;
                case HtmlElementType.lt:
                    linqExpression = LinqExpressionType.LessThan;
                    break;
                case HtmlElementType.like:
                    linqExpression = LinqExpressionType.Contains;
                    break;
                default:
                    linqExpression = LinqExpressionType.Equal;
                    break;
            }
            return linqExpression;
        }
    }
}
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/LocationEnum/LocationEnum.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,87 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEAWCS_Common.LocationEnum
{
    /// <summary>
    /// è´§ä½çŠ¶æ€
    /// </summary>
    public enum LocationStatusEnum
    {
        /// <summary>
        /// ç©ºé—²
        /// </summary>
        [Description("空闲")]
        Free = 0,
        /// <summary>
        /// é”å®š
        /// </summary>
        [Description("锁定")]
        Lock = 1,
        /// <summary>
        /// æœ‰è´§
        /// </summary>
        [Description("有货")]
        InStock = 2,
        /// <summary>
        /// ç©ºæ‰˜é”å®š
        /// </summary>
        [Description("空托锁定")]
        PalletLock = 98,
        /// <summary>
        /// ç©ºæ‰˜ç›˜
        /// </summary>
        [Description("空托盘")]
        Pallet = 99
    }
    public enum EnableStatusEnum
    {
        /// <summary>
        /// æ­£å¸¸
        /// </summary>
        [Description("正常")]
        Normal = 0,
        /// <summary>
        /// åªå…¥
        /// </summary>
        [Description("只入")]
        OnlyIn = 1,
        /// <summary>
        /// åªå‡º
        /// </summary>
        [Description("只出")]
        OnlyOut = 2,
        /// <summary>
        /// ç¦ç”¨
        /// </summary>
        [Description("禁用")]
        Disable = 3
    }
    public enum LocationTypeEnum
    {
        /// <summary>
        /// ç«‹åº“
        /// </summary>
        [Description("立库货位")]
        Cube = 1,
        /// <summary>
        /// å¹³åº“
        /// </summary>
        [Description("平库货位")]
        Flat = 2
    }
}
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs
@@ -15,41 +15,17 @@
        [Description("新建入库任务")]
        InNew = 200,
        ///// <summary>
        ///// AGV入库执行中
        ///// </summary>
        //[Description("AGV入库执行中")]
        //AGV_InExecuting = 210,
        ///// <summary>
        ///// AGV入库完成
        ///// </summary>
        //[Description("AGV搬运完成")]
        //AGV_InFinish = 215,
        /// <summary>
        /// è¾“送线入库执行中
        /// å¤©è½¦å…¥åº“执行中
        /// </summary>
        [Description("输送线入库执行中")]
        [Description("天车入库执行中")]
        Line_InExecuting = 220,
        /// <summary>
        /// è¾“送线入库完成
        /// å¤©è½¦å…¥åº“完成
        /// </summary>
        [Description("输送线输送完成")]
        [Description("天车入库完成")]
        Line_InFinish = 225,
        /// <summary>
        /// å †åž›æœºå…¥åº“执行中
        /// </summary>
        [Description("堆垛机入库执行中")]
        SC_InExecuting = 230,
        /// <summary>
        /// å †åž›æœºå…¥åº“完成
        /// </summary>
        [Description("堆垛机入库完成")]
        SC_InFinish = 235,
        /// <summary>
        /// å…¥åº“任务完成
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/WIDESEAWCS_Common.csproj
@@ -6,4 +6,8 @@
    <Nullable>enable</Nullable>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
  </ItemGroup>
</Project>
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/BasicInfo/InitializationLocationDTO.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,49 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Core.Attributes;
namespace WIDESEAWCS_DTO.BasicInfo
{
    [ModelValidate]
    public class InitializationLocationDTO
    {
        /// <summary>
        /// å··é“号
        /// </summary>
        [PropertyValidate("巷道号", NotNullAndEmpty = true)]
        public string Roadway { get; set; }
        /// <summary>
        /// è¡Œ
        /// </summary>
        [PropertyValidate("行", MinValue = 0, IsContainMinValue = false)]
        public int MaxRow { get; set; }
        /// <summary>
        /// åˆ—
        /// </summary>
        [PropertyValidate("列", MinValue = 0, IsContainMinValue = false)]
        public int MaxColumn { get; set; }
        /// <summary>
        /// å±‚
        /// </summary>
        [PropertyValidate("层", MinValue = 0, IsContainMinValue = false)]
        public int MaxLayer { get; set; }
        /// <summary>
        /// æ˜¯å¦å•深货位
        /// </summary>
        [PropertyValidate("是否单深货位", NotNullAndEmpty = true)]
        public bool IsSingleDepth { get; set; }
        /// <summary>
        /// ä¸€æ·±è¡Œå·
        /// </summary>
        [PropertyValidate("一深行号", NotNullAndEmptyWithPropertyAndValue = new string[] { nameof(IsSingleDepth), "false" })]
        public List<int> FirstDepthRows { get; set; }
    }
}
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/WIDESEAWCS_DTO.csproj
@@ -10,8 +10,4 @@
        <ProjectReference Include="..\WIDESEAWCS_Model\WIDESEAWCS_Model.csproj" />
    </ItemGroup>
    <ItemGroup>
      <Folder Include="BasicInfo\" />
    </ItemGroup>
</Project>
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_IWMSPart/ILocationInfoService.cs
@@ -3,6 +3,7 @@
using WIDESEAWCS_Core.BaseRepository;
using WIDESEAWCS_Core.BaseServices;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_DTO.BasicInfo;
namespace WIDESEAWCS_IWMSPart
{
@@ -17,5 +18,7 @@
        WebResponseContent GetLocationLayer();
        WebResponseContent GetLocationConfigs(int layer);
        WebResponseContent InitializationLocation(InitializationLocationDTO initializationLocationDTO);
    }
}
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/System/Sys_DictionaryController.cs
@@ -22,6 +22,7 @@
using WIDESEAWCS_Core.Caches;
using WIDESEAWCS_QuartzJob.DeviceEnum;
using WIDESEAWCS_Core.Enums;
using WIDESEAWCS_Common.LocationEnum;
namespace WIDESEAWCS_WCSServer.Controllers.System
{
@@ -365,6 +366,88 @@
                            result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data };
                        }
                        break;
                    case "enableStatusEnum":
                        {
                            List<object> data = new List<object>();
                            {
                                Type type = typeof(EnableStatusEnum);
                                List<int> enums = Enum.GetValues(typeof(EnableStatusEnum)).Cast<int>().ToList();
                                int index = 0;
                                foreach (var item in enums)
                                {
                                    FieldInfo? fieldInfo = typeof(EnableStatusEnum).GetField(((EnableStatusEnum)item).ToString());
                                    DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
                                    if (description != null)
                                    {
                                        data.Add(new { key = item.ToString(), value = description.Description });
                                    }
                                    else
                                    {
                                        data.Add(new { key = item.ToString(), value = item.ToString() });
                                    }
                                    index++;
                                }
                            }
                            result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data };
                        }
                        break;
                    case "locationStatusEnum":
                        {
                            List<object> data = new List<object>();
                            {
                                Type type = typeof(LocationStatusEnum);
                                List<int> enums = Enum.GetValues(typeof(LocationStatusEnum)).Cast<int>().ToList();
                                int index = 0;
                                foreach (var item in enums)
                                {
                                    FieldInfo? fieldInfo = typeof(LocationStatusEnum).GetField(((LocationStatusEnum)item).ToString());
                                    DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
                                    if (description != null)
                                    {
                                        data.Add(new { key = item.ToString(), value = description.Description });
                                    }
                                    else
                                    {
                                        data.Add(new { key = item.ToString(), value = item.ToString() });
                                    }
                                    index++;
                                }
                            }
                            result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data };
                        }
                        break;
                    case "locationTypeEnum":
                        {
                            List<object> data = new List<object>();
                            {
                                Type type = typeof(LocationTypeEnum);
                                List<int> enums = Enum.GetValues(typeof(LocationTypeEnum)).Cast<int>().ToList();
                                int index = 0;
                                foreach (var item in enums)
                                {
                                    FieldInfo? fieldInfo = typeof(LocationTypeEnum).GetField(((LocationTypeEnum)item).ToString());
                                    DescriptionAttribute? description = fieldInfo.GetCustomAttribute<DescriptionAttribute>();
                                    if (description != null)
                                    {
                                        data.Add(new { key = item.ToString(), value = description.Description });
                                    }
                                    else
                                    {
                                        data.Add(new { key = item.ToString(), value = item.ToString() });
                                    }
                                    index++;
                                }
                            }
                            result = new VueDictionaryDTO { DicNo = key, Config = "", Data = data };
                        }
                        break;
                }
                return result;
            }
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/WMSPart/LocationInfoController.cs
@@ -6,6 +6,7 @@
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.BaseController;
using WIDESEAWCS_Core.Enums;
using WIDESEAWCS_DTO.BasicInfo;
using WIDESEAWCS_IWMSPart;
using WIDESEAWCS_Model.Models;
@@ -36,5 +37,11 @@
        {
            return Service.GetLocationLayer();
        }
        [HttpPost, Route("InitializationLocation"), AllowAnonymous]
        public WebResponseContent InitializationLocation([FromBody] InitializationLocationDTO initializationLocationDTO)
        {
            return Service.InitializationLocation(initializationLocationDTO);
        }
    }
}
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json
@@ -6,7 +6,7 @@
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "dics": "deviceType,devicePlcType,jobAssembly,jobClassName,deviceStatus,taskType,taskState,inOutType",
  "dics": "deviceType,devicePlcType,jobAssembly,jobClassName,deviceStatus,taskType,taskState,inOutType,enableStatusEnum,locationStatusEnum,locationTypeEnum",
  "AllowedHosts": "*",
  "ConnectionStringsEncryption": false,
  "MainDB": "DB_WIDESEA", //当前项目的主库,所对应的连接字符串的Enabled必须为true 
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -454,7 +454,7 @@
                    //暂不考虑多个出库口
                }
                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup && task.TaskState == (int)TaskInStatusEnum.SC_InExecuting)
                else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)
                {
                    //todo 
                    int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskInStatusEnum>();
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/GZJ/GZJJob.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,135 @@
using Autofac.Core;
using HslCommunication;
using HslCommunication.Core;
using HslCommunication.WebSocket;
using Microsoft.Extensions.Hosting;
using Microsoft.VisualBasic.FileIO;
using Newtonsoft.Json;
using Quartz;
using SixLabors.ImageSharp.PixelFormats;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Communicator;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob;
using WIDESEAWCS_QuartzJob.DeviceBase;
using WIDESEAWCS_QuartzJob.StackerCrane.Enum;
using WIDESEAWCS_Tasks.OHT;
namespace WIDESEAWCS_Tasks
{
    [DisallowConcurrentExecution]
    public class GZJJob : JobBase, IJob
    {
        private readonly ITaskService _taskService;
        WebSocketServer _webSocketServer;
        public GZJJob(ITaskService taskService, WebSocketServer webSocketServer)
        {
            _taskService = taskService;//注入
            _webSocketServer = webSocketServer;
        }
        public Task Execute(IJobExecutionContext context)
        {
            bool flag = context.JobDetail.JobDataMap.TryGetValue("JobParams", out object? value);
            if (flag && value != null)
            {
                OtherDevice device = (OtherDevice)value;
                try
                {
                    //Example
                    //device.GetValue  è¯»å–
                    //device.SetValue  å†™å…¥
                    //_taskService.Repository; //仓储层,进行数据库访问
                    OHTReadData oHTReadData = new OHTReadData();
                    //todo:读取设备数据,
                    //todo:设备状态数据发送给前端
                    //WriteInfo(device.DeviceName, "infoLog");
                    //WriteDebug(device.DeviceName, "debugLog");
                }
                catch (Exception ex)
                {
                    WriteError(device.DeviceName, "错误", ex);
                }
            }
            return Task.CompletedTask;
        }
        /// <summary>
        /// ä»»åŠ¡å®žä½“è½¬æ¢æˆå‘½ä»¤Model
        /// </summary>
        /// <param name="task">任务实体</param>
        /// <returns></returns>
        /// <exception cref="Exception"></exception>
        public OHTTaskCommand? ConvertToOHTTaskCommand([NotNull] Dt_Task task)
        {
            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)
            {
                oHtTaskCommand.W_Pick_Line = Convert.ToInt16(SourceCodes[1]);
                oHtTaskCommand.W_Put_Column = Convert.ToInt16(SourceCodes[2]);
                oHtTaskCommand.W_Put_Layer = Convert.ToInt16(SourceCodes[3]);
            }
            else
            {
                //数据配置错误
                _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"任务源地址配置错误!");
                return null;
            }
            string[] targetCodes = task.TargetAddress.Split("-");
            if (targetCodes.Length == 3)
            {
                oHtTaskCommand.W_Put_Line = Convert.ToInt16(targetCodes[1]);
                oHtTaskCommand.W_Put_Column = Convert.ToInt16(targetCodes[2]);
                oHtTaskCommand.W_Put_Layer = Convert.ToInt16(targetCodes[3]);
            }
            else
            {
                //数据配置错误
                _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"任务目标地址配置错误");
                return null;
            }
            return oHtTaskCommand;
        }
        /// <summary>
        /// èŽ·å–ä»»åŠ¡
        /// </summary>
        /// <returns></returns>
        private Dt_Task? GetTask()
        {
            Dt_Task task;
            task = _taskService.QueryStackerCraneTask("R01");
            return task;
        }
    }
}
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/OHT/OHTEnum.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,230 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEAWCS_Tasks
{
    /// <summary>
    /// è¿è¡Œæ¨¡å¼
    /// </summary>
    public enum RunModeEnum
    {
        /// <summary>
        /// æœªçŸ¥
        /// </summary>
        [Description("未知")]
        UnKnown = 0,
        /// <summary>
        /// è‡ªåЍ
        /// </summary>
        [Description("自动")]
        Automatic = 1,
        /// <summary>
        /// åŠè‡ªåЍ
        /// </summary>
        [Description("半自动")]
        SemiAutomatic = 2,
        /// <summary>
        /// æ‰‹åЍ
        /// </summary>
        [Description("手动")]
        Manual = 3,
        /// <summary>
        /// ç»´ä¿®
        /// </summary>
        [Description("ç»´ä¿®")]
        Maintenance = 4,
    }
    /// <summary>
    /// è¿è¡ŒçŠ¶æ€
    /// </summary>
    public enum RunStateEnum
    {
        [Description("空闲")]
        Standby=0,
        [Description("取货行走")]
        PickUp=1,
        [Description("取货请求")]
        PickUpRequest=2,
        [Description("取货中")]
        PickUping=3,
        [Description("取货完成")]
        PickUpCompleted=4,
        [Description("放货行走")]
        Put=5,
        [Description("放货请求")]
        PutRequest=6,
        [Description("放货中")]
        Puting=7,
        [Description("放货完成")]
        PutCompleted=8,
        [Description("移动中")]
        Moving=9,
        [Description("移动完成")]
        MoveCompleted=10,
    }
    /// <summary>
    /// å¤©è½¦æŠ¥è­¦ä»£ç 
    /// </summary>
    public enum AlarmCodeEnum
    {
        [Description("正常")]
        Normal = 0,
        [Description("故障数字")]
        AlarmCode = 1,
        [Description("空取")]
        EmptyPickUp = 2
    }
    /// <summary>
    /// å¤©è½¦ä»»åŠ¡çŠ¶æ€
    /// </summary>
    public enum TaskStateEnum
    {
        [Description("默认")]
        Normal = 0,
        [Description("确认接收任务")]
        AcceptTaskConfirm = 1,
        [Description("任务执行中")]
        TaskExcuting = 2,
        [Description("正常完成任务")]
        TaskComplete = 3,
        [Description("任务暂停中")]
        TaskPausing = 4,
        [Description("无法完成任务")]
        TaskNOComplete = 5,
        [Description("任务被人工清除")]
        TaskManualClear = 6
    }
    public enum DeviceDBName
    {
        #region è¯»å–DB块
        /// <summary>
        /// å¿ƒè·³
        /// </summary>
        [Description("心跳")]
        R_HeartBeat,
        /// <summary>
        /// è¿è¡Œæ¨¡å¼
        /// </summary>
        [Description("运行模式")]
        R_RunMode,
        /// <summary>
        /// è¿è¡ŒçŠ¶æ€
        /// </summary>
        [Description("运行状态")]
        R_RunState ,
        /// <summary>
        /// æ•…障代码
        /// </summary>
        [Description("故障代码")]
        R_AlarmCode,
        /// <summary>
        /// ä»»åŠ¡çŠ¶æ€
        /// </summary>
        [Description("任务状态")]
        R_TaskState,
        /// <summary>
        /// å¤©è½¦å¤§è½¦å½“前位置
        /// </summary>
        [Description("天车大车当前位置")]
        R_CurrentLine,
        /// <summary>
        /// å¤©è½¦å°è½¦å½“前位置
        /// </summary>
        [Description("天车小车当前位置")]
        R_CurrentColumn,
        /// <summary>
        /// èµ·å‡å½“前位置
        /// </summary>
        [Description("起升当前位置")]
        R_RiseUp_Position,
        /// <summary>
        /// ä»»åŠ¡å·
        /// </summary>
        [Description("任务号")]
        R_TaskNumber,
        /// <summary>
        /// 1号货爪是否有货(保留)
        /// </summary>
        [Description("1号货爪有货")]
        R_Loaded_1,
        /// <summary>
        /// 2号货爪是否有货(保留)
        /// </summary>
        [Description("2号货爪有货")]
        R_Loaded_2,
        /// <summary>
        /// 1号货爪扫码结果
        /// </summary>
        [Description("1号货爪扫码结果")]
        R_Code_1,
        /// <summary>
        /// 2号货爪扫码结果
        /// </summary>
        [Description("2号货爪扫码结果")]
        R_Code_2,
        /// <summary>
        /// 1号装车位请求
        /// </summary>
        [Description("1号装车位请求")]
        R_Load_Requst_1,
        /// <summary>
        /// 2号装车位请求
        /// </summary>
        [Description("2号装车位请求")]
        R_Load_Requst_2,
        #endregion
        #region å†™DB块
        [Description("心跳")]
        W_HeartBeat,
        [Description("任务类型")]
        W_Task_Type,
        [Description("装车层数")]
        W_Load_Layer,
        [Description("取货行")]
        W_Pick_Line,
        [Description("取货列")]
        W_Pick_Column,
        [Description("取货层")]
        W_Pick_Layer,
        [Description("放货行")]
        W_Put_Line,
        [Description("放货列")]
        W_Put_Column,
        [Description("放货层")]
        W_Put_Layer,
        [Description("货爪1是否抓货")]
        W_Catch_1,
        [Description("货爪2是否抓货")]
        W_Catch_2,
        [Description("任务号")]
        W_TaskNumber,
        [Description("校验值")]
        W_CheckValue,
        [Description("确认信号")]
        W_ConfirmSignal,
        #endregion
    }
}
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/OHT/OHTJob.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,206 @@
using Autofac.Core;
using HslCommunication;
using HslCommunication.Core;
using HslCommunication.WebSocket;
using Microsoft.Extensions.Hosting;
using Microsoft.VisualBasic.FileIO;
using Newtonsoft.Json;
using Quartz;
using SixLabors.ImageSharp.PixelFormats;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Communicator;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob;
using WIDESEAWCS_QuartzJob.DeviceBase;
using WIDESEAWCS_QuartzJob.StackerCrane.Enum;
using WIDESEAWCS_Tasks.OHT;
namespace WIDESEAWCS_Tasks
{
    [DisallowConcurrentExecution]
    public class OHTJob : JobBase, IJob
    {
        private readonly ITaskService _taskService;
        WebSocketServer _webSocketServer;
        public OHTJob(ITaskService taskService, WebSocketServer webSocketServer)
        {
            _taskService = taskService;//注入
            _webSocketServer = webSocketServer;
        }
        public Task Execute(IJobExecutionContext context)
        {
            bool flag = context.JobDetail.JobDataMap.TryGetValue("JobParams", out object? value);
            if (flag && value != null)
            {
                OtherDevice device = (OtherDevice)value;
                try
                {
                    //Example
                    //device.GetValue  è¯»å–
                    //device.SetValue  å†™å…¥
                    //_taskService.Repository; //仓储层,进行数据库访问
                    OHTReadData oHTReadData = new OHTReadData();
                    #region è¯»å–天车设备数据
                    oHTReadData.R_HeartBeat = device.GetValue<DeviceDBName, short>(DeviceDBName.R_HeartBeat);
                    oHTReadData.R_RunMode = device.GetValue<DeviceDBName, short>(DeviceDBName.R_RunMode);
                    oHTReadData.R_RunState = device.GetValue<DeviceDBName, short>(DeviceDBName.R_RunState);
                    oHTReadData.R_AlarmCode = device.GetValue<DeviceDBName, short>(DeviceDBName.R_AlarmCode);
                    oHTReadData.R_TaskState = device.GetValue<DeviceDBName, short>(DeviceDBName.R_TaskState);
                    oHTReadData.R_CurrentLine = device.GetValue<DeviceDBName, short>(DeviceDBName.R_CurrentLine);
                    oHTReadData.R_CurrentColumn = device.GetValue<DeviceDBName, short>(DeviceDBName.R_CurrentColumn);
                    oHTReadData.R_RiseUp_Position = device.GetValue<DeviceDBName, short>(DeviceDBName.R_RiseUp_Position);
                    oHTReadData.R_TaskNumber = device.GetValue<DeviceDBName, short>(DeviceDBName.R_TaskNumber);
                    oHTReadData.R_Loaded_1 = device.GetValue<DeviceDBName, short>(DeviceDBName.R_Loaded_1);
                    oHTReadData.R_Loaded_2 = device.GetValue<DeviceDBName, short>(DeviceDBName.R_Loaded_2);
                    oHTReadData.R_Code_1 = device.GetValue<DeviceDBName, string>(DeviceDBName.R_Code_1);
                    oHTReadData.R_Code_2 = device.GetValue<DeviceDBName, string>(DeviceDBName.R_Code_2);
                    oHTReadData.R_Load_Requst_1 = device.GetValue<DeviceDBName, bool>(DeviceDBName.R_Load_Requst_1);
                    oHTReadData.R_Load_Requst_2 = device.GetValue<DeviceDBName, bool>(DeviceDBName.R_Load_Requst_2);
                    #region æµ‹è¯•用
                    //oHTReadData.R_HeartBeat = 1;
                    //oHTReadData.R_RunMode = 2;
                    //oHTReadData.R_RunState = 3;
                    //oHTReadData.R_AlarmCode = 4;
                    //oHTReadData.R_TaskState = 5;
                    //oHTReadData.R_CurrentLine = 6;
                    //oHTReadData.R_CurrentColumn = 7;
                    //oHTReadData.R_RiseUp_Position = 8;
                    //oHTReadData.R_TaskNumber = 9;
                    //oHTReadData.R_Loaded_1 =10;
                    //oHTReadData.R_Loaded_2 = 11;
                    //oHTReadData.R_Code_1 = "12";
                    //oHTReadData.R_Code_2 = "13";
                    //oHTReadData.R_Load_Requst_1 =true;
                    //oHTReadData.R_Load_Requst_2 = false;
                    #endregion
                    #endregion
                    //状态数据发送给前端
                    string ohtData = JsonConvert.SerializeObject(oHTReadData);
                    _webSocketServer.PublishAllClientPayload(ohtData);
                    if (oHTReadData.R_RunMode == (int)RunModeEnum.Automatic && oHTReadData.R_AlarmCode == (int)AlarmCodeEnum.Normal)
                    {
                        if (oHTReadData.R_RunState == (int)RunStateEnum.Standby)
                        {
                            Dt_Task? task = GetTask();
                            if (task != null)
                            {
                                OHTTaskCommand? oHTTaskCommand = ConvertToOHTTaskCommand(task);
                                if (oHTTaskCommand != null)
                                {
                                    //todo:写入任务命令
                                    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);
                                    //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);
                                    }
                                }
                            }
                        }
                    }
                    WriteInfo(device.DeviceName, "infoLog");
                    WriteDebug(device.DeviceName, "debugLog");
                }
                catch (Exception ex)
                {
                    WriteError(device.DeviceName, "错误", ex);
                }
            }
            return Task.CompletedTask;
        }
        /// <summary>
        /// ä»»åŠ¡å®žä½“è½¬æ¢æˆå‘½ä»¤Model
        /// </summary>
        /// <param name="task">任务实体</param>
        /// <returns></returns>
        /// <exception cref="Exception"></exception>
        public OHTTaskCommand? ConvertToOHTTaskCommand([NotNull] Dt_Task task)
        {
            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)
            {
                oHtTaskCommand.W_Pick_Line = Convert.ToInt16(SourceCodes[1]);
                oHtTaskCommand.W_Put_Column = Convert.ToInt16(SourceCodes[2]);
                oHtTaskCommand.W_Put_Layer = Convert.ToInt16(SourceCodes[3]);
            }
            else
            {
                //数据配置错误
                _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"任务源地址配置错误!");
                return null;
            }
            string[] targetCodes = task.TargetAddress.Split("-");
            if (targetCodes.Length == 3)
            {
                oHtTaskCommand.W_Put_Line = Convert.ToInt16(targetCodes[1]);
                oHtTaskCommand.W_Put_Column = Convert.ToInt16(targetCodes[2]);
                oHtTaskCommand.W_Put_Layer = Convert.ToInt16(targetCodes[3]);
            }
            else
            {
                //数据配置错误
                _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"任务目标地址配置错误");
                return null;
            }
            return oHtTaskCommand;
        }
        /// <summary>
        /// èŽ·å–ä»»åŠ¡
        /// </summary>
        /// <returns></returns>
        private Dt_Task? GetTask()
        {
            Dt_Task task;
            task = _taskService.QueryStackerCraneTask("R01");
            return task;
        }
    }
}
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/OHT/OHTReadData.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,88 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEAWCS_Tasks.OHT
{
    public class OHTReadData
    {
        /// <summary>
        /// å¿ƒè·³
        /// </summary>
        public short R_HeartBeat { get; set; }
        /// <summary>
        /// å½“前运行模式
        /// </summary>
        public short R_RunMode { get; set; }
        /// <summary>
        /// è¿è¡ŒçŠ¶æ€
        /// </summary>
        public short R_RunState { get; set; }
        /// <summary>
        /// æŠ¥è­¦ä»£ç 
        /// </summary>
        public short R_AlarmCode { get; set; }
        /// <summary>
        /// ä»»åŠ¡çŠ¶æ€
        /// </summary>
        public short R_TaskState { get; set; }
        /// <summary>
        /// å¤©è½¦å¤§è½¦å½“前位置
        /// </summary>
        public short R_CurrentLine { get; set; }
        /// <summary>
        /// å¤©è½¦å°è½¦å½“前位置
        /// </summary>
        public short R_CurrentColumn { get; set; }
        /// <summary>
        /// èµ·å‡å½“前位置
        /// </summary>
        public short R_RiseUp_Position { get; set; }
        /// <summary>
        /// ä»»åŠ¡å·
        /// </summary>
        public short R_TaskNumber { get; set; }
        /// <summary>
        /// 1号货爪是否有货
        /// </summary>
        public short R_Loaded_1 { get; set; }
        /// <summary>
        /// 2号货爪是否有货
        /// </summary>
        public short R_Loaded_2 { get; set; }
        /// <summary>
        /// 1号货爪扫码结果
        /// </summary>
        public string R_Code_1 { get; set; }
        /// <summary>
        /// 2号货爪扫码结果
        /// </summary>
        public string R_Code_2 { get; set; }
        /// <summary>
        /// 1号装车位请求
        /// </summary>
        public bool R_Load_Requst_1 { get; set; }
        /// <summary>
        /// 2号装车位请求
        /// </summary>
        public bool R_Load_Requst_2 { get; set; }
    }
}
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/OHT/OHTTaskCommand.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,81 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEAWCS_Tasks.OHT
{
    public class OHTTaskCommand
    {
        /// <summary>
        /// å¿ƒè·³
        /// </summary>
        public short W_HeartBeat { get; set; }
        /// <summary>
        /// ä»»åŠ¡ç±»åž‹
        /// </summary>
        public short W_Task_Type { get; set; }
        /// <summary>
        /// è£…车层数
        /// </summary>
        public short W_Load_Layer { get; set; }
        /// <summary>
        /// å–货行
        /// </summary>
        public short W_Pick_Line { get; set; }
        /// <summary>
        /// å–货列
        /// </summary>
        public short W_Pick_Column { get; set; }
        /// <summary>
        /// å–货层
        /// </summary>
        public short W_Pick_Layer { get; set; }
        /// <summary>
        /// æ”¾è´§è¡Œ
        /// </summary>
        public short W_Put_Line { get; set; }
        /// <summary>
        /// æ”¾è´§åˆ—
        /// </summary>
        public short W_Put_Column { get; set; }
        /// <summary>
        /// æ”¾è´§å±‚
        /// </summary>
        public short W_Put_Layer { get; set; }
        /// <summary>
        /// 1号是否抓取
        /// </summary>
        public short W_Catch_1 { get; set; }
        /// <summary>
        /// 2号是否抓取
        /// </summary>
        public short W_Catch_2 { get; set; }
        /// <summary>
        /// ä»»åŠ¡å·
        /// </summary>
        public short W_TaskNumber { get; set; }
        /// <summary>
        /// æ ¡éªŒå€¼  (任务类型+装车层数+取行+取列+取层+放行+放列+放层+W_Catch_1+W_Catch_2+任务号)
        /// </summary>
        public short W_CheckValue { get; set; }
        /// <summary>
        /// ç¡®è®¤ä¿¡å·
        /// </summary>
        public int W_ConfirmSignal { get; set; }
    }
}
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/TestJob.cs
ÎļþÒÑɾ³ý
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ZXJ/ZXJJob.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,135 @@
using Autofac.Core;
using HslCommunication;
using HslCommunication.Core;
using HslCommunication.WebSocket;
using Microsoft.Extensions.Hosting;
using Microsoft.VisualBasic.FileIO;
using Newtonsoft.Json;
using Quartz;
using SixLabors.ImageSharp.PixelFormats;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Communicator;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob;
using WIDESEAWCS_QuartzJob.DeviceBase;
using WIDESEAWCS_QuartzJob.StackerCrane.Enum;
using WIDESEAWCS_Tasks.OHT;
namespace WIDESEAWCS_Tasks
{
    [DisallowConcurrentExecution]
    public class ZXJJob : JobBase, IJob
    {
        private readonly ITaskService _taskService;
        WebSocketServer _webSocketServer;
        public ZXJJob(ITaskService taskService, WebSocketServer webSocketServer)
        {
            _taskService = taskService;//注入
            _webSocketServer = webSocketServer;
        }
        public Task Execute(IJobExecutionContext context)
        {
            bool flag = context.JobDetail.JobDataMap.TryGetValue("JobParams", out object? value);
            if (flag && value != null)
            {
                OtherDevice device = (OtherDevice)value;
                try
                {
                    //Example
                    //device.GetValue  è¯»å–
                    //device.SetValue  å†™å…¥
                    //_taskService.Repository; //仓储层,进行数据库访问
                    OHTReadData oHTReadData = new OHTReadData();
                    //todo:读取设备数据,
                    //todo:设备状态数据发送给前端
                    //WriteInfo(device.DeviceName, "infoLog");
                    //WriteDebug(device.DeviceName, "debugLog");
                }
                catch (Exception ex)
                {
                    WriteError(device.DeviceName, "错误", ex);
                }
            }
            return Task.CompletedTask;
        }
        /// <summary>
        /// ä»»åŠ¡å®žä½“è½¬æ¢æˆå‘½ä»¤Model
        /// </summary>
        /// <param name="task">任务实体</param>
        /// <returns></returns>
        /// <exception cref="Exception"></exception>
        public OHTTaskCommand? ConvertToOHTTaskCommand([NotNull] Dt_Task task)
        {
            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)
            {
                oHtTaskCommand.W_Pick_Line = Convert.ToInt16(SourceCodes[1]);
                oHtTaskCommand.W_Put_Column = Convert.ToInt16(SourceCodes[2]);
                oHtTaskCommand.W_Put_Layer = Convert.ToInt16(SourceCodes[3]);
            }
            else
            {
                //数据配置错误
                _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"任务源地址配置错误!");
                return null;
            }
            string[] targetCodes = task.TargetAddress.Split("-");
            if (targetCodes.Length == 3)
            {
                oHtTaskCommand.W_Put_Line = Convert.ToInt16(targetCodes[1]);
                oHtTaskCommand.W_Put_Column = Convert.ToInt16(targetCodes[2]);
                oHtTaskCommand.W_Put_Layer = Convert.ToInt16(targetCodes[3]);
            }
            else
            {
                //数据配置错误
                _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"任务目标地址配置错误");
                return null;
            }
            return oHtTaskCommand;
        }
        /// <summary>
        /// èŽ·å–ä»»åŠ¡
        /// </summary>
        /// <returns></returns>
        private Dt_Task? GetTask()
        {
            Dt_Task task;
            task = _taskService.QueryStackerCraneTask("R01");
            return task;
        }
    }
}
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_WMSPart/LocationInfoService.cs
@@ -1,8 +1,12 @@

using WIDESEAWCS_Common.LocationEnum;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.BaseRepository;
using WIDESEAWCS_Core.BaseServices;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_Core.Utilities;
using WIDESEAWCS_DTO.BasicInfo;
using WIDESEAWCS_IWMSPart;
using WIDESEAWCS_Model.Models;
@@ -84,6 +88,53 @@
            }
        }
        public WebResponseContent InitializationLocation(InitializationLocationDTO initializationLocationDTO)
        {
            try
            {
                (bool, string, object?) result = ModelValidate.ValidateModelData(initializationLocationDTO);
                if (!result.Item1) return WebResponseContent.Instance.Error(result.Item2);
                int side = 1;
                List<Dt_LocationInfo> locationInfos = new List<Dt_LocationInfo>();
                for (int i = 0; i < initializationLocationDTO.MaxRow; i++)
                {
                    for (int j = 0; j < initializationLocationDTO.MaxColumn; j++)
                    {
                        for (int k = 0; k < initializationLocationDTO.MaxLayer; k++)
                        {
                            Dt_LocationInfo locationInfo = new Dt_LocationInfo()
                            {
                                Column = j + 1,
                                EnableStatus = EnableStatusEnum.Normal.ObjToInt(),
                                Layer = k + 1,
                                LocationStatus = LocationStatusEnum.Free.ObjToInt(),
                                LocationType = LocationTypeEnum.Cube.ObjToInt(),
                                RoadwayNo = initializationLocationDTO.Roadway,
                                Row = i + 1,
                            };
                            locationInfo.Depth = 1;
                            locationInfo.LocationCode = $"{locationInfo.Row.ToString().PadLeft(3, '0')}-{locationInfo.Column.ToString().PadLeft(3, '0')}-{locationInfo.Layer.ToString().PadLeft(3, '0')}";
                            locationInfo.LocationName = $"{locationInfo.Row.ToString().PadLeft(3, '0')}行{locationInfo.Column.ToString().PadLeft(3, '0')}列{locationInfo.Layer.ToString().PadLeft(3, '0')}层";
                            locationInfos.Add(locationInfo);
                        }
                    }
                }
                BaseDal.AddData(locationInfos);
                return WebResponseContent.Instance.OK();
            }
            catch (Exception ex)
            {
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
    }
    public class LocationConfig