From b5bc0d6eb2d2e55ea830a1b286252b9754cbf8e9 Mon Sep 17 00:00:00 2001
From: hutongqing <hutongqing@hnkhzn.com>
Date: 星期三, 21 八月 2024 11:21:04 +0800
Subject: [PATCH] 更新主从表添加、修改、删除时对从表的对应操作

---
 WIDESEAWCS_Client/src/views/taskinfo/task.vue                                                       |   20 
 WIDESEAWCS_Client/src/components/basic/ViewGrid/ViewGrid.vue                                        |    2 
 WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs                         |    2 
 WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/DesignTimeBuild/.dtbcache.v2                                |    0 
 WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/48dbe7a1-6f9c-4d99-80e7-0a33da024c54.vsidx |    0 
 WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/.futdcache.v2                                           |    0 
 WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Models/Dt_DeviceProtocolDetail.cs                            |    5 
 WIDESEAWCS_Client/src/views/quartzJob/dispatchInfo.vue                                              |  247 +++
 WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/76cc37f7-c85d-4466-8bd8-f1f015300f41.vsidx |    0 
 WIDESEAWCS_Server/WIDESEAWCS_Core/BaseRepository/RepositoryBase.cs                                  |    3 
 WIDESEAWCS_Server/WIDESEAWCS_Core/Seed/DBSeed.cs                                                    |    1 
 WIDESEAWCS_Client/src/router/viewGird.js                                                            |   12 
 WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Service/DeviceInfoService.cs                                 |    6 
 WIDESEAWCS_Server/WIDESEAWCS_Core/Helper/ObjectExtension.cs                                         |   14 
 WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/StackerCrane/CommonStackerCrane.cs                           |    1 
 WIDESEAWCS_Server/WIDESEAWCS_DTO/System/VueDictionaryDTO.cs                                         |   17 
 WIDESEAWCS_Client/src/views/quartzJob/deviceInfo.vue                                                |   76 
 WIDESEAWCS_Client/src/components/basic/ViewGrid/methods.js                                          |    4 
 WIDESEAWCS_Server/.vs/ProjectEvaluation/wideseawcs_server.projects.v7.bin                           |    0 
 WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/QuartzJob/DispatchInfoController.cs                 |   17 
 WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/QuartzJob/DeviceProtocolController.cs               |   17 
 WIDESEAWCS_Server/WIDESEAWCS_Core/BaseServices/ServiceBase.cs                                       |  240 ++
 WIDESEAWCS_Server/WIDESEAWCS_Communicator/Siemens/SiemensS7Communicator.cs                          |  122 +
 WIDESEAWCS_Server/WIDESEAWCS_Server/WIDESEAWCS_Server.csproj                                        |   19 
 .gitignore                                                                                          |    3 
 WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/System/Sys_DictionaryController.cs                  |   53 
 WIDESEAWCS_Server/WIDESEAWCS_SystemRepository/Sys_MenuRepository.cs                                 |    5 
 WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.json                                     | 1636 +++++++++++++---------
 WIDESEAWCS_Client/src/extension/quartzJob/dispatchInfo.js                                           |   58 
 WIDESEAWCS_Server/.vs/ProjectEvaluation/wideseawcs_server.metadata.v7.bin                           |    0 
 WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/f4890dfc-6391-4820-a859-504e4b8425a2.vsidx |    0 
 WIDESEAWCS_Server/WIDESEAWCS_Server/Program.cs                                                      |   10 
 WIDESEAWCS_Client/src/extension/taskinfo/task.js                                                    |    9 
 WIDESEAWCS_Server/WIDESEAWCS_Core/Enums/TaskTypeEnum.cs                                             |   21 
 WIDESEAWCS_Server/WIDESEAWCS_Core/Helper/AppSettings.cs                                             |    1 
 WIDESEAWCS_Client/src/components/basic/VolTable.vue                                                 |  515 +++---
 WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/ConveyorLine/CommonConveyorLine.cs                           |    2 
 WIDESEAWCS_Server/WIDESEAWCS_Core/App.cs                                                            |    4 
 WIDESEAWCS_Server/WIDESEAWCS_Communicator/CommunicatorCommonMethod.cs                               |   34 
 WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/00db5435-e38c-4bce-a9bc-01f81f6f73e9.vsidx |    0 
 WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_DictionaryService.cs                                |   20 
 WIDESEAWCS_Client/src/extension/quartzJob/deviceProtocol.js                                         |   58 
 WIDESEAWCS_Client/src/components/basic/VolFormDraggable/VolFormDraggable.vue                        |    2 
 WIDESEAWCS_Server/WIDESEAWCS_Core/Utilities/EntityProperties.cs                                     |  103 +
 WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/QuartzExtensions/QuartzJobHostedService.cs                   |    2 
 WIDESEAWCS_Client/config/buttons.js                                                                 |   59 
 WIDESEAWCS_Client/src/views/quartzJob/deviceProtocol.vue                                            |  229 +++
 WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/QuartzJob/DeviceProtocolDetailController.cs         |   17 
 WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Storage.cs                                                   |  290 ++++
 WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/DeviceEnum/DeviceStatus.cs                                   |    3 
 WIDESEAWCS_Client/src/extension/quartzJob/deviceProtocolDetail.js                                   |   58 
 /dev/null                                                                                           |   14 
 WIDESEAWCS_Client/src/extension/taskinfo/extend/taskExecuteDetail.vue                               |   23 
 WIDESEAWCS_Server/WIDESEAWCS_Core/HttpContextUser/AspNetUser.cs                                     |   19 
 WIDESEAWCS_Server/WIDESEAWCS_Core/BaseRepository/IRepository.cs                                     |    1 
 WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json                                                |    1 
 WIDESEAWCS_Client/src/views/quartzJob/deviceProtocolDetail.vue                                      |  207 ++
 WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/35543db2-1bc1-4def-b15c-7bd79225c95e.vsidx |    0 
 WIDESEAWCS_Server/WIDESEAWCS_ISystemServices/ISys_DictionaryService.cs                              |    3 
 59 files changed, 3,178 insertions(+), 1,107 deletions(-)

diff --git a/.gitignore b/.gitignore
index dd3e4fb..d2accf9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -79,6 +79,9 @@
 #zzzili
 v15/
 
+*.bin
+*.v2
+
 
 
 
diff --git a/WIDESEAWCS_Client/config/buttons.js b/WIDESEAWCS_Client/config/buttons.js
index 5e68919..b3b49a7 100644
--- a/WIDESEAWCS_Client/config/buttons.js
+++ b/WIDESEAWCS_Client/config/buttons.js
@@ -20,7 +20,8 @@
     onClick: function () {
         this.add();
     }
-}, {
+},
+{
     name: "缂� 杈�",
     icon: 'el-icon-edit',
     value: 'Update',
@@ -30,7 +31,44 @@
     onClick: function () {
         this.edit();
     }
-}, {
+},
+{
+    name: "浠诲姟瀹屾垚",
+    icon: '',
+    class: '',
+    value: 'TaskCompleted',
+    type: 'primary',
+    onClick: function () {
+    }
+},
+{
+    name: "浠诲姟鍙栨秷",
+    icon: '',
+    class: '',
+    value: 'TaskCancel',
+    type: 'danger',
+    onClick: function () {
+    }
+},
+{
+    name: "鍥炴粴鍒颁笂涓�姝�",
+    icon: '',
+    class: '',
+    value: 'Previous',
+    type: 'danger',
+    onClick: function () {
+    }
+},
+{
+    name: "璺宠浆鍒颁笅涓�姝�",
+    icon: '',
+    class: '',
+    value: 'Next',
+    type: 'warning',
+    onClick: function () {
+    }
+},
+{
     name: "鍒� 闄�",
     icon: 'el-icon-delete',
     class: '',
@@ -39,7 +77,8 @@
     onClick: function () {
         this.del();
     }
-}, {
+},
+{
     name: "瀹� 鏍�",
     icon: 'el-icon-check',
     class: '',
@@ -60,8 +99,8 @@
     onClick: function () {
         this.import();
     }
-}
-    , {
+},
+{
     name: "瀵� 鍑�",
     icon: 'el-icon-bottom',
     type: 'success',
@@ -71,15 +110,7 @@
         this.export();
     }
 }
-    // , {
-    //     name: "鏁版嵁缁撴瀯",
-    //     icon: 'ios-cog',
-    //     class: '',
-    //     value: '',
-    //     onClick: function () {
-    //         this.openViewColumns();
-    //     }
-    // }
+
 ]
 
 export default buttons
\ No newline at end of file
diff --git a/WIDESEAWCS_Client/src/components/basic/ViewGrid/ViewGrid.vue b/WIDESEAWCS_Client/src/components/basic/ViewGrid/ViewGrid.vue
index b67e30f..e4bbcd3 100644
--- a/WIDESEAWCS_Client/src/components/basic/ViewGrid/ViewGrid.vue
+++ b/WIDESEAWCS_Client/src/components/basic/ViewGrid/ViewGrid.vue
@@ -608,7 +608,7 @@
       //闇�瑕佷粠杩滅▼缁戝畾鏁版嵁婧愮殑瀛楀吀缂栧彿,濡傛灉瀛楀吀鏁版嵁婧愮殑鏌ヨ缁撴灉杈冨锛岃鍦╫nInit涓皢瀛楀吀缂栧彿娣诲姞杩涙潵
       //鍙鑷畾sql鏈夋晥
       remoteKeys: [],
-      columnIndex: false, //2020.11.01鏄惁鏄剧ず琛屽彿
+      columnIndex: true, //2020.11.01鏄惁鏄剧ず琛屽彿
       ck: true, //2020.11.01鏄惁鏄剧ずcheckbox
       continueAdd: false, //2021.04.11鏂板缓鏃舵槸鍚﹀彲浠ヨ繛缁柊寤烘搷浣�
       continueAddName: '淇濆瓨鍚庣户缁坊鍔�', //2021.04.11鎸夐挳鍚嶇О
diff --git a/WIDESEAWCS_Client/src/components/basic/ViewGrid/methods.js b/WIDESEAWCS_Client/src/components/basic/ViewGrid/methods.js
index 2893bad..fa02eca 100644
--- a/WIDESEAWCS_Client/src/components/basic/ViewGrid/methods.js
+++ b/WIDESEAWCS_Client/src/components/basic/ViewGrid/methods.js
@@ -1343,6 +1343,7 @@
     //鏄惁蹇界暐鍓嶇紑/  鑾峰彇鎿嶄綔鐨剈rl
     return (!ingorPrefix ? '/' : '') + 'api' + this.table.url + action;
   },
+
   initDicKeys() {
     //鍒濆鍖栧瓧鍏告暟鎹�
     let keys = [];
@@ -1392,6 +1393,7 @@
     if (keys.length == 0) return;
     let $this = this;
     this.http.post('/api/Sys_Dictionary/GetVueDictionary', keys).then((dic) => {
+
       $this.bindOptions(dic);
       //2022.04.04澧炲姞瀛楀吀鍔犺浇瀹屾垚鏂规硶
       $this.dicInited && $this.dicInited(dic);
@@ -1672,7 +1674,7 @@
       this.$refs.table && this.search();
     }
   },
-  fullscreen(full){ //寮瑰嚭妗嗗叏灞忔柟娉�
+  fullscreen(full) { //寮瑰嚭妗嗗叏灞忔柟娉�
 
   }
 };
diff --git a/WIDESEAWCS_Client/src/components/basic/VolFormDraggable/VolFormDraggable.vue b/WIDESEAWCS_Client/src/components/basic/VolFormDraggable/VolFormDraggable.vue
index f4d07ea..de8b85f 100644
--- a/WIDESEAWCS_Client/src/components/basic/VolFormDraggable/VolFormDraggable.vue
+++ b/WIDESEAWCS_Client/src/components/basic/VolFormDraggable/VolFormDraggable.vue
@@ -779,6 +779,7 @@
       if (!keys.length) {
         return;
       }
+      debugger
       this.http
         .post("api/Sys_Dictionary/GetVueDictionary", keys, true)
         .then((result) => {
@@ -910,6 +911,7 @@
       return true;
     },
     dicChange(key) {
+      debugger
       this.http
         .post("api/Sys_Dictionary/GetVueDictionary", [key], true)
         .then((result) => {
diff --git a/WIDESEAWCS_Client/src/components/basic/VolTable.vue b/WIDESEAWCS_Client/src/components/basic/VolTable.vue
index ce67195..af51360 100644
--- a/WIDESEAWCS_Client/src/components/basic/VolTable.vue
+++ b/WIDESEAWCS_Client/src/components/basic/VolTable.vue
@@ -5,7 +5,7 @@
     :class="[
       textInline ? 'text-inline' : '',
       fxRight ? 'fx-right' : '',
-      isChrome ? 'chrome' : ''
+      isChrome ? 'chrome' : '',
     ]"
   >
     <div class="mask" v-show="loading"></div>
@@ -39,16 +39,16 @@
       :scrollbar-always-on="true"
     >
       <el-table-column
-        v-if="columnIndex"
-        type="index"
-        :fixed="fixed"
-        width="55"
-      ></el-table-column>
-      <el-table-column
         v-if="ck"
         type="selection"
         :fixed="fixed"
         :selectable="selectable"
+        width="55"
+      ></el-table-column>
+      <el-table-column
+        v-if="columnIndex"
+        type="index"
+        :fixed="fixed"
         width="55"
       ></el-table-column>
 
@@ -63,7 +63,7 @@
         :key="column.field + cindex"
         :align="column.align"
         :sortable="column.sort ? 'custom' : false"
-        :show-overflow-tooltip="column.showOverflowTooltip"
+        :show-overflow-tooltip="true"
       >
         <template #header>
           <span
@@ -134,40 +134,55 @@
           <!-- 鍚敤鍙屽嚮缂栬緫鍔熻兘锛屽甫缂栬緫鍔熻兘鐨勪笉浼氭覆鏌撲笅鎷夋鏂囨湰鑳屾櫙棰滆壊 -->
           <!-- @click="rowBeginEdit(scope.$index,cindex)" -->
           <!-- 2021.09.21澧炲姞缂栬緫鏃跺readonly灞炴�у垽鏂� -->
-           <template v-else-if="column.edit&&!column.readonly&&['file', 'img','excel'].indexOf(column.edit.type) != -1" >
-                <div style="display:flex;align-items: center;" @click.stop>
-                  <i style="padding: 3px;margin-right: 10px;color:#8f9293;cursor: pointer;" @click="showUpload(scope.row, column)" class="el-icon-upload"></i>
-                   <img
-                    v-if="column.edit.type == 'img'"
-                    v-for="(file, imgIndex) in getFilePath(
-                      scope.row[column.field],
-                      column
-                    )"
-                    :key="imgIndex"
-                    :onerror="defaultImg"
-                    @click="viewImg(scope.row, column, file.path, $event)"
-                    class="table-img"
-                    :src="file.path"
-                  />
-                  <a
-                    style="margin-right: 8px"
-                    v-else
-                    class="t-file"
-                    v-for="(file, fIndex) in getFilePath(
-                      scope.row[column.field],
-                      column
-                    )"
-                    :key="fIndex"
-                    @click="dowloadFile(file)"
-                    >{{ file.name }}</a
-                  >
-                </div>
+          <template
+            v-else-if="
+              column.edit &&
+              !column.readonly &&
+              ['file', 'img', 'excel'].indexOf(column.edit.type) != -1
+            "
+          >
+            <div style="display: flex; align-items: center" @click.stop>
+              <i
+                style="
+                  padding: 3px;
+                  margin-right: 10px;
+                  color: #8f9293;
+                  cursor: pointer;
+                "
+                @click="showUpload(scope.row, column)"
+                class="el-icon-upload"
+              ></i>
+              <img
+                v-show="column.edit.type == 'img'"
+                v-for="(file, imgIndex) in getFilePath(
+                  scope.row[column.field],
+                  column
+                )"
+                :key="imgIndex"
+                :onerror="defaultImg"
+                @click="viewImg(scope.row, column, file.path, $event)"
+                class="table-img"
+                :src="file.path"
+              />
+              <a
+                style="margin-right: 8px"
+                v-show="column.edit.type != 'img'"
+                class="t-file"
+                v-for="(file, fIndex) in getFilePath(
+                  scope.row[column.field],
+                  column
+                )"
+                :key="fIndex"
+                @click="dowloadFile(file)"
+                >{{ file.name }}</a
+              >
+            </div>
           </template>
           <div
             v-else-if="
               column.edit &&
-                !column.readonly &&
-                (column.edit.keep || edit.rowIndex == scope.$index)
+              !column.readonly &&
+              (column.edit.keep || edit.rowIndex == scope.$index)
             "
             class="edit-el"
           >
@@ -273,7 +288,7 @@
                         ? true
                         : false
                     "
-                    :multiple="column.edit.type == 'select' ? false : true"
+                    :multiple="column.edit.type == 'select'"
                     :placeholder="column.placeholder || column.title"
                     :autocomplete="column.autocomplete"
                     @change="
@@ -439,191 +454,199 @@
     lazy
   >
     <!-- 涓婁紶鍥剧墖銆乪xcel鎴栧叾浠栨枃浠躲�佹枃浠舵暟閲忋�佸ぇ灏忛檺鍒堕兘鍙互锛屽弬鐓olupload缁勪欢api -->
-    <div style="height: 200px;display: flex;align-items: center;">
+    <div style="height: 200px; display: flex; align-items: center">
       <VolUpload
-      style="text-align: center; "
-      :autoUpload="currentColumn.edit.autoUpload"
-      :multiple="currentColumn.edit.multiple"
-      :url="uploadUrl"
-      :max-file="currentColumn.edit.maxFile"
-      :img="currentColumn.edit.type == 'img'"
-      :excel="currentColumn.edit.type == 'excel'"
-      :fileTypes="currentColumn.edit.fileTypes ? currentColumn.edit.fileTypes : []"
-      :fileInfo="fileInfo"
-      :upload-after="uploadAfter"
-    >
-      <div>{{ currentColumn.message}}</div>
-    </VolUpload>
+        style="text-align: center"
+        :autoUpload="currentColumn.edit.autoUpload"
+        :multiple="currentColumn.edit.multiple"
+        :url="uploadUrl"
+        :max-file="currentColumn.edit.maxFile"
+        :img="currentColumn.edit.type == 'img'"
+        :excel="currentColumn.edit.type == 'excel'"
+        :fileTypes="
+          currentColumn.edit.fileTypes ? currentColumn.edit.fileTypes : []
+        "
+        :fileInfo="fileInfo"
+        :upload-after="uploadAfter"
+      >
+        <div>{{ currentColumn.message }}</div>
+      </VolUpload>
     </div>
     <template #footer>
-        <div style="text-align: center; ">
-          <el-button type="default" size="small" @click="uploadModel=false">鍏抽棴</el-button >
-          <el-button type="primary" size="small" @click="saveUpload" >淇濆瓨</el-button >
-        </div>
+      <div style="text-align: center">
+        <el-button type="default" size="small" @click="uploadModel = false"
+          >鍏抽棴</el-button
+        >
+        <el-button type="primary" size="small" @click="saveUpload"
+          >淇濆瓨</el-button
+        >
+      </div>
     </template>
   </VolBox>
-
 </template>
 <script>
-import VolTableRender from './VolTable/VolTableRender';
+import VolTableRender from "./VolTable/VolTableRender";
 let _errMsg;
-import { defineComponent,defineAsyncComponent } from 'vue';
+import { defineComponent, defineAsyncComponent } from "vue";
 export default defineComponent({
   //https://github.com/element-plus/element-plus/issues/1483
   //娌℃湁鍘熷厛鐨剆election灞炴�т簡锛岀湅issue涓婁娇鐢╯elect/selectall鑾峰彇
   //鐩戝惉鏁扮粍闀垮害锛屽鏋滃垹闄や簡鏁版嵁锛岀幇鍦ㄥ彧鑳借杩竻闄ゆ墍鏈夐�変腑鐨勮
   watch: {
-    'tableData.length': {
+    "tableData.length": {
       handler(newLen, oldLen) {
         this.watchRowSelectChange(newLen, oldLen);
-      }
+      },
     },
-    'rowData.length': {
+    "rowData.length": {
       handler(newLen, oldLen) {
         this.watchRowSelectChange(newLen, oldLen);
-      }
-    }
+      },
+    },
   },
-  components: { 'table-render': VolTableRender,
-  VolUpload: defineAsyncComponent(() =>import("@/components/basic/VolUpload.vue") ),
-  VolBox: defineAsyncComponent(() => import("@/components/basic/VolBox.vue")),
-},
+  components: {
+    "table-render": VolTableRender,
+    VolUpload: defineAsyncComponent(() =>
+      import("@/components/basic/VolUpload.vue")
+    ),
+    VolBox: defineAsyncComponent(() => import("@/components/basic/VolBox.vue")),
+  },
   props: {
     rowKey: {
       // 鏍戝舰缁撴瀯鐨勪富閿瓧娈碉紝濡傛灉璁剧疆鍊奸粯璁や細寮�鍚爲褰able锛涙敞鎰弐owKey瀛楁鐨勫�煎繀椤绘槸鍞竴锛�2021.05.02锛�
       typeof: String,
-      default: undefined
+      default: undefined,
     },
     loadTreeChildren: {
       // 鏍戝舰缁撴瀯鍔犺浇瀛愯妭鐐�
       type: Function,
       default: (tree, treeNode, resolve) => {
         return resolve([]);
-      }
+      },
     },
     textInline: {
       // 琛ㄦ牸鍐呭瓒呭嚭鍚庢槸鍚︽崲琛屾樉绀猴紙2020.01.16锛�
       type: Boolean,
-      default: true
+      default: true,
     },
     tableData: {
       // 琛ㄦ暟鎹簮,閰嶇疆浜唘rl灏变笉鐢ㄤ紶杩欎釜鍙傛暟浜�
       type: Array,
       default: () => {
         return [];
-      }
+      },
     },
     columns: {
       type: Array,
-      default: []
+      default: [],
     },
     height: {
       type: Number,
-      default: 0
+      default: 0,
     },
     maxHeight: {
       type: Number,
-      default: 0
+      default: 0,
     },
     linkView: {
       type: Function,
-      default: function() {
+      default: function () {
         return 1;
-      }
+      },
     },
     pagination: {
       type: Object,
-      default: function() {
-        return { total: 0, size: 30, sortName: '' };
-      }
+      default: function () {
+        return { total: 0, size: 30, sortName: "" };
+      },
     },
     url: {
       type: String,
-      default: ''
+      default: "",
     },
     paginationHide: {
       type: Boolean,
-      default: true
+      default: true,
     },
     color: {
       type: Boolean,
-      default: true
+      default: true,
     },
     index: {
       // 鏄惁鍒涘缓绱㈠紩鍙�,濡傛灉闇�瑕佽〃鏍肩紪杈戝姛鑳斤紝杩欓噷闇�瑕佽缃负true
       type: Boolean,
-      default: false
+      default: false,
     },
     allowEmpty: {
       // 琛ㄦ牸鏁版嵁涓虹┖鏃舵槸鍚﹂粯璁や负--
       type: Boolean,
-      default: true
+      default: true,
     },
     defaultLoadPage: {
       // 浼犲叆浜唘rl锛屾槸鍚﹂粯璁ゅ姞杞借〃鏍兼暟鎹�
       type: Boolean,
-      default: true
+      default: true,
     },
     loadKey: {
       // 鏄惁鑷姩浠庡悗鍙板姞杞芥暟鎹簮
       type: Boolean,
-      default: true
+      default: true,
     },
     single: {
       type: Boolean, // 鏄惁鍗曢��
-      default: false
+      default: false,
     },
     doubleEdit: {
       type: Boolean, // 鏄惁鍙屽嚮鍚敤缂栬緫鍔熻兘
-      default: true
+      default: true,
     },
     beginEdit: {
       // 缂栬緫寮�濮�
       type: Function,
-      default: function(row, column, index) {
+      default: function (row, column, index) {
         return true;
-      }
+      },
     },
     endEditBefore: {
       // 缁撴潫缂栬緫鍓�
       type: Function,
-      default: function(row, column, index) {
+      default: function (row, column, index) {
         return true;
-      }
+      },
     },
     endEditAfter: {
       // 缁撴潫缂栬緫鍓�
       type: Function,
-      default: function(row, column, index) {
+      default: function (row, column, index) {
         return true;
-      }
+      },
     },
     ck: {
       // 鏄惁鏄剧ずcheckbox
       type: Boolean,
-      default: true
+      default: true,
     },
     columnIndex: {
       // 鏄惁鏄剧ず琛屽彿(2020..11.1)
       type: Boolean,
-      default: true
+      default: true,
     },
     highlightCurrentRow: {
       //澧炲姞閫変腑琛岄珮浜樉绀�(2022.10.07)
       type: Boolean,
-      default: true
+      default: true,
     },
     select2Count: {
       //瓒呭嚭鏁伴噺鏄剧ずselect2缁勪欢
       type: Number,
-      default: 500
+      default: 500,
     },
     selectable: {
       type: Function,
       default: (row, index) => {
         return true;
-      }
-    }
+      },
+    },
   },
   data() {
     return {
@@ -631,39 +654,39 @@
       clickEdit: true, //2021.07.17璁剧疆涓虹偣鍑昏缁撴潫缂栬緫
       randomTableKey: 1,
       visiblyColumns: [],
-      key: '',
+      key: "",
       realHeight: 0,
       realMaxHeight: 0,
       enableEdit: false, // 鏄惁鍚〃鏍肩敤缂栬緫鍔熻兘
-      empty: this.allowEmpty ? '' : '--',
-      defaultImg: 'this.src="' + require('@/assets/imgs/error.png') + '"',
+      empty: this.allowEmpty ? "" : "--",
+      defaultImg: 'this.src="' + require("@/assets/imgs/error.png") + '"',
       loading: false,
       footer: {},
       total: 0,
       formatConfig: {},
       // defaultColor: "",
       // 2020.09.06璋冩暣table鍒楁暟鎹簮鐨勮儗鏅鑹�
-      colors: ['', 'warning', 'success', 'danger', 'info'],
+      colors: ["", "warning", "success", "danger", "info"],
       rule: {
         phone: /^[1][3,4,5,6,7,8,9][0-9]{9}$/,
         decimal: /(^[\-0-9][0-9]*(.[0-9]+)?)$/,
-        number: /(^[\-0-9][0-9]*([0-9]+)?)$/
+        number: /(^[\-0-9][0-9]*([0-9]+)?)$/,
       },
       columnNames: [],
       rowData: [],
       paginations: {
-        sort: '',
-        order: 'desc',
-        Foots: '',
+        sort: "",
+        order: "desc",
+        Foots: "",
         total: 0,
         // 2020.08.29澧炲姞鑷畾涔夊垎椤垫潯澶у皬
         sizes: [30, 60, 100, 120],
         size: 30, // 榛樿鍒嗛〉澶у皬
         Wheres: [],
         page: 1,
-        rows: 30
+        rows: 30,
       },
-      errorFiled: '',
+      errorFiled: "",
       edit: { columnIndex: -1, rowIndex: -1 }, // 褰撳墠鍙屽嚮缂栬緫鐨勮涓庡垪鍧愭爣
       editStatus: {},
       summary: false, // 鏄惁鏄剧ず鍚堣
@@ -678,11 +701,11 @@
       //vol-table甯︽暟鎹簮鐨勫崟鍏冩牸鏄惁鍚敤tag鏍囩(涓嬫媺妗嗙瓑鍗曞厓鏍间互tag鏍囩鏄剧ず)
       //2023.04.02鏇存柊voltable涓巑ain.js
       useTag: true,
-      currentRow:{},
-      currentColumn:[],
-      fileInfo:[],
-      uploadUrl:"",
-      uploadModel:false
+      currentRow: {},
+      currentColumn: [],
+      fileInfo: [],
+      uploadUrl: "",
+      uploadModel: false,
     };
   },
   created() {
@@ -701,12 +724,12 @@
     this.realHeight = this.getHeight();
     this.realMaxHeight = this.getMaxHeight();
     this.fxRight = this.columns.some((x) => {
-      return x.fixed == 'right';
+      return x.fixed == "right";
     });
     //2021.09.21绉婚櫎寮哄埗鍥哄畾琛屽彿涓巆heckbox鍒�
     if (
       this.columns.some((x) => {
-        return x.fixed && x.fixed != 'right';
+        return x.fixed && x.fixed != "right";
       })
     ) {
       this.fixed = true;
@@ -728,9 +751,9 @@
     // 浠庡悗鍙板姞涓嬫媺妗嗙殑[鏄惁鍚敤鐨刔鏁版嵁婧�
     let keys = [];
     let columnBind = [];
-    this.summaryData.push('鍚堣');
+    this.summaryData.push("鍚堣");
     if (this.columnIndex) {
-      this.summaryData.push(' ');
+      this.summaryData.push(" ");
     }
     this.columns.forEach((x, _index) => {
       if (x.cellStyle) {
@@ -739,7 +762,7 @@
       if (!x.hidden) {
         // this.summaryIndex[x.field] = _index;
         // 2020.10.11淇姹傚拰鍒楅敊浣嶇殑闂
-        this.summaryData.push('');
+        this.summaryData.push("");
         this.summaryIndex[x.field] = this.summaryData.length - 1;
       }
       // 姹傚拰
@@ -760,7 +783,7 @@
     });
     if (keys.length > 0) {
       this.http
-        .post('/api/Sys_Dictionary/GetVueDictionary', keys)
+        .post("/api/Sys_Dictionary/GetVueDictionary", keys)
         .then((dic) => {
           dic.forEach((x) => {
             if (x.data.length > this.select2Count) {
@@ -773,7 +796,7 @@
               // 杞崲鏁版嵁婧愮殑绫诲瀷涓庡垪鐨勭被鍨嬩竴鑷�(2020.04.04)
               if (
                 c.key == x.dicNo &&
-                (c.valueTyoe == 'int' || c.valueTyoe == 'sbyte')
+                (c.valueTyoe == "int" || c.valueTyoe == "sbyte")
               ) {
                 x.data.forEach((d) => {
                   // 2020.09.01澧炲姞瀵规暟瀛楃被鍨嬬殑浜屾鍒ゆ柇
@@ -795,7 +818,7 @@
       this.paginations.rows = this.pagination.size;
     }
     this.enableEdit = this.columns.some((x) => {
-      return x.hasOwnProperty('edit');
+      return x.hasOwnProperty("edit");
     });
     let keyColumn = this.columns.find((x) => {
       return x.isKey;
@@ -813,7 +836,7 @@
         }
         return !x.hidden;
       });
-    }
+    },
   },
   methods: {
     watchRowSelectChange(newLen, oldLen) {
@@ -860,7 +883,7 @@
     },
     rowDbClick(row, column, event) {
       //2021.05.23澧炲姞鍙屽嚮琛屼簨浠�
-      this.$emit('rowDbClick', { row, column, event });
+      this.$emit("rowDbClick", { row, column, event });
     },
     rowClick(row, column, event) {
       //2022.02.20澧炲姞鐐瑰嚮鏃惰〃鏍煎弬鏁板垽鏂�
@@ -869,7 +892,7 @@
       }
       //姝e湪缂栬緫鏃讹紝绂佹鍑哄彂rowClick浜嬩欢
       if (this.edit.rowIndex == -1) {
-        this.$emit('rowClick', { row, column, event });
+        this.$emit("rowClick", { row, column, event });
       }
       // 鐐瑰嚮琛屼簨浠�(2020.11.07)
 
@@ -897,7 +920,7 @@
         //褰撴鍦ㄧ紪杈戯紝涓旂偣鍑诲埌鍏朵粬琛屾椂锛屽湪鍘熺紪杈戠殑琛岀粨鏉熺紪杈戝悗锛岃Е鍙戞柊琛岀殑rowClick浜嬩欢
         //姝e湪缂栬緫鏃讹紝绂佹鍑哄彂rowClick浜嬩欢
         if (this.edit.rowIndex == -1) {
-          this.$emit('rowClick', { row, column, event });
+          this.$emit("rowClick", { row, column, event });
         }
       }
       this.rowBeginEdit(row, column);
@@ -907,7 +930,7 @@
         file.path,
         file.name,
         {
-          Authorization: this.$store.getters.getToken()
+          Authorization: this.$store.getters.getToken(),
         },
         this.http.ipAddress
       );
@@ -921,17 +944,17 @@
         return column.formatter(pathSring);
       }
       let filePath;
-      if (column.base64 && pathSring.indexOf('data') != -1) {
-        filePath = (',' + pathSring)
-          .split(',data')
+      if (column.base64 && pathSring.indexOf("data") != -1) {
+        filePath = ("," + pathSring)
+          .split(",data")
           .filter((x) => {
             return x;
           })
           .map((m) => {
-            return 'data' + m;
+            return "data" + m;
           });
       } else {
-        filePath = pathSring.replace(/\\/g, '/').split(',');
+        filePath = pathSring.replace(/\\/g, "/").split(",");
       }
 
       let fileInfo = [];
@@ -940,17 +963,17 @@
         // 2020.12.19澧炲姞base64鍥剧墖鏄剧ず
         if (column.base64) {
           fileInfo.push({
-            name: '',
+            name: "",
             path:
-              (file.indexOf('data') == -1 ? 'data:image/png;base64,' : '') +
-              file
+              (file.indexOf("data") == -1 ? "data:image/png;base64," : "") +
+              file,
           });
-        } else if (file.indexOf('.') != -1) {
-          let splitFile = file.split('/');
+        } else if (file.indexOf(".") != -1) {
+          let splitFile = file.split("/");
           if (splitFile.length > 0) {
             fileInfo.push({
               name: splitFile[splitFile.length - 1],
-              path: this.base.isUrl(file) ? file : this.http.ipAddress + file
+              path: this.base.isUrl(file) ? file : this.http.ipAddress + file,
             });
           }
         }
@@ -972,7 +995,7 @@
           this.paginations.wheres.splice(0);
         }
       }
-      this.errorFiled = '';
+      this.errorFiled = "";
       this.edit.columnIndex = -1;
       this.edit.rowIndex = -1;
     },
@@ -1048,13 +1071,13 @@
         if (
           //涓嶈兘缂栬緫鐨勫瓧娈点�乻witch锛岀偣鍑讳笉寮�鍚惎缂栬緫鍔熻兘
           !_row.edit ||
-          (_row.edit.keep && _row.edit.type == 'switch')
+          (_row.edit.keep && _row.edit.type == "switch")
         ) {
           return;
         }
       }
       if (!this.enableEdit) return;
-      _errMsg = '';
+      _errMsg = "";
       // 缂栬緫鍓�
       this.columns
         .filter((x) => {
@@ -1062,21 +1085,21 @@
         })
         .forEach((column) => {
           let val = row[column.field];
-          if (typeof column.bind.data[0].key == 'string') {
-            if (typeof val == 'number') {
-              row[column.field] = row[column.field] + '';
+          if (typeof column.bind.data[0].key == "string") {
+            if (typeof val == "number") {
+              row[column.field] = row[column.field] + "";
             }
           } else {
-            if (typeof val == 'string' && val) {
+            if (typeof val == "string" && val) {
               let _val = val * 1;
-              if (_val + '' === val) {
+              if (_val + "" === val) {
                 row[column.field] = _val;
               }
             }
           }
         });
       if (!this.beginEdit(row, column, row.elementIndex)) return;
-      if (row.hasOwnProperty('elementIndex')) {
+      if (row.hasOwnProperty("elementIndex")) {
         if (this.edit.rowIndex == row.elementIndex) {
           return;
         }
@@ -1136,16 +1159,16 @@
         this.$message.error(option1.title + _errMsg);
         return false;
       }
-      this.errorFiled = '';
+      this.errorFiled = "";
       return true;
     },
     validateColum(option, data) {
       if (option.hidden || option.bind) return true;
       let val = data[option.field];
       if (option.require || option.required) {
-        if (val != '0' && (val === '' || val === undefined)) {
+        if (val != "0" && (val === "" || val === undefined)) {
           if (!this.errorFiled) {
-            _errMsg = '涓嶈兘涓虹┖';
+            _errMsg = "涓嶈兘涓虹┖";
           }
           return false;
         }
@@ -1155,52 +1178,52 @@
       }
       let editType = option.edit.type;
       // 楠岃瘉鏁板瓧
-      if (editType == 'int' || editType == 'decimal' || editType == 'number') {
-        if (val == '' || val == undefined) return true;
-        if (editType == 'decimal') {
+      if (editType == "int" || editType == "decimal" || editType == "number") {
+        if (val == "" || val == undefined) return true;
+        if (editType == "decimal") {
           if (!this.rule.decimal.test(val)) {
-            _errMsg = '鍙兘鏄暟瀛�';
+            _errMsg = "鍙兘鏄暟瀛�";
             return false;
           }
         } else if (!this.rule.decimal.test(val)) {
-          _errMsg = '鍙兘鏄暟瀛�';
+          _errMsg = "鍙兘鏄暟瀛�";
           return false;
         }
         if (
           option.edit.min != undefined &&
-          typeof option.edit.min === 'number' &&
+          typeof option.edit.min === "number" &&
           val < option.edit.min
         ) {
-          _errMsg = '涓嶈兘灏忎簬' + option.edit.min;
+          _errMsg = "涓嶈兘灏忎簬" + option.edit.min;
           return false;
         }
         if (
           option.edit.max != undefined &&
-          typeof option.edit.max === 'number' &&
+          typeof option.edit.max === "number" &&
           val > option.edit.max
         ) {
-          _errMsg = '涓嶈兘澶т簬' + option.edit.max;
+          _errMsg = "涓嶈兘澶т簬" + option.edit.max;
           return false;
         }
         return true;
       }
 
       // 楠岃瘉瀛楃涓�
-      if (val && (editType == 'text' || editType == 'string')) {
+      if (val && (editType == "text" || editType == "string")) {
         if (
           option.edit.min != undefined &&
-          typeof option.edit.min === 'number' &&
+          typeof option.edit.min === "number" &&
           val.length < option.edit.min
         ) {
-          _errMsg = '鑷冲皯' + option.edit.min + '涓瓧绗�';
+          _errMsg = "鑷冲皯" + option.edit.min + "涓瓧绗�";
           return false;
         }
         if (
           option.edit.max != undefined &&
-          typeof option.edit.max === 'number' &&
+          typeof option.edit.max === "number" &&
           val.length > option.edit.max
         ) {
-          _errMsg = '鏈�澶�' + option.edit.max + '涓瓧绗�';
+          _errMsg = "鏈�澶�" + option.edit.max + "涓瓧绗�";
           return false;
         }
       }
@@ -1208,7 +1231,7 @@
     },
     delRow() {
       let rows = this.getSelected();
-      if (rows.length == 0) return this.$Message.error('璇烽�夋嫨瑕佸垹闄ょ殑琛�!');
+      if (rows.length == 0) return this.$Message.error("璇烽�夋嫨瑕佸垹闄ょ殑琛�!");
 
       let data = this.url ? this.rowData : this.tableData;
       let indexArr = this.getSelectedIndex();
@@ -1248,8 +1271,8 @@
         // 2022.05.06 娣诲姞琛屾椂锛屽鏋滃垪鏈夌紪杈戝睘鎬э紝璁剧疆寮�鍚紪杈�(閬垮厤鍏抽棴缂栬緫鍚庯紝鏃犳硶鍐嶆鍚敤缂栬緫)??
         //x.readonly = false;
         if (!row.hasOwnProperty(x.field)) {
-          if (x.edit && x.edit.type == 'switch') {
-            row[x.field] = x.type == 'bool' ? false : 0;
+          if (x.edit && x.edit.type == "switch") {
+            row[x.field] = x.type == "bool" ? false : 0;
           } else if (!row.hidden) {
             // 2020.09.06娣诲姞琛屾椂锛岃缃粯璁ゅ瓧娈�
             row[x.field] = undefined;
@@ -1294,7 +1317,7 @@
         let key = column.bind.key;
         let data = [];
         rows.forEach((row) => {
-          if (row[column.field] || row[column.field] == '0') {
+          if (row[column.field] || row[column.field] == "0") {
             if (data.indexOf(row[column.field]) == -1) {
               data.push(row[column.field]);
             }
@@ -1307,7 +1330,7 @@
       if (remoteInfo.length == 0) return;
       // ha= Object.assign([], ha, hb)
       this.http
-        .post('/api/Sys_Dictionary/GetTableDictionary', remoteInfo)
+        .post("/api/Sys_Dictionary/GetTableDictionary", remoteInfo)
         .then((dic) => {
           dic.forEach((x) => {
             this.remoteColumns.forEach((column) => {
@@ -1317,7 +1340,7 @@
               }
             });
           });
-          this.$emit('dicInited', dic);
+          this.$emit("dicInited", dic);
         });
     },
     load(query, isResetPage) {
@@ -1325,13 +1348,13 @@
       if (!this.url) return;
       if (isResetPage) {
         this.resetPage();
-      }  
+      }
       let param = {
         page: this.paginations.page,
         rows: this.paginations.rows,
         sort: this.paginations.sort,
         order: this.paginations.order,
-        wheres: [] // 鏌ヨ鏉′欢锛屾牸寮忎负[{ name: "瀛楁", value: "xx" }]
+        wheres: [], // 鏌ヨ鏉′欢锛屾牸寮忎负[{ name: "瀛楁", value: "xx" }]
       };
       let status = true;
       // 鍚堝苟鏌ヨ淇℃伅(鍖呮煡璇㈠垎椤点�佹帓搴忋�佹煡璇㈡潯浠剁瓑)
@@ -1344,7 +1367,7 @@
           callBack(true);
         })
       */
-      this.$emit('loadBefore', param, (result) => {
+      this.$emit("loadBefore", param, (result) => {
         status = result;
       });
       if (!status) return;
@@ -1364,7 +1387,7 @@
           // 鏌ヨ杩斿洖缁撴灉鍚庡鐞�
           // 2020.10.30澧炲姞鏌ヨ鍚庤繑鍥炴墍鏈夌殑鏌ヨ淇℃伅
           this.$emit(
-            'loadAfter',
+            "loadAfter",
             data.rows || [],
             (result) => {
               status = result;
@@ -1392,11 +1415,11 @@
       this.summaryData.splice(0);
       // 寮�鍚簡琛屽彿鐨勶紝+1
       if (this.columnIndex) {
-        this.summaryData.push('');
+        this.summaryData.push("");
       }
       // 濡傛灉鏈塩heckbox锛屽簲璇ョ畻浣滄槸绗竴琛�
       if (this.ck) {
-        this.summaryData.push('');
+        this.summaryData.push("");
       }
 
       this.columns.forEach((col) => {
@@ -1408,8 +1431,8 @@
           this.getColumnSummaries(col, data);
         }
       });
-      if (this.summaryData.length > 0 && this.summaryData[0] == '') {
-        this.summaryData[0] = '鍚堣';
+      if (this.summaryData.length > 0 && this.summaryData[0] == "") {
+        this.summaryData[0] = "鍚堣";
       }
     },
     getColumnSummaries(col, data) {
@@ -1418,12 +1441,12 @@
           let sum = data.summary[col.field];
           if (sum) {
             sum =
-              (sum * 1.0).toFixed(col.numberLength || 2).replace('.00', '') *
+              (sum * 1.0).toFixed(col.numberLength || 2).replace(".00", "") *
               1.0;
           }
           this.summaryData.push(sum);
         } else {
-          this.summaryData.push('');
+          this.summaryData.push("");
         }
       }
     },
@@ -1439,7 +1462,7 @@
     },
     sortChange(sort) {
       this.paginations.sort = sort.prop;
-      this.paginations.order = sort.order == 'ascending' ? 'asc' : 'desc';
+      this.paginations.order = sort.order == "ascending" ? "asc" : "desc";
       this.load();
     },
     resetPage() {
@@ -1453,7 +1476,7 @@
       this.selectRows = selection;
       if (this.single) {
         if (selection.length == 1) {
-          this.$emit('rowChange', selection[0]);
+          this.$emit("rowChange", selection[0]);
         }
         if (selection.length > 1) {
           let _row = selection[selection.length - 1];
@@ -1462,18 +1485,18 @@
         }
       }
       // 灏唖electionchange鏆撮湶鍑哄幓
-      this.$emit('selectionChange', selection);
+      this.$emit("selectionChange", selection);
     },
     getColor(row, column) {
       let val = row[column.field];
-      if (column.getColor && typeof column.getColor === 'function') {
+      if (column.getColor && typeof column.getColor === "function") {
         let _color = column.getColor(row, column);
         if (_color) {
           return _color;
         }
       }
-      if (!val && val != '0') {
-        return '';
+      if (!val && val != "0") {
+        return "";
       }
       if (!this.formatConfig[column.field]) {
         this.formatConfig[column.field] = [val];
@@ -1484,7 +1507,7 @@
         return this.colors[index];
       }
       if (this.formatConfig[column.field].length > 5) {
-        return '';
+        return "";
       }
 
       if (index == -1) {
@@ -1494,38 +1517,45 @@
       return this.colors[index];
     },
     formatterDate(row, column) {
-      return (row[column.field] || '').substr(0, 10);
+      return (row[column.field] || "").substr(0, 10);
     },
     formatter(row, column, template) {
       if (!template) return row[column.property];
       let val = row[column.field];
       if (!val && val != 0) return val;
       // 鏄惁鍊�
-      if (column.edit && column.edit.type == 'switch') {
-        return val ? '鏄�' : '鍚�';
+      if (column.edit && column.edit.type == "switch") {
+        return val ? "鏄�" : "鍚�";
       }
       if (!column.bind || !column.bind.data) {
         return row[column.field];
       }
 
-      if (column.edit && (column.edit.type == 'selectList'||column.edit.type=='treeSelect')) {
+      if (
+        column.edit &&
+        (column.edit.type == "selectList" || column.edit.type == "treeSelect")
+      ) {
         if (!Array.isArray(val)) {
-          row[column.field] = val.split(',');
+          row[column.field] = val.split(",");
         } else {
-          val = val.join(',');
+          val = val.join(",");
         }
         return this.getSelectFormatter(column, val);
       }
       // 缂栬緫澶氶�塼able鏄剧ず
-      if (column.bind.type == 'selectList' || column.bind.type == 'checkbox'||column.bind.type=='treeSelect') {
-       // if (typeof val === 'string' && val.indexOf(',') != -1) {
-          return this.getSelectFormatter(column, val+'');
-      //  }
+      if (
+        column.bind.type == "selectList" ||
+        column.bind.type == "checkbox" ||
+        column.bind.type == "treeSelect"
+      ) {
+        // if (typeof val === 'string' && val.indexOf(',') != -1) {
+        return this.getSelectFormatter(column, val + "");
+        //  }
       }
       let source = column.bind.data.filter((x) => {
         // return x.key != "" && x.key == val;
         // 2020.06.06淇鍗曠嫭浣跨敤table缁勪欢鏃�,key涓烘暟瀛�0鏃惰浆鎹㈡垚鏂囨湰澶辫触鐨勯棶棰�
-        return x.key !== '' && x.key !== undefined && x.key + '' === val + '';
+        return x.key !== "" && x.key !== undefined && x.key + "" === val + "";
       });
       if (source && source.length > 0) val = source[0].label || source[0].value;
       return val;
@@ -1534,12 +1564,16 @@
       // 缂栬緫澶氶�塼able鏄剧ず
       let valArr = val.split(",");
       for (let index = 0; index < valArr.length; index++) {
-        ( column.bind.orginData&&column.bind.orginData.length
-          ?column.bind.orginData
-          :column.bind.data)
-        .forEach((x) => {
+        (column.bind.orginData && column.bind.orginData.length
+          ? column.bind.orginData
+          : column.bind.data
+        ).forEach((x) => {
           // 2020.06.06淇鏁版嵁婧愪负selectList鏃�,key涓烘暟瀛�0鏃朵笉鑳借浆鎹㈡枃鏈殑闂
-          if (x.key !== "" && x.key !== undefined && x.key + "" == valArr[index] + "") {
+          if (
+            x.key !== "" &&
+            x.key !== undefined &&
+            x.key + "" == valArr[index] + ""
+          ) {
             valArr[index] = x.label || x.value;
           }
         });
@@ -1568,11 +1602,11 @@
         }
       });
       if (sum) {
-        if (column.summary == 'avg') {
+        if (column.summary == "avg") {
           sum = sum / (this.rowData.length || this.tableData.length || 1);
         }
         sum =
-          (sum * 1.0).toFixed(column.numberLength || 2).replace('.00', '') *
+          (sum * 1.0).toFixed(column.numberLength || 2).replace(".00", "") *
           1.0;
       }
       this.summaryData[this.summaryIndex[column.field]] = sum;
@@ -1599,7 +1633,7 @@
       }
       return (
         date1.valueOf() <
-        (typeof date2 == 'number' ? date2 : new Date(date2).valueOf())
+        (typeof date2 == "number" ? date2 : new Date(date2).valueOf())
       );
     },
     getDateOptions(date, item) {
@@ -1607,9 +1641,9 @@
       if ((!item.min && !item.max) || !date) {
         return false;
       }
-      if (item.min && item.min.indexOf(' ') == -1) {
+      if (item.min && item.min.indexOf(" ") == -1) {
         //涓嶈缃椂鍒嗙锛屽悗闈細鑷姩鍔犱笂 08:00
-        item.min = item.min + ' 00:00:000';
+        item.min = item.min + " 00:00:000";
       }
       return (
         this.compareDate(date, item.min) || !this.compareDate(date, item.max)
@@ -1617,19 +1651,19 @@
     },
     getDateFormat(column) {
       //瑙乭ttps://day.js.org/docs/zh-CN/display/format
-      return column.edit.type == 'date' ? 'YYYY-MM-DD' : 'YYYY-MM-DD HH:mm:ss';
+      return column.edit.type == "date" ? "YYYY-MM-DD" : "YYYY-MM-DD HH:mm:ss";
     },
     userSelect(selection, row) {
       this.selectRows = selection;
       if (!this.single) {
-        this.$emit('rowChange', { row, selection });
+        this.$emit("rowChange", { row, selection });
       }
     },
     isEmptyTag(row, column) {
-      if (!row[column.field] && row[column.field] != '0') {
-        return 'empty-tag';
+      if (!row[column.field] && row[column.field] != "0") {
+        return "empty-tag";
       }
-      return '';
+      return "";
     },
     filterChildrenColumn(children) {
       if (!children) {
@@ -1642,33 +1676,40 @@
     initColumnDisabled(row, column) {
       return column.getDisabled && column.getDisabled(row, column);
     },
-    showUpload(row,column){
-       this.fileInfo = (row[column.field] || '').split(",")
-                    .filter(x => { return x })
-                    .map(item => {
-                       return { path: item, name: "" };
-                    })
-      this.currentRow=row;
-      this.currentColumn=column;
-      if (this.currentColumn.edit.autoUpload===undefined) {
-        this.currentColumn.edit.autoUpload=true;
+    showUpload(row, column) {
+      this.fileInfo = (row[column.field] || "")
+        .split(",")
+        .filter((x) => {
+          return x;
+        })
+        .map((item) => {
+          return { path: item, name: "" };
+        });
+      this.currentRow = row;
+      this.currentColumn = column;
+      if (this.currentColumn.edit.autoUpload === undefined) {
+        this.currentColumn.edit.autoUpload = true;
       }
-      if (this.currentColumn.edit.multiple===undefined) {
-        this.currentColumn.edit.multiple=false;
+      if (this.currentColumn.edit.multiple === undefined) {
+        this.currentColumn.edit.multiple = false;
       }
 
-      if (this.currentColumn.edit.url===undefined) {
-          this.uploadUrl='api/'+(this.url||'').replace('/api','api').split('/')[1]+'/upload'
-      }else{
-        this.uploadUrl=this.currentColumn.edit.url;
+      if (this.currentColumn.edit.url === undefined) {
+        this.uploadUrl =
+          "api/" +
+          (this.url || "").replace("/api", "api").split("/")[1] +
+          "/upload";
+      } else {
+        this.uploadUrl = this.currentColumn.edit.url;
       }
-      this.uploadModel=true;
+      this.uploadModel = true;
     },
     uploadAfter(result, files) {
-      this.currentColumn.uploadAfter&&this.currentColumn.uploadAfter(result,files);
+      this.currentColumn.uploadAfter &&
+        this.currentColumn.uploadAfter(result, files);
       return true;
     },
-    saveUpload(){
+    saveUpload() {
       //鐢熸垚淇濆瓨鍚庤繑鍥炵殑璺緞
       let arr = this.fileInfo.map((x) => {
         if (x.path) {
@@ -1680,8 +1721,8 @@
       this.currentRow[this.currentColumn.field] = arr.join(",");
       this.uploadModel = false;
       return true;
-    }
-  }
+    },
+  },
 });
 </script>
 <style lang="less" scoped>
diff --git a/WIDESEAWCS_Client/src/extension/quartzJob/deviceProtocol.js b/WIDESEAWCS_Client/src/extension/quartzJob/deviceProtocol.js
index e69de29..a39e193 100644
--- a/WIDESEAWCS_Client/src/extension/quartzJob/deviceProtocol.js
+++ b/WIDESEAWCS_Client/src/extension/quartzJob/deviceProtocol.js
@@ -0,0 +1,58 @@
+
+//姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
+
+let extension = {
+    components: {
+      //鏌ヨ鐣岄潰鎵╁睍缁勪欢
+      gridHeader: '',
+      gridBody: '',
+      gridFooter: '',
+      //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
+      modelHeader: '',
+      modelBody: '',
+      modelFooter: ''
+    },
+    tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
+    buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+    methods: {
+       //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
+      onInit() {  
+      },
+      onInited() {
+        //妗嗘灦鍒濆鍖栭厤缃悗
+        //濡傛灉瑕侀厤缃槑缁嗚〃,鍦ㄦ鏂规硶鎿嶄綔
+        //this.detailOptions.columns.forEach(column=>{ });
+      },
+      searchBefore(param) {
+        //鐣岄潰鏌ヨ鍓�,鍙互缁檖aram.wheres娣诲姞鏌ヨ鍙傛暟
+        //杩斿洖false锛屽垯涓嶄細鎵ц鏌ヨ
+        return true;
+      },
+      searchAfter(result) {
+        //鏌ヨ鍚庯紝result杩斿洖鐨勬煡璇㈡暟鎹�,鍙互鍦ㄦ樉绀哄埌琛ㄦ牸鍓嶅鐞嗚〃鏍肩殑鍊�
+        return true;
+      },
+      addBefore(formData) {
+        //鏂板缓淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛紝鍙互缁欑粰琛ㄥ崟璁剧疆鍊硷紝鑷繁杈撳嚭鐪媐ormData鐨勫��
+        return true;
+      },
+      updateBefore(formData) {
+        //缂栬緫淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛ㄣ�佸垹闄よ鐨処d
+        return true;
+      },
+      rowClick({ row, column, event }) {
+        //鏌ヨ鐣岄潰鐐瑰嚮琛屼簨浠�
+        // this.$refs.table.$refs.table.toggleRowSelection(row); //鍗曞嚮琛屾椂閫変腑褰撳墠琛�;
+      },
+      modelOpenAfter(row) {
+        //鐐瑰嚮缂栬緫銆佹柊寤烘寜閽脊鍑烘鍚庯紝鍙互鍦ㄦ澶勫啓閫昏緫锛屽锛屼粠鍚庡彴鑾峰彇鏁版嵁
+        //(1)鍒ゆ柇鏄紪杈戣繕鏄柊寤烘搷浣滐細 this.currentAction=='Add';
+        //(2)缁欏脊鍑烘璁剧疆榛樿鍊�
+        //(3)this.editFormFields.瀛楁='xxx';
+        //濡傛灉闇�瑕佺粰涓嬫媺妗嗚缃粯璁ゅ�硷紝璇烽亶鍘唗his.editFormOptions鎵惧埌瀛楁閰嶇疆瀵瑰簲data灞炴�х殑key鍊�
+        //鐪嬩笉鎳傚氨鎶婅緭鍑虹湅锛歝onsole.log(this.editFormOptions)
+      }
+    }
+  };
+  export default extension;
+  
\ No newline at end of file
diff --git a/WIDESEAWCS_Client/src/extension/quartzJob/deviceProtocolDetail.js b/WIDESEAWCS_Client/src/extension/quartzJob/deviceProtocolDetail.js
index e69de29..a39e193 100644
--- a/WIDESEAWCS_Client/src/extension/quartzJob/deviceProtocolDetail.js
+++ b/WIDESEAWCS_Client/src/extension/quartzJob/deviceProtocolDetail.js
@@ -0,0 +1,58 @@
+
+//姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
+
+let extension = {
+    components: {
+      //鏌ヨ鐣岄潰鎵╁睍缁勪欢
+      gridHeader: '',
+      gridBody: '',
+      gridFooter: '',
+      //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
+      modelHeader: '',
+      modelBody: '',
+      modelFooter: ''
+    },
+    tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
+    buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+    methods: {
+       //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
+      onInit() {  
+      },
+      onInited() {
+        //妗嗘灦鍒濆鍖栭厤缃悗
+        //濡傛灉瑕侀厤缃槑缁嗚〃,鍦ㄦ鏂规硶鎿嶄綔
+        //this.detailOptions.columns.forEach(column=>{ });
+      },
+      searchBefore(param) {
+        //鐣岄潰鏌ヨ鍓�,鍙互缁檖aram.wheres娣诲姞鏌ヨ鍙傛暟
+        //杩斿洖false锛屽垯涓嶄細鎵ц鏌ヨ
+        return true;
+      },
+      searchAfter(result) {
+        //鏌ヨ鍚庯紝result杩斿洖鐨勬煡璇㈡暟鎹�,鍙互鍦ㄦ樉绀哄埌琛ㄦ牸鍓嶅鐞嗚〃鏍肩殑鍊�
+        return true;
+      },
+      addBefore(formData) {
+        //鏂板缓淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛紝鍙互缁欑粰琛ㄥ崟璁剧疆鍊硷紝鑷繁杈撳嚭鐪媐ormData鐨勫��
+        return true;
+      },
+      updateBefore(formData) {
+        //缂栬緫淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛ㄣ�佸垹闄よ鐨処d
+        return true;
+      },
+      rowClick({ row, column, event }) {
+        //鏌ヨ鐣岄潰鐐瑰嚮琛屼簨浠�
+        // this.$refs.table.$refs.table.toggleRowSelection(row); //鍗曞嚮琛屾椂閫変腑褰撳墠琛�;
+      },
+      modelOpenAfter(row) {
+        //鐐瑰嚮缂栬緫銆佹柊寤烘寜閽脊鍑烘鍚庯紝鍙互鍦ㄦ澶勫啓閫昏緫锛屽锛屼粠鍚庡彴鑾峰彇鏁版嵁
+        //(1)鍒ゆ柇鏄紪杈戣繕鏄柊寤烘搷浣滐細 this.currentAction=='Add';
+        //(2)缁欏脊鍑烘璁剧疆榛樿鍊�
+        //(3)this.editFormFields.瀛楁='xxx';
+        //濡傛灉闇�瑕佺粰涓嬫媺妗嗚缃粯璁ゅ�硷紝璇烽亶鍘唗his.editFormOptions鎵惧埌瀛楁閰嶇疆瀵瑰簲data灞炴�х殑key鍊�
+        //鐪嬩笉鎳傚氨鎶婅緭鍑虹湅锛歝onsole.log(this.editFormOptions)
+      }
+    }
+  };
+  export default extension;
+  
\ No newline at end of file
diff --git a/WIDESEAWCS_Client/src/extension/quartzJob/dispatchInfo.js b/WIDESEAWCS_Client/src/extension/quartzJob/dispatchInfo.js
index e69de29..a39e193 100644
--- a/WIDESEAWCS_Client/src/extension/quartzJob/dispatchInfo.js
+++ b/WIDESEAWCS_Client/src/extension/quartzJob/dispatchInfo.js
@@ -0,0 +1,58 @@
+
+//姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
+
+let extension = {
+    components: {
+      //鏌ヨ鐣岄潰鎵╁睍缁勪欢
+      gridHeader: '',
+      gridBody: '',
+      gridFooter: '',
+      //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
+      modelHeader: '',
+      modelBody: '',
+      modelFooter: ''
+    },
+    tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
+    buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+    methods: {
+       //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
+      onInit() {  
+      },
+      onInited() {
+        //妗嗘灦鍒濆鍖栭厤缃悗
+        //濡傛灉瑕侀厤缃槑缁嗚〃,鍦ㄦ鏂规硶鎿嶄綔
+        //this.detailOptions.columns.forEach(column=>{ });
+      },
+      searchBefore(param) {
+        //鐣岄潰鏌ヨ鍓�,鍙互缁檖aram.wheres娣诲姞鏌ヨ鍙傛暟
+        //杩斿洖false锛屽垯涓嶄細鎵ц鏌ヨ
+        return true;
+      },
+      searchAfter(result) {
+        //鏌ヨ鍚庯紝result杩斿洖鐨勬煡璇㈡暟鎹�,鍙互鍦ㄦ樉绀哄埌琛ㄦ牸鍓嶅鐞嗚〃鏍肩殑鍊�
+        return true;
+      },
+      addBefore(formData) {
+        //鏂板缓淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛紝鍙互缁欑粰琛ㄥ崟璁剧疆鍊硷紝鑷繁杈撳嚭鐪媐ormData鐨勫��
+        return true;
+      },
+      updateBefore(formData) {
+        //缂栬緫淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛ㄣ�佸垹闄よ鐨処d
+        return true;
+      },
+      rowClick({ row, column, event }) {
+        //鏌ヨ鐣岄潰鐐瑰嚮琛屼簨浠�
+        // this.$refs.table.$refs.table.toggleRowSelection(row); //鍗曞嚮琛屾椂閫変腑褰撳墠琛�;
+      },
+      modelOpenAfter(row) {
+        //鐐瑰嚮缂栬緫銆佹柊寤烘寜閽脊鍑烘鍚庯紝鍙互鍦ㄦ澶勫啓閫昏緫锛屽锛屼粠鍚庡彴鑾峰彇鏁版嵁
+        //(1)鍒ゆ柇鏄紪杈戣繕鏄柊寤烘搷浣滐細 this.currentAction=='Add';
+        //(2)缁欏脊鍑烘璁剧疆榛樿鍊�
+        //(3)this.editFormFields.瀛楁='xxx';
+        //濡傛灉闇�瑕佺粰涓嬫媺妗嗚缃粯璁ゅ�硷紝璇烽亶鍘唗his.editFormOptions鎵惧埌瀛楁閰嶇疆瀵瑰簲data灞炴�х殑key鍊�
+        //鐪嬩笉鎳傚氨鎶婅緭鍑虹湅锛歝onsole.log(this.editFormOptions)
+      }
+    }
+  };
+  export default extension;
+  
\ No newline at end of file
diff --git a/WIDESEAWCS_Client/src/extension/taskinfo/extend/taskExecuteDetail.vue b/WIDESEAWCS_Client/src/extension/taskinfo/extend/taskExecuteDetail.vue
index 007219d..ba2d70d 100644
--- a/WIDESEAWCS_Client/src/extension/taskinfo/extend/taskExecuteDetail.vue
+++ b/WIDESEAWCS_Client/src/extension/taskinfo/extend/taskExecuteDetail.vue
@@ -52,16 +52,16 @@
               ></el-step>
             </el-steps>
           </div>
-          <el-row height="50">
+          <el-row height="50" v-show="previousShow || nextShow">
             <el-col :span="12">
-              <div class="grid-content content-text">
+              <div v-show="previousShow" class="grid-content content-text">
                 <el-button type="danger" @click="previous"
                   >鍥炴粴鍒颁笂涓�姝�</el-button
                 >
               </div>
             </el-col>
             <el-col :span="12">
-              <div class="grid-content content-text">
+              <div v-show="nextShow" class="grid-content content-text">
                 <el-button type="warning" @click="next">璺宠浆鍒颁笅涓�姝�</el-button>
               </div>
             </el-col>
@@ -105,6 +105,8 @@
       viewType: 1,
       height: "200px",
       tableData: [],
+      previousShow: false,
+      nextShow: false,
     };
   },
   methods: {
@@ -116,6 +118,14 @@
       } else {
         this.getDetailDatas();
       }
+
+      this.$emit("parentCall", ($vue) => {
+        var previousButton = $vue.buttons.find((x) => x.value == "Previous");
+        this.previousShow = previousButton != null;
+
+        var nextButton = $vue.buttons.find((x) => x.value == "Next");
+        this.nextShow = nextButton != null;
+      });
     },
     getSteps() {
       this.http
@@ -178,7 +188,8 @@
       }
     },
     tableRowClassName({ row, rowIndex }) {
-      if (row.isNormal) {
+      if (!row.isNormal) {
+        return "error-row";
       } else if (row.isManual) {
         return "warning-row";
       }
@@ -210,7 +221,7 @@
 </style>
 <style>
 .el-table .warning-row {
-  background: #e6a23c;
+  background: #fcf1e2;
 }
 
 .el-table .success-row {
@@ -218,6 +229,6 @@
 }
 
 .el-table .error-row {
-  background: #f56c6c;
+  background: #fde2e2;
 }
 </style>
\ No newline at end of file
diff --git a/WIDESEAWCS_Client/src/extension/taskinfo/task.js b/WIDESEAWCS_Client/src/extension/taskinfo/task.js
index 9671e50..055162b 100644
--- a/WIDESEAWCS_Client/src/extension/taskinfo/task.js
+++ b/WIDESEAWCS_Client/src/extension/taskinfo/task.js
@@ -17,6 +17,13 @@
     methods: {
         //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
         onInit() {
+            // this.$Notice.success({ title: this.detailOptions.cnName + ',鏌ヨ缁撴灉', desc: '杩斿洖鐨勫璞★細' + JSON.stringify(data) });
+
+            var previousButton = this.buttons.find((x) => x.value == "Previous");
+            if (previousButton) previousButton.hidden = true;
+            var nextButton = this.buttons.find((x) => x.value == "Next");
+            if (nextButton) nextButton.hidden = true;
+            
             //鎵╁睍椤甸潰鍒濆鍖栨搷浣�
             this.columns.push({
                 field: '鎿嶄綔',
@@ -31,7 +38,7 @@
                 },
                 click: (row) => {
                     this.$refs.gridBody.open(row);
-                  }
+                }
             });
         },
         onInited() {
diff --git a/WIDESEAWCS_Client/src/router/viewGird.js b/WIDESEAWCS_Client/src/router/viewGird.js
index 84e9f68..a205441 100644
--- a/WIDESEAWCS_Client/src/router/viewGird.js
+++ b/WIDESEAWCS_Client/src/router/viewGird.js
@@ -38,6 +38,18 @@
     name: 'deviceInfo',
     component: () => import('@/views/quartzJob/deviceInfo.vue')
   }, {
+    path: '/deviceProtocol',
+    name: 'deviceProtocol',
+    component: () => import('@/views/quartzJob/deviceProtocol.vue')
+  }, {
+    path: '/deviceProtocolDetail',
+    name: 'deviceProtocolDetail',
+    component: () => import('@/views/quartzJob/deviceProtocolDetail.vue')
+  }, {
+    path: '/dispatchInfo',
+    name: 'dispatchInfo',
+    component: () => import('@/views/quartzJob/dispatchInfo.vue')
+  }, {
     path: '/task',
     name: 'task',
     component: () => import('@/views/taskinfo/task.vue')
diff --git a/WIDESEAWCS_Client/src/views/quartzJob/deviceInfo.vue b/WIDESEAWCS_Client/src/views/quartzJob/deviceInfo.vue
index d7345e9..1b972f7 100644
--- a/WIDESEAWCS_Client/src/views/quartzJob/deviceInfo.vue
+++ b/WIDESEAWCS_Client/src/views/quartzJob/deviceInfo.vue
@@ -24,7 +24,7 @@
       cnName: "璁惧淇℃伅",
       name: "deviceInfo",
       url: "/DeviceInfo/",
-      sortName: "CreateDate",
+      sortName: "createDate",
     });
     const editFormFields = ref({
       deviceCode: "",
@@ -33,7 +33,7 @@
       deviceStatus: "",
       deviceIp: "",
       devicePort: "",
-      devicePlcType:"",
+      devicePlcType: "",
       deviceRemark: "",
     });
     const editFormOptions = ref([
@@ -54,13 +54,17 @@
           title: "璁惧绫诲瀷",
           required: true,
           field: "deviceType",
-          type: "string",
+          type: "select",
+          dataKey: "deviceType",
+          data: [],
         },
         {
           title: "璁惧鐘舵��",
           required: true,
           field: "deviceStatus",
-          type: "string",
+          type: "select",
+          dataKey: "deviceStatus",
+          data: [],
         },
       ],
       [
@@ -75,7 +79,9 @@
           title: "PLC绫诲瀷",
           required: true,
           field: "devicePlcType",
-          type: "string",
+          type: "select",
+          dataKey: "devicePlcType",
+          data: [],
         },
         {
           title: "澶囨敞",
@@ -92,8 +98,20 @@
     const searchFormOptions = ref([
       [
         { title: "璁惧缂栧彿", field: "deviceCode" },
-        { title: "璁惧绫诲瀷", field: "deviceType" },
-        { title: "璁惧鐘舵��", field: "deviceStatus" },
+        {
+          title: "璁惧绫诲瀷",
+          field: "deviceType",
+          type: "select",
+          dataKey: "deviceType",
+          data: [],
+        },
+        {
+          title: "璁惧鐘舵��",
+          field: "deviceStatus",
+          type: "select",
+          dataKey: "deviceStatus",
+          data: [],
+        },
       ],
     ]);
     const columns = ref([
@@ -128,6 +146,7 @@
         type: "string",
         width: 150,
         align: "left",
+        bind: { key: "deviceType", data: [] },
       },
       {
         field: "deviceStatus",
@@ -135,6 +154,7 @@
         type: "string",
         width: 90,
         align: "left",
+        bind: { key: "deviceStatus", data: [] },
       },
       {
         field: "deviceIp",
@@ -156,6 +176,7 @@
         type: "string",
         width: 120,
         align: "left",
+        bind: { key: "devicePlcType", data: [] },
       },
       {
         field: "creater",
@@ -167,8 +188,8 @@
       {
         field: "createDate",
         title: "鍒涘缓鏃堕棿",
-        type: "int",
-        width: 90,
+        type: "datetime",
+        width: 160,
         align: "left",
       },
       {
@@ -182,7 +203,7 @@
         field: "modifyDate",
         title: "淇敼鏃堕棿",
         type: "datetime",
-        width: 80,
+        width: 160,
         align: "left",
       },
       {
@@ -249,6 +270,7 @@
           title: "鏁版嵁绫诲瀷",
           type: "string",
           width: 90,
+          require: true,
           align: "left",
           edit: { type: "" },
         },
@@ -256,17 +278,26 @@
           field: "deviceProDataLength",
           title: "鏁版嵁闀垮害",
           type: "int",
-          width: 120,
-          hidden: true,
+          width: 90,
+          require: true,
+          align: "left",
+          edit: { type: "" },
+        },
+        {
+          field: "deviceProParamName",
+          title: "鍙傛暟鍚嶇О",
+          type: "string",
+          width: 150,
+          require: true,
           align: "left",
           edit: { type: "" },
         },
         {
           field: "deviceProParamType",
-          title: "鍙傛暟鍚嶇О",
+          title: "鍙傛暟绫诲瀷",
           type: "string",
-          width: 80,
-          hidden: true,
+          width: 150,
+          require: true,
           align: "left",
           edit: { type: "" },
         },
@@ -275,6 +306,7 @@
           title: "鍙傛暟璇存槑",
           type: "string",
           width: 130,
+          require: true,
           align: "left",
           edit: { type: "" },
         },
@@ -287,10 +319,17 @@
           sortable: true,
         },
         {
+          field: "creater",
+          title: "鍒涘缓浜�",
+          type: "string",
+          width: 90,
+          align: "left",
+        },
+        {
           field: "createDate",
           title: "鍒涘缓鏃堕棿",
-          type: "dateTime",
-          width: 80,
+          type: "datetime",
+          width: 160,
           align: "left",
         },
         {
@@ -304,9 +343,8 @@
           field: "modifyDate",
           title: "淇敼鏃堕棿",
           type: "datetime",
-          width: 90,
+          width: 160,
           align: "left",
-          sortable: true,
         },
       ],
       sortName: "CreateDate",
diff --git a/WIDESEAWCS_Client/src/views/quartzJob/deviceProtocol.vue b/WIDESEAWCS_Client/src/views/quartzJob/deviceProtocol.vue
index e69de29..6d3ea40 100644
--- a/WIDESEAWCS_Client/src/views/quartzJob/deviceProtocol.vue
+++ b/WIDESEAWCS_Client/src/views/quartzJob/deviceProtocol.vue
@@ -0,0 +1,229 @@
+
+<template>
+  <view-grid
+    ref="grid"
+    :columns="columns"
+    :detail="detail"
+    :editFormFields="editFormFields"
+    :editFormOptions="editFormOptions"
+    :searchFormFields="searchFormFields"
+    :searchFormOptions="searchFormOptions"
+    :table="table"
+    :extend="extend"
+  >
+  </view-grid>
+</template>
+  <script>
+import extend from "@/extension/quartzJob/deviceProtocol.js";
+import { ref, defineComponent } from "vue";
+export default defineComponent({
+  setup() {
+    const table = ref({
+      key: "id",
+      footer: "Foots",
+      cnName: "璁惧鍗忚淇℃伅",
+      name: "deviceProtocol",
+      url: "/DeviceProtocol/",
+      sortName: "id",
+    });
+    const editFormFields = ref({
+      deviceCode: "",
+      deviceName: "",
+      deviceType: "",
+      deviceStatus: "",
+      deviceIp: "",
+      devicePort: "",
+      devicePlcType: "",
+      deviceRemark: "",
+    });
+    const editFormOptions = ref([
+      [
+        {
+          title: "璁惧缂栧彿",
+          required: true,
+          field: "deviceCode",
+          type: "string",
+        },
+        {
+          title: "璁惧鍚嶇О",
+          required: true,
+          field: "deviceName",
+          type: "string",
+        },
+        {
+          title: "璁惧绫诲瀷",
+          required: true,
+          field: "deviceType",
+          type: "string",
+        },
+        {
+          title: "璁惧鐘舵��",
+          required: true,
+          field: "deviceStatus",
+          type: "string",
+        },
+      ],
+      [
+        { title: "璁惧IP", required: true, field: "deviceIp", type: "string" },
+        {
+          title: "璁惧绔彛",
+          required: true,
+          field: "devicePort",
+          type: "string",
+        },
+        {
+          title: "PLC绫诲瀷",
+          required: true,
+          field: "devicePlcType",
+          type: "string",
+        },
+        {
+          title: "澶囨敞",
+          field: "deviceRemark",
+          type: "string",
+        },
+      ],
+    ]);
+    const searchFormFields = ref({
+      deviceCode: "",
+      deviceType: "",
+      deviceStatus: "",
+    });
+    const searchFormOptions = ref([
+      [
+        { title: "璁惧缂栧彿", field: "deviceCode" },
+        { title: "璁惧绫诲瀷", field: "deviceType" },
+        { title: "璁惧鐘舵��", field: "deviceStatus" },
+      ],
+    ]);
+    const columns = ref([
+      {
+        field: "id",
+        title: "Id",
+        type: "int",
+        width: 90,
+        hidden: true,
+        readonly: true,
+        require: true,
+        align: "left",
+      },
+      {
+        field: "deviceId",
+        title: "璁惧涓婚敭",
+        type: "string",
+        width: 90,
+        align: "left",
+      },
+      {
+        field: "deviceChildCode",
+        title: "璁惧瀛愮紪鍙�",
+        type: "string",
+        width: 150,
+        align: "left",
+      },
+      {
+        field: "deviceProDataBlock",
+        title: "鍗忚鏁版嵁鍧�",
+        type: "string",
+        width: 150,
+        align: "left",
+      },
+      {
+        field: "deviceProOffset",
+        title: "鍋忕Щ閲�",
+        type: "decimal",
+        width: 90,
+        align: "left",
+      },
+      {
+        field: "deviceProDataType",
+        title: "鏁版嵁绫诲瀷",
+        type: "string",
+        width: 90,
+        align: "left",
+      },
+      {
+        field: "deviceProDataLength",
+        title: "鏁版嵁闀垮害",
+        type: "int",
+        width: 120,
+        align: "left",
+      },
+      {
+        field: "deviceProParamName",
+        title: "鍙傛暟鍚嶇О",
+        type: "string",
+        width: 200,
+        align: "left",
+      },
+      {
+        field: "deviceProParamType",
+        title: "鍙傛暟绫诲瀷",
+        type: "string",
+        width: 180,
+        align: "left",
+      },
+      {
+        field: "deviceProParamDes",
+        title: "鍙傛暟璇存槑",
+        type: "string",
+        width: 120,
+        align: "left",
+      },
+      {
+        field: "creater",
+        title: "鍒涘缓浜�",
+        type: "string",
+        width: 90,
+        align: "left",
+      },
+      {
+        field: "createDate",
+        title: "鍒涘缓鏃堕棿",
+        type: "datetime",
+        width: 160,
+        align: "left",
+      },
+      {
+        field: "modifier",
+        title: "淇敼浜�",
+        type: "string",
+        width: 100,
+        align: "left",
+      },
+      {
+        field: "modifyDate",
+        title: "淇敼鏃堕棿",
+        type: "datetime",
+        width: 160,
+        align: "left",
+      },
+      {
+        field: "deviceProRemark",
+        title: "澶囨敞",
+        type: "string",
+        width: 100,
+        align: "left",
+      },
+    ]);
+    const detail = ref({
+      cnName: "",
+      table: "",
+      columns: [],
+      sortName: "",
+      key: "",
+    });
+    return {
+      table,
+      extend,
+      editFormFields,
+      editFormOptions,
+      searchFormFields,
+      searchFormOptions,
+      columns,
+      detail,
+    };
+  },
+});
+</script>
+  
\ No newline at end of file
diff --git a/WIDESEAWCS_Client/src/views/quartzJob/deviceProtocolDetail.vue b/WIDESEAWCS_Client/src/views/quartzJob/deviceProtocolDetail.vue
index e69de29..6dd1be7 100644
--- a/WIDESEAWCS_Client/src/views/quartzJob/deviceProtocolDetail.vue
+++ b/WIDESEAWCS_Client/src/views/quartzJob/deviceProtocolDetail.vue
@@ -0,0 +1,207 @@
+
+<template>
+  <view-grid
+    ref="grid"
+    :columns="columns"
+    :detail="detail"
+    :editFormFields="editFormFields"
+    :editFormOptions="editFormOptions"
+    :searchFormFields="searchFormFields"
+    :searchFormOptions="searchFormOptions"
+    :table="table"
+    :extend="extend"
+  >
+  </view-grid>
+</template>
+  <script>
+import extend from "@/extension/quartzJob/deviceProtocolDetail.js";
+import { ref, defineComponent } from "vue";
+export default defineComponent({
+  setup() {
+    const table = ref({
+      key: "id",
+      footer: "Foots",
+      cnName: "璁惧鍗忚鏄庣粏淇℃伅",
+      name: "deviceProtocolDetail",
+      url: "/DeviceProtocolDetail/",
+      sortName: "createDate",
+    });
+    const editFormFields = ref({
+      deviceType: "",
+      deviceProParamName: "",
+      protocolDetailType: "",
+      protocalDetailValue: "",
+      protocolDetailDes: "",
+    });
+    const editFormOptions = ref([
+      [
+        {
+          title: "璁惧绫诲瀷",
+          required: true,
+          field: "deviceType",
+          type: "select",
+          dataKey: "deviceType",
+          data: [],
+        },
+        {
+          title: "鍙傛暟鍚嶇О",
+          required: true,
+          field: "deviceProParamName",
+          type: "string",
+        },
+        {
+          title: "鏄庣粏绫诲瀷",
+          required: true,
+          field: "protocolDetailType",
+          type: "string",
+        },
+        {
+          title: "鏄庣粏鍙栧��",
+          required: true,
+          field: "protocalDetailValue",
+          type: "string",
+        },
+      ],
+      [
+        {
+          title: "鏄庣粏璇存槑",
+          field: "protocolDetailDes",
+          type: "textarea",
+        },
+      ],
+    ]);
+    const searchFormFields = ref({
+      deviceType: "",
+      deviceProParamName: "",
+      protocolDetailType: "",
+    });
+    const searchFormOptions = ref([
+      [
+      {
+          title: "璁惧绫诲瀷",
+          field: "deviceType",
+          type: "select",
+          dataKey: "deviceType",
+          data: [],
+        },
+        {
+          title: "鍙傛暟鍚嶇О",
+          field: "deviceProParamName",
+          type: "like",
+        },
+        {
+          title: "鏄庣粏绫诲瀷",
+          field: "protocolDetailType",
+          type: "like",
+        },
+        {
+          title: "鏄庣粏鍙栧��",
+          field: "protocalDetailValue",
+          type: "like",
+        },
+      ],
+    ]);
+    const columns = ref([
+      {
+        field: "id",
+        title: "Id",
+        type: "int",
+        width: 90,
+        hidden: true,
+        readonly: true,
+        require: true,
+        align: "left",
+      },
+      {
+        field: "deviceType",
+        title: "璁惧绫诲瀷",
+        type: "string",
+        width: 180,
+        align: "left",
+        bind: { key: "deviceType", data: [] },
+      },
+      {
+        field: "deviceProParamName",
+        title: "璁惧鍗忚鍙傛暟鍚嶇О",
+        type: "string",
+        width: 180,
+        align: "left",
+      },
+      {
+        field: "protocolDetailType",
+        title: "璁惧鍗忚鏄庣粏绫诲瀷",
+        type: "string",
+        width: 150,
+        align: "left",
+      },
+      {
+        field: "protocalDetailValue",
+        title: "璁惧鍗忚鏄庣粏鍙栧��",
+        type: "string",
+        width: 150,
+        align: "left",
+      },
+      {
+        field: "protocolDetailDes",
+        title: "璁惧鍗忚鏄庣粏璇存槑",
+        type: "string",
+        width: 350,
+        align: "left",
+      },
+      {
+        field: "creater",
+        title: "鍒涘缓浜�",
+        type: "string",
+        width: 90,
+        align: "left",
+      },
+      {
+        field: "createDate",
+        title: "鍒涘缓鏃堕棿",
+        type: "datetime",
+        width: 160,
+        align: "left",
+      },
+      {
+        field: "modifier",
+        title: "淇敼浜�",
+        type: "string",
+        width: 100,
+        align: "left",
+      },
+      {
+        field: "modifyDate",
+        title: "淇敼鏃堕棿",
+        type: "datetime",
+        width: 160,
+        align: "left",
+      },
+      {
+        field: "remark",
+        title: "澶囨敞",
+        type: "string",
+        width: 100,
+        align: "left",
+      },
+    ]);
+    const detail = ref({
+      cnName: "",
+      table: "",
+      columns: [],
+      sortName: "",
+      key: "",
+    });
+    return {
+      table,
+      extend,
+      editFormFields,
+      editFormOptions,
+      searchFormFields,
+      searchFormOptions,
+      columns,
+      detail,
+    };
+  },
+});
+</script>
+  
\ No newline at end of file
diff --git a/WIDESEAWCS_Client/src/views/quartzJob/dispatchInfo.vue b/WIDESEAWCS_Client/src/views/quartzJob/dispatchInfo.vue
index e69de29..3e88503 100644
--- a/WIDESEAWCS_Client/src/views/quartzJob/dispatchInfo.vue
+++ b/WIDESEAWCS_Client/src/views/quartzJob/dispatchInfo.vue
@@ -0,0 +1,247 @@
+
+<template>
+  <view-grid
+    ref="grid"
+    :columns="columns"
+    :detail="detail"
+    :editFormFields="editFormFields"
+    :editFormOptions="editFormOptions"
+    :searchFormFields="searchFormFields"
+    :searchFormOptions="searchFormOptions"
+    :table="table"
+    :extend="extend"
+  >
+  </view-grid>
+</template>
+  <script>
+import extend from "@/extension/quartzJob/dispatchInfo.js";
+import { ref, defineComponent } from "vue";
+export default defineComponent({
+  setup() {
+    const table = ref({
+      key: "id",
+      footer: "Foots",
+      cnName: "璋冨害鏈嶅姟閰嶇疆淇℃伅",
+      name: "dispatchInfo",
+      url: "/DispatchInfo/",
+      sortName: "createDate",
+    });
+    const editFormFields = ref({
+      name: "",
+      jobGroup: "",
+      assemblyName: "",
+      className: "",
+      intervalSecond: "",
+      beginTime: "",
+      endTime: "",
+      remark: "",
+    });
+    const editFormOptions = ref([
+      [
+        {
+          title: "浠诲姟鍚嶇О",
+          required: true,
+          field: "name",
+          type: "string",
+        },
+        {
+          title: "浠诲姟鍒嗙粍",
+          required: true,
+          field: "jobGroup",
+          type: "select",
+          dataKey: "deviceType",
+          data: [],
+        },
+        {
+          title: "绋嬪簭闆嗗悕绉�",
+          required: true,
+          field: "assemblyName",
+          type: "string",
+          type: "select",
+          dataKey: "jobAssembly",
+          data: [],
+        },
+        {
+          title: "浠诲姟鎵�鍦ㄧ被",
+          required: true,
+          field: "className",
+          type: "string",
+          type: "select",
+          dataKey: "jobClassName",
+          data: [],
+        },
+      ],
+      [
+        {
+          title: "闂撮殧鏃堕棿",
+          required: true,
+          field: "intervalSecond",
+          type: "number",
+        },
+        {
+          title: "寮�濮嬫椂闂�",
+          field: "beginTime",
+          type: "datetime",
+        },
+        {
+          title: "缁撴潫鏃堕棿",
+          field: "endTime",
+          type: "datetime",
+        },
+        {
+          title: "澶囨敞",
+          field: "remark",
+          type: "string",
+        },
+      ],
+    ]);
+    const searchFormFields = ref({
+      name: "",
+      jobGroup: "",
+      assemblyName: "",
+      className: "",
+    });
+    const searchFormOptions = ref([
+      [
+         {
+          title: "浠诲姟鍚嶇О",
+          field: "name",
+          type: "like",
+        },
+        {
+          title: "浠诲姟鍒嗙粍",
+          field: "jobGroup",
+          type: "select",
+          dataKey: "deviceType",
+          data: [],
+        },
+        {
+          title: "绋嬪簭闆嗗悕绉�",
+          field: "assemblyName",
+          type: "like",
+        },
+        {
+          title: "浠诲姟鎵�鍦ㄧ被",
+          field: "className",
+          type: "like",
+        },
+      ],
+    ]);
+    const columns = ref([
+      {
+        field: "id",
+        title: "Id",
+        type: "int",
+        width: 90,
+        hidden: true,
+        readonly: true,
+        require: true,
+        align: "left",
+      },
+      {
+        field: "name",
+        title: "浠诲姟鍚嶇О",
+        type: "string",
+        width: 90,
+        align: "left",
+      },
+      {
+        field: "jobGroup",
+        title: "浠诲姟鍒嗙粍",
+        type: "string",
+        width: 180,
+        align: "left",
+        bind: { key: "deviceType", data: [] },
+      },
+      {
+        field: "assemblyName",
+        title: "绋嬪簭闆嗗悕绉�",
+        type: "string",
+        width: 180,
+        align: "left",
+      },
+      {
+        field: "className",
+        title: "浠诲姟鎵�鍦ㄧ被",
+        type: "int",
+        width: 200,
+        align: "left",
+      },
+      {
+        field: "intervalSecond",
+        title: "鎵ц闂撮殧鏃堕棿",
+        type: "int",
+        width: 120,
+        align: "left",
+      },
+      {
+        field: "beginTime",
+        title: "寮�濮嬫椂闂�",
+        type: "datetime",
+        width: 150,
+        align: "left",
+      },
+      {
+        field: "endTime",
+        title: "缁撴潫鏃堕棿",
+        type: "int",
+        width: 150,
+        align: "left",
+      },
+      {
+        field: "creater",
+        title: "鍒涘缓浜�",
+        type: "string",
+        width: 90,
+        align: "left",
+      },
+      {
+        field: "createDate",
+        title: "鍒涘缓鏃堕棿",
+        type: "datetime",
+        width: 160,
+        align: "left",
+      },
+      {
+        field: "modifier",
+        title: "淇敼浜�",
+        type: "string",
+        width: 100,
+        align: "left",
+      },
+      {
+        field: "modifyDate",
+        title: "淇敼鏃堕棿",
+        type: "datetime",
+        width: 160,
+        align: "left",
+      },
+      {
+        field: "remark",
+        title: "澶囨敞",
+        type: "string",
+        width: 100,
+        align: "left",
+      },
+    ]);
+    const detail = ref({
+      cnName: "",
+      table: "",
+      columns: [],
+      sortName: "",
+      key: "",
+    });
+    return {
+      table,
+      extend,
+      editFormFields,
+      editFormOptions,
+      searchFormFields,
+      searchFormOptions,
+      columns,
+      detail,
+    };
+  },
+});
+</script>
+  
\ No newline at end of file
diff --git a/WIDESEAWCS_Client/src/views/taskinfo/task.vue b/WIDESEAWCS_Client/src/views/taskinfo/task.vue
index da44e7f..3296f14 100644
--- a/WIDESEAWCS_Client/src/views/taskinfo/task.vue
+++ b/WIDESEAWCS_Client/src/views/taskinfo/task.vue
@@ -32,8 +32,6 @@
       taskNum: "",
       palletCode: "",
       roadway: "",
-      taskType: "",
-      taskState: "",
       sourceAddress: "",
       targetAddress: "",
       currentAddress: "",
@@ -45,8 +43,20 @@
       [
         { title: "浠诲姟鍙�", field: "taskNum", type: "int" },
         { title: "鎵樼洏缂栧彿", field: "palletCode", type: "like" },
-        { title: "浠诲姟绫诲瀷", field: "taskType", type: "int" },
-        { title: "浠诲姟鐘舵��", field: "taskState", type: "int" },
+        {
+          title: "浠诲姟绫诲瀷",
+          field: "taskType",
+          type: "selectList",
+          dataKey: "taskType",
+          data: [],
+        },
+        {
+          title: "浠诲姟鐘舵��",
+          field: "taskState",
+          type: "selectList",
+          dataKey: "taskState",
+          data: [],
+        },
       ],
       [
         { title: "璧峰鍦板潃", field: "sourceAddress", type: "like" },
@@ -98,6 +108,7 @@
         type: "int",
         width: 90,
         align: "left",
+        bind: { key: "taskType", data: [] },
       },
       {
         field: "taskState",
@@ -105,6 +116,7 @@
         type: "int",
         width: 90,
         align: "left",
+        bind: { key: "taskState", data: [] },
       },
       {
         field: "sourceAddress",
diff --git a/WIDESEAWCS_Server/.vs/ProjectEvaluation/wideseawcs_server.metadata.v7.bin b/WIDESEAWCS_Server/.vs/ProjectEvaluation/wideseawcs_server.metadata.v7.bin
index c064a66..feae160 100644
--- a/WIDESEAWCS_Server/.vs/ProjectEvaluation/wideseawcs_server.metadata.v7.bin
+++ b/WIDESEAWCS_Server/.vs/ProjectEvaluation/wideseawcs_server.metadata.v7.bin
Binary files differ
diff --git a/WIDESEAWCS_Server/.vs/ProjectEvaluation/wideseawcs_server.projects.v7.bin b/WIDESEAWCS_Server/.vs/ProjectEvaluation/wideseawcs_server.projects.v7.bin
index 3f67570..2748551 100644
--- a/WIDESEAWCS_Server/.vs/ProjectEvaluation/wideseawcs_server.projects.v7.bin
+++ b/WIDESEAWCS_Server/.vs/ProjectEvaluation/wideseawcs_server.projects.v7.bin
Binary files differ
diff --git a/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/DesignTimeBuild/.dtbcache.v2 b/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/DesignTimeBuild/.dtbcache.v2
index 732b655..65caaec 100644
--- a/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/DesignTimeBuild/.dtbcache.v2
+++ b/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/DesignTimeBuild/.dtbcache.v2
Binary files differ
diff --git a/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/00db5435-e38c-4bce-a9bc-01f81f6f73e9.vsidx b/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/00db5435-e38c-4bce-a9bc-01f81f6f73e9.vsidx
new file mode 100644
index 0000000..1bba7ae
--- /dev/null
+++ b/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/00db5435-e38c-4bce-a9bc-01f81f6f73e9.vsidx
Binary files differ
diff --git a/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/07cd731a-db38-4e06-b8c8-0896ca935dcb.vsidx b/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/07cd731a-db38-4e06-b8c8-0896ca935dcb.vsidx
deleted file mode 100644
index 70aef67..0000000
--- a/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/07cd731a-db38-4e06-b8c8-0896ca935dcb.vsidx
+++ /dev/null
Binary files differ
diff --git a/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/35543db2-1bc1-4def-b15c-7bd79225c95e.vsidx b/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/35543db2-1bc1-4def-b15c-7bd79225c95e.vsidx
new file mode 100644
index 0000000..5ef7bbe
--- /dev/null
+++ b/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/35543db2-1bc1-4def-b15c-7bd79225c95e.vsidx
Binary files differ
diff --git a/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/40d1a98a-3978-44be-bf17-5478a15ecc4d.vsidx b/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/40d1a98a-3978-44be-bf17-5478a15ecc4d.vsidx
deleted file mode 100644
index d3711fd..0000000
--- a/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/40d1a98a-3978-44be-bf17-5478a15ecc4d.vsidx
+++ /dev/null
Binary files differ
diff --git a/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/48dbe7a1-6f9c-4d99-80e7-0a33da024c54.vsidx b/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/48dbe7a1-6f9c-4d99-80e7-0a33da024c54.vsidx
new file mode 100644
index 0000000..6a515d1
--- /dev/null
+++ b/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/48dbe7a1-6f9c-4d99-80e7-0a33da024c54.vsidx
Binary files differ
diff --git a/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/532f7f8b-db99-4330-a983-0dd94641cefb.vsidx b/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/532f7f8b-db99-4330-a983-0dd94641cefb.vsidx
deleted file mode 100644
index 70aef67..0000000
--- a/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/532f7f8b-db99-4330-a983-0dd94641cefb.vsidx
+++ /dev/null
Binary files differ
diff --git a/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/6988b87c-12d9-4419-b46e-5f8a6844db66.vsidx b/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/6988b87c-12d9-4419-b46e-5f8a6844db66.vsidx
deleted file mode 100644
index 70aef67..0000000
--- a/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/6988b87c-12d9-4419-b46e-5f8a6844db66.vsidx
+++ /dev/null
Binary files differ
diff --git a/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/76cc37f7-c85d-4466-8bd8-f1f015300f41.vsidx b/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/76cc37f7-c85d-4466-8bd8-f1f015300f41.vsidx
new file mode 100644
index 0000000..f5b6c89
--- /dev/null
+++ b/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/76cc37f7-c85d-4466-8bd8-f1f015300f41.vsidx
Binary files differ
diff --git a/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/ef63f758-f1cf-43a7-87d4-1e8e07b8eea8.vsidx b/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/ef63f758-f1cf-43a7-87d4-1e8e07b8eea8.vsidx
deleted file mode 100644
index 70aef67..0000000
--- a/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/ef63f758-f1cf-43a7-87d4-1e8e07b8eea8.vsidx
+++ /dev/null
Binary files differ
diff --git a/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/f4890dfc-6391-4820-a859-504e4b8425a2.vsidx b/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/f4890dfc-6391-4820-a859-504e4b8425a2.vsidx
new file mode 100644
index 0000000..91bf487
--- /dev/null
+++ b/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/f4890dfc-6391-4820-a859-504e4b8425a2.vsidx
Binary files differ
diff --git a/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/.futdcache.v2 b/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/.futdcache.v2
index c193565..ea1de7b 100644
--- a/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/.futdcache.v2
+++ b/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/.futdcache.v2
Binary files differ
diff --git a/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.json b/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.json
index 5ced3af..fccc13e 100644
--- a/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.json
+++ b/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/DocumentLayout.json
@@ -3,28 +3,224 @@
   "WorkspaceRootPath": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\",
   "Documents": [
     {
-      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_tasks\\conveyorlinejob\\commonconveyorlinejob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\conveyorlinejob\\commonconveyorlinejob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+      "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_core\\baseservices\\servicebase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\baseservices\\servicebase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_core\\extensions\\sqlsugarsetup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\extensions\\sqlsugarsetup.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_core\\utilities\\entityproperties.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\utilities\\entityproperties.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|e:\\wideseawcs\\infrastructurewcs\\wideseawcs_server\\wideseawcs_core\\baseservices\\iservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\baseservices\\iservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_core\\basecontroller\\apibasecontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\basecontroller\\apibasecontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\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:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_core\\aop\\sqlsugaraop.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\aop\\sqlsugaraop.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_core\\db\\basedbconfig.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\db\\basedbconfig.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_core\\seed\\dbseed.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\seed\\dbseed.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_core\\helper\\objectextension.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\helper\\objectextension.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_quartzjob\\models\\dt_deviceprotocol.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\models\\dt_deviceprotocol.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_quartzjob\\models\\dt_deviceinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\models\\dt_deviceinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_quartzjob\\quartzextensions\\quartzjobhostedservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\quartzextensions\\quartzjobhostedservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_quartzjob\\quartzextensions\\quartzjobdatatablehostedservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\quartzextensions\\quartzjobdatatablehostedservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_quartzjob\\quartzextensions\\quartzjobautofacmoduleregister.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\quartzextensions\\quartzjobautofacmoduleregister.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_quartzjob\\storage.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\storage.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_quartzjob\\wideseawcs_quartzjob.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|",
+      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\wideseawcs_quartzjob.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_quartzjob\\service\\deviceinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\service\\deviceinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_core\\baserepository\\repositorybase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\baserepository\\repositorybase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_core\\baserepository\\unitofworks\\unitofworkmanage.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\baserepository\\unitofworks\\unitofworkmanage.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_core\\baserepository\\unitofworks\\unitofwork.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\baserepository\\unitofworks\\unitofwork.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_core\\baserepository\\irepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\baserepository\\irepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_server\\wwwroot\\wideseawcs_db.dbseed.json\\sys_user.tsv||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}",
+      "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\wwwroot\\wideseawcs_db.dbseed.json\\sys_user.tsv||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_server\\wwwroot\\wideseawcs_db.dbseed.json\\sys_tenant.tsv||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}",
+      "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\wwwroot\\wideseawcs_db.dbseed.json\\sys_tenant.tsv||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_quartzjob\\models\\dt_dispatchinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\models\\dt_dispatchinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\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|E:\\WIDESEAWCS\\InfrastructureWCS\\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:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_quartzjob\\service\\dispatchinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\service\\dispatchinfoservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_tasks\\stackercranejob\\commonstackercranejob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\stackercranejob\\commonstackercranejob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_core\\enums\\taskstatusenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\enums\\taskstatusenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_core\\enums\\tasktypeenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\enums\\tasktypeenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{861C4D0B-A478-48DB-A0FA-AE70F5BA210A}|WIDESEAWCS_Communicator\\WIDESEAWCS_Communicator.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_communicator\\siemens\\siemenss7communicator.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{861C4D0B-A478-48DB-A0FA-AE70F5BA210A}|WIDESEAWCS_Communicator\\WIDESEAWCS_Communicator.csproj|solutionrelative:wideseawcs_communicator\\siemens\\siemenss7communicator.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_quartzjob\\deviceenum\\devicestatus.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\deviceenum\\devicestatus.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_core\\helper\\appsettings.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\helper\\appsettings.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{A14242DD-DA06-4DC3-8598-1761AA7C76D1}|WIDESEAWCS_SystemServices\\WIDESEAWCS_SystemServices.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_systemservices\\sys_dictionaryservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{A14242DD-DA06-4DC3-8598-1761AA7C76D1}|WIDESEAWCS_SystemServices\\WIDESEAWCS_SystemServices.csproj|solutionrelative:wideseawcs_systemservices\\sys_dictionaryservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_core\\extensions\\autofacmoduleregister.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\extensions\\autofacmoduleregister.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_quartzjob\\conveyorline\\commonconveyorline.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\conveyorline\\commonconveyorline.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{C2D3D138-9109-481B-8BEB-A27597890B2C}|WIDESEAWCS_DTO\\WIDESEAWCS_DTO.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_dto\\system\\vuedictionarydto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{C2D3D138-9109-481B-8BEB-A27597890B2C}|WIDESEAWCS_DTO\\WIDESEAWCS_DTO.csproj|solutionrelative:wideseawcs_dto\\system\\vuedictionarydto.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{5777BDEC-4726-4425-85F2-A090524F692D}|WIDESEAWCS_SystemRepository\\WIDESEAWCS_SystemRepository.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_systemrepository\\sys_menurepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{5777BDEC-4726-4425-85F2-A090524F692D}|WIDESEAWCS_SystemRepository\\WIDESEAWCS_SystemRepository.csproj|solutionrelative:wideseawcs_systemrepository\\sys_menurepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{5777BDEC-4726-4425-85F2-A090524F692D}|WIDESEAWCS_SystemRepository\\WIDESEAWCS_SystemRepository.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_systemrepository\\sys_dictionaryrepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{5777BDEC-4726-4425-85F2-A090524F692D}|WIDESEAWCS_SystemRepository\\WIDESEAWCS_SystemRepository.csproj|solutionrelative:wideseawcs_systemrepository\\sys_dictionaryrepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_quartzjob\\stackercrane\\commonstackercrane.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\stackercrane\\commonstackercrane.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_core\\hostedservice\\seeddatahostedservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\hostedservice\\seeddatahostedservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_core\\basemodels\\permissions.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\basemodels\\permissions.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_core\\httpcontextuser\\aspnetuser.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\httpcontextuser\\aspnetuser.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_core\\httpcontextuser\\iuser.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\httpcontextuser\\iuser.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_core\\app.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\app.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
       "AbsoluteMoniker": "D:0:0:{A14242DD-DA06-4DC3-8598-1761AA7C76D1}|WIDESEAWCS_SystemServices\\WIDESEAWCS_SystemServices.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\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|E:\\WIDESEAWCS\\InfrastructureWCS\\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:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_quartzjob\\models\\dt_deviceprotocoldetail.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\models\\dt_deviceprotocoldetail.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_server\\controllers\\quartzjob\\dispatchinfocontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\controllers\\quartzjob\\dispatchinfocontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_server\\controllers\\quartzjob\\deviceprotocoldetailcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\controllers\\quartzjob\\deviceprotocoldetailcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_server\\controllers\\quartzjob\\deviceprotocolcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\controllers\\quartzjob\\deviceprotocolcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_tasks\\conveyorlinejob\\commonconveyorlinejob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\conveyorlinejob\\commonconveyorlinejob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
       "AbsoluteMoniker": "D:0:0:{5777BDEC-4726-4425-85F2-A090524F692D}|WIDESEAWCS_SystemRepository\\WIDESEAWCS_SystemRepository.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_systemrepository\\sys_userrepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
       "RelativeMoniker": "D:0:0:{5777BDEC-4726-4425-85F2-A090524F692D}|WIDESEAWCS_SystemRepository\\WIDESEAWCS_SystemRepository.csproj|solutionrelative:wideseawcs_systemrepository\\sys_userrepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{83F18A31-5983-4587-A0B2-414BF70E50B5}|WIDESEAWCS_TaskInfoService\\WIDESEAWCS_TaskInfoService.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_taskinfoservice\\taskexecutedetailservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{83F18A31-5983-4587-A0B2-414BF70E50B5}|WIDESEAWCS_TaskInfoService\\WIDESEAWCS_TaskInfoService.csproj|solutionrelative:wideseawcs_taskinfoservice\\taskexecutedetailservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
       "AbsoluteMoniker": "D:0:0:{7279A2AE-8D1F-4E66-A73A-01AF7927A336}|WIDESEAWCS_ITaskInfoService\\WIDESEAWCS_ITaskInfoService.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_itaskinfoservice\\itaskexecutedetailservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
       "RelativeMoniker": "D:0:0:{7279A2AE-8D1F-4E66-A73A-01AF7927A336}|WIDESEAWCS_ITaskInfoService\\WIDESEAWCS_ITaskInfoService.csproj|solutionrelative:wideseawcs_itaskinfoservice\\itaskexecutedetailservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|e:\\wideseawcs\\infrastructurewcs\\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:{FFAB2C76-1C9E-4006-95C8-A0B2AA53139D}|WIDESEAWCS_BasicInfoService\\WIDESEAWCS_BasicInfoService.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_basicinfoservice\\routerservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
@@ -35,40 +231,12 @@
       "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\conveyorline\\iconveyorline.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_core\\baseservices\\servicebase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\baseservices\\servicebase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_core\\utilities\\entityproperties.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\utilities\\entityproperties.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_core\\baserepository\\repositorybase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\baserepository\\repositorybase.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{5777BDEC-4726-4425-85F2-A090524F692D}|WIDESEAWCS_SystemRepository\\WIDESEAWCS_SystemRepository.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_systemrepository\\sys_menurepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{5777BDEC-4726-4425-85F2-A090524F692D}|WIDESEAWCS_SystemRepository\\WIDESEAWCS_SystemRepository.csproj|solutionrelative:wideseawcs_systemrepository\\sys_menurepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_core\\baserepository\\irepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\baserepository\\irepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
       "AbsoluteMoniker": "D:0:0:{7F200FE8-CAF6-4131-BD25-8D438FE0ABAC}|WIDESEAWCS_Model\\WIDESEAWCS_Model.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_model\\models\\system\\sys_dictionary.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
       "RelativeMoniker": "D:0:0:{7F200FE8-CAF6-4131-BD25-8D438FE0ABAC}|WIDESEAWCS_Model\\WIDESEAWCS_Model.csproj|solutionrelative:wideseawcs_model\\models\\system\\sys_dictionary.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_quartzjob\\models\\dt_deviceinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\models\\dt_deviceinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
       "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_server\\controllers\\task\\taskexecutedetailcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
       "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\controllers\\task\\taskexecutedetailcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_core\\enums\\taskstatusenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\enums\\taskstatusenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
       "AbsoluteMoniker": "D:0:0:{83F18A31-5983-4587-A0B2-414BF70E50B5}|WIDESEAWCS_TaskInfoService\\WIDESEAWCS_TaskInfoService.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_taskinfoservice\\taskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
@@ -83,32 +251,12 @@
       "RelativeMoniker": "D:0:0:{7279A2AE-8D1F-4E66-A73A-01AF7927A336}|WIDESEAWCS_ITaskInfoService\\WIDESEAWCS_ITaskInfoService.csproj|solutionrelative:wideseawcs_itaskinfoservice\\itaskservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_quartzjob\\stackercrane\\commonstackercrane.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\stackercrane\\commonstackercrane.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_core\\enums\\tasktypeenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\enums\\tasktypeenum.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_tasks\\stackercranejob\\commonstackercranejob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|solutionrelative:wideseawcs_tasks\\stackercranejob\\commonstackercranejob.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
       "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_quartzjob\\stackercrane\\stackercranetaskcompletedeventargs.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
       "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\stackercrane\\stackercranetaskcompletedeventargs.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_quartzjob\\wideseawcs_quartzjob.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|",
-      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\wideseawcs_quartzjob.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|"
-    },
-    {
       "AbsoluteMoniker": "D:0:0:{294E4915-0241-4C8C-BA99-7588B945863A}|WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\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:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_core\\aop\\sqlsugaraop.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\aop\\sqlsugaraop.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
       "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_quartzjob\\stackercrane\\istackercrane.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
@@ -127,14 +275,6 @@
       "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:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_core\\httpcontextuser\\aspnetuser.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\httpcontextuser\\aspnetuser.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_core\\httpcontextuser\\iuser.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\httpcontextuser\\iuser.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
       "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_core\\db\\repositorysetting.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
       "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\db\\repositorysetting.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
@@ -143,24 +283,12 @@
       "RelativeMoniker": "D:0:0:{7F200FE8-CAF6-4131-BD25-8D438FE0ABAC}|WIDESEAWCS_Model\\WIDESEAWCS_Model.csproj|solutionrelative:wideseawcs_model\\models\\basicinfo\\dt_router.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{861C4D0B-A478-48DB-A0FA-AE70F5BA210A}|WIDESEAWCS_Communicator\\WIDESEAWCS_Communicator.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_communicator\\siemens\\siemenss7communicator.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{861C4D0B-A478-48DB-A0FA-AE70F5BA210A}|WIDESEAWCS_Communicator\\WIDESEAWCS_Communicator.csproj|solutionrelative:wideseawcs_communicator\\siemens\\siemenss7communicator.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
       "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_server\\controllers\\quartzjob\\deviceinfocontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
       "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\controllers\\quartzjob\\deviceinfocontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_core\\basecontroller\\apibasecontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\basecontroller\\apibasecontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
       "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_core\\utilities\\lambdaextensions.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
       "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\utilities\\lambdaextensions.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_quartzjob\\quartzextensions\\quartzjobhostedservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\quartzextensions\\quartzjobhostedservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
       "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_core\\db\\models\\baseentity.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
@@ -199,26 +327,6 @@
       "RelativeMoniker": "D:0:0:{7F200FE8-CAF6-4131-BD25-8D438FE0ABAC}|WIDESEAWCS_Model\\WIDESEAWCS_Model.csproj|solutionrelative:wideseawcs_model\\models\\system\\sys_actions.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_quartzjob\\models\\dt_deviceprotocol.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\models\\dt_deviceprotocol.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_quartzjob\\quartzextensions\\quartzjobautofacmoduleregister.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\quartzextensions\\quartzjobautofacmoduleregister.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_core\\extensions\\autofacmoduleregister.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\extensions\\autofacmoduleregister.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_core\\seed\\dbseed.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\seed\\dbseed.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_server\\wwwroot\\wideseawcs_db.dbseed.json\\sys_user.tsv||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}",
-      "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\wwwroot\\wideseawcs_db.dbseed.json\\sys_user.tsv||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}"
-    },
-    {
       "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_server\\wwwroot\\wideseawcs_db.dbseed.json\\sys_roleauth.tsv||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}",
       "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\wwwroot\\wideseawcs_db.dbseed.json\\sys_roleauth.tsv||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}"
     },
@@ -227,16 +335,8 @@
       "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\controllers\\basicinfo\\routercontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\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:{8C2CC25B-DE5D-433E-A550-63864C7A716D}|WIDESEAWCS_IBasicInfoService\\WIDESEAWCS_IBasicInfoService.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_ibasicinfoservice\\irouterservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
       "RelativeMoniker": "D:0:0:{8C2CC25B-DE5D-433E-A550-63864C7A716D}|WIDESEAWCS_IBasicInfoService\\WIDESEAWCS_IBasicInfoService.csproj|solutionrelative:wideseawcs_ibasicinfoservice\\irouterservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_server\\wwwroot\\wideseawcs_db.dbseed.json\\sys_tenant.tsv||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}",
-      "RelativeMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|solutionrelative:wideseawcs_server\\wwwroot\\wideseawcs_db.dbseed.json\\sys_tenant.tsv||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}"
     },
     {
       "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_server\\wwwroot\\wideseawcs_db.dbseed.json\\sys_role.tsv||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}",
@@ -287,16 +387,8 @@
       "RelativeMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|solutionrelative:wideseawcs_core\\enums\\routerinouttype.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\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:{F302E6D6-5A95-4D22-8DC2-21BE2CB30275}|WIDESEAWCS_ISystemRepository\\WIDESEAWCS_ISystemRepository.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_isystemrepository\\wideseawcs_isystemrepository.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|",
       "RelativeMoniker": "D:0:0:{F302E6D6-5A95-4D22-8DC2-21BE2CB30275}|WIDESEAWCS_ISystemRepository\\WIDESEAWCS_ISystemRepository.csproj|solutionrelative:wideseawcs_isystemrepository\\wideseawcs_isystemrepository.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{487FA45B-EA1A-4ACA-BB5B-0F6708F462C0}|WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\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|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_server\\controllers\\system\\sys_rolecontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
@@ -311,24 +403,12 @@
       "RelativeMoniker": "D:0:0:{A14242DD-DA06-4DC3-8598-1761AA7C76D1}|WIDESEAWCS_SystemServices\\WIDESEAWCS_SystemServices.csproj|solutionrelative:wideseawcs_systemservices\\sys_roleservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_quartzjob\\deviceenum\\devicestatus.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\deviceenum\\devicestatus.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_quartzjob\\conveyorline\\commonconveyorline.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\conveyorline\\commonconveyorline.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
       "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_quartzjob\\conveyorline\\enum\\conveyorlinestatus.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
       "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\conveyorline\\enum\\conveyorlinestatus.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
       "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_quartzjob\\stackercrane\\enum\\stackercranestatus.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
       "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\stackercrane\\enum\\stackercranestatus.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_quartzjob\\devicesstorage.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\devicesstorage.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
       "AbsoluteMoniker": "D:0:0:{BFFDD936-2E61-4D3A-ABFE-7CF77FE0B184}|WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_core\\enums\\enumhelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
@@ -391,14 +471,6 @@
       "RelativeMoniker": "D:0:0:{6236BFFF-173D-44A8-9FC3-7C001EA30347}|WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj|solutionrelative:wideseawcs_quartzjob\\repository\\deviceinforepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
     {
-      "AbsoluteMoniker": "D:0:0:{9E4BFF47-52BF-4FD8-9CC7-3763BF19D9E0}|WIDESEAWCS_ISystemServices\\WIDESEAWCS_ISystemServices.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_isystemservices\\isys_dictionaryservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{9E4BFF47-52BF-4FD8-9CC7-3763BF19D9E0}|WIDESEAWCS_ISystemServices\\WIDESEAWCS_ISystemServices.csproj|solutionrelative:wideseawcs_isystemservices\\isys_dictionaryservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
-      "AbsoluteMoniker": "D:0:0:{5777BDEC-4726-4425-85F2-A090524F692D}|WIDESEAWCS_SystemRepository\\WIDESEAWCS_SystemRepository.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_systemrepository\\sys_dictionaryrepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
-      "RelativeMoniker": "D:0:0:{5777BDEC-4726-4425-85F2-A090524F692D}|WIDESEAWCS_SystemRepository\\WIDESEAWCS_SystemRepository.csproj|solutionrelative:wideseawcs_systemrepository\\sys_dictionaryrepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
-    },
-    {
       "AbsoluteMoniker": "D:0:0:{F302E6D6-5A95-4D22-8DC2-21BE2CB30275}|WIDESEAWCS_ISystemRepository\\WIDESEAWCS_ISystemRepository.csproj|E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\wideseawcs_isystemrepository\\isys_dictionaryrepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
       "RelativeMoniker": "D:0:0:{F302E6D6-5A95-4D22-8DC2-21BE2CB30275}|WIDESEAWCS_ISystemRepository\\WIDESEAWCS_ISystemRepository.csproj|solutionrelative:wideseawcs_isystemrepository\\isys_dictionaryrepository.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
     },
@@ -446,7 +518,7 @@
       "DocumentGroups": [
         {
           "DockedWidth": 200,
-          "SelectedChildIndex": 4,
+          "SelectedChildIndex": 6,
           "Children": [
             {
               "$type": "Bookmark",
@@ -466,29 +538,54 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 0,
-              "Title": "CommonConveyorLineJob.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
-              "RelativeToolTip": "WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
-              "ViewState": "AQIAAFkAAAAAAAAAAAAWwIIAAAANAAAA",
+              "DocumentIndex": 3,
+              "Title": "IService.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\BaseServices\\IService.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Core\\BaseServices\\IService.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\BaseServices\\IService.cs",
+              "RelativeToolTip": "WIDESEAWCS_Core\\BaseServices\\IService.cs",
+              "ViewState": "AQIAADIAAAAAAAAAAAArwE0AAAAzAAAA",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-08-20T03:56:45.481Z",
+              "WhenOpened": "2024-08-21T03:05:02.21Z",
               "EditorCaption": ""
             },
             {
               "$type": "Document",
-              "DocumentIndex": 3,
-              "Title": "TaskExecuteDetailService.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\TaskExecuteDetailService.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_TaskInfoService\\TaskExecuteDetailService.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\TaskExecuteDetailService.cs",
-              "RelativeToolTip": "WIDESEAWCS_TaskInfoService\\TaskExecuteDetailService.cs",
-              "ViewState": "AQIAAF0AAAAAAAAAAAAAAF0AAAAzAAAA",
+              "DocumentIndex": 1,
+              "Title": "SqlsugarSetup.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\Extensions\\SqlsugarSetup.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Core\\Extensions\\SqlsugarSetup.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\Extensions\\SqlsugarSetup.cs",
+              "RelativeToolTip": "WIDESEAWCS_Core\\Extensions\\SqlsugarSetup.cs",
+              "ViewState": "AQIAAB8AAAAAAAAAAAAAwDUAAAAlAAAA",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-08-19T02:49:26.147Z",
+              "WhenOpened": "2024-08-21T02:59:37.056Z",
               "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 0,
+              "Title": "ServiceBase.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\BaseServices\\ServiceBase.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Core\\BaseServices\\ServiceBase.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\BaseServices\\ServiceBase.cs",
+              "RelativeToolTip": "WIDESEAWCS_Core\\BaseServices\\ServiceBase.cs",
+              "ViewState": "AQIAAAkBAAAAAAAAAAAawBsBAABTAAAA",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-08-19T00:36:08.184Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 11,
+              "Title": "Dt_DeviceInfo.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Models\\Dt_DeviceInfo.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\Models\\Dt_DeviceInfo.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Models\\Dt_DeviceInfo.cs",
+              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\Models\\Dt_DeviceInfo.cs",
+              "ViewState": "AQIAAF4AAAAAAAAAAAAswG0AAAAlAAAA",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-08-16T08:59:20.241Z"
             },
             {
               "$type": "Document",
@@ -498,269 +595,211 @@
               "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Program.cs",
               "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Program.cs",
               "RelativeToolTip": "WIDESEAWCS_Server\\Program.cs",
-              "ViewState": "AQIAAFEAAAAAAAAAAAAEwGAAAABpAAAA",
+              "ViewState": "AQIAAHsAAAAAAAAAAAAEwJQAAAAAAAAA",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
               "WhenOpened": "2024-08-15T07:20:10.977Z",
               "EditorCaption": ""
             },
             {
               "$type": "Document",
+              "DocumentIndex": 9,
+              "Title": "ObjectExtension.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\Helper\\ObjectExtension.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Core\\Helper\\ObjectExtension.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\Helper\\ObjectExtension.cs",
+              "RelativeToolTip": "WIDESEAWCS_Core\\Helper\\ObjectExtension.cs",
+              "ViewState": "AQIAAAAAAAAAAAAAAAAuwAoAAAAFAAAA",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-08-20T16:03:39.532Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 20,
+              "Title": "UnitOfWork.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\BaseRepository\\UnitOfWorks\\UnitOfWork.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Core\\BaseRepository\\UnitOfWorks\\UnitOfWork.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\BaseRepository\\UnitOfWorks\\UnitOfWork.cs",
+              "RelativeToolTip": "WIDESEAWCS_Core\\BaseRepository\\UnitOfWorks\\UnitOfWork.cs",
+              "ViewState": "AQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-08-20T16:08:40.793Z"
+            },
+            {
+              "$type": "Document",
               "DocumentIndex": 8,
-              "Title": "ServiceBase.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\BaseServices\\ServiceBase.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Core\\BaseServices\\ServiceBase.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\BaseServices\\ServiceBase.cs",
-              "RelativeToolTip": "WIDESEAWCS_Core\\BaseServices\\ServiceBase.cs",
-              "ViewState": "AQIAADUBAAAAAAAAAAAuwPQAAABBAAAA",
+              "Title": "DBSeed.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\Seed\\DBSeed.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Core\\Seed\\DBSeed.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\Seed\\DBSeed.cs",
+              "RelativeToolTip": "WIDESEAWCS_Core\\Seed\\DBSeed.cs",
+              "ViewState": "AQIAAEQAAAAAAAAAAAAAAFgAAAAAAAAA",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-08-19T00:36:08.184Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 13,
-              "Title": "Sys_Dictionary.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Model\\Models\\System\\Sys_Dictionary.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Model\\Models\\System\\Sys_Dictionary.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Model\\Models\\System\\Sys_Dictionary.cs",
-              "RelativeToolTip": "WIDESEAWCS_Model\\Models\\System\\Sys_Dictionary.cs",
-              "ViewState": "AQIAAEQAAAAAeICg2hcQwF8AAAAAAAAA",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-08-19T00:47:10.161Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 12,
-              "Title": "IRepository.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\BaseRepository\\IRepository.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Core\\BaseRepository\\IRepository.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\BaseRepository\\IRepository.cs",
-              "RelativeToolTip": "WIDESEAWCS_Core\\BaseRepository\\IRepository.cs",
-              "ViewState": "AQIAAEkBAAAAAAAAAAAlwGMBAAAWAAAA",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-08-16T07:09:40.949Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 4,
-              "Title": "ITaskExecuteDetailService.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_ITaskInfoService\\ITaskExecuteDetailService.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_ITaskInfoService\\ITaskExecuteDetailService.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_ITaskInfoService\\ITaskExecuteDetailService.cs",
-              "RelativeToolTip": "WIDESEAWCS_ITaskInfoService\\ITaskExecuteDetailService.cs",
-              "ViewState": "AQIAACIAAAAAAAAAAAAuwCIAAAAIAAAA",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-08-19T06:54:45.156Z",
+              "WhenOpened": "2024-08-19T04:29:35.296Z",
               "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 10,
-              "Title": "RepositoryBase.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\BaseRepository\\RepositoryBase.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Core\\BaseRepository\\RepositoryBase.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\BaseRepository\\RepositoryBase.cs",
-              "RelativeToolTip": "WIDESEAWCS_Core\\BaseRepository\\RepositoryBase.cs",
-              "ViewState": "AQIAAPgBAAAAAAAAAIA8wGMCAAAJAAAA",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-08-16T06:37:57.076Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 2,
-              "Title": "Sys_UserRepository.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_SystemRepository\\Sys_UserRepository.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_SystemRepository\\Sys_UserRepository.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_SystemRepository\\Sys_UserRepository.cs",
-              "RelativeToolTip": "WIDESEAWCS_SystemRepository\\Sys_UserRepository.cs",
-              "ViewState": "AQIAAAAAAAAAAAAAAAAAABYAAACaAAAA",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-08-19T00:44:11.299Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 1,
-              "Title": "Sys_UserService.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_SystemServices\\Sys_UserService.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_SystemServices\\Sys_UserService.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_SystemServices\\Sys_UserService.cs",
-              "RelativeToolTip": "WIDESEAWCS_SystemServices\\Sys_UserService.cs",
-              "ViewState": "AQIAAFAAAAAAAAAAAAAuwFAAAAAqAAAA",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-08-18T09:04:25.169Z",
-              "EditorCaption": ""
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 14,
-              "Title": "Dt_DeviceInfo.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Models\\Dt_DeviceInfo.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\Models\\Dt_DeviceInfo.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Models\\Dt_DeviceInfo.cs",
-              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\Models\\Dt_DeviceInfo.cs",
-              "ViewState": "AQIAAGMAAAAAAAAAAAAgwGwAAAAJAAAA",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-08-16T08:59:20.241Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 19,
-              "Title": "ITaskService.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_ITaskInfoService\\ITaskService.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_ITaskInfoService\\ITaskService.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_ITaskInfoService\\ITaskService.cs",
-              "RelativeToolTip": "WIDESEAWCS_ITaskInfoService\\ITaskService.cs",
-              "ViewState": "AQIAADEAAAAAAAAAAAAlwEsAAAAaAAAA",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-08-16T07:21:16.821Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 15,
-              "Title": "TaskExecuteDetailController.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\Task\\TaskExecuteDetailController.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Controllers\\Task\\TaskExecuteDetailController.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\Task\\TaskExecuteDetailController.cs",
-              "RelativeToolTip": "WIDESEAWCS_Server\\Controllers\\Task\\TaskExecuteDetailController.cs",
-              "ViewState": "AQIAAAAAAAAAAAAAAAAAABcAAAAgAAAA",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-08-19T09:29:05.264Z"
             },
             {
               "$type": "Document",
               "DocumentIndex": 7,
-              "Title": "IConveyorLine.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\ConveyorLine\\IConveyorLine.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\ConveyorLine\\IConveyorLine.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\ConveyorLine\\IConveyorLine.cs",
-              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\ConveyorLine\\IConveyorLine.cs",
-              "ViewState": "AQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
+              "Title": "BaseDBConfig.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\DB\\BaseDBConfig.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Core\\DB\\BaseDBConfig.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\DB\\BaseDBConfig.cs",
+              "RelativeToolTip": "WIDESEAWCS_Core\\DB\\BaseDBConfig.cs",
+              "ViewState": "AQIAAB0AAAAAAAAAAAArwDgAAAA2AAAA",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-08-20T02:27:33.366Z"
+              "WhenOpened": "2024-08-20T08:41:03.468Z",
+              "EditorCaption": ""
             },
             {
               "$type": "Document",
-              "DocumentIndex": 11,
-              "Title": "Sys_MenuRepository.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_SystemRepository\\Sys_MenuRepository.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_SystemRepository\\Sys_MenuRepository.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_SystemRepository\\Sys_MenuRepository.cs",
-              "RelativeToolTip": "WIDESEAWCS_SystemRepository\\Sys_MenuRepository.cs",
-              "ViewState": "AQIAAFEAAAAAAAAAAAAlwGsAAAAQAAAA",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-08-19T00:50:00.145Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 6,
-              "Title": "RouterService.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_BasicInfoService\\RouterService.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_BasicInfoService\\RouterService.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_BasicInfoService\\RouterService.cs",
-              "RelativeToolTip": "WIDESEAWCS_BasicInfoService\\RouterService.cs",
-              "ViewState": "AQIAAA4AAAAAAAAAAADwvywAAAAVAAAA",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-08-18T09:51:28.404Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 9,
+              "DocumentIndex": 2,
               "Title": "EntityProperties.cs",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\Utilities\\EntityProperties.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_Core\\Utilities\\EntityProperties.cs",
               "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\Utilities\\EntityProperties.cs",
               "RelativeToolTip": "WIDESEAWCS_Core\\Utilities\\EntityProperties.cs",
-              "ViewState": "AQIAAHsAAAAAAAAAAAAMwIkAAAAwAAAA",
+              "ViewState": "AQIAAPoAAAAAAAAAAAAMwBIBAAAmAAAA",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-08-16T06:49:42.668Z"
+              "WhenOpened": "2024-08-16T06:49:42.668Z",
+              "EditorCaption": ""
             },
             {
               "$type": "Document",
-              "DocumentIndex": 20,
-              "Title": "CommonStackerCrane.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\StackerCrane\\CommonStackerCrane.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\StackerCrane\\CommonStackerCrane.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\StackerCrane\\CommonStackerCrane.cs",
-              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\StackerCrane\\CommonStackerCrane.cs",
-              "ViewState": "AQIAAPgAAAAAAAAAAAAuwA8BAAAAAAAA",
+              "DocumentIndex": 26,
+              "Title": "Sys_DictionaryController.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\System\\Sys_DictionaryController.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Controllers\\System\\Sys_DictionaryController.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\System\\Sys_DictionaryController.cs",
+              "RelativeToolTip": "WIDESEAWCS_Server\\Controllers\\System\\Sys_DictionaryController.cs",
+              "ViewState": "AQIAACEAAAAAAAAAAAApwDsAAAA9AAAA",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-08-19T07:19:59.125Z"
+              "WhenOpened": "2024-08-20T14:46:08.711Z"
             },
             {
               "$type": "Document",
-              "DocumentIndex": 21,
-              "Title": "TaskTypeEnum.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\Enums\\TaskTypeEnum.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Core\\Enums\\TaskTypeEnum.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\Enums\\TaskTypeEnum.cs",
-              "RelativeToolTip": "WIDESEAWCS_Core\\Enums\\TaskTypeEnum.cs",
-              "ViewState": "AQIAAAUAAAAAAAAAAADgvxwAAAAkAAAA",
+              "DocumentIndex": 4,
+              "Title": "ApiBaseController.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\BaseController\\ApiBaseController.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Core\\BaseController\\ApiBaseController.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\BaseController\\ApiBaseController.cs",
+              "RelativeToolTip": "WIDESEAWCS_Core\\BaseController\\ApiBaseController.cs",
+              "ViewState": "AQIAACoAAAAAAAAAAAApwEIAAAAjAAAA",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-08-18T07:43:52.532Z"
+              "WhenOpened": "2024-08-19T00:28:17.635Z",
+              "EditorCaption": ""
             },
             {
               "$type": "Document",
-              "DocumentIndex": 17,
-              "Title": "TaskService.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\TaskService.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_TaskInfoService\\TaskService.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\TaskService.cs",
-              "RelativeToolTip": "WIDESEAWCS_TaskInfoService\\TaskService.cs",
-              "ViewState": "AQIAADUBAAAAAAAAAAAMwHoBAAB2AAAA",
+              "DocumentIndex": 6,
+              "Title": "SqlSugarAop.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\AOP\\SqlSugarAop.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Core\\AOP\\SqlSugarAop.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\AOP\\SqlSugarAop.cs",
+              "RelativeToolTip": "WIDESEAWCS_Core\\AOP\\SqlSugarAop.cs",
+              "ViewState": "AQIAABcAAAAAAAAAAAAAwCUAAAAUAAAA",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-08-16T02:52:41.862Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 18,
-              "Title": "TaskController.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\Task\\TaskController.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Controllers\\Task\\TaskController.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\Task\\TaskController.cs",
-              "RelativeToolTip": "WIDESEAWCS_Server\\Controllers\\Task\\TaskController.cs",
-              "ViewState": "AQIAAB8AAAAAAAAAAAAlwDAAAAAhAAAA",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-08-18T09:02:28.791Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 16,
-              "Title": "TaskStatusEnum.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\Enums\\TaskStatusEnum.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Core\\Enums\\TaskStatusEnum.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\Enums\\TaskStatusEnum.cs",
-              "RelativeToolTip": "WIDESEAWCS_Core\\Enums\\TaskStatusEnum.cs",
-              "ViewState": "AQIAAE8AAAAAAAAAAAAMwFoAAAAeAAAA",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-08-16T03:41:51.621Z"
+              "WhenOpened": "2024-08-19T01:44:50.926Z",
+              "EditorCaption": ""
             },
             {
               "$type": "Document",
               "DocumentIndex": 22,
-              "Title": "CommonStackerCraneJob.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
-              "RelativeToolTip": "WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
-              "ViewState": "AQIAADUAAAAAAAAAAAAlwFMAAAAZAAAA",
+              "Title": "Sys_User.tsv",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\wwwroot\\WIDESEAWCS_DB.DBSeed.Json\\Sys_User.tsv",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\wwwroot\\WIDESEAWCS_DB.DBSeed.Json\\Sys_User.tsv",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\wwwroot\\WIDESEAWCS_DB.DBSeed.Json\\Sys_User.tsv",
+              "RelativeToolTip": "WIDESEAWCS_Server\\wwwroot\\WIDESEAWCS_DB.DBSeed.Json\\Sys_User.tsv",
+              "ViewState": "AQIAAAAAAAAAAAAAAAAAAAwAAAAQAAAA",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001001|",
+              "WhenOpened": "2024-08-19T00:47:36.297Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 13,
+              "Title": "QuartzJobDataTableHostedService.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\QuartzExtensions\\QuartzJobDataTableHostedService.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\QuartzExtensions\\QuartzJobDataTableHostedService.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\QuartzExtensions\\QuartzJobDataTableHostedService.cs",
+              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\QuartzExtensions\\QuartzJobDataTableHostedService.cs",
+              "ViewState": "AQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-08-19T05:53:40.32Z"
+              "WhenOpened": "2024-08-20T16:36:57.377Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 14,
+              "Title": "QuartzJobAutofacModuleRegister.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\QuartzExtensions\\QuartzJobAutofacModuleRegister.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\QuartzExtensions\\QuartzJobAutofacModuleRegister.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\QuartzExtensions\\QuartzJobAutofacModuleRegister.cs",
+              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\QuartzExtensions\\QuartzJobAutofacModuleRegister.cs",
+              "ViewState": "AQIAABAAAAAAAAAAAAAuwCIAAAAvAAAA",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-08-15T07:40:33Z"
             },
             {
               "$type": "Document",
               "DocumentIndex": 23,
-              "Title": "StackerCraneTaskCompletedEventArgs.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\StackerCrane\\StackerCraneTaskCompletedEventArgs.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\StackerCrane\\StackerCraneTaskCompletedEventArgs.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\StackerCrane\\StackerCraneTaskCompletedEventArgs.cs",
-              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\StackerCrane\\StackerCraneTaskCompletedEventArgs.cs",
-              "ViewState": "AQIAAAAAAAAAAAAAAAAAABcAAAArAAAA",
+              "Title": "Sys_Tenant.tsv",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\wwwroot\\WIDESEAWCS_DB.DBSeed.Json\\Sys_Tenant.tsv",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\wwwroot\\WIDESEAWCS_DB.DBSeed.Json\\Sys_Tenant.tsv",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\wwwroot\\WIDESEAWCS_DB.DBSeed.Json\\Sys_Tenant.tsv",
+              "RelativeToolTip": "WIDESEAWCS_Server\\wwwroot\\WIDESEAWCS_DB.DBSeed.Json\\Sys_Tenant.tsv",
+              "ViewState": "AQIAAAAAAAAAAAAAAAAAAAIAAAABAAAA",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001001|",
+              "WhenOpened": "2024-08-19T00:51:34.606Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 10,
+              "Title": "Dt_DeviceProtocol.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Models\\Dt_DeviceProtocol.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\Models\\Dt_DeviceProtocol.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Models\\Dt_DeviceProtocol.cs",
+              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\Models\\Dt_DeviceProtocol.cs",
+              "ViewState": "AQIAADIAAAAAAAAAAAAQwFUAAAAoAAAA",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-08-16T08:59:16.094Z"
+              "WhenOpened": "2024-08-19T04:35:36.341Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 12,
+              "Title": "QuartzJobHostedService.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\QuartzExtensions\\QuartzJobHostedService.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\QuartzExtensions\\QuartzJobHostedService.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\QuartzExtensions\\QuartzJobHostedService.cs",
+              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\QuartzExtensions\\QuartzJobHostedService.cs",
+              "ViewState": "AQIAAAAAAAAAAAAAAAAAADsAAABNAAAA",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-08-15T07:44:15.522Z"
             },
             {
               "$type": "Document",
               "DocumentIndex": 24,
+              "Title": "Dt_DispatchInfo.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Models\\Dt_DispatchInfo.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\Models\\Dt_DispatchInfo.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Models\\Dt_DispatchInfo.cs",
+              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\Models\\Dt_DispatchInfo.cs",
+              "ViewState": "AQIAAAAAAAAAAAAAAAAAABwAAAARAAAA",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-08-20T04:15:57.553Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 19,
+              "Title": "UnitOfWorkManage.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\BaseRepository\\UnitOfWorks\\UnitOfWorkManage.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Core\\BaseRepository\\UnitOfWorks\\UnitOfWorkManage.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\BaseRepository\\UnitOfWorks\\UnitOfWorkManage.cs",
+              "RelativeToolTip": "WIDESEAWCS_Core\\BaseRepository\\UnitOfWorks\\UnitOfWorkManage.cs",
+              "ViewState": "AQIAABoAAAAAAAAAAAAQwDwAAAApAAAA",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-08-20T16:08:46.036Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 16,
               "Title": "WIDESEAWCS_QuartzJob.csproj",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj",
               "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\WIDESEAWCS_QuartzJob.csproj",
@@ -772,7 +811,502 @@
             },
             {
               "$type": "Document",
+              "DocumentIndex": 15,
+              "Title": "Storage.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Storage.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\Storage.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Storage.cs",
+              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\Storage.cs",
+              "ViewState": "AQIAAA0AAAAAAAAAAAAvwMoAAAAjAAAA",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-08-20T09:24:12.698Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 18,
+              "Title": "RepositoryBase.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\BaseRepository\\RepositoryBase.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Core\\BaseRepository\\RepositoryBase.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\BaseRepository\\RepositoryBase.cs",
+              "RelativeToolTip": "WIDESEAWCS_Core\\BaseRepository\\RepositoryBase.cs",
+              "ViewState": "AQIAAFkAAAAAAAAAAAAEwHMAAAAvAAAA",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-08-16T06:37:57.076Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 17,
+              "Title": "DeviceInfoService.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Service\\DeviceInfoService.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\Service\\DeviceInfoService.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Service\\DeviceInfoService.cs",
+              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\Service\\DeviceInfoService.cs",
+              "ViewState": "AQIAAAAAAAAAAAAAAAAAAC4AAAAaAAAA",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-08-20T15:38:11.035Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 21,
+              "Title": "IRepository.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\BaseRepository\\IRepository.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Core\\BaseRepository\\IRepository.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\BaseRepository\\IRepository.cs",
+              "RelativeToolTip": "WIDESEAWCS_Core\\BaseRepository\\IRepository.cs",
+              "ViewState": "AQIAAAIAAAAAAAAAAAAkwGMBAAAWAAAA",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-08-16T07:09:40.949Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 31,
+              "Title": "SiemensS7Communicator.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Communicator\\Siemens\\SiemensS7Communicator.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Communicator\\Siemens\\SiemensS7Communicator.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Communicator\\Siemens\\SiemensS7Communicator.cs",
+              "RelativeToolTip": "WIDESEAWCS_Communicator\\Siemens\\SiemensS7Communicator.cs",
+              "ViewState": "AQIAAAAAAAAAAAAAAAAAAOoCAAAAAAAA",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-08-20T13:54:57.188Z"
+            },
+            {
+              "$type": "Document",
               "DocumentIndex": 25,
+              "Title": "appsettings.json",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\appsettings.json",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\appsettings.json",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\appsettings.json",
+              "RelativeToolTip": "WIDESEAWCS_Server\\appsettings.json",
+              "ViewState": "AQIAAAAAAAAAAAAAAAAAAAgAAABcAAAA",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|",
+              "WhenOpened": "2024-08-19T00:56:32.8Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 43,
+              "Title": "AspNetUser.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\HttpContextUser\\AspNetUser.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Core\\HttpContextUser\\AspNetUser.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\HttpContextUser\\AspNetUser.cs",
+              "RelativeToolTip": "WIDESEAWCS_Core\\HttpContextUser\\AspNetUser.cs",
+              "ViewState": "AQIAAJ0AAAAAAAAAAAAAwDQAAAAAAAAA",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-08-19T00:48:27.602Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 27,
+              "Title": "DispatchInfoService.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Service\\DispatchInfoService.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\Service\\DispatchInfoService.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Service\\DispatchInfoService.cs",
+              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\Service\\DispatchInfoService.cs",
+              "ViewState": "AQIAAAAAAAAAAAAAAAAAADAAAACQAAAA",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-08-20T09:32:04.028Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 45,
+              "Title": "App.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\App.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Core\\App.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\App.cs",
+              "RelativeToolTip": "WIDESEAWCS_Core\\App.cs",
+              "ViewState": "AQIAABkAAAAAAAAAAAAAwDsAAAAbAAAA",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-08-20T06:23:49.857Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 32,
+              "Title": "DeviceStatus.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\DeviceEnum\\DeviceStatus.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\DeviceEnum\\DeviceStatus.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\DeviceEnum\\DeviceStatus.cs",
+              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\DeviceEnum\\DeviceStatus.cs",
+              "ViewState": "AQIAAAAAAAAAAAAAAAAuwBoAAAAgAAAA",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-08-16T08:03:46.692Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 36,
+              "Title": "CommonConveyorLine.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\ConveyorLine\\CommonConveyorLine.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\ConveyorLine\\CommonConveyorLine.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\ConveyorLine\\CommonConveyorLine.cs",
+              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\ConveyorLine\\CommonConveyorLine.cs",
+              "ViewState": "AQIAAAAAAAAAAAAAAAAAAB8AAAAXAAAA",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-08-15T08:26:08.617Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 29,
+              "Title": "TaskStatusEnum.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\Enums\\TaskStatusEnum.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Core\\Enums\\TaskStatusEnum.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\Enums\\TaskStatusEnum.cs",
+              "RelativeToolTip": "WIDESEAWCS_Core\\Enums\\TaskStatusEnum.cs",
+              "ViewState": "AQIAAEEAAAAAAAAAAADwv1oAAAAeAAAA",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-08-16T03:41:51.621Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 30,
+              "Title": "TaskTypeEnum.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\Enums\\TaskTypeEnum.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Core\\Enums\\TaskTypeEnum.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\Enums\\TaskTypeEnum.cs",
+              "RelativeToolTip": "WIDESEAWCS_Core\\Enums\\TaskTypeEnum.cs",
+              "ViewState": "AQIAACQAAAAAAAAAAAAEwA4AAAAYAAAA",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-08-18T07:43:52.532Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 28,
+              "Title": "CommonStackerCraneJob.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
+              "RelativeToolTip": "WIDESEAWCS_Tasks\\StackerCraneJob\\CommonStackerCraneJob.cs",
+              "ViewState": "AQIAABIAAAAAAAAAAAAewC4AAABGAAAA",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-08-19T05:53:40.32Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 37,
+              "Title": "VueDictionaryDTO.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_DTO\\System\\VueDictionaryDTO.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_DTO\\System\\VueDictionaryDTO.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_DTO\\System\\VueDictionaryDTO.cs",
+              "RelativeToolTip": "WIDESEAWCS_DTO\\System\\VueDictionaryDTO.cs",
+              "ViewState": "AQIAAAAAAAAAAAAAAAAAAAoAAAAWAAAA",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-08-20T08:23:58.651Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 35,
+              "Title": "AutofacModuleRegister.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\Extensions\\AutofacModuleRegister.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Core\\Extensions\\AutofacModuleRegister.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\Extensions\\AutofacModuleRegister.cs",
+              "RelativeToolTip": "WIDESEAWCS_Core\\Extensions\\AutofacModuleRegister.cs",
+              "ViewState": "AQIAAD0AAAAAAAAAAAAAwF0AAAAkAAAA",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-08-15T07:38:34.959Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 33,
+              "Title": "AppSettings.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\Helper\\AppSettings.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Core\\Helper\\AppSettings.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\Helper\\AppSettings.cs",
+              "RelativeToolTip": "WIDESEAWCS_Core\\Helper\\AppSettings.cs",
+              "ViewState": "AQIAAAwAAAAAAAAAAAAuwA0AAAAcAAAA",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-08-20T08:40:46.276Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 34,
+              "Title": "Sys_DictionaryService.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_SystemServices\\Sys_DictionaryService.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_SystemServices\\Sys_DictionaryService.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_SystemServices\\Sys_DictionaryService.cs",
+              "RelativeToolTip": "WIDESEAWCS_SystemServices\\Sys_DictionaryService.cs",
+              "ViewState": "AQIAAA4AAAAAAAAAAAAvwCIAAACDAAAA",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-08-20T07:07:28.504Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 39,
+              "Title": "Sys_DictionaryRepository.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_SystemRepository\\Sys_DictionaryRepository.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_SystemRepository\\Sys_DictionaryRepository.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_SystemRepository\\Sys_DictionaryRepository.cs",
+              "RelativeToolTip": "WIDESEAWCS_SystemRepository\\Sys_DictionaryRepository.cs",
+              "ViewState": "AQIAAAAAAAAAAAAAAAAAABkAAAA6AAAA",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-08-15T07:33:12.766Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 38,
+              "Title": "Sys_MenuRepository.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_SystemRepository\\Sys_MenuRepository.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_SystemRepository\\Sys_MenuRepository.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_SystemRepository\\Sys_MenuRepository.cs",
+              "RelativeToolTip": "WIDESEAWCS_SystemRepository\\Sys_MenuRepository.cs",
+              "ViewState": "AQIAAAAAAAAAAAAAAAAAAGwAAABsAQAA",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-08-19T00:50:00.145Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 47,
+              "Title": "Sys_UserController.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\System\\Sys_UserController.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Controllers\\System\\Sys_UserController.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\System\\Sys_UserController.cs",
+              "RelativeToolTip": "WIDESEAWCS_Server\\Controllers\\System\\Sys_UserController.cs",
+              "ViewState": "AQIAAAgAAAAAAAAAAAApwCEAAAAgAAAA",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-08-18T09:01:48.433Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 44,
+              "Title": "IUser.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\HttpContextUser\\IUser.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Core\\HttpContextUser\\IUser.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\HttpContextUser\\IUser.cs",
+              "RelativeToolTip": "WIDESEAWCS_Core\\HttpContextUser\\IUser.cs",
+              "ViewState": "AQIAAAAAAAAAAAAAAAAAAAkAAAAaAAAA",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-08-19T00:58:43.645Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 41,
+              "Title": "SeedDataHostedService.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\HostedService\\SeedDataHostedService.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Core\\HostedService\\SeedDataHostedService.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\HostedService\\SeedDataHostedService.cs",
+              "RelativeToolTip": "WIDESEAWCS_Core\\HostedService\\SeedDataHostedService.cs",
+              "ViewState": "AQIAABsAAAAAAAAAAAAhwCIAAAAeAAAA",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-08-20T06:59:48.991Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 40,
+              "Title": "CommonStackerCrane.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\StackerCrane\\CommonStackerCrane.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\StackerCrane\\CommonStackerCrane.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\StackerCrane\\CommonStackerCrane.cs",
+              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\StackerCrane\\CommonStackerCrane.cs",
+              "ViewState": "AQIAAAAAAAAAAAAAAAAAACcAAAAXAAAA",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-08-19T07:19:59.125Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 42,
+              "Title": "Permissions.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\BaseModels\\Permissions.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Core\\BaseModels\\Permissions.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\BaseModels\\Permissions.cs",
+              "RelativeToolTip": "WIDESEAWCS_Core\\BaseModels\\Permissions.cs",
+              "ViewState": "AQIAAAAAAAAAAAAAAAAAAAgAAAAcAAAA",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-08-20T06:34:31.428Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 51,
+              "Title": "DeviceProtocolController.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\QuartzJob\\DeviceProtocolController.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Controllers\\QuartzJob\\DeviceProtocolController.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\QuartzJob\\DeviceProtocolController.cs",
+              "RelativeToolTip": "WIDESEAWCS_Server\\Controllers\\QuartzJob\\DeviceProtocolController.cs",
+              "ViewState": "AQIAAAAAAAAAAAAAAAAAAAoAAABnAAAA",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-08-20T04:05:57.336Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 48,
+              "Title": "Dt_DeviceProtocolDetail.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Models\\Dt_DeviceProtocolDetail.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\Models\\Dt_DeviceProtocolDetail.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Models\\Dt_DeviceProtocolDetail.cs",
+              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\Models\\Dt_DeviceProtocolDetail.cs",
+              "ViewState": "AQIAAAAAAAAAAAAAAAAAAB8AAAA1AAAA",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-08-20T04:12:01.203Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 46,
+              "Title": "Sys_UserService.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_SystemServices\\Sys_UserService.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_SystemServices\\Sys_UserService.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_SystemServices\\Sys_UserService.cs",
+              "RelativeToolTip": "WIDESEAWCS_SystemServices\\Sys_UserService.cs",
+              "ViewState": "AQIAABEAAAAAAAAAAADwvxcAAAAnAAAA",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-08-18T09:04:25.169Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 57,
+              "Title": "Sys_Dictionary.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Model\\Models\\System\\Sys_Dictionary.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Model\\Models\\System\\Sys_Dictionary.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Model\\Models\\System\\Sys_Dictionary.cs",
+              "RelativeToolTip": "WIDESEAWCS_Model\\Models\\System\\Sys_Dictionary.cs",
+              "ViewState": "AQIAAEQAAAAAeICg2hcQwF8AAAAAAAAA",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-08-19T00:47:10.161Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 52,
+              "Title": "CommonConveyorLineJob.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
+              "RelativeToolTip": "WIDESEAWCS_Tasks\\ConveyorLineJob\\CommonConveyorLineJob.cs",
+              "ViewState": "AQIAAB8AAAAAAAAAAAAgwCYAAAByAAAA",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-08-20T03:56:45.481Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 50,
+              "Title": "DeviceProtocolDetailController.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\QuartzJob\\DeviceProtocolDetailController.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Controllers\\QuartzJob\\DeviceProtocolDetailController.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\QuartzJob\\DeviceProtocolDetailController.cs",
+              "RelativeToolTip": "WIDESEAWCS_Server\\Controllers\\QuartzJob\\DeviceProtocolDetailController.cs",
+              "ViewState": "AQIAAAAAAAAAAAAAAAAAAAoAAAB6AAAA",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-08-20T04:06:59.732Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 49,
+              "Title": "DispatchInfoController.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\QuartzJob\\DispatchInfoController.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Controllers\\QuartzJob\\DispatchInfoController.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\QuartzJob\\DispatchInfoController.cs",
+              "RelativeToolTip": "WIDESEAWCS_Server\\Controllers\\QuartzJob\\DispatchInfoController.cs",
+              "ViewState": "AQIAAAAAAAAAAAAAAAAAAAoAAABiAAAA",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-08-20T04:07:44.875Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 54,
+              "Title": "ITaskExecuteDetailService.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_ITaskInfoService\\ITaskExecuteDetailService.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_ITaskInfoService\\ITaskExecuteDetailService.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_ITaskInfoService\\ITaskExecuteDetailService.cs",
+              "RelativeToolTip": "WIDESEAWCS_ITaskInfoService\\ITaskExecuteDetailService.cs",
+              "ViewState": "AQIAACIAAAAAAAAAAAAuwCIAAAAIAAAA",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-08-19T06:54:45.156Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 53,
+              "Title": "Sys_UserRepository.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_SystemRepository\\Sys_UserRepository.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_SystemRepository\\Sys_UserRepository.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_SystemRepository\\Sys_UserRepository.cs",
+              "RelativeToolTip": "WIDESEAWCS_SystemRepository\\Sys_UserRepository.cs",
+              "ViewState": "AQIAAAAAAAAAAAAAAAAAABYAAACaAAAA",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-08-19T00:44:11.299Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 61,
+              "Title": "ITaskService.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_ITaskInfoService\\ITaskService.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_ITaskInfoService\\ITaskService.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_ITaskInfoService\\ITaskService.cs",
+              "RelativeToolTip": "WIDESEAWCS_ITaskInfoService\\ITaskService.cs",
+              "ViewState": "AQIAADEAAAAAAAAAAAAlwEsAAAAaAAAA",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-08-16T07:21:16.821Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 58,
+              "Title": "TaskExecuteDetailController.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\Task\\TaskExecuteDetailController.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Controllers\\Task\\TaskExecuteDetailController.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\Task\\TaskExecuteDetailController.cs",
+              "RelativeToolTip": "WIDESEAWCS_Server\\Controllers\\Task\\TaskExecuteDetailController.cs",
+              "ViewState": "AQIAAAAAAAAAAAAAAAAAABcAAAAgAAAA",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-08-19T09:29:05.264Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 56,
+              "Title": "IConveyorLine.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\ConveyorLine\\IConveyorLine.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\ConveyorLine\\IConveyorLine.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\ConveyorLine\\IConveyorLine.cs",
+              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\ConveyorLine\\IConveyorLine.cs",
+              "ViewState": "AQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-08-20T02:27:33.366Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 55,
+              "Title": "RouterService.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_BasicInfoService\\RouterService.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_BasicInfoService\\RouterService.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_BasicInfoService\\RouterService.cs",
+              "RelativeToolTip": "WIDESEAWCS_BasicInfoService\\RouterService.cs",
+              "ViewState": "AQIAAA4AAAAAAAAAAADwvywAAAAVAAAA",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-08-18T09:51:28.404Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 59,
+              "Title": "TaskService.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\TaskService.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_TaskInfoService\\TaskService.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\TaskService.cs",
+              "RelativeToolTip": "WIDESEAWCS_TaskInfoService\\TaskService.cs",
+              "ViewState": "AQIAADUBAAAAAAAAAAAMwHoBAAB2AAAA",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-08-16T02:52:41.862Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 60,
+              "Title": "TaskController.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\Task\\TaskController.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Controllers\\Task\\TaskController.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\Task\\TaskController.cs",
+              "RelativeToolTip": "WIDESEAWCS_Server\\Controllers\\Task\\TaskController.cs",
+              "ViewState": "AQIAAB8AAAAAAAAAAAAlwDAAAAAhAAAA",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-08-18T09:02:28.791Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 62,
+              "Title": "StackerCraneTaskCompletedEventArgs.cs",
+              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\StackerCrane\\StackerCraneTaskCompletedEventArgs.cs",
+              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\StackerCrane\\StackerCraneTaskCompletedEventArgs.cs",
+              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\StackerCrane\\StackerCraneTaskCompletedEventArgs.cs",
+              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\StackerCrane\\StackerCraneTaskCompletedEventArgs.cs",
+              "ViewState": "AQIAAAAAAAAAAAAAAAAAABcAAAArAAAA",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-08-16T08:59:16.094Z"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 63,
               "Title": "WIDESEAWCS_Tasks.csproj",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj",
               "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\WIDESEAWCS_Tasks.csproj",
@@ -784,19 +1318,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 26,
-              "Title": "SqlSugarAop.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\AOP\\SqlSugarAop.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Core\\AOP\\SqlSugarAop.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\AOP\\SqlSugarAop.cs",
-              "RelativeToolTip": "WIDESEAWCS_Core\\AOP\\SqlSugarAop.cs",
-              "ViewState": "AQIAABoAAAAAAAAAAAAAwCUAAAAUAAAA",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-08-19T01:44:50.926Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 27,
+              "DocumentIndex": 64,
               "Title": "IStackerCrane.cs",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\StackerCrane\\IStackerCrane.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\StackerCrane\\IStackerCrane.cs",
@@ -808,7 +1330,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 29,
+              "DocumentIndex": 66,
               "Title": "StackerCraneTaskCommand.cs",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\StackerCraneJob\\StackerCraneTaskCommand.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\StackerCraneJob\\StackerCraneTaskCommand.cs",
@@ -820,7 +1342,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 28,
+              "DocumentIndex": 65,
               "Title": "WIDESEAWCS_ITaskInfoService.csproj",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_ITaskInfoService\\WIDESEAWCS_ITaskInfoService.csproj",
               "RelativeDocumentMoniker": "WIDESEAWCS_ITaskInfoService\\WIDESEAWCS_ITaskInfoService.csproj",
@@ -832,31 +1354,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 31,
-              "Title": "AspNetUser.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\HttpContextUser\\AspNetUser.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Core\\HttpContextUser\\AspNetUser.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\HttpContextUser\\AspNetUser.cs",
-              "RelativeToolTip": "WIDESEAWCS_Core\\HttpContextUser\\AspNetUser.cs",
-              "ViewState": "AQIAACAAAAAAAAAAAAApwDAAAAAAAAAA",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-08-19T00:48:27.602Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 32,
-              "Title": "IUser.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\HttpContextUser\\IUser.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Core\\HttpContextUser\\IUser.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\HttpContextUser\\IUser.cs",
-              "RelativeToolTip": "WIDESEAWCS_Core\\HttpContextUser\\IUser.cs",
-              "ViewState": "AQIAABMAAAAAAAAAAIA2wCgAAAAVAAAA",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-08-19T00:58:43.645Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 30,
+              "DocumentIndex": 67,
               "Title": "WIDESEAWCS_Server.csproj",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj",
               "RelativeDocumentMoniker": "WIDESEAWCS_Server\\WIDESEAWCS_Server.csproj",
@@ -868,31 +1366,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 35,
-              "Title": "SiemensS7Communicator.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Communicator\\Siemens\\SiemensS7Communicator.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Communicator\\Siemens\\SiemensS7Communicator.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Communicator\\Siemens\\SiemensS7Communicator.cs",
-              "RelativeToolTip": "WIDESEAWCS_Communicator\\Siemens\\SiemensS7Communicator.cs",
-              "ViewState": "AQIAAGkCAAAAAAAAAAASwIACAADoAAAA",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-08-19T05:54:39.747Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 37,
-              "Title": "ApiBaseController.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\BaseController\\ApiBaseController.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Core\\BaseController\\ApiBaseController.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\BaseController\\ApiBaseController.cs",
-              "RelativeToolTip": "WIDESEAWCS_Core\\BaseController\\ApiBaseController.cs",
-              "ViewState": "AQIAAFAAAAAAvSKFFcI1wGMAAAAJAAAA",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-08-19T00:28:17.635Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 34,
+              "DocumentIndex": 69,
               "Title": "Dt_Router.cs",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Model\\Models\\BasicInfo\\Dt_Router.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_Model\\Models\\BasicInfo\\Dt_Router.cs",
@@ -904,7 +1378,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 33,
+              "DocumentIndex": 68,
               "Title": "RepositorySetting.cs",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\DB\\RepositorySetting.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_Core\\DB\\RepositorySetting.cs",
@@ -916,7 +1390,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 40,
+              "DocumentIndex": 72,
               "Title": "BaseEntity.cs",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\DB\\Models\\BaseEntity.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_Core\\DB\\Models\\BaseEntity.cs",
@@ -928,19 +1402,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 39,
-              "Title": "QuartzJobHostedService.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\QuartzExtensions\\QuartzJobHostedService.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\QuartzExtensions\\QuartzJobHostedService.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\QuartzExtensions\\QuartzJobHostedService.cs",
-              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\QuartzExtensions\\QuartzJobHostedService.cs",
-              "ViewState": "AQIAADcAAAAAAAAAAIAxwGQAAAAVAAAA",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-08-15T07:44:15.522Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 36,
+              "DocumentIndex": 70,
               "Title": "DeviceInfoController.cs",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\QuartzJob\\DeviceInfoController.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Controllers\\QuartzJob\\DeviceInfoController.cs",
@@ -952,7 +1414,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 48,
+              "DocumentIndex": 80,
               "Title": "Sys_Actions.cs",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Model\\Models\\System\\Sys_Actions.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_Model\\Models\\System\\Sys_Actions.cs",
@@ -964,7 +1426,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 47,
+              "DocumentIndex": 79,
               "Title": "Sys_Department.cs",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Model\\Models\\System\\Sys_Department.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_Model\\Models\\System\\Sys_Department.cs",
@@ -976,7 +1438,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 45,
+              "DocumentIndex": 77,
               "Title": "Sys_Log.cs",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Model\\Models\\System\\Sys_Log.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_Model\\Models\\System\\Sys_Log.cs",
@@ -988,19 +1450,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 52,
-              "Title": "DBSeed.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\Seed\\DBSeed.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Core\\Seed\\DBSeed.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\Seed\\DBSeed.cs",
-              "RelativeToolTip": "WIDESEAWCS_Core\\Seed\\DBSeed.cs",
-              "ViewState": "AQIAADQAAAAAAAAAAAAAwFoAAAAYAAAA",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-08-19T04:29:35.296Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 41,
+              "DocumentIndex": 73,
               "Title": "Sys_User.cs",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Model\\Models\\System\\Sys_User.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_Model\\Models\\System\\Sys_User.cs",
@@ -1012,7 +1462,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 42,
+              "DocumentIndex": 74,
               "Title": "Sys_Tenant.cs",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Model\\Models\\System\\Sys_Tenant.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_Model\\Models\\System\\Sys_Tenant.cs",
@@ -1024,7 +1474,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 38,
+              "DocumentIndex": 71,
               "Title": "LambdaExtensions.cs",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\Utilities\\LambdaExtensions.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_Core\\Utilities\\LambdaExtensions.cs",
@@ -1036,7 +1486,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 46,
+              "DocumentIndex": 78,
               "Title": "Sys_DictionaryList.cs",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Model\\Models\\System\\Sys_DictionaryList.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_Model\\Models\\System\\Sys_DictionaryList.cs",
@@ -1048,7 +1498,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 43,
+              "DocumentIndex": 75,
               "Title": "Sys_RoleAuth.cs",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Model\\Models\\System\\Sys_RoleAuth.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_Model\\Models\\System\\Sys_RoleAuth.cs",
@@ -1060,7 +1510,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 44,
+              "DocumentIndex": 76,
               "Title": "Sys_Role.cs",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Model\\Models\\System\\Sys_Role.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_Model\\Models\\System\\Sys_Role.cs",
@@ -1072,31 +1522,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 50,
-              "Title": "QuartzJobAutofacModuleRegister.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\QuartzExtensions\\QuartzJobAutofacModuleRegister.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\QuartzExtensions\\QuartzJobAutofacModuleRegister.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\QuartzExtensions\\QuartzJobAutofacModuleRegister.cs",
-              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\QuartzExtensions\\QuartzJobAutofacModuleRegister.cs",
-              "ViewState": "AQIAAAAAAAAAAAAAAAAAACIAAAAvAAAA",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-08-15T07:40:33Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 51,
-              "Title": "AutofacModuleRegister.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\Extensions\\AutofacModuleRegister.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Core\\Extensions\\AutofacModuleRegister.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\Extensions\\AutofacModuleRegister.cs",
-              "RelativeToolTip": "WIDESEAWCS_Core\\Extensions\\AutofacModuleRegister.cs",
-              "ViewState": "AQIAAEAAAAAAAAAAAAAAwBEAAAAmAAAA",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-08-15T07:38:34.959Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 54,
+              "DocumentIndex": 81,
               "Title": "Sys_RoleAuth.tsv",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\wwwroot\\WIDESEAWCS_DB.DBSeed.Json\\Sys_RoleAuth.tsv",
               "RelativeDocumentMoniker": "WIDESEAWCS_Server\\wwwroot\\WIDESEAWCS_DB.DBSeed.Json\\Sys_RoleAuth.tsv",
@@ -1108,19 +1534,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 53,
-              "Title": "Sys_User.tsv",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\wwwroot\\WIDESEAWCS_DB.DBSeed.Json\\Sys_User.tsv",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\wwwroot\\WIDESEAWCS_DB.DBSeed.Json\\Sys_User.tsv",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\wwwroot\\WIDESEAWCS_DB.DBSeed.Json\\Sys_User.tsv",
-              "RelativeToolTip": "WIDESEAWCS_Server\\wwwroot\\WIDESEAWCS_DB.DBSeed.Json\\Sys_User.tsv",
-              "ViewState": "AQIAAAAAAAAAAAAAAAAAABgAAAABAAAA",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001001|",
-              "WhenOpened": "2024-08-19T00:47:36.297Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 61,
+              "DocumentIndex": 86,
               "Title": "Sys_Role.tsv",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\wwwroot\\WIDESEAWCS_DB.DBSeed.Json\\Sys_Role.tsv",
               "RelativeDocumentMoniker": "WIDESEAWCS_Server\\wwwroot\\WIDESEAWCS_DB.DBSeed.Json\\Sys_Role.tsv",
@@ -1132,7 +1546,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 55,
+              "DocumentIndex": 82,
               "Title": "RouterController.cs",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\BasicInfo\\RouterController.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Controllers\\BasicInfo\\RouterController.cs",
@@ -1144,31 +1558,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 49,
-              "Title": "Dt_DeviceProtocol.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Models\\Dt_DeviceProtocol.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\Models\\Dt_DeviceProtocol.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Models\\Dt_DeviceProtocol.cs",
-              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\Models\\Dt_DeviceProtocol.cs",
-              "ViewState": "AQIAAAAAAAAAAAAAAAAAAB8AAAAvAAAA",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-08-19T04:35:36.341Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 56,
-              "Title": "appsettings.json",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\appsettings.json",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\appsettings.json",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\appsettings.json",
-              "RelativeToolTip": "WIDESEAWCS_Server\\appsettings.json",
-              "ViewState": "AQIAAAAAAAAAAAAAAAAAAA0AAABHAAAA",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|",
-              "WhenOpened": "2024-08-19T00:56:32.8Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 57,
+              "DocumentIndex": 83,
               "Title": "IRouterService.cs",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_IBasicInfoService\\IRouterService.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_IBasicInfoService\\IRouterService.cs",
@@ -1180,19 +1570,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 58,
-              "Title": "Sys_Tenant.tsv",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\wwwroot\\WIDESEAWCS_DB.DBSeed.Json\\Sys_Tenant.tsv",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\wwwroot\\WIDESEAWCS_DB.DBSeed.Json\\Sys_Tenant.tsv",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\wwwroot\\WIDESEAWCS_DB.DBSeed.Json\\Sys_Tenant.tsv",
-              "RelativeToolTip": "WIDESEAWCS_Server\\wwwroot\\WIDESEAWCS_DB.DBSeed.Json\\Sys_Tenant.tsv",
-              "ViewState": "AQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001001|",
-              "WhenOpened": "2024-08-19T00:51:34.606Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 60,
+              "DocumentIndex": 85,
               "Title": "Sys_Menu.tsv",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\wwwroot\\WIDESEAWCS_DB.DBSeed.Json\\Sys_Menu.tsv",
               "RelativeDocumentMoniker": "WIDESEAWCS_Server\\wwwroot\\WIDESEAWCS_DB.DBSeed.Json\\Sys_Menu.tsv",
@@ -1204,7 +1582,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 65,
+              "DocumentIndex": 90,
               "Title": "Sys_Menu.cs",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Model\\Models\\System\\Sys_Menu.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_Model\\Models\\System\\Sys_Menu.cs",
@@ -1216,7 +1594,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 67,
+              "DocumentIndex": 92,
               "Title": "UserPermissions.cs",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Model\\Models\\System\\UserPermissions.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_Model\\Models\\System\\UserPermissions.cs",
@@ -1228,7 +1606,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 59,
+              "DocumentIndex": 84,
               "Title": "Sys_Role.tsv",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\wwwroot\\WIDESEAWCS_DB.DBSeed.Json\\Sys_Role.tsv",
               "RelativeDocumentMoniker": "WIDESEAWCS_Server\\wwwroot\\WIDESEAWCS_DB.DBSeed.Json\\Sys_Role.tsv",
@@ -1240,7 +1618,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 64,
+              "DocumentIndex": 89,
               "Title": "ISys_MenuRepository.cs",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_ISystemRepository\\ISys_MenuRepository.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_ISystemRepository\\ISys_MenuRepository.cs",
@@ -1252,7 +1630,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 62,
+              "DocumentIndex": 87,
               "Title": "Sys_MenuController.cs",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\System\\Sys_MenuController.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Controllers\\System\\Sys_MenuController.cs",
@@ -1260,11 +1638,12 @@
               "RelativeToolTip": "WIDESEAWCS_Server\\Controllers\\System\\Sys_MenuController.cs",
               "ViewState": "AQIAAAYAAAAAAAAAAAAAACEAAAAiAAAA",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-08-16T00:38:02.288Z"
+              "WhenOpened": "2024-08-16T00:38:02.288Z",
+              "EditorCaption": ""
             },
             {
               "$type": "Document",
-              "DocumentIndex": 63,
+              "DocumentIndex": 88,
               "Title": "Sys_MenuService.cs",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_SystemServices\\Sys_MenuService.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_SystemServices\\Sys_MenuService.cs",
@@ -1276,7 +1655,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 66,
+              "DocumentIndex": 91,
               "Title": "MainDb.cs",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\DB\\MainDb.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_Core\\DB\\MainDb.cs",
@@ -1288,7 +1667,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 69,
+              "DocumentIndex": 94,
               "Title": "IRouterRepository.cs",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_IBasicInfoRepository\\IRouterRepository.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_IBasicInfoRepository\\IRouterRepository.cs",
@@ -1300,7 +1679,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 68,
+              "DocumentIndex": 93,
               "Title": "RouterRepository.cs",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_BasicInfoRepository\\RouterRepository.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_BasicInfoRepository\\RouterRepository.cs",
@@ -1312,7 +1691,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 70,
+              "DocumentIndex": 95,
               "Title": "RouterInOutType.cs",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\Enums\\RouterInOutType.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_Core\\Enums\\RouterInOutType.cs",
@@ -1324,7 +1703,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 72,
+              "DocumentIndex": 96,
               "Title": "WIDESEAWCS_ISystemRepository.csproj",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_ISystemRepository\\WIDESEAWCS_ISystemRepository.csproj",
               "RelativeDocumentMoniker": "WIDESEAWCS_ISystemRepository\\WIDESEAWCS_ISystemRepository.csproj",
@@ -1336,19 +1715,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 71,
-              "Title": "Sys_UserController.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\System\\Sys_UserController.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Controllers\\System\\Sys_UserController.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\System\\Sys_UserController.cs",
-              "RelativeToolTip": "WIDESEAWCS_Server\\Controllers\\System\\Sys_UserController.cs",
-              "ViewState": "AQIAABsAAAAAAAAAAAAtwDEAAAAIAAAA",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-08-18T09:01:48.433Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 75,
+              "DocumentIndex": 98,
               "Title": "Sys_TenantController.cs",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\System\\Sys_TenantController.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Controllers\\System\\Sys_TenantController.cs",
@@ -1360,7 +1727,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 74,
+              "DocumentIndex": 97,
               "Title": "Sys_RoleController.cs",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\System\\Sys_RoleController.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Controllers\\System\\Sys_RoleController.cs",
@@ -1372,31 +1739,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 73,
-              "Title": "Sys_DictionaryController.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\System\\Sys_DictionaryController.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_Server\\Controllers\\System\\Sys_DictionaryController.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Server\\Controllers\\System\\Sys_DictionaryController.cs",
-              "RelativeToolTip": "WIDESEAWCS_Server\\Controllers\\System\\Sys_DictionaryController.cs",
-              "ViewState": "AQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-08-16T00:37:56.628Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 78,
-              "Title": "CommonConveyorLine.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\ConveyorLine\\CommonConveyorLine.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\ConveyorLine\\CommonConveyorLine.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\ConveyorLine\\CommonConveyorLine.cs",
-              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\ConveyorLine\\CommonConveyorLine.cs",
-              "ViewState": "AQIAAG8AAAAAAAAAAAAMwIEAAAAeAAAA",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-08-15T08:26:08.617Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 76,
+              "DocumentIndex": 99,
               "Title": "Sys_RoleService.cs",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_SystemServices\\Sys_RoleService.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_SystemServices\\Sys_RoleService.cs",
@@ -1408,19 +1751,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 77,
-              "Title": "DeviceStatus.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\DeviceEnum\\DeviceStatus.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\DeviceEnum\\DeviceStatus.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\DeviceEnum\\DeviceStatus.cs",
-              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\DeviceEnum\\DeviceStatus.cs",
-              "ViewState": "AQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-08-16T08:03:46.692Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 79,
+              "DocumentIndex": 100,
               "Title": "ConveyorLineStatus.cs",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\ConveyorLine\\Enum\\ConveyorLineStatus.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\ConveyorLine\\Enum\\ConveyorLineStatus.cs",
@@ -1432,7 +1763,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 80,
+              "DocumentIndex": 101,
               "Title": "StackerCraneStatus.cs",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\StackerCrane\\Enum\\StackerCraneStatus.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\StackerCrane\\Enum\\StackerCraneStatus.cs",
@@ -1444,19 +1775,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 81,
-              "Title": "DevicesStorage.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\DevicesStorage.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\DevicesStorage.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\DevicesStorage.cs",
-              "RelativeToolTip": "WIDESEAWCS_QuartzJob\\DevicesStorage.cs",
-              "ViewState": "AQIAAAAAAAAAAAAAAAAAAA4AAAAAAAAA",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-08-16T07:48:30.771Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 83,
+              "DocumentIndex": 103,
               "Title": "VierificationCode.cs",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\Utilities\\VierificationCode.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_Core\\Utilities\\VierificationCode.cs",
@@ -1468,7 +1787,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 82,
+              "DocumentIndex": 102,
               "Title": "EnumHelper.cs",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\Enums\\EnumHelper.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_Core\\Enums\\EnumHelper.cs",
@@ -1476,11 +1795,12 @@
               "RelativeToolTip": "WIDESEAWCS_Core\\Enums\\EnumHelper.cs",
               "ViewState": "AQIAAEQAAAAAAAAAAAAQwF0AAAApAAAA",
               "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-08-16T06:50:45.713Z"
+              "WhenOpened": "2024-08-16T06:50:45.713Z",
+              "EditorCaption": ""
             },
             {
               "$type": "Document",
-              "DocumentIndex": 86,
+              "DocumentIndex": 106,
               "Title": "StackerCarneTaskDTO.cs",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_DTO\\StackerCarneTaskDTO.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_DTO\\StackerCarneTaskDTO.cs",
@@ -1492,7 +1812,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 85,
+              "DocumentIndex": 105,
               "Title": "MenuDTO.cs",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_DTO\\System\\MenuDTO.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_DTO\\System\\MenuDTO.cs",
@@ -1504,7 +1824,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 84,
+              "DocumentIndex": 104,
               "Title": "WIDESEAWCS_Core.csproj",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj",
               "RelativeDocumentMoniker": "WIDESEAWCS_Core\\WIDESEAWCS_Core.csproj",
@@ -1516,7 +1836,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 87,
+              "DocumentIndex": 107,
               "Title": "ISys_RoleService.cs",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_ISystemServices\\ISys_RoleService.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_ISystemServices\\ISys_RoleService.cs",
@@ -1528,7 +1848,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 88,
+              "DocumentIndex": 108,
               "Title": "UserPermissions.cs",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_DTO\\System\\UserPermissions.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_DTO\\System\\UserPermissions.cs",
@@ -1540,7 +1860,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 89,
+              "DocumentIndex": 109,
               "Title": "ActionDTO.cs",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_DTO\\System\\ActionDTO.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_DTO\\System\\ActionDTO.cs",
@@ -1552,7 +1872,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 93,
+              "DocumentIndex": 113,
               "Title": "CommunicationException.cs",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Communicator\\CommunicationException.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_Communicator\\CommunicationException.cs",
@@ -1564,7 +1884,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 91,
+              "DocumentIndex": 111,
               "Title": "QuartzJobException.cs",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\CustomException\\QuartzJobException.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\CustomException\\QuartzJobException.cs",
@@ -1576,7 +1896,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 90,
+              "DocumentIndex": 110,
               "Title": "WIDESEAWCS_DTO.csproj",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_DTO\\WIDESEAWCS_DTO.csproj",
               "RelativeDocumentMoniker": "WIDESEAWCS_DTO\\WIDESEAWCS_DTO.csproj",
@@ -1588,7 +1908,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 94,
+              "DocumentIndex": 114,
               "Title": "JobSetup.cs",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\QuartzExtensions\\JobSetup.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\QuartzExtensions\\JobSetup.cs",
@@ -1600,7 +1920,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 92,
+              "DocumentIndex": 112,
               "Title": "SchedulerCenterServer.cs",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\QuartzNet\\SchedulerCenterServer.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\QuartzNet\\SchedulerCenterServer.cs",
@@ -1612,19 +1932,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 97,
-              "Title": "ISys_DictionaryService.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_ISystemServices\\ISys_DictionaryService.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_ISystemServices\\ISys_DictionaryService.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_ISystemServices\\ISys_DictionaryService.cs",
-              "RelativeToolTip": "WIDESEAWCS_ISystemServices\\ISys_DictionaryService.cs",
-              "ViewState": "AQIAAAAAAAAAAAAAAAAAAA8AAAAAAAAA",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-08-15T07:33:36.058Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 95,
+              "DocumentIndex": 115,
               "Title": "TestJob.cs",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Tasks\\TestJob.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_Tasks\\TestJob.cs",
@@ -1636,7 +1944,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 96,
+              "DocumentIndex": 116,
               "Title": "DeviceInfoRepository.cs",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_QuartzJob\\Repository\\DeviceInfoRepository.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_QuartzJob\\Repository\\DeviceInfoRepository.cs",
@@ -1648,19 +1956,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 98,
-              "Title": "Sys_DictionaryRepository.cs",
-              "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_SystemRepository\\Sys_DictionaryRepository.cs",
-              "RelativeDocumentMoniker": "WIDESEAWCS_SystemRepository\\Sys_DictionaryRepository.cs",
-              "ToolTip": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_SystemRepository\\Sys_DictionaryRepository.cs",
-              "RelativeToolTip": "WIDESEAWCS_SystemRepository\\Sys_DictionaryRepository.cs",
-              "ViewState": "AQIAAAAAAAAAAAAAAAAAAAsAAAAlAAAA",
-              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
-              "WhenOpened": "2024-08-15T07:33:12.766Z"
-            },
-            {
-              "$type": "Document",
-              "DocumentIndex": 99,
+              "DocumentIndex": 117,
               "Title": "ISys_DictionaryRepository.cs",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_ISystemRepository\\ISys_DictionaryRepository.cs",
               "RelativeDocumentMoniker": "WIDESEAWCS_ISystemRepository\\ISys_DictionaryRepository.cs",
@@ -1672,7 +1968,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 100,
+              "DocumentIndex": 118,
               "Title": "WIDESEAWCS_Model.csproj",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Model\\WIDESEAWCS_Model.csproj",
               "RelativeDocumentMoniker": "WIDESEAWCS_Model\\WIDESEAWCS_Model.csproj",
@@ -1684,7 +1980,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 102,
+              "DocumentIndex": 120,
               "Title": "WIDESEAWCS_Common.csproj",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Common\\WIDESEAWCS_Common.csproj",
               "RelativeDocumentMoniker": "WIDESEAWCS_Common\\WIDESEAWCS_Common.csproj",
@@ -1696,7 +1992,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 103,
+              "DocumentIndex": 121,
               "Title": "WIDESEAWCS_TaskInfoService.csproj",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoService\\WIDESEAWCS_TaskInfoService.csproj",
               "RelativeDocumentMoniker": "WIDESEAWCS_TaskInfoService\\WIDESEAWCS_TaskInfoService.csproj",
@@ -1708,7 +2004,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 105,
+              "DocumentIndex": 123,
               "Title": "WIDESEAWCS_SystemServices.csproj",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_SystemServices\\WIDESEAWCS_SystemServices.csproj",
               "RelativeDocumentMoniker": "WIDESEAWCS_SystemServices\\WIDESEAWCS_SystemServices.csproj",
@@ -1720,7 +2016,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 104,
+              "DocumentIndex": 122,
               "Title": "WIDESEAWCS_ISystemServices.csproj",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_ISystemServices\\WIDESEAWCS_ISystemServices.csproj",
               "RelativeDocumentMoniker": "WIDESEAWCS_ISystemServices\\WIDESEAWCS_ISystemServices.csproj",
@@ -1732,7 +2028,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 101,
+              "DocumentIndex": 119,
               "Title": "WIDESEAWCS_Communicator.csproj",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_Communicator\\WIDESEAWCS_Communicator.csproj",
               "RelativeDocumentMoniker": "WIDESEAWCS_Communicator\\WIDESEAWCS_Communicator.csproj",
@@ -1744,7 +2040,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 106,
+              "DocumentIndex": 124,
               "Title": "WIDESEAWCS_TaskInfoRepository.csproj",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_TaskInfoRepository\\WIDESEAWCS_TaskInfoRepository.csproj",
               "RelativeDocumentMoniker": "WIDESEAWCS_TaskInfoRepository\\WIDESEAWCS_TaskInfoRepository.csproj",
@@ -1756,7 +2052,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 107,
+              "DocumentIndex": 125,
               "Title": "WIDESEAWCS_ITaskInfoRepository.csproj",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_ITaskInfoRepository\\WIDESEAWCS_ITaskInfoRepository.csproj",
               "RelativeDocumentMoniker": "WIDESEAWCS_ITaskInfoRepository\\WIDESEAWCS_ITaskInfoRepository.csproj",
@@ -1768,7 +2064,7 @@
             },
             {
               "$type": "Document",
-              "DocumentIndex": 108,
+              "DocumentIndex": 126,
               "Title": "WIDESEAWCS_SystemRepository.csproj",
               "DocumentMoniker": "E:\\WIDESEAWCS\\InfrastructureWCS\\WIDESEAWCS_Server\\WIDESEAWCS_SystemRepository\\WIDESEAWCS_SystemRepository.csproj",
               "RelativeDocumentMoniker": "WIDESEAWCS_SystemRepository\\WIDESEAWCS_SystemRepository.csproj",
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_Communicator/CommunicatorCommonMethod.cs b/WIDESEAWCS_Server/WIDESEAWCS_Communicator/CommunicatorCommonMethod.cs
new file mode 100644
index 0000000..d9c2854
--- /dev/null
+++ b/WIDESEAWCS_Server/WIDESEAWCS_Communicator/CommunicatorCommonMethod.cs
@@ -0,0 +1,34 @@
+锘縰sing Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEAWCS_Communicator
+{
+    public class CommunicatorCommonMethod
+    {
+        public static string GetVueDictionary(string key)
+        {
+            string result = "";
+            try
+            {
+                switch (key)
+                {
+                    case "devicePlcType":
+                        
+                        break;
+                }
+                return result;
+            }
+            catch (Exception ex)
+            {
+                return "";
+            }
+
+        }
+    }
+}
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_Communicator/Siemens/SiemensS7Communicator.cs b/WIDESEAWCS_Server/WIDESEAWCS_Communicator/Siemens/SiemensS7Communicator.cs
index 8c7eea6..4fe7441 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_Communicator/Siemens/SiemensS7Communicator.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_Communicator/Siemens/SiemensS7Communicator.cs
@@ -23,6 +23,7 @@
 using System;
 using System.Collections;
 using System.Collections.Generic;
+using System.ComponentModel;
 using System.Linq;
 using System.Net;
 using System.Reflection;
@@ -35,6 +36,7 @@
     /// <summary>
     /// 瑗块棬瀛怱7閫氳绫�
     /// </summary>
+    [Description("瑗块棬瀛怱7")]
     public class SiemensS7 : BaseCommunicator, IDisposable
     {
         #region Private Member
@@ -108,11 +110,20 @@
         /// <exception cref="CommunicationException">鑷畾涔夐�氳寮傚父绫�</exception>
         private object? GetContent<T>(OperateResult<T> operateResult, string address)
         {
-            if (!operateResult.IsSuccess)
+            try
             {
-                throw new CommunicationException(string.Format(CommunicationExceptionMessage.ReadFailedException, typeof(T).Name, address, operateResult.Message), CommunicationErrorType.ReadFailed);
+                if (!operateResult.IsSuccess)
+                {
+                    throw new CommunicationException(string.Format(CommunicationExceptionMessage.ReadFailedException, typeof(T).Name, address, operateResult.Message), CommunicationErrorType.ReadFailed);
+                }
+                return operateResult.Content;
             }
-            return operateResult.Content;
+            catch (Exception ex)
+            {
+                LogNet.WriteException(Name, $"銆恵Name}銆慞LC璇诲彇寮傚父锛屽湴鍧�锛氥�恵address}銆戯紝閿欒淇℃伅锛氥�恵ex.Message}銆�", ex);
+                throw new CommunicationException(ex.Message, CommunicationErrorType.ReadException, innerException: ex);
+            }
+
         }
 
         /// <summary>
@@ -126,28 +137,37 @@
         /// <exception cref="CommunicationException"></exception>
         private bool GetResult<T>(OperateResult operateResult, string address, T value) where T : notnull
         {
-            if (!operateResult.IsSuccess)
+            try
             {
-                throw new CommunicationException(string.Format(CommunicationExceptionMessage.WriteFailedException, typeof(T).Name, address, value, operateResult.Message), CommunicationErrorType.WriteFailed);
-            }
-            else
-            {
-                object? obj = null;
-                for (int i = 0; i < 5; i++)
+                if (!operateResult.IsSuccess)
                 {
-                    T readValue = Read<T>(address);
-                    obj = readValue;
-                    if (readValue.Equals(value))
-                    {
-                        return true;
-                    }
-                    else
-                    {
-                        Write(address, value);
-                    }
+                    throw new CommunicationException(string.Format(CommunicationExceptionMessage.WriteFailedException, typeof(T).Name, address, value, operateResult.Message), CommunicationErrorType.WriteFailed);
                 }
-                throw new CommunicationException(string.Format(CommunicationExceptionMessage.ReadWriteDifferentException, typeof(T).Name, address, value, obj), CommunicationErrorType.WriteFailed);
+                else
+                {
+                    object? obj = null;
+                    for (int i = 0; i < 5; i++)
+                    {
+                        T readValue = Read<T>(address);
+                        obj = readValue;
+                        if (readValue.Equals(value))
+                        {
+                            return true;
+                        }
+                        else
+                        {
+                            Write(address, value);
+                        }
+                    }
+                    throw new CommunicationException(string.Format(CommunicationExceptionMessage.ReadWriteDifferentException, typeof(T).Name, address, value, obj), CommunicationErrorType.WriteFailed);
+                }
             }
+            catch(Exception ex)
+            {
+                LogNet.WriteException(Name, $"銆恵Name}銆慞LC鍐欏叆寮傚父锛屽湴鍧�锛氥�恵address}銆戯紝鍐欏叆鐨勬暟鎹細銆恵value}銆戯紝閿欒淇℃伅锛氥�恵ex.Message}銆�", ex);
+                throw new CommunicationException(ex.Message, CommunicationErrorType.WriteFailed, innerException: ex);
+            }
+            
         }
 
         /// <summary>
@@ -194,7 +214,7 @@
             catch (Exception ex)
             {
                 //璇诲彇寮傚父鏃舵姏鍑鸿嚜瀹氫箟閫氳寮傚父绫�
-                throw new CommunicationException($"璇诲彇鏁版嵁寮傚父,閿欒淇℃伅:{ex.Message}", CommunicationErrorType.TypeError, innerException: ex);
+                throw new CommunicationException($"鍐欏叆鏁版嵁寮傚父,閿欒淇℃伅:{ex.Message}", CommunicationErrorType.TypeError, innerException: ex);
             }
         }
 
@@ -610,44 +630,62 @@
         #region ReadCustomer
         public override T ReadCustomer<T>(string address)
         {
-            return plc.ReadCustomer<T>(address).Content;
+            try
+            {
+                return plc.ReadCustomer<T>(address).Content;
+            }
+            catch(Exception ex)
+            {
+                LogNet.WriteException(Name, $"銆恵Name}銆慞LC璇诲彇寮傚父锛屽湴鍧�锛氥�恵address}銆戯紝閿欒淇℃伅锛氥�恵ex.Message}銆�", ex);
+                throw new CommunicationException(ex.Message, CommunicationErrorType.ReadException, innerException: ex);
+            }
+           
         }
         #endregion
 
         #region WriteCustomer
         public override bool WriteCustomer<T>(string address, T value)
         {
-            OperateResult operateResult = plc.WriteCustomer(address, value);
-            if (operateResult.IsSuccess)
+            try
             {
-                for (int i = 0; i < 5; i++)
+                OperateResult operateResult = plc.WriteCustomer(address, value);
+                if (operateResult.IsSuccess)
                 {
-                    T readValue = ReadCustomer<T>(address);
-                    PropertyInfo[] propertyInfos = typeof(T).GetProperties();
-                    foreach (var item in propertyInfos)
+                    for (int i = 0; i < 5; i++)
                     {
-                        object writeValueItem = item.GetValue(value);
-                        if (writeValueItem != null)
+                        T readValue = ReadCustomer<T>(address);
+                        PropertyInfo[] propertyInfos = typeof(T).GetProperties();
+                        foreach (var item in propertyInfos)
                         {
-                            object readValueItem = item.GetValue(readValue);
-                            if (writeValueItem.Equals(readValueItem))
+                            object writeValueItem = item.GetValue(value);
+                            if (writeValueItem != null)
                             {
-                                break;
+                                object readValueItem = item.GetValue(readValue);
+                                if (writeValueItem.Equals(readValueItem))
+                                {
+                                    break;
+                                }
+                                else
+                                {
+                                    plc.WriteCustomer(address, value);
+                                }
+                                throw new CommunicationException(string.Format(CommunicationExceptionMessage.ReadWriteDifferentException, typeof(T).Name, address, JsonConvert.SerializeObject(value), JsonConvert.SerializeObject(readValue)), CommunicationErrorType.WriteFailed);
                             }
-                            else
-                            {
-                                plc.WriteCustomer(address, value);
-                            }
-                            throw new CommunicationException(string.Format(CommunicationExceptionMessage.ReadWriteDifferentException, typeof(T).Name, address, JsonConvert.SerializeObject(value), JsonConvert.SerializeObject(readValue)), CommunicationErrorType.WriteFailed);
                         }
                     }
                 }
+                else
+                {
+                    throw new CommunicationException(string.Format(CommunicationExceptionMessage.WriteFailedException, typeof(T).Name, address, JsonConvert.SerializeObject(value), operateResult.Message), CommunicationErrorType.WriteFailed);
+                }
+                return operateResult.IsSuccess;
             }
-            else
+            catch(Exception ex)
             {
-                throw new CommunicationException(string.Format(CommunicationExceptionMessage.WriteFailedException, typeof(T).Name, address, JsonConvert.SerializeObject(value), operateResult.Message), CommunicationErrorType.WriteFailed);
+                LogNet.WriteException(Name, $"銆恵Name}銆慞LC鍐欏叆寮傚父锛屽湴鍧�锛氥�恵address}銆戯紝鍐欏叆鐨勬暟鎹細銆恵JsonConvert.SerializeObject(value)}銆戯紝閿欒淇℃伅锛氥�恵ex.Message}銆�", ex);
+                throw new CommunicationException(ex.Message, CommunicationErrorType.WriteFailed, innerException: ex);
             }
-            return operateResult.IsSuccess;
+            
         }
         #endregion
 
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_Communicator/Test.cs b/WIDESEAWCS_Server/WIDESEAWCS_Communicator/Test.cs
deleted file mode 100644
index b3e5c54..0000000
--- a/WIDESEAWCS_Server/WIDESEAWCS_Communicator/Test.cs
+++ /dev/null
@@ -1,65 +0,0 @@
-锘�#region << 鐗� 鏈� 娉� 閲� >>
-/*----------------------------------------------------------------
- * 鍛藉悕绌洪棿锛歐IDESEAWCS_Communicator
- * 鍒涘缓鑰咃細鑳$搴�
- * 鍒涘缓鏃堕棿锛�2024/8/2 16:13:36
- * 鐗堟湰锛歏1.0.0
- * 鎻忚堪锛�
- *
- * ----------------------------------------------------------------
- * 淇敼浜猴細
- * 淇敼鏃堕棿锛�
- * 鐗堟湰锛歏1.0.1
- * 淇敼璇存槑锛�
- * 
- *----------------------------------------------------------------*/
-#endregion << 鐗� 鏈� 娉� 閲� >>
-
-using HslCommunication;
-using HslCommunication.Core;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace WIDESEAWCS_Communicator
-{
-    public class Test : IDataTransfer
-    {
-        #region <Const>
-        #endregion <Const>
-
-        #region <Private Member>
-        #endregion <Private Member>
-
-        #region <Public Menber>
-        #endregion <Public Menber>
-
-        #region <Constructor function>
-        #endregion <Constructor function>
-
-        #region <Private Method>
-        #endregion <Private Method>
-
-        #region <Public Method>
-        #endregion <Public Method>
-
-        #region <Event>
-        #endregion <Event>
-
-        private IByteTransform byteTransform = new RegularByteTransform();
-
-        public ushort ReadCount => throw new NotImplementedException();
-
-        public void ParseSource(byte[] Content)
-        {
-            
-        }
-
-        public byte[] ToSource()
-        {
-            throw new NotImplementedException();
-        }
-    }
-}
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_Core/App.cs b/WIDESEAWCS_Server/WIDESEAWCS_Core/App.cs
index 6cf3e41..ebce9ef 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_Core/App.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_Core/App.cs
@@ -80,7 +80,7 @@
             if (HttpContext?.RequestServices != null)
                 return HttpContext.RequestServices;
 
-            if (App.RootServices != null)
+            if (RootServices != null)
             {
                 IServiceScope scope = RootServices.CreateScope();
                 return scope.ServiceProvider;
@@ -102,7 +102,7 @@
 
         public static TService GetService<TService>(bool mustBuild = true) where TService : class
         {
-            TService test = App.GetService(typeof(TService), null, mustBuild) as TService;
+            TService test = GetService(typeof(TService), null, mustBuild) as TService;
             return test;
         }
 
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_Core/BaseRepository/IRepository.cs b/WIDESEAWCS_Server/WIDESEAWCS_Core/BaseRepository/IRepository.cs
index f7bfa06..a2702d9 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_Core/BaseRepository/IRepository.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_Core/BaseRepository/IRepository.cs
@@ -356,6 +356,7 @@
         List<TResult> QueryTabs<T, T2, TResult>(
             Expression<Func<T, T2, object[]>> joinExpression,
             Expression<Func<T, T2, TResult>> selectExpression,
+           Expression<Func<T,T2, bool>> whereExpressionT1,
             Expression<Func<TResult, bool>> whereExpression);
 
         Task<List<TResult>> QueryTabsAsync<T, T2, TResult>(
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_Core/BaseRepository/RepositoryBase.cs b/WIDESEAWCS_Server/WIDESEAWCS_Core/BaseRepository/RepositoryBase.cs
index 6988086..3ce4571 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_Core/BaseRepository/RepositoryBase.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_Core/BaseRepository/RepositoryBase.cs
@@ -534,9 +534,10 @@
         public virtual List<TResult> QueryTabs<T, T2, TResult>(
            Expression<Func<T, T2, object[]>> joinExpression,
            Expression<Func<T, T2, TResult>> selectExpression,
+           Expression<Func<T,T2, bool>> whereExpressionT1,
            Expression<Func<TResult, bool>> whereExpression)
         {
-            List<TResult> list = _db.Queryable(joinExpression)
+            List<TResult> list = _db.Queryable(joinExpression).WhereIF(whereExpressionT1 != null, whereExpressionT1)
                .Select(selectExpression)
                .WhereIF(whereExpression != null, whereExpression).ToList();
             return list;
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_Core/BaseServices/ServiceBase.cs b/WIDESEAWCS_Server/WIDESEAWCS_Core/BaseServices/ServiceBase.cs
index 952bb0c..d72dc1e 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_Core/BaseServices/ServiceBase.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_Core/BaseServices/ServiceBase.cs
@@ -2,6 +2,7 @@
 using Magicodes.ExporterAndImporter.Core.Models;
 using Magicodes.ExporterAndImporter.Excel;
 using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc.RazorPages;
 using Microsoft.Extensions.Options;
 using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
 using SqlSugar;
@@ -13,6 +14,7 @@
 using WIDESEAWCS_Core.Enums;
 using WIDESEAWCS_Core.Helper;
 using WIDESEAWCS_Core.Utilities;
+using static OfficeOpenXml.ExcelErrorValue;
 
 namespace WIDESEAWCS_Core.BaseServices
 {
@@ -119,27 +121,38 @@
 
                 if (property == null) continue;
 
-                (bool, string, object) result = property.ValidationVal(searchParametersList[i].Value.Split(','));
-                if (!result.Item1)
+                List<(bool, string, object)> results = property.ValidationValueForDbType(searchParametersList[i].Value.Split(',')).ToList();
+                if (results == null || results.Count() == 0)
                 {
                     continue;
                 }
+                for (int j = 0; j < results.Count(); j++)
+                {
+                    if (j == 0)
+                    {
+                        where += "(";
+                    }
+                    LinqExpressionType expressionType = searchParametersList[i].DisplayType.GetLinqCondition();
+                    if (expressionType == LinqExpressionType.Equal)
+                    {
+                        where += $"{searchParametersList[i].Name} = '{results[j].Item3}'";
+                    }
+                    else
+                    {
+                        where += $"{searchParametersList[i].Name} {searchParametersList[i].DisplayType} '{results[j].Item3}'";
+                    }
 
-                LinqExpressionType expressionType = searchParametersList[i].DisplayType.GetLinqCondition();
-                if (expressionType == LinqExpressionType.Equal)
-                {
-                    if (string.IsNullOrEmpty(where))
-                        where += $"{searchParametersList[i].Name} = '{searchParametersList[i].Value}'";
+                    if (j == results.Count() - 1)
+                    {
+                        where += ")";
+                    }
                     else
-                        where += $" and {searchParametersList[i].Name} = '{searchParametersList[i].Value}'";
+                    {
+                        where += " or ";
+                    }
                 }
-                else
-                {
-                    if (string.IsNullOrEmpty(where))
-                        where += $"{searchParametersList[i].Name} {searchParametersList[i].DisplayType} '{searchParametersList[i].Value}'";
-                    else
-                        where += $" and {searchParametersList[i].Name} {searchParametersList[i].DisplayType} '{searchParametersList[i].Value}'";
-                }
+                if (i < searchParametersList.Count - 1)
+                    where += " and ";
             }
             return where;
         }
@@ -164,7 +177,7 @@
                     }
                     return sortDic;
                 }
-                else if (propertyInfo.Any(x => x.Name == pageData.Sort))
+                else if (propertyInfo.Any(x => x.Name == pageData.Sort.FirstLetterToLower() || x.Name == pageData.Sort.FirstLetterToUpper()))
                 {
                     return new Dictionary<string, OrderByType> {
                         {
@@ -267,17 +280,64 @@
                         saveModel.MainData.Remove(keyPro.Name.FirstLetterToLower());
                     }
                 }
-
                 TEntity entity = saveModel.MainData.DicToModel<TEntity>();
+                if (saveModel.DetailData == null && saveModel.DetailData.Count == 0)
+                {
+                    BaseDal.AddData(entity);
+                    return WebResponseContent.Instance.OK();
+                }
 
-                BaseDal.AddData(entity);
+                if (typeof(TEntity).GetNavigatePro() == null)
+                {
+                    return WebResponseContent.Instance.Error("鏈厤缃鑸睘鎬�");
+                }
 
-                return WebResponseContent.Instance.OK();
+                Type detailType = typeof(TEntity).GetDetailType();
+                MethodInfo? methodInfo = GetType().GetMethod("AddDataIncludesDetail");
+                methodInfo = methodInfo?.MakeGenericMethod(new Type[] { detailType });
+                object? obj = methodInfo?.Invoke(this, new object[] { entity, detailType, saveModel.DetailData });
+                return obj as WebResponseContent;
             }
             catch (Exception ex)
             {
                 return WebResponseContent.Instance.Error(ex.Message);
             }
+        }
+
+        public WebResponseContent AddDataIncludesDetail<TDetail>(TEntity entity, Type detailType, List<Dictionary<string, object>> detailDics) where TDetail : class, new()
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                string name = typeof(TEntity).GetMainIdByDetail();
+                string reslut = detailType.ValidateDicInEntity(detailDics, true, new string[] { name });
+                if (reslut != string.Empty)
+                    return WebResponseContent.Instance.Error(reslut);
+
+                List<TDetail> list = detailDics.DicToIEnumerable<TDetail>();
+
+                ((SqlSugarClient)BaseDal.Db).BeginTran();
+
+                int id = BaseDal.Db.Insertable(entity).ExecuteReturnIdentity();
+
+                for (int i = 0; i < list.Count; i++)
+                {
+                    TDetail detail = list[i];
+                    typeof(TDetail).SetDetailId(detail, id, name);
+                }
+
+                BaseDal.Db.Insertable(list).ExecuteCommand();
+
+                ((SqlSugarClient)BaseDal.Db).CommitTran();
+
+                content = WebResponseContent.Instance.OK();
+            }
+            catch (Exception ex)
+            {
+                ((SqlSugarClient)BaseDal.Db).RollbackTran();
+                content = WebResponseContent.Instance.Error(ex.Message);
+            }
+            return content;
         }
 
         /// <summary>
@@ -335,11 +395,11 @@
                     return WebResponseContent.Instance.Error(validResult);
                 }
 
-                //PropertyInfo keyPro = typeof(TEntity).GetKeyProperty();
-                //if (keyPro == null)
-                //{
-                //    return WebResponseContent.Instance.Error("璇峰厛璁剧疆涓婚敭");
-                //}
+                PropertyInfo keyPro = typeof(TEntity).GetKeyProperty();
+                if (keyPro == null)
+                {
+                    return WebResponseContent.Instance.Error("璇峰厛璁剧疆涓婚敭");
+                }
 
                 TEntity entity = saveModel.MainData.DicToModel<TEntity>();
 
@@ -358,16 +418,108 @@
 
                     listCol.Add(propertyInfo?.Name);
                 }
-                if (list != null)
-                    listCol = listCol.Where(x => !list.Contains(x)).ToList();
-                bool result = BaseDal.UpdateData(entity, listCol, list);
 
-                return WebResponseContent.Instance.OK();
+                if (saveModel.DetailData == null && saveModel.DetailData.Count == 0)
+                {
+                    if (list != null)
+                        listCol = listCol.Where(x => !list.Contains(x)).ToList();
+                    bool result = BaseDal.UpdateData(entity, listCol, list);
+                    return WebResponseContent.Instance.OK();
+                }
+
+                if (typeof(TEntity).GetNavigatePro() == null)
+                {
+                    return WebResponseContent.Instance.Error("鏈厤缃鑸睘鎬�");
+                }
+
+                Type detailType = typeof(TEntity).GetDetailType();
+                MethodInfo? methodInfo = GetType().GetMethod("UpdateDataInculdesDetail");
+                methodInfo = methodInfo?.MakeGenericMethod(new Type[] { detailType });
+                object? obj = methodInfo?.Invoke(this, new object[] { entity, detailType, saveModel.DetailData, saveModel.DelKeys });
+                return obj as WebResponseContent;
             }
             catch (Exception ex)
             {
                 return WebResponseContent.Instance.Error(ex.Message);
             }
+        }
+
+        public WebResponseContent UpdateDataInculdesDetail<TDetail>(TEntity entity, Type detailType, List<Dictionary<string, object>> detailDics, List<object> delKeys) where TDetail : class, new()
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                string name = typeof(TEntity).GetMainIdByDetail();
+                string reslut = detailType.ValidateDicInEntity(detailDics, true, new string[] { name });
+                if (reslut != string.Empty)
+                    return WebResponseContent.Instance.Error(reslut);
+
+                List<TDetail> list = detailDics.DicToIEnumerable<TDetail>();
+
+                List<object> dynamicDelKeys = new List<object>();
+                if (delKeys != null)
+                {
+                    for (int i = 0; i < delKeys.Count; i++)
+                    {
+                        dynamicDelKeys.Add(delKeys[i]);
+                    }
+                }
+
+                List<TDetail> updateRows = new List<TDetail>();
+                List<TDetail> addRows = new List<TDetail>();
+
+                for (int i = 0; i < list.Count; i++)
+                {
+                    object detailId = typeof(TDetail).GetPropertyValue(list[i], typeof(TDetail).GetKeyName());
+                    if (detailId != null)
+                    {
+                        if (detailId.ToString() != "0")
+                        {
+                            updateRows.Add(list[i]);
+                        }
+                        else
+                        {
+                            addRows.Add(list[i]);
+                        }
+                    }
+                }
+
+                object mainId = typeof(TEntity).GetPropertyValue(entity, typeof(TEntity).GetKeyName());
+                if (mainId != null)
+                {
+                    ((SqlSugarClient)BaseDal.Db).BeginTran();
+
+                    if (dynamicDelKeys.Count > 0)
+                        BaseDal.Db.Deleteable<object>().AS(detailType.Name).Where($"{detailType.GetKeyName()} in (@id)", new { id = dynamicDelKeys.ToArray() }).ExecuteCommandHasChange();
+
+                    BaseDal.Db.Updateable(entity).ExecuteCommandHasChange();
+
+                    BaseDal.Db.Updateable(updateRows).ExecuteCommand();
+
+                    for (int i = 0; i < addRows.Count; i++)
+                    {
+                        TDetail detail = addRows[i];
+                        typeof(TDetail).SetDetailId(detail, mainId, name);
+                    }
+
+                    BaseDal.Db.Insertable(addRows).ExecuteCommand();
+
+                    ((SqlSugarClient)BaseDal.Db).CommitTran();
+
+                    content = WebResponseContent.Instance.OK();
+                }
+                else
+                {
+                    content = WebResponseContent.Instance.Error("鏈壘鍒颁富琛ㄤ富閿��");
+                }
+
+            }
+            catch (Exception ex)
+            {
+                ((SqlSugarClient)BaseDal.Db).RollbackTran();
+                content = WebResponseContent.Instance.Error(ex.Message);
+            }
+            return content;
         }
 
         /// <summary>
@@ -396,10 +548,40 @@
         {
             try
             {
-                return BaseDal.DeleteDataByIds(keys) ? WebResponseContent.Instance.OK() : WebResponseContent.Instance.Error();
+                if (typeof(TEntity).GetNavigatePro() == null)
+                    return BaseDal.DeleteDataByIds(keys) ? WebResponseContent.Instance.OK() : WebResponseContent.Instance.Error();
+                else
+                {
+                    if (keys != null)
+                    {
+                        Type detailType = typeof(TEntity).GetDetailType();
+                        string name = typeof(TEntity).GetMainIdByDetail();
+                        List<object> dynamicDelKeys = new List<object>();
+
+                        for (int i = 0; i < keys.Length; i++)
+                        {
+                            dynamicDelKeys.Add(keys[i]);
+                        }
+                        ((SqlSugarClient)BaseDal.Db).BeginTran();
+
+                        if (dynamicDelKeys.Count > 0)
+                            BaseDal.Db.Deleteable<object>().AS(detailType.Name).Where($"{name} in (@id)", new { id = dynamicDelKeys.ToArray() }).ExecuteCommandHasChange();
+
+                        BaseDal.DeleteDataByIds(keys);
+
+                        ((SqlSugarClient)BaseDal.Db).CommitTran();
+
+                        return WebResponseContent.Instance.OK();
+                    }
+                    else
+                    {
+                        return WebResponseContent.Instance.Error("鍙傛暟閿欒");
+                    }
+                }
             }
             catch (Exception ex)
             {
+                ((SqlSugarClient)BaseDal.Db).RollbackTran();
                 return WebResponseContent.Instance.Error(ex.Message);
             }
         }
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_Core/Enums/TaskTypeEnum.cs b/WIDESEAWCS_Server/WIDESEAWCS_Core/Enums/TaskTypeEnum.cs
index 09cd5c3..ecdd541 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_Core/Enums/TaskTypeEnum.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_Core/Enums/TaskTypeEnum.cs
@@ -1,5 +1,6 @@
 锘縰sing System;
 using System.Collections.Generic;
+using System.ComponentModel;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
@@ -11,55 +12,61 @@
         /// <summary>
         /// 鍏ュ簱
         /// </summary>
+        [Description("鍏ュ簱")]
         Inbound = 200,
         /// <summary>
         /// 鐩樼偣鍏ュ簱
         /// </summary>
+        [Description("鐩樼偣鍏ュ簱")]
         InInventory = 201,
         /// <summary>
         /// 鍒嗘嫞鍏ュ簱
         /// </summary>
+        [Description("鍒嗘嫞鍏ュ簱")]
         InPick = 202,
         /// <summary>
         /// 璐ㄦ鍏ュ簱
         /// </summary>
+        [Description("璐ㄦ鍏ュ簱")]
         InQuality = 203
     }
 
     public enum TaskOutboundTypeEnum
     {
         /// <summary>
-        /// 鍑哄簱 =100
+        /// 鍑哄簱
         /// </summary>
+        [Description("鍑哄簱")]
         Outbound = 100,
         /// <summary>
         /// 鐩樼偣鍑哄簱
         /// </summary>
+        [Description("鐩樼偣鍑哄簱")]
         OutInventory = 101,
         /// <summary>
         /// 鍒嗘嫞鍑哄簱
         /// </summary>
+        [Description("鍒嗘嫞鍑哄簱")]
         OutPick = 102,
         /// <summary>
         /// 璐ㄦ鍑哄簱
         /// </summary>
+        [Description("璐ㄦ鍑哄簱")]
         OutQuality = 103,
     }
 
     public enum TaskRelocationTypeEnum
     {
         /// <summary>
-        /// 绉诲簱
-        /// </summary>
-        Relocation = 300,
-        /// <summary>
         /// 搴撳唴绉诲簱
         /// </summary>
-        RelocationIn = 301,
+        [Description("搴撳唴绉诲簱")]
+        Relocation = 300,
         /// <summary>
         /// 搴撳绉诲簱
         /// </summary>
-        RelocationOut = 302
+        [Description("搴撳绉诲簱")]
+        RelocationIn = 301
     }
 
     public enum TaskOtherTypeEnum
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_Core/Helper/AppSettings.cs b/WIDESEAWCS_Server/WIDESEAWCS_Core/Helper/AppSettings.cs
index 58fa356..1ea1a44 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_Core/Helper/AppSettings.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_Core/Helper/AppSettings.cs
@@ -43,7 +43,6 @@
         {
             try
             {
-
                 if (sections.Any())
                 {
                     return Configuration[string.Join(":", sections)];
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_Core/Helper/ObjectExtension.cs b/WIDESEAWCS_Server/WIDESEAWCS_Core/Helper/ObjectExtension.cs
index 7064e2c..03e8283 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_Core/Helper/ObjectExtension.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_Core/Helper/ObjectExtension.cs
@@ -9,18 +9,14 @@
 {
     public static class ObjectExtension
     {
-        public static IEnumerable<T> DicToIEnumerable<T>(this List<Dictionary<string, object>> dicList)
+        public static List<T> DicToIEnumerable<T>(this List<Dictionary<string, object>> dicList)
         {
+            List<T> list = new List<T>();
             foreach (Dictionary<string, object> dic in dicList)
             {
-                T model = Activator.CreateInstance<T>();
-                foreach (PropertyInfo property in model.GetType().GetProperties(BindingFlags.GetProperty | BindingFlags.Public | BindingFlags.Instance))
-                {
-                    if (!dic.TryGetValue(property.Name, out object value)) continue;
-                    property.SetValue(model, value?.ToString().ChangeType(property.PropertyType), null);
-                }
-                yield return model;
+                list.Add(dic.DicToModel<T>());
             }
+            return list;
         }
 
         public static T DicToModel<T>(this Dictionary<string, object> dic)
@@ -30,7 +26,7 @@
             foreach (var property in propertyInfos)
             {
                 object value = null;
-                if (!dic.TryGetValue(property.Name, out value)) 
+                if (!dic.TryGetValue(property.Name, out value))
                 {
                     if (!dic.TryGetValue(property.Name.FirstLetterToUpper(), out value))
                     {
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_Core/HttpContextUser/AspNetUser.cs b/WIDESEAWCS_Server/WIDESEAWCS_Core/HttpContextUser/AspNetUser.cs
index 81a47ba..ca4e1ff 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_Core/HttpContextUser/AspNetUser.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_Core/HttpContextUser/AspNetUser.cs
@@ -29,24 +29,6 @@
 
         public string UserName => UserInfo.UserName;
 
-        //private string GetName()
-        //{
-        //    if (IsAuthenticated() && _accessor.HttpContext.User.Identity.Name.IsNotEmptyOrNull())
-        //    {
-        //        return _accessor.HttpContext.User.Identity.Name;
-        //    }
-        //    else
-        //    {
-        //        if (!string.IsNullOrEmpty(GetToken()))
-        //        {
-        //            var getNameType = /*Permissions.IsUseIds4 ? */"name" /*: "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name"*/;
-        //            return GetUserInfoFromToken(getNameType).FirstOrDefault().ObjToString();
-        //        }
-        //    }
-
-        //    return "";
-        //}
-
         public int UserId => GetClaimValueByType("jti") == null ? 0 : GetClaimValueByType("jti").FirstOrDefault().ObjToInt();
         public long TenantId => UserInfo.TenantId;
 
@@ -68,6 +50,7 @@
         }
 
         private UserInfo _userInfo { get; set; }
+
         private UserInfo UserInfo
         {
             get
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_Core/Seed/DBSeed.cs b/WIDESEAWCS_Server/WIDESEAWCS_Core/Seed/DBSeed.cs
index e56ed82..3ece807 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_Core/Seed/DBSeed.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_Core/Seed/DBSeed.cs
@@ -86,7 +86,6 @@
                         //dbContext.DbClient.QueryableByObject(t).ToList() == null
                         string seedData = FileHelper.ReadFile(string.Format(SeedDataFolder, t.Name), Encoding.UTF8);
 
-
                         #region Sys_User
                         if (seedData != "涓嶅瓨鍦ㄧ浉搴旂殑鐩綍")
                         {
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_Core/Utilities/EntityProperties.cs b/WIDESEAWCS_Server/WIDESEAWCS_Core/Utilities/EntityProperties.cs
index c2e4b8a..5134821 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_Core/Utilities/EntityProperties.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_Core/Utilities/EntityProperties.cs
@@ -1,5 +1,6 @@
 锘縰sing SqlSugar;
 using System;
+using System.Collections;
 using System.Collections.Generic;
 using System.ComponentModel.DataAnnotations;
 using System.ComponentModel.DataAnnotations.Schema;
@@ -106,6 +107,16 @@
             return (reslutMsg == "" ? true : false, reslutMsg, value);
         }
 
+        public static List<(bool, string, object)> ValidationValueForDbType(this PropertyInfo propertyInfo, params object[] values)
+        {
+            List<(bool, string, object)> result = new List<(bool, string, object)>();
+            foreach (object value in values)
+            {
+                result.Add(propertyInfo.ValidationVal(value));
+            }
+            return result;
+        }
+
         private static readonly Dictionary<Type, string> ProperWithDbType = new Dictionary<Type, string>() {
             {  typeof(string),SqlDbTypeName.NVarChar },
             { typeof(DateTime),SqlDbTypeName.DateTime},
@@ -175,12 +186,29 @@
                     }
                     continue;
                 }
-                string str = dic[property.Name.FirstLetterToLower()].ToString();
-                //灏嗘墍鏈夌┖鍊艰缃负null
-                if (dic[property.Name.FirstLetterToLower()] != null && str == string.Empty)
-                    dic[property.Name.FirstLetterToLower()] = null;
+                if(dic[property.Name.FirstLetterToLower()] != null)
+                {
+                    string str = dic[property.Name.FirstLetterToLower()].ToString();
+                    //灏嗘墍鏈夌┖鍊艰缃负null
+                    if (str == string.Empty)
+                        dic[property.Name.FirstLetterToLower()] = null;
+                }
+                
             }
             return string.Empty;
+        }
+
+        public static string ValidateDicInEntity(this Type typeinfo, List<Dictionary<string, object>> dicList, bool removerKey, string[] ignoreFields = null)
+        {
+            PropertyInfo[] propertyInfo = typeinfo.GetProperties();
+            string reslutMsg = string.Empty;
+            foreach (Dictionary<string, object> dic in dicList)
+            {
+                reslutMsg = typeinfo.ValidateDicInEntity(dic, removerKey, propertyInfo, ignoreFields);
+                if (!string.IsNullOrEmpty(reslutMsg))
+                    return reslutMsg;
+            }
+            return reslutMsg;
         }
 
         public static string GetKeyName(this Type typeinfo)
@@ -212,5 +240,72 @@
             }
             return null;
         }
+
+        public static Type GetDetailType(this Type typeinfo)
+        {
+            PropertyInfo[] properties = typeinfo.GetProperties();
+            foreach (PropertyInfo property in properties)
+            {
+                Navigate? navigate = property.GetCustomAttribute<Navigate>();
+                if (navigate is not null)
+                {
+                    if (navigate.GetNavigateType() == NavigateType.OneToOne)
+                        return property.PropertyType;
+                    else
+                        return property.PropertyType.GenericTypeArguments[0];
+                }
+            }
+            return null;
+        }
+
+        public static string GetMainIdByDetail(this Type typeinfo)
+        {
+            PropertyInfo[] properties = typeinfo.GetProperties();
+            foreach (PropertyInfo property in properties)
+            {
+                Navigate? navigate = property.GetCustomAttribute<Navigate>();
+                if (navigate is not null)
+                {
+                    return navigate.GetName();
+                }
+            }
+            return null;
+        }
+
+        public static void SetDetailId<T>(this Type typeinfo, T enetiy, object id, string name)
+        {
+            PropertyInfo property = typeinfo.GetProperty(name);
+            if (property != null)
+            {
+                property.SetValue(enetiy, id);
+            }
+        }
+
+        public static PropertyInfo? GetNavigatePro(this Type typeinfo)
+        {
+            PropertyInfo[] properties = typeinfo.GetProperties();
+            foreach (PropertyInfo property in properties)
+            {
+                Navigate? navigate = property.GetCustomAttribute<Navigate>();
+                if (navigate is not null)
+                {
+                    return property;
+                }
+            }
+            return null;
+        }
+
+        public static object GetPropertyValue<T>(this Type typeinfo, T data, string propertyName)
+        {
+            if (typeinfo != typeof(T))
+                return null;
+
+            PropertyInfo? property = typeinfo.GetProperty(propertyName);
+            if (property != null)
+            {
+                return property.GetValue(data);
+            }
+            return null;
+        }
     }
 }
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_DTO/System/VueDictionaryDTO.cs b/WIDESEAWCS_Server/WIDESEAWCS_DTO/System/VueDictionaryDTO.cs
new file mode 100644
index 0000000..419e3bf
--- /dev/null
+++ b/WIDESEAWCS_Server/WIDESEAWCS_DTO/System/VueDictionaryDTO.cs
@@ -0,0 +1,17 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEAWCS_DTO.System
+{
+    public class VueDictionaryDTO
+    {
+        public string DicNo { get; set; }
+
+        public string Config { get; set; }
+
+        public object Data {  get; set; }
+    }
+}
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_ISystemServices/ISys_DictionaryService.cs b/WIDESEAWCS_Server/WIDESEAWCS_ISystemServices/ISys_DictionaryService.cs
index 8d51b93..5465631 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_ISystemServices/ISys_DictionaryService.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_ISystemServices/ISys_DictionaryService.cs
@@ -4,12 +4,13 @@
 using System.Text;
 using System.Threading.Tasks;
 using WIDESEAWCS_Core.BaseServices;
+using WIDESEAWCS_DTO.System;
 using WIDESEAWCS_Model.Models;
 
 namespace WIDESEAWCS_ISystemServices
 {
     public interface ISys_DictionaryService : IService<Sys_Dictionary>
     {
-        object GetVueDictionary(string[] dicNos);
+        List<VueDictionaryDTO> GetVueDictionary(string[] dicNos);
     }
 }
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/ConveyorLine/CommonConveyorLine.cs b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/ConveyorLine/CommonConveyorLine.cs
index a42b521..d4761ce 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/ConveyorLine/CommonConveyorLine.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/ConveyorLine/CommonConveyorLine.cs
@@ -17,6 +17,7 @@
 
 using System;
 using System.Collections.Generic;
+using System.ComponentModel;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
@@ -28,6 +29,7 @@
 
 namespace WIDESEAWCS_QuartzJob
 {
+    [Description("閫氱敤杈撻�佺嚎")]
     public class CommonConveyorLine : IConveyorLine
     {
         #region Private Member
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/DeviceEnum/DeviceStatus.cs b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/DeviceEnum/DeviceStatus.cs
index 0b07a2b..afa6d57 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/DeviceEnum/DeviceStatus.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/DeviceEnum/DeviceStatus.cs
@@ -17,6 +17,7 @@
 
 using System;
 using System.Collections.Generic;
+using System.ComponentModel;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
@@ -28,11 +29,13 @@
         /// <summary>
         /// 绂佺敤
         /// </summary>
+        [Description("绂佺敤")]
         Disable,
 
         /// <summary>
         /// 鍚敤
         /// </summary>
+        [Description("鍚敤")]
         Enable
     }
 }
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/DevicesStorage.cs b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/DevicesStorage.cs
deleted file mode 100644
index 2f74aa6..0000000
--- a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/DevicesStorage.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-锘縰sing System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using WIDESEAWCS_QuartzJob.DeviceBase;
-
-namespace WIDESEAWCS_QuartzJob
-{
-    public class DevicesStorage
-    {
-        public static List<IDevice> Devices = new List<IDevice>();
-    }
-}
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Models/Dt_DeviceProtocolDetail.cs b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Models/Dt_DeviceProtocolDetail.cs
index bd60d94..4dcdbb5 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Models/Dt_DeviceProtocolDetail.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Models/Dt_DeviceProtocolDetail.cs
@@ -21,6 +21,7 @@
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using WIDESEAWCS_Core.DB.Models;
 
 namespace WIDESEAWCS_QuartzJob.Models
 {
@@ -28,7 +29,7 @@
     /// 璁惧鍗忚鏄庣粏
     /// </summary>
     [SugarTable(nameof(Dt_DeviceProtocolDetail), "璁惧鍗忚鏄庣粏")]
-    public class Dt_DeviceProtocolDetail
+    public class Dt_DeviceProtocolDetail : BaseEntity
     {
         /// <summary>
         /// 涓婚敭
@@ -46,7 +47,7 @@
         /// 璁惧鍗忚鍙傛暟鍚嶇О
         /// </summary>
         [SugarColumn(IsNullable = false, ColumnDescription = "璁惧鍗忚鍙傛暟鍚嶇О")]
-        public string DeviceProParamName {  get; set; }
+        public string DeviceProParamName { get; set; }
 
         /// <summary>
         /// 璁惧鍗忚鏄庣粏绫诲瀷
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/QuartzExtensions/QuartzJobHostedService.cs b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/QuartzExtensions/QuartzJobHostedService.cs
index 887a448..da1ef7a 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/QuartzExtensions/QuartzJobHostedService.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/QuartzExtensions/QuartzJobHostedService.cs
@@ -97,7 +97,7 @@
 
                         x.Device = (IDevice)deviceInstance;
 
-                        DevicesStorage.Devices.Add((IDevice)deviceInstance);
+                        Storage.Devices.Add((IDevice)deviceInstance);
                     }
                 });
                 for (int i = 0; i < dispatches.Count; i++)
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Service/DeviceInfoService.cs b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Service/DeviceInfoService.cs
index 66343d8..f623146 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Service/DeviceInfoService.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Service/DeviceInfoService.cs
@@ -21,6 +21,7 @@
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using WIDESEAWCS_Core;
 using WIDESEAWCS_Core.BaseRepository;
 using WIDESEAWCS_Core.BaseServices;
 
@@ -41,6 +42,11 @@
             _mapper = mapper;
         }
 
+        public override WebResponseContent AddData(SaveModel saveModel)
+        {
+            return base.AddData(saveModel);
+        }
+
         public async Task<List<DeviceInfoDTO>> QueryDeviceProInfos()
         {
             List<Dt_DeviceInfo> deviceInfos = await Db.Queryable<Dt_DeviceInfo>().Where(x => true).Includes(x => x.ProtocolList).ToListAsync();
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/StackerCrane/CommonStackerCrane.cs b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/StackerCrane/CommonStackerCrane.cs
index 7670333..f14f87c 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/StackerCrane/CommonStackerCrane.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/StackerCrane/CommonStackerCrane.cs
@@ -37,6 +37,7 @@
     /// <summary>
     /// 涓�鑸爢鍨涙満瀹炵幇绫伙紝瀹炵幇鍫嗗灈鏈烘帴鍙e眰
     /// </summary>
+    [Description("閫氱敤鍫嗗灈鏈�")]
     public class CommonStackerCrane : IStackerCrane
     {
         #region Private Member
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Storage.cs b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Storage.cs
new file mode 100644
index 0000000..828ad04
--- /dev/null
+++ b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Storage.cs
@@ -0,0 +1,290 @@
+锘縰sing Newtonsoft.Json;
+using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime;
+using Quartz;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEAWCS_Communicator;
+using WIDESEAWCS_Core.Enums;
+using WIDESEAWCS_Core.Helper;
+using WIDESEAWCS_QuartzJob.DeviceBase;
+using WIDESEAWCS_QuartzJob.DeviceEnum;
+
+namespace WIDESEAWCS_QuartzJob
+{
+    public class Storage
+    {
+        public static List<IDevice> Devices = new List<IDevice>();
+    }
+
+    public class QuartzJobCommonMethod
+    {
+        public static string GetVueDictionary(string key)
+        {
+            string result = "";
+            try
+            {
+                switch (key)
+                {
+                    case "deviceType":
+                        {
+                            Type type = typeof(IDevice);
+                            var basePath = AppContext.BaseDirectory;
+                            string path = Path.Combine(basePath, $"WIDESEAWCS_QuartzJob.dll");
+                            Assembly assembly = Assembly.LoadFrom(path);
+                            List<Type> types = assembly.GetTypes().Where(x => type.IsAssignableFrom(x) && !x.IsAbstract && !x.IsInterface).ToList();
+                            List<object> data = new List<object>();
+                            foreach (var deviceType in types)
+                            {
+                                DescriptionAttribute? description = deviceType.GetCustomAttribute<DescriptionAttribute>();
+                                if (description != null)
+                                {
+                                    data.Add(new { key = deviceType.Name, value = description.Description });
+                                }
+                                else
+                                {
+                                    data.Add(new { key = deviceType.Name, value = deviceType.Name });
+                                }
+                            }
+
+                            object obj = new { DicNo = key, Config = "", Data = data };
+                            result = obj.Serialize();
+                            break;
+                        }
+                    case "jobAssembly":
+                        {
+                            object obj = new { DicNo = key, Config = "", Data = new List<object>() { new { key = "WIDESEAWCS_Tasks", value = "WIDESEAWCS_Tasks" } } };
+                            result = obj.Serialize();
+                        }
+                        break;
+                    case "jobClassName":
+                        {
+                            Type type = typeof(IJob);
+                            var basePath = AppContext.BaseDirectory;
+                            string path = Path.Combine(basePath, $"WIDESEAWCS_Tasks");
+                            Assembly assembly = Assembly.LoadFrom(path);
+                            List<Type> types = assembly.GetTypes().Where(x => type.IsAssignableFrom(x) && !x.IsAbstract && !x.IsInterface).ToList();
+                            object obj = new
+                            {
+                                DicNo = key,
+                                Config = "",
+                                Data = types.Select(x => new { key = x.Name, value = x.Name }),
+                            };
+                            result = obj.Serialize();
+                        }
+                        break;
+                    case "deviceStatus":
+                        {
+                            List<object> data = new List<object>();
+                            Type type = typeof(DeviceStatusEnum);
+                            List<int> enums = Enum.GetValues(typeof(DeviceStatusEnum)).Cast<int>().ToList();
+                            int index = 0;
+                            foreach (var item in enums)
+                            {
+                                FieldInfo? fieldInfo = typeof(DeviceStatusEnum).GetField(((DeviceStatusEnum)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++;
+                            }
+
+                            object obj = new { DicNo = key, Config = "", Data = data };
+                            result = obj.Serialize();
+                        }
+                        break;
+                    case "taskType":
+                        {
+                            List<object> data = new List<object>();
+
+                            #region TaskInboundTypeEnum
+                            {
+                                Type type = typeof(TaskInboundTypeEnum);
+                                List<int> enums = Enum.GetValues(typeof(TaskInboundTypeEnum)).Cast<int>().ToList();
+                                int index = 0;
+                                foreach (var item in enums)
+                                {
+                                    FieldInfo? fieldInfo = typeof(TaskInboundTypeEnum).GetField(((TaskInboundTypeEnum)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++;
+                                }
+                            }
+                            #endregion
+
+                            #region TaskOutboundTypeEnum
+                            {
+                                Type type = typeof(TaskOutboundTypeEnum);
+                                List<int> enums = Enum.GetValues(typeof(TaskOutboundTypeEnum)).Cast<int>().ToList();
+                                int index = 0;
+                                foreach (var item in enums)
+                                {
+                                    FieldInfo? fieldInfo = typeof(TaskOutboundTypeEnum).GetField(((TaskOutboundTypeEnum)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++;
+                                }
+                            }
+                            #endregion
+
+                            #region TaskRelocationTypeEnum
+                            {
+                                Type type = typeof(TaskRelocationTypeEnum);
+                                List<int> enums = Enum.GetValues(typeof(TaskRelocationTypeEnum)).Cast<int>().ToList();
+                                int index = 0;
+                                foreach (var item in enums)
+                                {
+                                    FieldInfo? fieldInfo = typeof(TaskRelocationTypeEnum).GetField(((TaskRelocationTypeEnum)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++;
+                                }
+                            }
+                            #endregion
+
+                            #region TaskOtherTypeEnum
+                            {
+                                Type type = typeof(TaskOtherTypeEnum);
+                                List<int> enums = Enum.GetValues(typeof(TaskOtherTypeEnum)).Cast<int>().ToList();
+                                int index = 0;
+                                foreach (var item in enums)
+                                {
+                                    FieldInfo? fieldInfo = typeof(TaskOtherTypeEnum).GetField(((TaskOtherTypeEnum)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++;
+                                }
+                            }
+                            #endregion
+
+                            object obj = new { DicNo = key, Config = "", Data = data };
+                            result = obj.Serialize();
+                        }
+                        break;
+                    case "taskState":
+                        {
+                            List<object> data = new List<object>();
+
+                            #region TaskInStatusEnum
+                            {
+                                Type type = typeof(TaskInStatusEnum);
+                                List<int> enums = Enum.GetValues(typeof(TaskInStatusEnum)).Cast<int>().ToList();
+                                int index = 0;
+                                foreach (var item in enums)
+                                {
+                                    FieldInfo? fieldInfo = typeof(TaskInStatusEnum).GetField(((TaskInStatusEnum)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++;
+                                }
+                            }
+                            #endregion
+
+                            #region TaskOutStatusEnum
+                            {
+                                Type type = typeof(TaskOutStatusEnum);
+                                List<int> enums = Enum.GetValues(typeof(TaskOutStatusEnum)).Cast<int>().ToList();
+                                int index = 0;
+                                foreach (var item in enums)
+                                {
+                                    FieldInfo? fieldInfo = typeof(TaskOutStatusEnum).GetField(((TaskOutStatusEnum)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++;
+                                }
+                            }
+                            #endregion
+
+                            object obj = new { DicNo = key, Config = "", Data = data };
+                            result = obj.Serialize();
+                        }
+                        break;
+                    case "devicePlcType":
+                        {
+                            Type type = typeof(BaseCommunicator);
+                            var basePath = AppContext.BaseDirectory;
+                            string path = Path.Combine(basePath, $"WIDESEAWCS_Communicator.dll");
+                            Assembly assembly = Assembly.LoadFrom(path);
+                            List<Type> types = assembly.GetTypes().Where(x => type.IsAssignableFrom(x) && !x.IsAbstract && !x.IsInterface).ToList();
+                            List<object> data = new List<object>();
+                            foreach (var deviceType in types)
+                            {
+                                DescriptionAttribute? description = deviceType.GetCustomAttribute<DescriptionAttribute>();
+                                if (description != null)
+                                {
+                                    data.Add(new { key = deviceType.Name, value = description.Description });
+                                }
+                                else
+                                {
+                                    data.Add(new { key = deviceType.Name, value = deviceType.Name });
+                                }
+                            }
+
+                            object obj = new { DicNo = key, Config = "", Data = data };
+                            result = JsonConvert.SerializeObject(obj);
+                        }
+                        break;
+                }
+                return result;
+            }
+            catch (Exception ex)
+            {
+                return "";
+            }
+
+        }
+    }
+}
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/QuartzJob/DeviceProtocolController.cs b/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/QuartzJob/DeviceProtocolController.cs
new file mode 100644
index 0000000..41e441f
--- /dev/null
+++ b/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/QuartzJob/DeviceProtocolController.cs
@@ -0,0 +1,17 @@
+锘縰sing Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using WIDESEAWCS_Core.BaseController;
+using WIDESEAWCS_QuartzJob.Models;
+using WIDESEAWCS_QuartzJob.Service;
+
+namespace WIDESEAWCS_Server.Controllers.QuartzJob
+{
+    [Route("api/DeviceProtocol")]
+    [ApiController]
+    public class DeviceProtocolController : ApiBaseController<IDeviceProtocolService, Dt_DeviceProtocol>
+    {
+        public DeviceProtocolController(IDeviceProtocolService service) : base(service)
+        {
+        }
+    }
+}
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/QuartzJob/DeviceProtocolDetailController.cs b/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/QuartzJob/DeviceProtocolDetailController.cs
new file mode 100644
index 0000000..9efd74f
--- /dev/null
+++ b/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/QuartzJob/DeviceProtocolDetailController.cs
@@ -0,0 +1,17 @@
+锘縰sing Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using WIDESEAWCS_Core.BaseController;
+using WIDESEAWCS_QuartzJob.Models;
+using WIDESEAWCS_QuartzJob.Service;
+
+namespace WIDESEAWCS_Server.Controllers.QuartzJob
+{
+    [Route("api/DeviceProtocolDetail")]
+    [ApiController]
+    public class DeviceProtocolDetailController : ApiBaseController<IDeviceProtocolDetailService, Dt_DeviceProtocolDetail>
+    {
+        public DeviceProtocolDetailController(IDeviceProtocolDetailService service) : base(service)
+        {
+        }
+    }
+}
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/QuartzJob/DispatchInfoController.cs b/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/QuartzJob/DispatchInfoController.cs
new file mode 100644
index 0000000..59046ac
--- /dev/null
+++ b/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/QuartzJob/DispatchInfoController.cs
@@ -0,0 +1,17 @@
+锘縰sing Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using WIDESEAWCS_Core.BaseController;
+using WIDESEAWCS_QuartzJob.Models;
+using WIDESEAWCS_QuartzJob.Service;
+
+namespace WIDESEAWCS_Server.Controllers.QuartzJob
+{
+    [Route("api/DispatchInfo")]
+    [ApiController]
+    public class DispatchInfoController : ApiBaseController<IDispatchInfoService, Dt_DispatchInfo>
+    {
+        public DispatchInfoController(IDispatchInfoService service) : base(service)
+        {
+        }
+    }
+}
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/System/Sys_DictionaryController.cs b/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/System/Sys_DictionaryController.cs
index 2108a61..520f0ca 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/System/Sys_DictionaryController.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/System/Sys_DictionaryController.cs
@@ -2,16 +2,28 @@
 using Microsoft.AspNetCore.Authorization;
 using Microsoft.AspNetCore.Http;
 using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.DependencyModel;
+using Newtonsoft.Json;
+using System.Reflection;
 using WIDESEAWCS_Core.BaseController;
 using WIDESEAWCS_Core.Helper;
 using WIDESEAWCS_ISystemServices;
 using WIDESEAWCS_Model.Models;
+using System.IO;
+using WIDESEAWCS_QuartzJob.DeviceBase;
+using WIDESEAWCS_DTO.System;
+using System.ComponentModel;
+using System.Collections.Generic;
+using WIDESEAWCS_Communicator;
+using Quartz;
+using WIDESEAWCS_QuartzJob;
+using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime;
 
 namespace WIDESEAWCS_WCSServer.Controllers.System
 {
     [Route("api/Sys_Dictionary")]
     [ApiController]
-    public class Sys_DictionaryController :  ApiBaseController<ISys_DictionaryService, Sys_Dictionary>
+    public class Sys_DictionaryController : ApiBaseController<ISys_DictionaryService, Sys_Dictionary>
     {
         private readonly IHttpContextAccessor _httpContextAccessor;
         public Sys_DictionaryController(ISys_DictionaryService service, IHttpContextAccessor httpContextAccessor) : base(service)
@@ -22,7 +34,44 @@
         [HttpPost, Route("GetVueDictionary"), AllowAnonymous]
         public IActionResult GetVueDictionary([FromBody] string[] dicNos)
         {
-            return Content(Service.GetVueDictionary(dicNos).Serialize());
+            List<VueDictionaryDTO> vueDictionaryDTOs = Service.GetVueDictionary(dicNos);
+            #region
+            try
+            {
+                List<string> dicList = dicNos.ToList();
+
+                string str = AppSettings.Configuration["dics"];
+                if (!string.IsNullOrEmpty(str))
+                {
+                    string st = vueDictionaryDTOs[0].Data.Serialize();
+
+                    List<string> cusDics = new List<string>();
+
+                    List<string> dics = str.Split(",").ToList();
+
+                    foreach (var item in dics)
+                    {
+                        dicList.Remove(item);
+                        cusDics.Add(item);
+                    }
+
+                    foreach (var item in cusDics)
+                    {
+                        string dic = QuartzJobCommonMethod.GetVueDictionary(item.Trim());
+                        if (!string.IsNullOrEmpty(dic))
+                        {
+                            VueDictionaryDTO vueDictionaryDTO = JsonConvert.DeserializeObject<VueDictionaryDTO>(dic);
+                            vueDictionaryDTOs.Add(vueDictionaryDTO);
+                        }
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+
+            }
+            #endregion
+            return Json(vueDictionaryDTOs);
         }
     }
 }
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_Server/Program.cs b/WIDESEAWCS_Server/WIDESEAWCS_Server/Program.cs
index 2b90606..99726d0 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_Server/Program.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_Server/Program.cs
@@ -42,11 +42,11 @@
 builder.Services.AddAllOptionRegister();//读取配置文件
 builder.Services.AddMemoryCacheSetup();//缓存
 builder.Services.AddSqlsugarSetup();//SqlSugar 启动服务
-builder.Services.AddInitializationHostServiceSetup();//应用初始化服务注入
+//builder.Services.AddInitializationHostServiceSetup();//应用初始化服务注入
 builder.Services.AddDbSetup();//Db 启动服务
 
-builder.Services.AddScoped<QuartzJobCreateDataTabel>();
-builder.Services.AddHostedService<QuartzJobDataTableHostedService>();
+//builder.Services.AddScoped<QuartzJobCreateDataTabel>();
+//builder.Services.AddHostedService<QuartzJobDataTableHostedService>();
 
 //todo 初始化模型验证配置
 //builder.Services.UseMethodsModelParameters().UseMethodsGeneralParameters();
@@ -59,11 +59,11 @@
 
 builder.Services.AddSwaggerSetup();
 
-builder.Services.AddJobSetup();//任务调度 启动服务
+//builder.Services.AddJobSetup();//任务调度 启动服务
 
 builder.Services.AddHttpContextSetup();
 
-builder.Services.AddHostedService<QuartzJobHostedService>();
+//builder.Services.AddHostedService<QuartzJobHostedService>();
 
 //todo
 builder.Services.AddMvc(options =>
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_Server/WIDESEAWCS_Server.csproj b/WIDESEAWCS_Server/WIDESEAWCS_Server/WIDESEAWCS_Server.csproj
index 0c6adfd..dac6b0f 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_Server/WIDESEAWCS_Server.csproj
+++ b/WIDESEAWCS_Server/WIDESEAWCS_Server/WIDESEAWCS_Server.csproj
@@ -25,10 +25,18 @@
 		<EmbeddedResource Include="wwwroot\swg-login.html">
 			<CopyToOutputDirectory>Always</CopyToOutputDirectory>
 		</EmbeddedResource>
-		<EmbeddedResource Include="wwwroot\WIDESEAWCS_DB.DBSeed.Json\Sys_Menu.tsv" />
-		<EmbeddedResource Include="wwwroot\WIDESEAWCS_DB.DBSeed.Json\Sys_Role.tsv" />
-		<EmbeddedResource Include="wwwroot\WIDESEAWCS_DB.DBSeed.Json\Sys_RoleAuth.tsv" />
-		<EmbeddedResource Include="wwwroot\WIDESEAWCS_DB.DBSeed.Json\Sys_User.tsv" />
+		<EmbeddedResource Include="wwwroot\WIDESEAWCS_DB.DBSeed.Json\Sys_Menu.tsv">
+		  <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+		</EmbeddedResource>
+		<EmbeddedResource Include="wwwroot\WIDESEAWCS_DB.DBSeed.Json\Sys_Role.tsv">
+		  <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+		</EmbeddedResource>
+		<EmbeddedResource Include="wwwroot\WIDESEAWCS_DB.DBSeed.Json\Sys_RoleAuth.tsv">
+		  <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+		</EmbeddedResource>
+		<EmbeddedResource Include="wwwroot\WIDESEAWCS_DB.DBSeed.Json\Sys_User.tsv">
+		  <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+		</EmbeddedResource>
 	</ItemGroup>
 
 	<ItemGroup>
@@ -46,6 +54,9 @@
 		<Content Update="nlog.config">
 			<CopyToOutputDirectory>Always</CopyToOutputDirectory>
 		</Content>
+		<Content Update="wwwroot\WIDESEAWCS_DB.DBSeed.Json\Sys_Tenant.tsv">
+		  <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+		</Content>
 	</ItemGroup>
 
 </Project>
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json b/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json
index 11c87ab..020bb67 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json
+++ b/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json
@@ -6,6 +6,7 @@
       "Microsoft.AspNetCore": "Warning"
     }
   },
+  "dics": "deviceType,devicePlcType,jobAssembly,jobClassName,deviceStatus,taskType,taskState",
   "AllowedHosts": "*",
   "ConnectionStringsEncryption": false,
   "MainDB": "DB_WIDESEA", //褰撳墠椤圭洰鐨勪富搴擄紝鎵�瀵瑰簲鐨勮繛鎺ュ瓧绗︿覆鐨凟nabled蹇呴』涓簍rue
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_SystemRepository/Sys_MenuRepository.cs b/WIDESEAWCS_Server/WIDESEAWCS_SystemRepository/Sys_MenuRepository.cs
index e58f5a0..4ecf724 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_SystemRepository/Sys_MenuRepository.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_SystemRepository/Sys_MenuRepository.cs
@@ -1,4 +1,5 @@
-锘縰sing System;
+锘縰sing SqlSugar;
+using System;
 using System.Collections.Concurrent;
 using System.Collections.Generic;
 using System.Linq;
@@ -105,7 +106,7 @@
             {
                 //娌℃湁redis/memory缂撳瓨瑙掕壊鐨勭増鏈彿鎴栦笌褰撳墠鏈嶅姟鍣ㄧ殑瑙掕壊鐗堟湰鍙蜂笉鍚屾椂锛屽埛鏂扮紦瀛�
 
-                List<Permissions> _permissions = QueryTabs<Sys_Menu, Sys_RoleAuth, Permissions>((a, b) => new object[] { a.MenuId, b.MenuId }, (a, b) => new Permissions { MenuId = a.MenuId, ParentId = a.ParentId, TableName = (a.TableName ?? "").ToLower(), MenuAuth = a.Auth, UserAuth = b.AuthValue ?? "", MenuType = a.MenuType ?? 0 }, x => true);
+                List<Permissions> _permissions = QueryTabs<Sys_Menu, Sys_RoleAuth, Permissions>((a, b) => new object[] { JoinType.Inner, a.MenuId == b.MenuId }, (a, b) => new Permissions { MenuId = a.MenuId, ParentId = a.ParentId, TableName = (a.TableName ?? "").ToLower(), MenuAuth = a.Auth, UserAuth = b.AuthValue ?? "", MenuType = a.MenuType ?? 0 }, (a, b) => b.RoleId == roleId, x => true);
 
                 ActionToArray(_permissions);
 
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_DictionaryService.cs b/WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_DictionaryService.cs
index 17a1fc2..cbf757b 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_DictionaryService.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_DictionaryService.cs
@@ -1,10 +1,14 @@
-锘縰sing System;
+锘縰sing Newtonsoft.Json;
+using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
 using WIDESEAWCS_Core.BaseRepository;
 using WIDESEAWCS_Core.BaseServices;
+using WIDESEAWCS_Core.DB;
+using WIDESEAWCS_Core.Helper;
+using WIDESEAWCS_DTO.System;
 using WIDESEAWCS_ISystemRepository;
 using WIDESEAWCS_ISystemServices;
 using WIDESEAWCS_Model.Models;
@@ -19,9 +23,9 @@
             _unitOfWorkManage = unitOfWorkManage;
         }
 
-        public object GetVueDictionary(string[] dicNos)
+        public List<VueDictionaryDTO> GetVueDictionary(string[] dicNos)
         {
-            if (dicNos == null || dicNos.Count() == 0) return new string[] { };
+            if (dicNos == null || dicNos.Count() == 0) return new List<VueDictionaryDTO>();
 
             var dicConfig = BaseDal.GetDictionaries(dicNos, false).Select(s => new
             {
@@ -35,15 +39,15 @@
             {
                 if (string.IsNullOrEmpty(dbSql))
                 {
-                    return data as object;
+                    return data;
                 }
                 return BaseDal.QueryObjectDataBySql(dbSql, null);
             }
-            return dicConfig.Select(item => new
+            return dicConfig.Select(item => new VueDictionaryDTO
             {
-                item.dicNo,
-                item.config,
-                data = GetSourceData(item.dicNo, item.dbSql, item.list)
+                DicNo = item.dicNo,
+                Config = item.config,
+                Data = GetSourceData(item.dicNo, item.dbSql, item.list)
             }).ToList();
         }
     }
diff --git a/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs b/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs
index d75ee2a..a6bd3b9 100644
--- a/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs
+++ b/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs
@@ -141,7 +141,7 @@
             Dt_Router? router = _routerService.QueryRoutes(task.Roadway, task.NextAddress).FirstOrDefault();
             if (router != null)
             {
-                IDevice? device = DevicesStorage.Devices.FirstOrDefault(x => x.DeviceCode == router.ChildPosiDeviceCode);
+                IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == router.ChildPosiDeviceCode);
                 if (device != null)
                 {
                     CommonConveyorLine conveyorLine = (CommonConveyorLine)device;

--
Gitblit v1.9.3