From 3a61cb05bd4339b89127b15c489ae76370905404 Mon Sep 17 00:00:00 2001
From: schangxiang@126.com <schangxiang@126.com>
Date: 周二, 20 5月 2025 13:18:38 +0800
Subject: [PATCH] 优化

---
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.EntityFrameworkCore/Repositories/EfCoreWorkTaskRepository.cs         |  218 ++
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Domain/WorkTask/WorkTask.cs                                          |  264 +++
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Domain/WorkTask/IWorkTaskRepository.cs                               |   88 +
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/WorkTaskAppService.cs                         |  623 +++++++
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.EntityFrameworkCore/Extensions/CMSPluginEfCoreExtensions.WorkTask.cs |  103 +
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.MySQL/Migrations/20250520032108_Update2.cs                           |  427 +++++
 PipeLineLems/pipelinelems_web/src/utils/myformUtils.ts                                                               |   40 
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/MapperProfiles/WorkTaskAutoMapperProfile.cs              |   29 
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkTask/WorkTaskDto.cs                   |  331 ++++
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkTask/WorkTaskCreateOrUpdateDtoBase.cs |  260 +++
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Services/IWorkTaskAppService.cs                |   99 +
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Controller/WorkTaskController.cs                                     |  240 ++
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkTask/GetWorkTaskInput.cs              |  578 +++++++
 CommonDLL/公共前端组件/src/utils/myformUtils.ts                                                                            |  102 +
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkTask/WorkTaskCreateDto.cs             |   22 
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.MySQL/Migrations/20250520032108_Update2.Designer.cs                  |  978 +++++++++++
 PipeLineLems/pipelinelems_web/src/widgets/WorkTask/Controllers/WorkTaskQueryDrawer.tsx                               |   69 
 Weben_CMS专用代码生成器/Code/Templete/Web/Controllers/EntityModeDrawer模板.txt                                                |   12 
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkTask/WorkTaskExportModel.cs           |  277 +++
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkTask/WorkTasksImportModel.cs          |   33 
 PipeLineLems/pipelinelems_web/src/widgets/WorkTask/Controllers/WorkTaskDrawer.tsx                                    |   86 -
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Resources/Templates/WorkTask导出模板.xlsx                                |    0 
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkTask/WorkTaskUpdateDto.cs             |   18 
 23 files changed, 4,748 insertions(+), 149 deletions(-)

diff --git "a/CommonDLL/\345\205\254\345\205\261\345\211\215\347\253\257\347\273\204\344\273\266/src/utils/myformUtils.ts" "b/CommonDLL/\345\205\254\345\205\261\345\211\215\347\253\257\347\273\204\344\273\266/src/utils/myformUtils.ts"
new file mode 100644
index 0000000..4dbd92d
--- /dev/null
+++ "b/CommonDLL/\345\205\254\345\205\261\345\211\215\347\253\257\347\273\204\344\273\266/src/utils/myformUtils.ts"
@@ -0,0 +1,102 @@
+
+//琛ㄥ崟宸ュ叿鏂囦欢
+/**
+ * 閫氱敤楂樼骇鏌ヨ琛ㄥ崟鏁版嵁鏀堕泦鍑芥暟
+ * @param {Array} formItems - 琛ㄥ崟閰嶇疆椤规暟缁�
+ * @param {Object} formData - 琛ㄥ崟鏁版嵁瀵硅薄
+ * @returns {Object} - 鏀堕泦鐨勮〃鍗曟暟鎹�
+ */
+export const collectFormDataForHighQuery = (formItems, formData) => {
+     const data = {}; 
+   
+  // 閬嶅巻琛ㄥ崟閰嶇疆鏀堕泦鏁版嵁 
+  formItems.forEach(item => { 
+    // 鏀堕泦鍩虹瀛楁 
+    data[item.prop] = formData.value[item.prop] || ''; 
+     
+    // 鏀堕泦杩囨护妯″紡瀛楁 
+    if (item.highSelectAttrs && item.highSelectAttrs.prop) { 
+      const filterModeProp = item.highSelectAttrs.prop; 
+      data[filterModeProp] = formData.value[filterModeProp] || ''; 
+    } 
+  }); 
+   
+  return data; 
+  }
+
+ /**
+ * 閲嶇疆楂樼骇鏌ヨ鐨勮繃婊ゆā寮�
+ * @param formItems - 琛ㄥ崟閰嶇疆椤规暟缁�
+ * @param formData - 琛ㄥ崟鏁版嵁瀵硅薄
+ */
+ export const onResetForHighSelect = (formItems, formData) => {   
+    // 閬嶅巻鎵�鏈夎〃鍗曞瓧娈�   
+    formItems.forEach(item => {   
+      // 妫�鏌ュ瓧娈垫槸鍚︽湁楂樼骇鏌ヨ鐨勮繃婊ゆā寮忛厤缃�   
+      if (item.highSelectAttrs && item.highSelectAttrs.prop) {   
+        const filterModeProp = item.highSelectAttrs.prop;   
+        const options = item.highSelectAttrs.options || [];   
+     
+        // 濡傛灉瀛樺湪閫夐」锛屽垯璁剧疆涓虹涓�涓�夐」鐨勫��   
+        if (options.length > 0) {   
+          // 鍋囪閫夐」鏍煎紡涓� { value, label } 鎴栫被浼肩粨鏋�   
+          const firstValue = options[0].value !== undefined ? options[0].value : options[0];   
+          formData.value[filterModeProp] = firstValue;   
+        }   
+      }   
+    });   
+}   
+
+/**
+ * 閲嶇疆楂樼骇鏌ヨ
+ * @param formItems - 琛ㄥ崟閰嶇疆椤规暟缁�
+ * @param formData - 琛ㄥ崟鏁版嵁瀵硅薄
+ */
+export const onResetForHighQuery = (formItems, formData) => {   
+    // 1. 娓呯┖鎵�鏈夊熀纭�瀛楁锛堜笉鍖呭惈杩囨护妯″紡瀛楁锛� 
+    const baseFields = formItems.reduce((acc, item) => { 
+        acc[item.prop] = ''; 
+        return acc; 
+        }, {}); 
+   
+        // 2. 搴旂敤鍩虹瀛楁鍒濆鍊� 
+        formData.value = { ...baseFields }; 
+}   
+
+
+/**
+ * 浠庤〃鍗曟暟鎹腑鎻愬彇鏈夋晥灞炴�э紙鎺掗櫎鏃犳晥瀛楁锛�,鎻愪氦淇濆瓨琛ㄥ崟鏁版嵁鏃剁敤
+ * @param formData 琛ㄥ崟鏁版嵁瀵硅薄
+ * @param excludeFields 闇�瑕佹帓闄ょ殑瀛楁鍒楄〃锛堥粯璁や负 ['id']锛�
+ * @returns 澶勭悊鍚庣殑鏈夋晥鏁版嵁瀵硅薄
+ */
+export const extractFormDataForOnConfirm = (formData) => {
+   //鍔ㄦ�佽幏鍙� formData 鐨勬墍鏈夊睘鎬у�硷紙鎺掗櫎鏃犳晥灞炴�э紝濡� id锛�
+  const data = Object.entries(formData.value).reduce((acc, [key, value]) => {
+    // 杩囨护鎺変笉闇�瑕佹彁浜ょ殑灞炴�э紙濡� id锛屽彲鏍规嵁瀹為檯闇�姹傝皟鏁达級
+    if (key !== 'id') {
+      acc[key] = value
+    }
+    return acc
+  }, {} as Record<string, any>)
+  return data;
+  };
+
+  /**
+ * 浠庡搷搴旀暟鎹腑鎻愬彇鏈夋晥瀛楁骞惰祴鍊肩粰琛ㄥ崟鏁版嵁,鎵撳紑琛ㄥ崟鏁版嵁鏃剁敤
+ * @param res 鍝嶅簲鏁版嵁
+ * @param formData 琛ㄥ崟鏁版嵁寮曠敤
+ * @param options 閰嶇疆閫夐」
+ * @returns 澶勭悊鍚庣殑琛ㄥ崟鏁版嵁
+ */
+export function extractAndAssignFormData(res,formData) {
+     // 鎻愬彇鏈夋晥瀛楁锛堟帓闄や笉闇�瑕佺殑灞炴�э紝濡備复鏃跺瓧娈点�侀潪琛ㄥ崟瀛楁锛�
+     const { id, ...validFormData } = res; // 淇濈暀 id 鍙牴鎹渶姹傝皟鏁�
+    
+     // 鐩存帴璧嬪�硷紙鑷姩杩囨护鏃犳晥灞炴�э級
+     formData.value = {
+       ...validFormData, // 鑷姩缁ф壙鎵�鏈夋湁鏁堝瓧娈�
+       // 濡傞渶棰濆澶勭悊鐗瑰畾瀛楁锛堝鏃ユ湡鏍煎紡鍖栵級锛屽彲鍦ㄦ琛ュ厖
+       // plannedStartTime: formatDate(res.plannedStartTime), 
+     };
+  }
\ No newline at end of file
diff --git a/PipeLineLems/pipelinelems_web/src/utils/myformUtils.ts b/PipeLineLems/pipelinelems_web/src/utils/myformUtils.ts
index 3eb0225..4dbd92d 100644
--- a/PipeLineLems/pipelinelems_web/src/utils/myformUtils.ts
+++ b/PipeLineLems/pipelinelems_web/src/utils/myformUtils.ts
@@ -61,4 +61,42 @@
    
         // 2. 搴旂敤鍩虹瀛楁鍒濆鍊� 
         formData.value = { ...baseFields }; 
-}   
\ No newline at end of file
+}   
+
+
+/**
+ * 浠庤〃鍗曟暟鎹腑鎻愬彇鏈夋晥灞炴�э紙鎺掗櫎鏃犳晥瀛楁锛�,鎻愪氦淇濆瓨琛ㄥ崟鏁版嵁鏃剁敤
+ * @param formData 琛ㄥ崟鏁版嵁瀵硅薄
+ * @param excludeFields 闇�瑕佹帓闄ょ殑瀛楁鍒楄〃锛堥粯璁や负 ['id']锛�
+ * @returns 澶勭悊鍚庣殑鏈夋晥鏁版嵁瀵硅薄
+ */
+export const extractFormDataForOnConfirm = (formData) => {
+   //鍔ㄦ�佽幏鍙� formData 鐨勬墍鏈夊睘鎬у�硷紙鎺掗櫎鏃犳晥灞炴�э紝濡� id锛�
+  const data = Object.entries(formData.value).reduce((acc, [key, value]) => {
+    // 杩囨护鎺変笉闇�瑕佹彁浜ょ殑灞炴�э紙濡� id锛屽彲鏍规嵁瀹為檯闇�姹傝皟鏁达級
+    if (key !== 'id') {
+      acc[key] = value
+    }
+    return acc
+  }, {} as Record<string, any>)
+  return data;
+  };
+
+  /**
+ * 浠庡搷搴旀暟鎹腑鎻愬彇鏈夋晥瀛楁骞惰祴鍊肩粰琛ㄥ崟鏁版嵁,鎵撳紑琛ㄥ崟鏁版嵁鏃剁敤
+ * @param res 鍝嶅簲鏁版嵁
+ * @param formData 琛ㄥ崟鏁版嵁寮曠敤
+ * @param options 閰嶇疆閫夐」
+ * @returns 澶勭悊鍚庣殑琛ㄥ崟鏁版嵁
+ */
+export function extractAndAssignFormData(res,formData) {
+     // 鎻愬彇鏈夋晥瀛楁锛堟帓闄や笉闇�瑕佺殑灞炴�э紝濡備复鏃跺瓧娈点�侀潪琛ㄥ崟瀛楁锛�
+     const { id, ...validFormData } = res; // 淇濈暀 id 鍙牴鎹渶姹傝皟鏁�
+    
+     // 鐩存帴璧嬪�硷紙鑷姩杩囨护鏃犳晥灞炴�э級
+     formData.value = {
+       ...validFormData, // 鑷姩缁ф壙鎵�鏈夋湁鏁堝瓧娈�
+       // 濡傞渶棰濆澶勭悊鐗瑰畾瀛楁锛堝鏃ユ湡鏍煎紡鍖栵級锛屽彲鍦ㄦ琛ュ厖
+       // plannedStartTime: formatDate(res.plannedStartTime), 
+     };
+  }
\ No newline at end of file
diff --git a/PipeLineLems/pipelinelems_web/src/widgets/WorkTask/Controllers/WorkTaskDrawer.tsx b/PipeLineLems/pipelinelems_web/src/widgets/WorkTask/Controllers/WorkTaskDrawer.tsx
index 77fb5f5..23527b4 100644
--- a/PipeLineLems/pipelinelems_web/src/widgets/WorkTask/Controllers/WorkTaskDrawer.tsx
+++ b/PipeLineLems/pipelinelems_web/src/widgets/WorkTask/Controllers/WorkTaskDrawer.tsx
@@ -18,7 +18,8 @@
 import {   
   BOOLEAN_OPTIONS_AddEdit  
 } from '@/utils/commonOptionConstants';  
- 
+// 寮曞叆鍏叡琛ㄥ崟宸ュ叿鏂囦欢   
+import { extractFormDataForOnConfirm,extractAndAssignFormData } from '@/utils/myformUtils';  
 export const useWorkTaskDrawer = (props: any, ctx?: any) => { 
   const workTaskDrawer = injectModel<WorkTaskDrawer>('workTaskDrawer') 
   /** 
@@ -502,46 +503,7 @@
    */ 
   const onConfirm = async () => { 
     await formRef.value?.validate() 
-    const data = { 
-      son_TaskCode: formData.value.son_TaskCode, 
-taskCode: formData.value.taskCode, 
-workPlanStatus: formData.value.workPlanStatus, 
-callMaterialStatus: formData.value.callMaterialStatus, 
-dataIdentifier: formData.value.dataIdentifier, 
-materialMode: formData.value.materialMode, 
-length: formData.value.length, 
-markingContent: formData.value.markingContent, 
-markingPosition: formData.value.markingPosition, 
-cuttingPosition: formData.value.cuttingPosition, 
-quantity: formData.value.quantity, 
-flangeThickness: formData.value.flangeThickness, 
-flangeInnerDiameter: formData.value.flangeInnerDiameter, 
-weldingHeatInput: formData.value.weldingHeatInput, 
-pipeAllowableStress: formData.value.pipeAllowableStress, 
-pipeDiameter: formData.value.pipeDiameter, 
-pipeWallThickness: formData.value.pipeWallThickness, 
-factoryCode: formData.value.factoryCode, 
-productCode: formData.value.productCode, 
-workstationCode: formData.value.workstationCode, 
-equipmentCode: formData.value.equipmentCode, 
-prodLineCode: formData.value.prodLineCode, 
-shipNumber: formData.value.shipNumber, 
-projectNumber: formData.value.projectNumber, 
-processName: formData.value.processName, 
-pipeFittingCode: formData.value.pipeFittingCode, 
-preSerialNumber: formData.value.preSerialNumber, 
-pipeSpecCode: formData.value.pipeSpecCode, 
-pipeSectionName: formData.value.pipeSectionName, 
-outerDiameter: formData.value.outerDiameter, 
-thickness: formData.value.thickness, 
-material: formData.value.material, 
-processRouteNumber: formData.value.processRouteNumber, 
-plannedStartTime: formData.value.plannedStartTime, 
-plannedEndTime: formData.value.plannedEndTime, 
-teamInfo: formData.value.teamInfo, 
-timestamp: formData.value.timestamp, 
-remark: formData.value.remark,  
-    } 
+    const data=extractFormDataForOnConfirm(formData); 
     if (!current.value) { 
       await workTaskDrawer.addWorkTask(data) 
     } else { 
@@ -590,47 +552,7 @@
     if (current.value) { 
       const res = await workTaskDrawer.getWorkTaskDetail(current.value) 
  
-      formData.value = { 
-        son_TaskCode: res.son_TaskCode, 
-taskCode: res.taskCode, 
-workPlanStatus: res.workPlanStatus, 
-callMaterialStatus: res.callMaterialStatus, 
-dataIdentifier: res.dataIdentifier, 
-materialMode: res.materialMode, 
-length: res.length, 
-markingContent: res.markingContent, 
-markingPosition: res.markingPosition, 
-cuttingPosition: res.cuttingPosition, 
-quantity: res.quantity, 
-flangeThickness: res.flangeThickness, 
-flangeInnerDiameter: res.flangeInnerDiameter, 
-weldingHeatInput: res.weldingHeatInput, 
-pipeAllowableStress: res.pipeAllowableStress, 
-pipeDiameter: res.pipeDiameter, 
-pipeWallThickness: res.pipeWallThickness, 
-factoryCode: res.factoryCode, 
-productCode: res.productCode, 
-workstationCode: res.workstationCode, 
-equipmentCode: res.equipmentCode, 
-prodLineCode: res.prodLineCode, 
-shipNumber: res.shipNumber, 
-projectNumber: res.projectNumber, 
-processName: res.processName, 
-pipeFittingCode: res.pipeFittingCode, 
-preSerialNumber: res.preSerialNumber, 
-pipeSpecCode: res.pipeSpecCode, 
-pipeSectionName: res.pipeSectionName, 
-outerDiameter: res.outerDiameter, 
-thickness: res.thickness, 
-material: res.material, 
-processRouteNumber: res.processRouteNumber, 
-plannedStartTime: res.plannedStartTime, 
-plannedEndTime: res.plannedEndTime, 
-teamInfo: res.teamInfo, 
-timestamp: res.timestamp, 
-remark: res.remark,  
-        id: res.id, 
-      } 
+      extractAndAssignFormData(res,formData); 
       disabled.value = true 
       updateCheckData() 
     } else { 
diff --git a/PipeLineLems/pipelinelems_web/src/widgets/WorkTask/Controllers/WorkTaskQueryDrawer.tsx b/PipeLineLems/pipelinelems_web/src/widgets/WorkTask/Controllers/WorkTaskQueryDrawer.tsx
index a745033..beddd1a 100644
--- a/PipeLineLems/pipelinelems_web/src/widgets/WorkTask/Controllers/WorkTaskQueryDrawer.tsx
+++ b/PipeLineLems/pipelinelems_web/src/widgets/WorkTask/Controllers/WorkTaskQueryDrawer.tsx
@@ -20,8 +20,8 @@
   FILTER_MODE_OPTIONS_NUM, 
   FILTER_MODE_OPTIONS_BOOL 
 } from '@/components/DyFormForHighQuery/DyFormForHighQueryOptions'; 
-// 寮曞叆鍏叡琛ㄥ崟宸ュ叿鏂囦欢 
-import { collectFormDataForHighQuery,onResetForHighSelect,onResetForHighQuery } from '@/utils/myformUtils';
+// 寮曞叆鍏叡琛ㄥ崟宸ュ叿鏂囦欢  
+import { collectFormDataForHighQuery,onResetForHighSelect,onResetForHighQuery } from '@/utils/myformUtils'; 
 import {  
   BOOLEAN_OPTIONS 
 } from '@/utils/commonOptionConstants'; 
@@ -748,30 +748,11 @@
     const check = isEqual(initiateData.value, data) 
     return check 
   } 
-//   /** 
-//  * 鑾峰彇琛ㄥ崟鏁版嵁 - 浼樺寲鐗� 
-//  */ 
-// const commonGetFormData = () => { 
-//   const data = {}; 
-   
-//   // 閬嶅巻琛ㄥ崟閰嶇疆鏀堕泦鏁版嵁 
-//   formItems.forEach(item => { 
-//     // 鏀堕泦鍩虹瀛楁 
-//     data[item.prop] = formData.value[item.prop] || ''; 
-     
-//     // 鏀堕泦杩囨护妯″紡瀛楁 
-//     if (item.highSelectAttrs && item.highSelectAttrs.prop) { 
-//       const filterModeProp = item.highSelectAttrs.prop; 
-//       data[filterModeProp] = formData.value[filterModeProp] || ''; 
-//     } 
-//   }); 
-   
-//   return data; 
-// } 
+ 
   const onClose = (done: () => void) => { 
     if (visible.value) { 
       visible.value = false 
-      const data =collectFormDataForHighQuery(formItems,formData); 
+      const data =collectFormDataForHighQuery(formItems,formData);  
       ctx.emit('close', data) 
     } 
   } 
@@ -779,48 +760,20 @@
    * 纭鏌ヨ 
    */ 
   const onConfirmQuery = async () => { 
-    const data =collectFormDataForHighQuery(formItems,formData); 
+    const data =collectFormDataForHighQuery(formItems,formData);  
     ctx.emit('confirmQuery', data) 
   } 
-  // /**  
-  //  * 閲嶇疆鍏叡select鏌ヨ  
-  //  */  
-  // const onResetForHighSelect = () => {   
-  //     // 閬嶅巻鎵�鏈夎〃鍗曞瓧娈�   
-  //     formItems.forEach(item => {   
-  //       // 妫�鏌ュ瓧娈垫槸鍚︽湁楂樼骇鏌ヨ鐨勮繃婊ゆā寮忛厤缃�   
-  //       if (item.highSelectAttrs && item.highSelectAttrs.prop) {   
-  //         const filterModeProp = item.highSelectAttrs.prop;   
-  //         const options = item.highSelectAttrs.options || [];   
-       
-  //         // 濡傛灉瀛樺湪閫夐」锛屽垯璁剧疆涓虹涓�涓�夐」鐨勫��   
-  //         if (options.length > 0) {   
-  //           // 鍋囪閫夐」鏍煎紡涓� { value, label } 鎴栫被浼肩粨鏋�   
-  //           const firstValue = options[0].value !== undefined ? options[0].value : options[0];   
-  //           formData.value[filterModeProp] = firstValue;   
-  //         }   
-  //       }   
-  //     });   
-  // }   
     /** 
     * 閲嶇疆鏌ヨ - 浼樺寲鐗� 
     */ 
     const onReset = async () => { 
-        // // 1. 娓呯┖鎵�鏈夊熀纭�瀛楁锛堜笉鍖呭惈杩囨护妯″紡瀛楁锛� 
-        // const baseFields = formItems.reduce((acc, item) => { 
-        // acc[item.prop] = ''; 
-        // return acc; 
-        // }, {}); 
+        // 1. 娓呯┖鎵�鏈夊熀纭�瀛楁锛堜笉鍖呭惈杩囨护妯″紡瀛楁锛�,搴旂敤鍩虹瀛楁鍒濆鍊�   
+        onResetForHighQuery(formItems,formData); 
    
-        // // 2. 搴旂敤鍩虹瀛楁鍒濆鍊� 
-        // formData.value = { ...baseFields }; 
-
-        onResetForHighQuery(formItems,formData);
+        // 2. 浣跨敤鍘熸湁鏂规硶閲嶇疆杩囨护妯″紡瀛楁 
+        onResetForHighSelect(formItems,formData); 
    
-        // 3. 浣跨敤鍘熸湁鏂规硶閲嶇疆杩囨护妯″紡瀛楁 
-        onResetForHighSelect(formItems,formData); // 淇濈暀鍘熸湁鏂规硶璋冪敤 
-   
-        // 4. 鍚戠埗缁勪欢鍙戦�佽嚜瀹氫箟浜嬩欢 
+        // 3. 鍚戠埗缁勪欢鍙戦�佽嚜瀹氫箟浜嬩欢 
         ctx.emit('restQuery'); 
     } 
  
@@ -855,7 +808,7 @@
  
   } 
   commonQueryEnumForFrom() 
-  onResetForHighSelect(formItems,formData);//閲嶇疆鍏叡select鏌ヨ  
+  onResetForHighSelect(formItems,formData);//閲嶇疆鍏叡select鏌ヨ   
   /** 
    * 寮圭獥鎵撳紑鑾峰彇璇︽儏 
    */ 
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkTask/GetWorkTaskInput.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkTask/GetWorkTaskInput.cs
new file mode 100644
index 0000000..e0248d3
--- /dev/null
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkTask/GetWorkTaskInput.cs
@@ -0,0 +1,578 @@
+using CMS.Plugin.PipeLineLems.Domain.Shared.Enums; 
+using CmsQueryExtensions.Extension; 
+using Volo.Abp.Application.Dtos; 
+ 
+namespace CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.WorkTask; 
+ 
+/// <summary> 
+/// 浣滀笟浠诲姟琛ㄦ煡璇㈠弬鏁� 
+/// </summary> 
+public class GetWorkTaskInput : ExtensiblePagedAndSortedResultRequestDto 
+{ 
+ 
+    #region 鍏抽敭瀛楁煡璇� 
+ 
+    /// <summary> 
+    /// 鍏抽敭瀛楁ā绯婃煡璇紙娉ㄦ剰鏄皬鍐欙紒锛� 
+    /// </summary> 
+    public string searchVal { get; set; } 
+ 
+    /// <summary> 
+    /// 閫氱敤鏌ヨ閰嶇疆 (1:妯$硦鏌ヨ , 2:绮惧噯鏌ヨ)锛堟敞鎰忔槸灏忓啓锛侊級 
+    /// </summary> 
+    public SearchFilterModeEnum searchVal_FilterMode { get; set; } = SearchFilterModeEnum.妯$硦鏌ヨ; 
+ 
+    /// <summary> 
+    /// 瀛愭悳绱㈢粍浠朵紶閫掔殑閫氱敤鏌ヨ閰嶇疆鐨勫睘鎬у悕锛堟敞鎰忔槸灏忓啓锛侊級 
+    /// </summary> 
+    [NoAutoQuery] 
+    public string str_searchFormInputAttrs { get; set; } 
+    /// <summary> 
+    /// 瀛愭悳绱㈢粍浠朵紶閫掔殑閫氱敤鏌ヨ閰嶇疆鐨勫睘鎬у悕锛堟敞鎰忔槸灏忓啓锛侊級 
+    /// </summary> 
+    public List<string> searchFormInputAttrs 
+    { 
+        get 
+        { 
+            if (!string.IsNullOrEmpty(str_searchFormInputAttrs)) 
+            { 
+                return str_searchFormInputAttrs.Split(',').ToList(); 
+            } 
+            return new List<string>(); 
+        } 
+    } 
+ 
+    #endregion 
+ 
+            /// <summary>
+        /// 瀛愪换鍔$紪鐮�
+        /// </summary>
+        public string Son_TaskCode { get; set; }
+
+        /// <summary>
+        /// 瀛愪换鍔$紪鐮�-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum Son_TaskCode_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+        /// <summary>
+        /// 浠诲姟缂栫爜
+        /// </summary>
+        public string TaskCode { get; set; }
+
+        /// <summary>
+        /// 浠诲姟缂栫爜-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum TaskCode_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+        /// <summary>
+        /// 璁″垝鐘舵��
+        /// </summary>
+        public WorkPlanStatusEnum?  WorkPlanStatus { get; set; }
+
+        /// <summary>
+        /// 璁″垝鐘舵��-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum WorkPlanStatus_FilterMode { get; set; }= SearchFilterModeEnum.绮惧噯鏌ヨ;
+
+        /// <summary>
+        /// 鍙枡鐘舵��
+        /// </summary>
+        public CallMaterialStatusEnum?  CallMaterialStatus { get; set; }
+
+        /// <summary>
+        /// 鍙枡鐘舵��-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum CallMaterialStatus_FilterMode { get; set; }= SearchFilterModeEnum.绮惧噯鏌ヨ;
+
+        /// <summary>
+        /// 鍘熸枡鏍囪瘑
+        /// </summary>
+        public string DataIdentifier { get; set; }
+
+        /// <summary>
+        /// 鍘熸枡鏍囪瘑-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum DataIdentifier_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+        /// <summary>
+        /// 鍘熸枡鍨嬪彿
+        /// </summary>
+        public string MaterialMode { get; set; }
+
+        /// <summary>
+        /// 鍘熸枡鍨嬪彿-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum MaterialMode_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+        /// <summary>
+        /// 闀垮害(mm)
+        /// </summary>
+        public decimal?  Length { get; set; }
+
+        /// <summary>
+        /// 闀垮害(mm)-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum Length_FilterMode { get; set; }= SearchFilterModeEnum.绮惧噯鏌ヨ;
+
+        /// <summary>
+        /// 鎵撶爜鍐呭
+        /// </summary>
+        public string MarkingContent { get; set; }
+
+        /// <summary>
+        /// 鎵撶爜鍐呭-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum MarkingContent_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+        /// <summary>
+        /// 鎵撶爜浣嶇疆
+        /// </summary>
+        public decimal?  MarkingPosition { get; set; }
+
+        /// <summary>
+        /// 鎵撶爜浣嶇疆-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum MarkingPosition_FilterMode { get; set; }= SearchFilterModeEnum.绮惧噯鏌ヨ;
+
+        /// <summary>
+        /// 鍒囧壊浣嶇疆
+        /// </summary>
+        public decimal?  CuttingPosition { get; set; }
+
+        /// <summary>
+        /// 鍒囧壊浣嶇疆-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum CuttingPosition_FilterMode { get; set; }= SearchFilterModeEnum.绮惧噯鏌ヨ;
+
+        /// <summary>
+        /// 绠℃鏁伴噺
+        /// </summary>
+        public int?  Quantity { get; set; }
+
+        /// <summary>
+        /// 绠℃鏁伴噺-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum Quantity_FilterMode { get; set; }= SearchFilterModeEnum.绮惧噯鏌ヨ;
+
+        /// <summary>
+        /// 娉曞叞鍘氬害(mm)
+        /// </summary>
+        public decimal?  FlangeThickness { get; set; }
+
+        /// <summary>
+        /// 娉曞叞鍘氬害(mm)-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum FlangeThickness_FilterMode { get; set; }= SearchFilterModeEnum.绮惧噯鏌ヨ;
+
+        /// <summary>
+        /// 娉曞叞鐩村緞(mm)
+        /// </summary>
+        public decimal?  FlangeInnerDiameter { get; set; }
+
+        /// <summary>
+        /// 娉曞叞鐩村緞(mm)-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum FlangeInnerDiameter_FilterMode { get; set; }= SearchFilterModeEnum.绮惧噯鏌ヨ;
+
+        /// <summary>
+        /// 娉曞叞鍏О鍘嬪姏
+        /// </summary>
+        public string WeldingHeatInput { get; set; }
+
+        /// <summary>
+        /// 娉曞叞鍏О鍘嬪姏-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum WeldingHeatInput_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+        /// <summary>
+        /// 娉曞叞鍐茬爜鍐呭
+        /// </summary>
+        public string PipeAllowableStress { get; set; }
+
+        /// <summary>
+        /// 娉曞叞鍐茬爜鍐呭-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum PipeAllowableStress_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+        /// <summary>
+        /// 濂楃闀垮害(mm)
+        /// </summary>
+        public decimal?  PipeDiameter { get; set; }
+
+        /// <summary>
+        /// 濂楃闀垮害(mm)-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum PipeDiameter_FilterMode { get; set; }= SearchFilterModeEnum.绮惧噯鏌ヨ;
+
+        /// <summary>
+        /// 濂楃鐩村緞(mm)
+        /// </summary>
+        public decimal?  PipeWallThickness { get; set; }
+
+        /// <summary>
+        /// 濂楃鐩村緞(mm)-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum PipeWallThickness_FilterMode { get; set; }= SearchFilterModeEnum.绮惧噯鏌ヨ;
+
+        /// <summary>
+        /// 宸ュ巶浠g爜
+        /// </summary>
+        public string FactoryCode { get; set; }
+
+        /// <summary>
+        /// 宸ュ巶浠g爜-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum FactoryCode_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+        /// <summary>
+        /// 浜у搧浠g爜
+        /// </summary>
+        public string ProductCode { get; set; }
+
+        /// <summary>
+        /// 浜у搧浠g爜-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum ProductCode_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+        /// <summary>
+        /// 宸ヤ綅浠g爜
+        /// </summary>
+        public string WorkstationCode { get; set; }
+
+        /// <summary>
+        /// 宸ヤ綅浠g爜-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum WorkstationCode_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+        /// <summary>
+        /// 璁惧浠g爜
+        /// </summary>
+        public string EquipmentCode { get; set; }
+
+        /// <summary>
+        /// 璁惧浠g爜-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum EquipmentCode_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+        /// <summary>
+        /// 浜х嚎缂栫爜
+        /// </summary>
+        public string ProdLineCode { get; set; }
+
+        /// <summary>
+        /// 浜х嚎缂栫爜-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum ProdLineCode_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+        /// <summary>
+        /// 鑸瑰彿
+        /// </summary>
+        public string ShipNumber { get; set; }
+
+        /// <summary>
+        /// 鑸瑰彿-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum ShipNumber_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+        /// <summary>
+        /// 椤圭洰鍙�
+        /// </summary>
+        public string ProjectNumber { get; set; }
+
+        /// <summary>
+        /// 椤圭洰鍙�-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum ProjectNumber_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+        /// <summary>
+        /// 宸ュ簭鍚嶇О
+        /// </summary>
+        public string ProcessName { get; set; }
+
+        /// <summary>
+        /// 宸ュ簭鍚嶇О-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum ProcessName_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+        /// <summary>
+        /// 绠′欢缂栫爜
+        /// </summary>
+        public string PipeFittingCode { get; set; }
+
+        /// <summary>
+        /// 绠′欢缂栫爜-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum PipeFittingCode_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+        /// <summary>
+        /// 椤哄簭鍙�
+        /// </summary>
+        public string PreSerialNumber { get; set; }
+
+        /// <summary>
+        /// 椤哄簭鍙�-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum PreSerialNumber_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+        /// <summary>
+        /// 绠℃缂栫爜
+        /// </summary>
+        public string PipeSpecCode { get; set; }
+
+        /// <summary>
+        /// 绠℃缂栫爜-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum PipeSpecCode_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+        /// <summary>
+        /// 绠℃鍚嶇О
+        /// </summary>
+        public string PipeSectionName { get; set; }
+
+        /// <summary>
+        /// 绠℃鍚嶇О-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum PipeSectionName_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+        /// <summary>
+        /// 澶栧緞(mm)
+        /// </summary>
+        public decimal?  OuterDiameter { get; set; }
+
+        /// <summary>
+        /// 澶栧緞(mm)-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum OuterDiameter_FilterMode { get; set; }= SearchFilterModeEnum.绮惧噯鏌ヨ;
+
+        /// <summary>
+        /// 澹佸帤(mm)
+        /// </summary>
+        public decimal?  Thickness { get; set; }
+
+        /// <summary>
+        /// 澹佸帤(mm)-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum Thickness_FilterMode { get; set; }= SearchFilterModeEnum.绮惧噯鏌ヨ;
+
+        /// <summary>
+        /// 鏉愯川
+        /// </summary>
+        public string Material { get; set; }
+
+        /// <summary>
+        /// 鏉愯川-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum Material_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+        /// <summary>
+        /// 宸ヨ壓娴佸悜缂栧彿
+        /// </summary>
+        public string ProcessRouteNumber { get; set; }
+
+        /// <summary>
+        /// 宸ヨ壓娴佸悜缂栧彿-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum ProcessRouteNumber_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+        /// <summary>
+        /// 璁″垝寮�濮嬫椂闂�
+        /// </summary>
+        //琛ㄧず鏄� 楂樼骇鏌ヨ鑼冨洿鏌ヨ鐗规��
+        [HighSearchRangeAttribute]
+        public string PlannedStartTime { get; set; }
+
+
+        /// <summary>
+        /// 璁″垝瀹屾垚鏃堕棿
+        /// </summary>
+        //琛ㄧず鏄� 楂樼骇鏌ヨ鑼冨洿鏌ヨ鐗规��
+        [HighSearchRangeAttribute]
+        public string PlannedEndTime { get; set; }
+
+
+        /// <summary>
+        /// 鐝粍淇℃伅
+        /// </summary>
+        public string TeamInfo { get; set; }
+
+        /// <summary>
+        /// 鐝粍淇℃伅-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum TeamInfo_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+        /// <summary>
+        /// 鏃堕棿鎴�
+        /// </summary>
+        public string Timestamp { get; set; }
+
+        /// <summary>
+        /// 鏃堕棿鎴�-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum Timestamp_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+        /// <summary>
+        /// 鍒涘缓鏃堕棿
+        /// </summary>
+        //琛ㄧず鏄� 楂樼骇鏌ヨ鑼冨洿鏌ヨ鐗规��
+        [HighSearchRangeAttribute]
+        public string CreationTime { get; set; }
+
+
+        /// <summary>
+        /// 鍒涘缓浜篒D
+        /// </summary>
+        public string CreatorId { get; set; }
+
+        /// <summary>
+        /// 鍒涘缓浜篒D-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum CreatorId_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+        /// <summary>
+        /// 淇敼鏃堕棿
+        /// </summary>
+        //琛ㄧず鏄� 楂樼骇鏌ヨ鑼冨洿鏌ヨ鐗规��
+        [HighSearchRangeAttribute]
+        public string LastModificationTime { get; set; }
+
+
+        /// <summary>
+        /// 淇敼浜篒D
+        /// </summary>
+        public string LastModifierId { get; set; }
+
+        /// <summary>
+        /// 淇敼浜篒D-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum LastModifierId_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+        /// <summary>
+        /// 鏄惁鍒犻櫎
+        /// </summary>
+        public bool?  IsDeleted { get; set; }
+
+        /// <summary>
+        /// 鏄惁鍒犻櫎-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum IsDeleted_FilterMode { get; set; }= SearchFilterModeEnum.绮惧噯鏌ヨ;
+
+        /// <summary>
+        /// 鍒犻櫎浜篒D
+        /// </summary>
+        public string DeleterId { get; set; }
+
+        /// <summary>
+        /// 鍒犻櫎浜篒D-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum DeleterId_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+        /// <summary>
+        /// 鍒犻櫎鏃堕棿
+        /// </summary>
+        //琛ㄧず鏄� 楂樼骇鏌ヨ鑼冨洿鏌ヨ鐗规��
+        [HighSearchRangeAttribute]
+        public string DeletionTime { get; set; }
+
+
+        /// <summary>
+        /// 鍒涘缓浜�
+        /// </summary>
+        public string CreatorName { get; set; }
+
+        /// <summary>
+        /// 鍒涘缓浜�-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum CreatorName_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+        /// <summary>
+        /// 淇敼浜�
+        /// </summary>
+        public string LastModifierName { get; set; }
+
+        /// <summary>
+        /// 淇敼浜�-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum LastModifierName_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+        /// <summary>
+        /// 鎿嶄綔澶囨敞
+        /// </summary>
+        public string OperationRemark { get; set; }
+
+        /// <summary>
+        /// 鎿嶄綔澶囨敞-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum OperationRemark_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+        /// <summary>
+        /// 鍒犻櫎澶囨敞
+        /// </summary>
+        public string DeleteRemark { get; set; }
+
+        /// <summary>
+        /// 鍒犻櫎澶囨敞-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum DeleteRemark_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+        /// <summary>
+        /// 鎺掑簭
+        /// </summary>
+        public int?  Sort { get; set; }
+
+        /// <summary>
+        /// 鎺掑簭-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum Sort_FilterMode { get; set; }= SearchFilterModeEnum.绮惧噯鏌ヨ;
+
+        /// <summary>
+        /// 澶囨敞
+        /// </summary>
+        public string Remark { get; set; }
+
+        /// <summary>
+        /// 澶囨敞-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum Remark_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+        /// <summary>
+        /// 鏄惁绂佺敤
+        /// </summary>
+        public bool?  IsDisabled { get; set; }
+
+        /// <summary>
+        /// 鏄惁绂佺敤-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum IsDisabled_FilterMode { get; set; }= SearchFilterModeEnum.绮惧噯鏌ヨ;
+
+        /// <summary>
+        /// 鎵╁睍瀛楁1
+        /// </summary>
+        public string ExtraField1 { get; set; }
+
+        /// <summary>
+        /// 鎵╁睍瀛楁1-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum ExtraField1_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+        /// <summary>
+        /// 鎵╁睍瀛楁2
+        /// </summary>
+        public string ExtraField2 { get; set; }
+
+        /// <summary>
+        /// 鎵╁睍瀛楁2-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum ExtraField2_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+        /// <summary>
+        /// 鎵╁睍瀛楁3
+        /// </summary>
+        public string ExtraField3 { get; set; }
+
+        /// <summary>
+        /// 鎵╁睍瀛楁3-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum ExtraField3_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+ 
+} 
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkTask/WorkTaskCreateDto.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkTask/WorkTaskCreateDto.cs
new file mode 100644
index 0000000..cead979
--- /dev/null
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkTask/WorkTaskCreateDto.cs
@@ -0,0 +1,22 @@
+namespace CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.WorkTask; 
+ 
+/// <summary> 
+/// 浣滀笟浠诲姟琛ㄥ垱寤哄弬鏁板璞� 
+/// </summary> 
+public class WorkTaskCreateDto : WorkTaskCreateOrUpdateDtoBase 
+{ 
+    /// <summary> 
+    /// 鎺掑簭 
+    /// </summary> 
+    public virtual int? Sort { get; set; } 
+ 
+    /// <summary> 
+    /// 鏄惁绂佺敤 
+    /// </summary> 
+    public bool? IsDisabled { get; set; } = false; 
+ 
+    /// <summary> 
+    /// 鍒涘缓浜� 
+    /// </summary> 
+    public string CreatorName { get; set; } 
+} 
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkTask/WorkTaskCreateOrUpdateDtoBase.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkTask/WorkTaskCreateOrUpdateDtoBase.cs
new file mode 100644
index 0000000..37dfe52
--- /dev/null
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkTask/WorkTaskCreateOrUpdateDtoBase.cs
@@ -0,0 +1,260 @@
+using CMS.Plugin.PipeLineLems.Domain.Shared.Enums; 
+using System; 
+using Volo.Abp.Application.Dtos; 
+ 
+namespace CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.WorkTask; 
+ 
+/// <summary> 
+/// 浣滀笟浠诲姟琛ㄥ垱寤烘垨鏇存柊鍩虹被 
+/// </summary> 
+public abstract class WorkTaskCreateOrUpdateDtoBase : ExtensibleEntityDto 
+{ 
+            /// <summary>
+        /// 瀛愪换鍔$紪鐮�
+        /// </summary>
+        public string Son_TaskCode { get; set; }
+
+        /// <summary>
+        /// 浠诲姟缂栫爜
+        /// </summary>
+        public string TaskCode { get; set; }
+
+        /// <summary>
+        /// 璁″垝鐘舵��
+        /// </summary>
+        public WorkPlanStatusEnum WorkPlanStatus { get; set; }
+
+        /// <summary>
+        /// 鍙枡鐘舵��
+        /// </summary>
+        public CallMaterialStatusEnum CallMaterialStatus { get; set; }
+
+        /// <summary>
+        /// 鍘熸枡鏍囪瘑
+        /// </summary>
+        public string? DataIdentifier { get; set; }
+
+        /// <summary>
+        /// 鍘熸枡鍨嬪彿
+        /// </summary>
+        public string? MaterialMode { get; set; }
+
+        /// <summary>
+        /// 闀垮害(mm)
+        /// </summary>
+        public decimal Length { get; set; }
+
+        /// <summary>
+        /// 鎵撶爜鍐呭
+        /// </summary>
+        public string? MarkingContent { get; set; }
+
+        /// <summary>
+        /// 鎵撶爜浣嶇疆
+        /// </summary>
+        public decimal MarkingPosition { get; set; }
+
+        /// <summary>
+        /// 鍒囧壊浣嶇疆
+        /// </summary>
+        public decimal CuttingPosition { get; set; }
+
+        /// <summary>
+        /// 绠℃鏁伴噺
+        /// </summary>
+        public int Quantity { get; set; }
+
+        /// <summary>
+        /// 娉曞叞鍘氬害(mm)
+        /// </summary>
+        public decimal FlangeThickness { get; set; }
+
+        /// <summary>
+        /// 娉曞叞鐩村緞(mm)
+        /// </summary>
+        public decimal FlangeInnerDiameter { get; set; }
+
+        /// <summary>
+        /// 娉曞叞鍏О鍘嬪姏
+        /// </summary>
+        public string? WeldingHeatInput { get; set; }
+
+        /// <summary>
+        /// 娉曞叞鍐茬爜鍐呭
+        /// </summary>
+        public string? PipeAllowableStress { get; set; }
+
+        /// <summary>
+        /// 濂楃闀垮害(mm)
+        /// </summary>
+        public decimal PipeDiameter { get; set; }
+
+        /// <summary>
+        /// 濂楃鐩村緞(mm)
+        /// </summary>
+        public decimal PipeWallThickness { get; set; }
+
+        /// <summary>
+        /// 宸ュ巶浠g爜
+        /// </summary>
+        public string? FactoryCode { get; set; }
+
+        /// <summary>
+        /// 浜у搧浠g爜
+        /// </summary>
+        public string? ProductCode { get; set; }
+
+        /// <summary>
+        /// 宸ヤ綅浠g爜
+        /// </summary>
+        public string? WorkstationCode { get; set; }
+
+        /// <summary>
+        /// 璁惧浠g爜
+        /// </summary>
+        public string? EquipmentCode { get; set; }
+
+        /// <summary>
+        /// 浜х嚎缂栫爜
+        /// </summary>
+        public string? ProdLineCode { get; set; }
+
+        /// <summary>
+        /// 鑸瑰彿
+        /// </summary>
+        public string? ShipNumber { get; set; }
+
+        /// <summary>
+        /// 椤圭洰鍙�
+        /// </summary>
+        public string? ProjectNumber { get; set; }
+
+        /// <summary>
+        /// 宸ュ簭鍚嶇О
+        /// </summary>
+        public string? ProcessName { get; set; }
+
+        /// <summary>
+        /// 绠′欢缂栫爜
+        /// </summary>
+        public string? PipeFittingCode { get; set; }
+
+        /// <summary>
+        /// 椤哄簭鍙�
+        /// </summary>
+        public string? PreSerialNumber { get; set; }
+
+        /// <summary>
+        /// 绠℃缂栫爜
+        /// </summary>
+        public string? PipeSpecCode { get; set; }
+
+        /// <summary>
+        /// 绠℃鍚嶇О
+        /// </summary>
+        public string? PipeSectionName { get; set; }
+
+        /// <summary>
+        /// 澶栧緞(mm)
+        /// </summary>
+        public decimal OuterDiameter { get; set; }
+
+        /// <summary>
+        /// 澹佸帤(mm)
+        /// </summary>
+        public decimal Thickness { get; set; }
+
+        /// <summary>
+        /// 鏉愯川
+        /// </summary>
+        public string? Material { get; set; }
+
+        /// <summary>
+        /// 宸ヨ壓娴佸悜缂栧彿
+        /// </summary>
+        public string? ProcessRouteNumber { get; set; }
+
+        /// <summary>
+        /// 璁″垝寮�濮嬫椂闂�
+        /// </summary>
+        public DateTime? PlannedStartTime { get; set; }
+
+        /// <summary>
+        /// 璁″垝瀹屾垚鏃堕棿
+        /// </summary>
+        public DateTime? PlannedEndTime { get; set; }
+
+        /// <summary>
+        /// 鐝粍淇℃伅
+        /// </summary>
+        public string? TeamInfo { get; set; }
+
+        /// <summary>
+        /// 鏃堕棿鎴�
+        /// </summary>
+        public string? Timestamp { get; set; }
+
+        /// <summary>
+        /// 鍒涘缓浜篒D
+        /// </summary>
+        public string? CreatorId { get; set; }
+
+        /// <summary>
+        /// 淇敼浜篒D
+        /// </summary>
+        public string? LastModifierId { get; set; }
+
+        /// <summary>
+        /// 鍒犻櫎鏃堕棿
+        /// </summary>
+        public DateTime? DeletionTime { get; set; }
+
+        /// <summary>
+        /// 鎿嶄綔澶囨敞
+        /// </summary>
+        public string? OperationRemark { get; set; }
+
+        /// <summary>
+        /// 鍒犻櫎澶囨敞
+        /// </summary>
+        public string? DeleteRemark { get; set; }
+
+        /// <summary>
+        /// 鎺掑簭
+        /// </summary>
+        public int Sort { get; set; }
+
+        /// <summary>
+        /// 澶囨敞
+        /// </summary>
+        public string? Remark { get; set; }
+
+        /// <summary>
+        /// 鏄惁绂佺敤
+        /// </summary>
+        public bool? IsDisabled { get; set; }
+
+        /// <summary>
+        /// 鎵╁睍瀛楁1
+        /// </summary>
+        public string? ExtraField1 { get; set; }
+
+        /// <summary>
+        /// 鎵╁睍瀛楁2
+        /// </summary>
+        public string? ExtraField2 { get; set; }
+
+        /// <summary>
+        /// 鎵╁睍瀛楁3
+        /// </summary>
+        public string? ExtraField3 { get; set; }
+
+ 
+ 
+    /// <summary> 
+    /// Initializes a new instance of the <see cref="WorkTaskCreateOrUpdateDtoBase"/> class. 
+    /// </summary> 
+    public WorkTaskCreateOrUpdateDtoBase() : base(false) 
+    { 
+    } 
+} 
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkTask/WorkTaskDto.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkTask/WorkTaskDto.cs
new file mode 100644
index 0000000..19ffc2a
--- /dev/null
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkTask/WorkTaskDto.cs
@@ -0,0 +1,331 @@
+using CMS.Plugin.PipeLineLems.Domain.Shared.Enums; 
+using CmsQueryExtensions; 
+using Volo.Abp.Application.Dtos; 
+using Volo.Abp.Data; 
+using Volo.Abp.Domain.Entities; 
+ 
+ 
+namespace CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.WorkTask; 
+ 
+/// <summary> 
+/// 浣滀笟浠诲姟琛ㄦ暟鎹弬鏁板璞� 
+/// </summary> 
+public  class WorkTaskDto:  ExtensibleEntityDto<Guid>, IHasConcurrencyStamp 
+{ 
+            /// <summary>
+        /// 瀛愪换鍔$紪鐮�
+        /// </summary>
+        public string Son_TaskCode { get; set; }
+
+        /// <summary>
+        /// 浠诲姟缂栫爜
+        /// </summary>
+        public string TaskCode { get; set; }
+
+        /// <summary>
+        /// 璁″垝鐘舵��
+        /// </summary>
+        public WorkPlanStatusEnum WorkPlanStatus { get; set; }
+
+        /// <summary>
+        /// 璁″垝鐘舵��
+        /// </summary>
+        public string WorkPlanStatusDesc
+        { 
+            get 
+            { 
+                return GetEnumDescriptionUtil.GetEnumDescription(WorkPlanStatus); 
+            } 
+        } 
+        /// <summary>
+        /// 鍙枡鐘舵��
+        /// </summary>
+        public CallMaterialStatusEnum CallMaterialStatus { get; set; }
+
+        /// <summary>
+        /// 鍙枡鐘舵��
+        /// </summary>
+        public string CallMaterialStatusDesc
+        { 
+            get 
+            { 
+                return GetEnumDescriptionUtil.GetEnumDescription(CallMaterialStatus); 
+            } 
+        } 
+        /// <summary>
+        /// 鍘熸枡鏍囪瘑
+        /// </summary>
+        public string? DataIdentifier { get; set; }
+
+        /// <summary>
+        /// 鍘熸枡鍨嬪彿
+        /// </summary>
+        public string? MaterialMode { get; set; }
+
+        /// <summary>
+        /// 闀垮害(mm)
+        /// </summary>
+        public decimal Length { get; set; }
+
+        /// <summary>
+        /// 鎵撶爜鍐呭
+        /// </summary>
+        public string? MarkingContent { get; set; }
+
+        /// <summary>
+        /// 鎵撶爜浣嶇疆
+        /// </summary>
+        public decimal MarkingPosition { get; set; }
+
+        /// <summary>
+        /// 鍒囧壊浣嶇疆
+        /// </summary>
+        public decimal CuttingPosition { get; set; }
+
+        /// <summary>
+        /// 绠℃鏁伴噺
+        /// </summary>
+        public int Quantity { get; set; }
+
+        /// <summary>
+        /// 娉曞叞鍘氬害(mm)
+        /// </summary>
+        public decimal FlangeThickness { get; set; }
+
+        /// <summary>
+        /// 娉曞叞鐩村緞(mm)
+        /// </summary>
+        public decimal FlangeInnerDiameter { get; set; }
+
+        /// <summary>
+        /// 娉曞叞鍏О鍘嬪姏
+        /// </summary>
+        public string? WeldingHeatInput { get; set; }
+
+        /// <summary>
+        /// 娉曞叞鍐茬爜鍐呭
+        /// </summary>
+        public string? PipeAllowableStress { get; set; }
+
+        /// <summary>
+        /// 濂楃闀垮害(mm)
+        /// </summary>
+        public decimal PipeDiameter { get; set; }
+
+        /// <summary>
+        /// 濂楃鐩村緞(mm)
+        /// </summary>
+        public decimal PipeWallThickness { get; set; }
+
+        /// <summary>
+        /// 宸ュ巶浠g爜
+        /// </summary>
+        public string? FactoryCode { get; set; }
+
+        /// <summary>
+        /// 浜у搧浠g爜
+        /// </summary>
+        public string? ProductCode { get; set; }
+
+        /// <summary>
+        /// 宸ヤ綅浠g爜
+        /// </summary>
+        public string? WorkstationCode { get; set; }
+
+        /// <summary>
+        /// 璁惧浠g爜
+        /// </summary>
+        public string? EquipmentCode { get; set; }
+
+        /// <summary>
+        /// 浜х嚎缂栫爜
+        /// </summary>
+        public string? ProdLineCode { get; set; }
+
+        /// <summary>
+        /// 鑸瑰彿
+        /// </summary>
+        public string? ShipNumber { get; set; }
+
+        /// <summary>
+        /// 椤圭洰鍙�
+        /// </summary>
+        public string? ProjectNumber { get; set; }
+
+        /// <summary>
+        /// 宸ュ簭鍚嶇О
+        /// </summary>
+        public string? ProcessName { get; set; }
+
+        /// <summary>
+        /// 绠′欢缂栫爜
+        /// </summary>
+        public string? PipeFittingCode { get; set; }
+
+        /// <summary>
+        /// 椤哄簭鍙�
+        /// </summary>
+        public string? PreSerialNumber { get; set; }
+
+        /// <summary>
+        /// 绠℃缂栫爜
+        /// </summary>
+        public string? PipeSpecCode { get; set; }
+
+        /// <summary>
+        /// 绠℃鍚嶇О
+        /// </summary>
+        public string? PipeSectionName { get; set; }
+
+        /// <summary>
+        /// 澶栧緞(mm)
+        /// </summary>
+        public decimal OuterDiameter { get; set; }
+
+        /// <summary>
+        /// 澹佸帤(mm)
+        /// </summary>
+        public decimal Thickness { get; set; }
+
+        /// <summary>
+        /// 鏉愯川
+        /// </summary>
+        public string? Material { get; set; }
+
+        /// <summary>
+        /// 宸ヨ壓娴佸悜缂栧彿
+        /// </summary>
+        public string? ProcessRouteNumber { get; set; }
+
+        /// <summary>
+        /// 璁″垝寮�濮嬫椂闂�
+        /// </summary>
+        public DateTime? PlannedStartTime { get; set; }
+
+        /// <summary>
+        /// 璁″垝瀹屾垚鏃堕棿
+        /// </summary>
+        public DateTime? PlannedEndTime { get; set; }
+
+        /// <summary>
+        /// 鐝粍淇℃伅
+        /// </summary>
+        public string? TeamInfo { get; set; }
+
+        /// <summary>
+        /// 鏃堕棿鎴�
+        /// </summary>
+        public string? Timestamp { get; set; }
+
+        /// <summary>
+        /// 鎵╁睍灞炴��
+        /// </summary>
+        public ExtraPropertyDictionary? ExtraProperties { get; set; }
+
+        /// <summary>
+        /// 骞跺彂鎴�
+        /// </summary>
+        public string? ConcurrencyStamp { get; set; }
+
+        /// <summary>
+        /// 鍒涘缓鏃堕棿
+        /// </summary>
+        public DateTime CreationTime { get; set; }
+
+        /// <summary>
+        /// 鍒涘缓浜篒D
+        /// </summary>
+        public string? CreatorId { get; set; }
+
+        /// <summary>
+        /// 淇敼鏃堕棿
+        /// </summary>
+        public DateTime? LastModificationTime { get; set; }
+
+        /// <summary>
+        /// 淇敼浜篒D
+        /// </summary>
+        public string? LastModifierId { get; set; }
+
+        /// <summary>
+        /// 鏄惁鍒犻櫎
+        /// </summary>
+        public bool IsDeleted { get; set; }
+
+        /// <summary>
+        /// 鍒犻櫎浜篒D
+        /// </summary>
+        public string? DeleterId { get; set; }
+
+        /// <summary>
+        /// 鍒犻櫎鏃堕棿
+        /// </summary>
+        public DateTime? DeletionTime { get; set; }
+
+        /// <summary>
+        /// 鍒涘缓浜�
+        /// </summary>
+        public string? CreatorName { get; set; }
+
+        /// <summary>
+        /// 淇敼浜�
+        /// </summary>
+        public string? LastModifierName { get; set; }
+
+        /// <summary>
+        /// 鎿嶄綔澶囨敞
+        /// </summary>
+        public string? OperationRemark { get; set; }
+
+        /// <summary>
+        /// 鍒犻櫎澶囨敞
+        /// </summary>
+        public string? DeleteRemark { get; set; }
+
+        /// <summary>
+        /// 鎺掑簭
+        /// </summary>
+        public int Sort { get; set; }
+
+        /// <summary>
+        /// 澶囨敞
+        /// </summary>
+        public string? Remark { get; set; }
+
+        /// <summary>
+        /// 鏄惁绂佺敤
+        /// </summary>
+        public bool? IsDisabled { get; set; }
+
+        /// <summary>
+        /// 鎵╁睍瀛楁1
+        /// </summary>
+        public string? ExtraField1 { get; set; }
+
+        /// <summary>
+        /// 鎵╁睍瀛楁2
+        /// </summary>
+        public string? ExtraField2 { get; set; }
+
+        /// <summary>
+        /// 鎵╁睍瀛楁3
+        /// </summary>
+        public string? ExtraField3 { get; set; }
+
+ 
+ 
+    /// <summary> 
+    /// Gets the export data. 
+    /// </summary> 
+    /// <returns></returns> 
+    public Dictionary<string, object> GetExportData() 
+    { 
+        var exportData = new Dictionary<string, object>(); 
+        foreach (var property in this.GetType().GetProperties()) 
+        { 
+            exportData.Add(property.Name, property.GetValue(this)); 
+        } 
+ 
+        return exportData; 
+    } 
+} 
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkTask/WorkTaskExportModel.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkTask/WorkTaskExportModel.cs
new file mode 100644
index 0000000..6a6785a
--- /dev/null
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkTask/WorkTaskExportModel.cs
@@ -0,0 +1,277 @@
+using MiniExcelLibs.Attributes; 
+using System.ComponentModel.DataAnnotations; 
+using System; 
+using System.ComponentModel; 
+using CMS.Plugin.PipeLineLems.Domain.Shared.Enums; 
+namespace CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.WorkTask; 
+ 
+/// <summary> 
+/// 浣滀笟浠诲姟琛ㄥ鍑烘ā鍨� 
+/// </summary> 
+public  class WorkTaskExportModel 
+{ 
+            /// <summary>
+        /// 瀛愪换鍔$紪鐮�
+        /// </summary>
+        [ExcelColumn(Name = "瀛愪换鍔$紪鐮�", Width = 25)]
+        public string Son_TaskCode { get; set; }
+
+        /// <summary>
+        /// 浠诲姟缂栫爜
+        /// </summary>
+        [ExcelColumn(Name = "浠诲姟缂栫爜", Width = 25)]
+        public string TaskCode { get; set; }
+
+        /// <summary>
+        /// 璁″垝鐘舵��
+        /// </summary>
+        [ExcelColumn(Name = "璁″垝鐘舵��", Width = 25)]
+        public WorkPlanStatusEnum WorkPlanStatus { get; set; }
+
+        /// <summary>
+        /// 鍙枡鐘舵��
+        /// </summary>
+        [ExcelColumn(Name = "鍙枡鐘舵��", Width = 25)]
+        public CallMaterialStatusEnum CallMaterialStatus { get; set; }
+
+        /// <summary>
+        /// 鍘熸枡鏍囪瘑
+        /// </summary>
+        [ExcelColumn(Name = "鍘熸枡鏍囪瘑", Width = 25)]
+        public string DataIdentifier { get; set; }
+
+        /// <summary>
+        /// 鍘熸枡鍨嬪彿
+        /// </summary>
+        [ExcelColumn(Name = "鍘熸枡鍨嬪彿", Width = 25)]
+        public string MaterialMode { get; set; }
+
+        /// <summary>
+        /// 闀垮害(mm)
+        /// </summary>
+        [ExcelColumn(Name = "闀垮害(mm)", Width = 25)]
+        public decimal Length { get; set; }
+
+        /// <summary>
+        /// 鎵撶爜鍐呭
+        /// </summary>
+        [ExcelColumn(Name = "鎵撶爜鍐呭", Width = 25)]
+        public string MarkingContent { get; set; }
+
+        /// <summary>
+        /// 鎵撶爜浣嶇疆
+        /// </summary>
+        [ExcelColumn(Name = "鎵撶爜浣嶇疆", Width = 25)]
+        public decimal MarkingPosition { get; set; }
+
+        /// <summary>
+        /// 鍒囧壊浣嶇疆
+        /// </summary>
+        [ExcelColumn(Name = "鍒囧壊浣嶇疆", Width = 25)]
+        public decimal CuttingPosition { get; set; }
+
+        /// <summary>
+        /// 绠℃鏁伴噺
+        /// </summary>
+        [ExcelColumn(Name = "绠℃鏁伴噺", Width = 25)]
+        public int Quantity { get; set; }
+
+        /// <summary>
+        /// 娉曞叞鍘氬害(mm)
+        /// </summary>
+        [ExcelColumn(Name = "娉曞叞鍘氬害(mm)", Width = 25)]
+        public decimal FlangeThickness { get; set; }
+
+        /// <summary>
+        /// 娉曞叞鐩村緞(mm)
+        /// </summary>
+        [ExcelColumn(Name = "娉曞叞鐩村緞(mm)", Width = 25)]
+        public decimal FlangeInnerDiameter { get; set; }
+
+        /// <summary>
+        /// 娉曞叞鍏О鍘嬪姏
+        /// </summary>
+        [ExcelColumn(Name = "娉曞叞鍏О鍘嬪姏", Width = 25)]
+        public string WeldingHeatInput { get; set; }
+
+        /// <summary>
+        /// 娉曞叞鍐茬爜鍐呭
+        /// </summary>
+        [ExcelColumn(Name = "娉曞叞鍐茬爜鍐呭", Width = 25)]
+        public string PipeAllowableStress { get; set; }
+
+        /// <summary>
+        /// 濂楃闀垮害(mm)
+        /// </summary>
+        [ExcelColumn(Name = "濂楃闀垮害(mm)", Width = 25)]
+        public decimal PipeDiameter { get; set; }
+
+        /// <summary>
+        /// 濂楃鐩村緞(mm)
+        /// </summary>
+        [ExcelColumn(Name = "濂楃鐩村緞(mm)", Width = 25)]
+        public decimal PipeWallThickness { get; set; }
+
+        /// <summary>
+        /// 宸ュ巶浠g爜
+        /// </summary>
+        [ExcelColumn(Name = "宸ュ巶浠g爜", Width = 25)]
+        public string FactoryCode { get; set; }
+
+        /// <summary>
+        /// 浜у搧浠g爜
+        /// </summary>
+        [ExcelColumn(Name = "浜у搧浠g爜", Width = 25)]
+        public string ProductCode { get; set; }
+
+        /// <summary>
+        /// 宸ヤ綅浠g爜
+        /// </summary>
+        [ExcelColumn(Name = "宸ヤ綅浠g爜", Width = 25)]
+        public string WorkstationCode { get; set; }
+
+        /// <summary>
+        /// 璁惧浠g爜
+        /// </summary>
+        [ExcelColumn(Name = "璁惧浠g爜", Width = 25)]
+        public string EquipmentCode { get; set; }
+
+        /// <summary>
+        /// 浜х嚎缂栫爜
+        /// </summary>
+        [ExcelColumn(Name = "浜х嚎缂栫爜", Width = 25)]
+        public string ProdLineCode { get; set; }
+
+        /// <summary>
+        /// 鑸瑰彿
+        /// </summary>
+        [ExcelColumn(Name = "鑸瑰彿", Width = 25)]
+        public string ShipNumber { get; set; }
+
+        /// <summary>
+        /// 椤圭洰鍙�
+        /// </summary>
+        [ExcelColumn(Name = "椤圭洰鍙�", Width = 25)]
+        public string ProjectNumber { get; set; }
+
+        /// <summary>
+        /// 宸ュ簭鍚嶇О
+        /// </summary>
+        [ExcelColumn(Name = "宸ュ簭鍚嶇О", Width = 25)]
+        public string ProcessName { get; set; }
+
+        /// <summary>
+        /// 绠′欢缂栫爜
+        /// </summary>
+        [ExcelColumn(Name = "绠′欢缂栫爜", Width = 25)]
+        public string PipeFittingCode { get; set; }
+
+        /// <summary>
+        /// 椤哄簭鍙�
+        /// </summary>
+        [ExcelColumn(Name = "椤哄簭鍙�", Width = 25)]
+        public string PreSerialNumber { get; set; }
+
+        /// <summary>
+        /// 绠℃缂栫爜
+        /// </summary>
+        [ExcelColumn(Name = "绠℃缂栫爜", Width = 25)]
+        public string PipeSpecCode { get; set; }
+
+        /// <summary>
+        /// 绠℃鍚嶇О
+        /// </summary>
+        [ExcelColumn(Name = "绠℃鍚嶇О", Width = 25)]
+        public string PipeSectionName { get; set; }
+
+        /// <summary>
+        /// 澶栧緞(mm)
+        /// </summary>
+        [ExcelColumn(Name = "澶栧緞(mm)", Width = 25)]
+        public decimal OuterDiameter { get; set; }
+
+        /// <summary>
+        /// 澹佸帤(mm)
+        /// </summary>
+        [ExcelColumn(Name = "澹佸帤(mm)", Width = 25)]
+        public decimal Thickness { get; set; }
+
+        /// <summary>
+        /// 鏉愯川
+        /// </summary>
+        [ExcelColumn(Name = "鏉愯川", Width = 25)]
+        public string Material { get; set; }
+
+        /// <summary>
+        /// 宸ヨ壓娴佸悜缂栧彿
+        /// </summary>
+        [ExcelColumn(Name = "宸ヨ壓娴佸悜缂栧彿", Width = 25)]
+        public string ProcessRouteNumber { get; set; }
+
+        /// <summary>
+        /// 璁″垝寮�濮嬫椂闂�
+        /// </summary>
+        [ExcelColumn(Name = "璁″垝寮�濮嬫椂闂�", Width = 25)]
+        public DateTime PlannedStartTime { get; set; }
+
+        /// <summary>
+        /// 璁″垝瀹屾垚鏃堕棿
+        /// </summary>
+        [ExcelColumn(Name = "璁″垝瀹屾垚鏃堕棿", Width = 25)]
+        public DateTime PlannedEndTime { get; set; }
+
+        /// <summary>
+        /// 鐝粍淇℃伅
+        /// </summary>
+        [ExcelColumn(Name = "鐝粍淇℃伅", Width = 25)]
+        public string TeamInfo { get; set; }
+
+        /// <summary>
+        /// 鏃堕棿鎴�
+        /// </summary>
+        [ExcelColumn(Name = "鏃堕棿鎴�", Width = 25)]
+        public string Timestamp { get; set; }
+
+        /// <summary>
+        /// 鍒涘缓鏃堕棿
+        /// </summary>
+        [ExcelColumn(Name = "鍒涘缓鏃堕棿", Width = 25)]
+        public DateTime CreationTime { get; set; }
+
+        /// <summary>
+        /// 淇敼鏃堕棿
+        /// </summary>
+        [ExcelColumn(Name = "淇敼鏃堕棿", Width = 25)]
+        public DateTime LastModificationTime { get; set; }
+
+        /// <summary>
+        /// 鍒涘缓浜�
+        /// </summary>
+        [ExcelColumn(Name = "鍒涘缓浜�", Width = 25)]
+        public string CreatorName { get; set; }
+
+        /// <summary>
+        /// 淇敼浜�
+        /// </summary>
+        [ExcelColumn(Name = "淇敼浜�", Width = 25)]
+        public string LastModifierName { get; set; }
+
+        /// <summary>
+        /// 澶囨敞
+        /// </summary>
+        [ExcelColumn(Name = "澶囨敞", Width = 25)]
+        public string Remark { get; set; }
+
+ 
+ 
+    public Dictionary<string, object> GetExportData() 
+        { 
+            var exportData = new Dictionary<string, object>(); 
+            foreach (var property in this.GetType().GetProperties()) 
+            { 
+                exportData.Add(property.Name, property.GetValue(this)); 
+            } 
+ 
+            return exportData; 
+        } 
+} 
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkTask/WorkTaskUpdateDto.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkTask/WorkTaskUpdateDto.cs
new file mode 100644
index 0000000..d606f25
--- /dev/null
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkTask/WorkTaskUpdateDto.cs
@@ -0,0 +1,18 @@
+using Volo.Abp.Domain.Entities; 
+namespace CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.WorkTask; 
+ 
+/// <summary> 
+/// 浣滀笟浠诲姟琛ㄦ洿鏂板弬鏁板璞� 
+/// </summary> 
+public class WorkTaskUpdateDto : WorkTaskCreateOrUpdateDtoBase, IHasConcurrencyStamp 
+{ 
+   /// <summary> 
+    /// 骞跺彂鎴� 
+    /// </summary> 
+    public string ConcurrencyStamp { get; set; } 
+ 
+    /// <summary> 
+    /// 淇敼浜� 
+    /// </summary> 
+    public string LastModifierName { get; set; } 
+} 
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkTask/WorkTasksImportModel.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkTask/WorkTasksImportModel.cs
new file mode 100644
index 0000000..6a688af
--- /dev/null
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkTask/WorkTasksImportModel.cs
@@ -0,0 +1,33 @@
+ 
+namespace CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.WorkTask 
+{ 
+    /// <summary> 
+    /// 浣滀笟浠诲姟琛ㄥ鍏ユā鍨� 
+    /// </summary> 
+    public class WorkTasksImportModel 
+    { 
+        private List<WorkTaskImportModel> _WorkTasks = new(); 
+ 
+        public List<WorkTaskImportModel> WorkTasks 
+        { 
+            get => _WorkTasks; 
+            set 
+            { 
+                _WorkTasks = value; 
+                var rowIndex = 2; 
+                _WorkTasks?.ForEach(x => x.RowIndex = rowIndex++); 
+            } 
+        } 
+ 
+        /// <summary> 
+        /// 浣滀笟浠诲姟琛ㄥ鍏ユā鍨� 
+        /// </summary> 
+        public class WorkTaskImportModel : WorkTaskExportModel 
+        { 
+            /// <summary> 
+            /// 琛屽彿 
+            /// </summary> 
+            public int RowIndex { get; set; } 
+        } 
+    } 
+} 
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Services/IWorkTaskAppService.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Services/IWorkTaskAppService.cs
new file mode 100644
index 0000000..cd9ea3d
--- /dev/null
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Services/IWorkTaskAppService.cs
@@ -0,0 +1,99 @@
+using CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.WorkTask; 
+using Volo.Abp.Application.Services; 
+using CmsQueryExtensions.Entitys; 
+using System.Linq.Expressions; 
+using CMS.Plugin.PipeLineLems.Domain.WorkTask; 
+ 
+namespace CMS.Plugin.PipeLineLems.Application.Contracts.Services; 
+ 
+/// <summary> 
+/// 浣滀笟浠诲姟琛ㄥ簲鐢ㄦ湇鍔℃帴鍙� 
+/// </summary> 
+public interface IWorkTaskAppService : ICrudAppService<WorkTaskDto, Guid, GetWorkTaskInput, WorkTaskCreateDto, WorkTaskUpdateDto> 
+{ 
+    /// <summary> 
+    /// 鍏嬮殕浣滀笟浠诲姟琛� 
+    /// </summary> 
+    /// <param name="ids"></param> 
+    /// <returns></returns> 
+    Task<List<WorkTaskDto>> CloneAsync(IEnumerable<Guid> ids, MyCurrentUser myCurrentUser); 
+ 
+    /// <summary> 
+    /// 鍒犻櫎浣滀笟浠诲姟琛� 
+    /// </summary> 
+    /// <param name="ids"></param> 
+    /// <returns></returns> 
+    Task DeleteManyAsync(IEnumerable<Guid> ids, MyCurrentUser myCurrentUser); 
+ 
+    /// <summary> 
+    /// 鐗╃悊鍒犻櫎浣滀笟浠诲姟琛� 
+    /// </summary> 
+    /// <param name="id">涓婚敭ID</param> 
+    /// <param name="cancellationToken"></param> 
+    /// <returns></returns> 
+    Task DeletePermanentlyAsync(Guid id, MyCurrentUser myCurrentUser, CancellationToken cancellationToken = default); 
+ 
+ 
+    /// <summary> 
+    /// 鎵归噺鐗╃悊鍒犻櫎浣滀笟浠诲姟琛紙鐩存帴鍒犻櫎锛屼笉杞垹闄わ級 
+    /// </summary> 
+    /// <param name="ids">瑕佸垹闄ょ殑涓婚敭ID鍒楄〃</param> 
+    /// <param name="cancellationToken"></param> 
+    /// <returns></returns> 
+    Task BatchDeletePermanentlyAsync(IEnumerable<Guid> ids, MyCurrentUser myCurrentUser, CancellationToken cancellationToken = default); 
+ 
+    /// <summary> 
+    /// 璋冩暣鎺掑簭浣滀笟浠诲姟琛� 
+    /// </summary> 
+    /// <param name="id"></param> 
+    /// <param name="sort"></param> 
+    /// <returns></returns> 
+    Task AdjustSortAsync(Guid id, int sort); 
+ 
+    /// <summary> 
+    /// 瀵煎叆浣滀笟浠诲姟琛� 
+    /// </summary> 
+    /// <param name="input"></param> 
+    /// <returns></returns> 
+    Task ImportAsync(WorkTasksImportModel input, MyCurrentUser myCurrentUser); 
+ 
+    /// <summary> 
+    /// 瀵煎嚭浣滀笟浠诲姟琛� 
+    /// </summary> 
+    /// <param name="input"></param> 
+    /// <returns></returns> 
+    Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetWorkTaskInput input); 
+ 
+    /// <summary> 
+    /// 鏍规嵁鏉′欢鑾峰彇浣滀笟浠诲姟琛ㄥ垪琛� 
+    /// </summary> 
+    /// <param name="whereConditions"></param> 
+    /// <param name="cancellationToken"></param> 
+    /// <returns></returns> 
+    Task<List<WorkTask>> GetListByFilterAsync(Expression<Func<WorkTask, bool>> whereConditions, CancellationToken cancellationToken = default); 
+ 
+ 
+    /// <summary> 
+    ///  鏍规嵁鏉′欢鑾峰彇鍗曚釜浣滀笟浠诲姟琛� 
+    /// </summary> 
+    /// <param name="whereConditions"></param> 
+    /// <param name="isMultipleThrowException">鏄惁鏌ヨ鍑哄鏉″氨鎶ラ敊</param> 
+    /// <param name="cancellationToken"></param> 
+    /// <returns></returns> 
+    /// <exception cref="UserFriendlyException"></exception> 
+    Task<WorkTask> GetSingleByFilterAsync(Expression<Func<WorkTask, bool>> whereConditions, bool is鈥婱ultipleThrowException = false, CancellationToken cancellationToken = default); 
+ 
+    /// <summary>  
+    /// 鏍规嵁鏉′欢鑾峰彇浣滀笟浠诲姟琛ㄥ垪琛� 
+    /// </summary>  
+    /// <param name="input"></param>  
+    /// <returns></returns>  
+    Task<List<WorkTaskDto>> FindListByFilterAsync(GetWorkTaskInput input, CancellationToken cancellationToken = default); 
+     
+    /// <summary>  
+    /// 鏍规嵁鏉′欢鑾峰彇鍗曚釜浣滀笟浠诲姟琛� 
+    /// </summary>  
+    /// <param name="input"></param>  
+    /// <returns></returns>  
+    Task<WorkTaskDto> FindSingleByFilterAsync(GetWorkTaskInput input, CancellationToken cancellationToken = default); 
+} 
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/WorkTaskAppService.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/WorkTaskAppService.cs
new file mode 100644
index 0000000..934ce7c
--- /dev/null
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/WorkTaskAppService.cs
@@ -0,0 +1,623 @@
+using CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.WorkTask;
+using CMS.Plugin.PipeLineLems.Application.Contracts.Services;
+using CMS.Plugin.PipeLineLems.Domain.Shared;
+using CmsQueryExtensions;
+using CMS.Plugin.PipeLineLems.Domain.WorkTask;
+using CmsQueryExtensions.Extension;
+using System.Linq.Expressions;
+using Volo.Abp;
+using Volo.Abp.Application.Dtos;
+using Volo.Abp.Data;
+using Volo.Abp.ObjectExtending;
+using Volo.Abp.ObjectMapping;
+using CmsQueryExtensions.Entitys;
+
+namespace CMS.Plugin.PipeLineLems.Application.Implements;
+
+/// <summary> 
+/// 浣滀笟浠诲姟琛ㄥ簲鐢ㄦ湇鍔� 
+/// </summary> 
+public class WorkTaskAppService : CMSPluginAppService, IWorkTaskAppService
+{
+    private readonly IWorkTaskRepository _workTaskRepository;
+
+    /// <summary> 
+    /// Initializes a new instance of the <see cref="WorkTaskAppService"/> class. 
+    /// </summary> 
+    /// <param name="WorkTaskRepository">The task job repository.</param> 
+    public WorkTaskAppService(IWorkTaskRepository workTaskRepository)
+    {
+        _workTaskRepository = workTaskRepository;
+    }
+
+    /// <summary> 
+    /// 鑾峰彇鎸囧畾浣滀笟浠诲姟琛� 
+    /// </summary> 
+    /// <param name="id"></param> 
+    /// <returns></returns> 
+    public virtual async Task<WorkTaskDto> GetAsync(Guid id)
+    {
+        return ObjectMapper.Map<WorkTask, WorkTaskDto>(await _workTaskRepository.GetAsync(id));
+    }
+
+    /// <summary> 
+    /// 鍒嗛〉鑾峰彇浣滀笟浠诲姟琛� 
+    /// </summary> 
+    /// <param name="input"></param> 
+    /// <returns></returns> 
+    public virtual async Task<PagedResultDto<WorkTaskDto>> GetListAsync(GetWorkTaskInput input)
+    {
+        Check.NotNull(input, nameof(input));
+
+        if (input.Sorting.IsNullOrWhiteSpace())
+        {
+            input.Sorting = nameof(WorkTask.Sort);
+        }
+
+        #region 鍔ㄦ�佹瀯閫犳煡璇㈡潯浠�  
+
+        //鍔ㄦ�佹瀯閫犳煡璇㈡潯浠�  
+        var whereConditions = DynamicGetQueryParams(input);
+
+        #endregion
+
+        var count = await _workTaskRepository.GetCountAsync(whereConditions);
+        var list = await _workTaskRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount);
+
+        return new PagedResultDto<WorkTaskDto>(count, ObjectMapper.Map<List<WorkTask>, List<WorkTaskDto>>(list));
+    }
+
+    /// <summary>  
+    /// 鍔ㄦ�佹瀯閫犳煡璇㈡潯浠�  
+    /// </summary>  
+    /// <param name="input">杈撳叆鍙傛暟</param>  
+    /// <returns></returns>  
+    private FunReturnResultModel<Expression<Func<WorkTask, bool>>> DynamicGetQueryParams(GetWorkTaskInput input)
+    {
+        //鍔ㄦ�佹瀯閫犳煡璇㈡潯浠�  
+        var whereConditions = WhereConditionsExtensions.GetWhereConditions<WorkTask, GetWorkTaskInput>(input);
+        if (!whereConditions.IsSuccess)
+        {
+            throw new Exception("鍔ㄦ�佹瀯閫犳煡璇㈡潯浠跺け璐�:" + whereConditions.ErrMsg);
+        }
+
+        //涔熷彲鍐嶆鑷畾涔夋瀯寤烘煡璇㈡潯浠�  
+        Expression<Func<WorkTask, bool>> extendExpression = a => a.IsDeleted == false;
+        // 浣跨敤 System.Linq.PredicateBuilder 鐨� And 
+        var pres = (System.Linq.Expressions.Expression<Func<WorkTask, bool>>)(whereConditions.data);
+        whereConditions.data = System.Linq.PredicateBuilder.And(pres, extendExpression);
+
+        return whereConditions;
+    }
+
+    /// <summary> 
+    /// 鏂板缓浣滀笟浠诲姟琛� 
+    /// </summary> 
+    /// <param name="input"></param> 
+    /// <returns></returns> 
+    /// <exception cref="UserFriendlyException"></exception> 
+    public virtual async Task<WorkTaskDto> CreateAsync(WorkTaskCreateDto input)
+    {
+        await CheckCreateOrUpdateDtoAsync(input);
+
+        var exist = await _workTaskRepository.NameExistAsync(input.Son_TaskCode);
+        if (exist)
+        {
+            throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.Son_TaskCode]);
+        }
+
+        var maxSort = await _workTaskRepository.GetMaxSortAsync();
+        var sort = input.Sort ?? maxSort;
+
+        var insertObj = ObjectMapper.Map<WorkTaskCreateDto, WorkTask>(input);
+        insertObj.Sort = sort;
+        input.MapExtraPropertiesTo(insertObj, MappingPropertyDefinitionChecks.None);
+
+        insertObj.CreatorName = input.CreatorName;//鍒涘缓浜� 
+        await _workTaskRepository.InsertAsync(insertObj);
+
+        //if (input.Sort.HasValue && insertObj.Sort != maxSort) 
+        //{ 
+        //    await AdjustSortAsync(insertObj.Id, insertObj.Sort); 
+        //} 
+
+        return ObjectMapper.Map<WorkTask, WorkTaskDto>(insertObj);
+    }
+
+    /// <summary> 
+    /// 鏇存柊浣滀笟浠诲姟琛� 
+    /// </summary> 
+    /// <param name="id"></param> 
+    /// <param name="input"></param> 
+    /// <returns></returns> 
+    /// <exception cref="UserFriendlyException"></exception> 
+    public virtual async Task<WorkTaskDto> UpdateAsync(Guid id, WorkTaskUpdateDto input)
+    {
+        await CheckCreateOrUpdateDtoAsync(input);
+
+        var updateObj = await _workTaskRepository.GetAsync(id);
+        var exist = await _workTaskRepository.NameExistAsync(input.Son_TaskCode, updateObj.Id);
+        if (exist)
+        {
+            throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.Son_TaskCode]);
+        }
+
+        updateObj.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp);
+        input.MapExtraPropertiesTo(updateObj, MappingPropertyDefinitionChecks.None);
+
+        updateObj.Son_TaskCode = input.Son_TaskCode;
+        updateObj.TaskCode = input.TaskCode;
+        updateObj.WorkPlanStatus = input.WorkPlanStatus;
+        updateObj.CallMaterialStatus = input.CallMaterialStatus;
+        updateObj.DataIdentifier = input.DataIdentifier;
+        updateObj.MaterialMode = input.MaterialMode;
+        updateObj.Length = input.Length;
+        updateObj.MarkingContent = input.MarkingContent;
+        updateObj.MarkingPosition = input.MarkingPosition;
+        updateObj.CuttingPosition = input.CuttingPosition;
+        updateObj.Quantity = input.Quantity;
+        updateObj.FlangeThickness = input.FlangeThickness;
+        updateObj.FlangeInnerDiameter = input.FlangeInnerDiameter;
+        updateObj.WeldingHeatInput = input.WeldingHeatInput;
+        updateObj.PipeAllowableStress = input.PipeAllowableStress;
+        updateObj.PipeDiameter = input.PipeDiameter;
+        updateObj.PipeWallThickness = input.PipeWallThickness;
+        updateObj.FactoryCode = input.FactoryCode;
+        updateObj.ProductCode = input.ProductCode;
+        updateObj.WorkstationCode = input.WorkstationCode;
+        updateObj.EquipmentCode = input.EquipmentCode;
+        updateObj.ProdLineCode = input.ProdLineCode;
+        updateObj.ShipNumber = input.ShipNumber;
+        updateObj.ProjectNumber = input.ProjectNumber;
+        updateObj.ProcessName = input.ProcessName;
+        updateObj.PipeFittingCode = input.PipeFittingCode;
+        updateObj.PreSerialNumber = input.PreSerialNumber;
+        updateObj.PipeSpecCode = input.PipeSpecCode;
+        updateObj.PipeSectionName = input.PipeSectionName;
+        updateObj.OuterDiameter = input.OuterDiameter;
+        updateObj.Thickness = input.Thickness;
+        updateObj.Material = input.Material;
+        updateObj.ProcessRouteNumber = input.ProcessRouteNumber;
+        updateObj.PlannedStartTime = input.PlannedStartTime;
+        updateObj.PlannedEndTime = input.PlannedEndTime;
+        updateObj.TeamInfo = input.TeamInfo;
+        updateObj.Timestamp = input.Timestamp;
+        updateObj.Remark = input.Remark;
+
+
+        updateObj.LastModifierName = input.LastModifierName;//淇敼浜� 
+
+        await _workTaskRepository.UpdateAsync(updateObj);
+
+        return ObjectMapper.Map<WorkTask, WorkTaskDto>(updateObj);
+    }
+
+    /// <summary> 
+    /// 鍏嬮殕浣滀笟浠诲姟琛� 
+    /// </summary> 
+    /// <param name="ids"></param> 
+    /// <returns></returns> 
+    public async Task<List<WorkTaskDto>> CloneAsync(IEnumerable<Guid> ids, MyCurrentUser myCurrentUser)
+    {
+        //var workTasks = new List<WorkTask>(); 
+        //if (ids != null) 
+        //{ 
+        //    var sort = await _workTaskRepository.GetMaxSortAsync(); 
+        //    foreach (var id in ids) 
+        //    { 
+        //        var WorkTask = await _workTaskRepository.FindAsync(id); 
+        //        if (WorkTask != null) 
+        //        { 
+        //            var name = WorkTask.Name + WorkTaskConsts.CloneTag; 
+        //            var notExist = false; 
+        //            while (!notExist) 
+        //            { 
+        //                var exist = await _workTaskRepository.NameExistAsync(name); 
+        //                if (exist || workTasks.Any(x => x.Name == name)) 
+        //                { 
+        //                    name += WorkTaskConsts.CloneTag; 
+        //                    continue; 
+        //                } 
+
+        //                notExist = true; 
+        //            } 
+
+        //            //WorkTask = await _workTaskRepository.InsertAsync(WorkTask.Clone(GuidGenerator.Create(), name, sort++)); 
+        //            workTasks.Add(WorkTask); 
+        //        } 
+        //    } 
+        //} 
+
+        //return ObjectMapper.Map<List<WorkTask>, List<WorkTaskDto>>(workTasks); 
+        return new List<WorkTaskDto>();
+    }
+
+    /// <summary> 
+    /// 鍒犻櫎鍗曚釜浣滀笟浠诲姟琛� 
+    /// </summary> 
+    /// <param name="id"></param> 
+    /// <returns></returns> 
+    public virtual Task DeleteAsync(Guid id)
+    {
+        return _workTaskRepository.DeleteAsync(id);
+    }
+
+    /// <summary> 
+    /// 鍒犻櫎澶氫釜浣滀笟浠诲姟琛� 
+    /// </summary> 
+    /// <param name="ids"></param> 
+    /// <returns></returns> 
+    public async Task DeleteManyAsync(IEnumerable<Guid> ids, MyCurrentUser myCurrentUser)
+    {
+        foreach (var id in ids)
+        {
+            await DeleteAsync(id);
+        }
+    }
+
+    /// <summary> 
+    /// 鐗╃悊鍒犻櫎浣滀笟浠诲姟琛� 
+    /// </summary> 
+    /// <param name="id">涓婚敭ID</param> 
+    /// <param name="cancellationToken"></param> 
+    /// <returns></returns> 
+    public virtual async Task DeletePermanentlyAsync(Guid id, MyCurrentUser myCurrentUser, CancellationToken cancellationToken = default)
+    {
+        _workTaskRepository.DeletePermanentlyAsync(id);
+    }
+
+    /// <summary> 
+    /// 鎵归噺鐗╃悊鍒犻櫎浣滀笟浠诲姟琛紙鐩存帴鍒犻櫎锛屼笉杞垹闄わ級 
+    /// </summary> 
+    /// <param name="ids">瑕佸垹闄ょ殑涓婚敭ID鍒楄〃</param> 
+    /// <param name="cancellationToken"></param> 
+    /// <returns></returns> 
+    public virtual async Task BatchDeletePermanentlyAsync(IEnumerable<Guid> ids, MyCurrentUser myCurrentUser, CancellationToken cancellationToken = default)
+    {
+        _workTaskRepository.BatchDeletePermanentlyAsync(ids);
+    }
+
+    /// <summary> 
+    /// 璋冩暣鎺掑簭浣滀笟浠诲姟琛� 
+    /// </summary> 
+    /// <param name="id"></param> 
+    /// <param name="sort"></param> 
+    /// <returns></returns> 
+    public virtual async Task AdjustSortAsync(Guid id, int sort)
+    {
+        //var list = await _workTaskRepository.GetListAsync(null, nameof(WorkTask.Sort)); 
+        //if (list != null && list.Any()) 
+        //{ 
+        //    var initSort = 1; 
+        //    list.ForEach(x => x.AdjustSort(initSort++)); 
+        //    var entity = list.FirstOrDefault(x => x.Id == id); 
+        //    if (entity != null) 
+        //    { 
+        //        if (sort == 1) 
+        //        { 
+        //            list.Where(x => x.Id != id).ToList()?.ForEach(x => x.AdjustSort(x.Sort + 1)); 
+        //        } 
+        //        else if (entity.Sort > sort) 
+        //        { 
+        //            list.Where(x => x.Id != id && x.Sort >= sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort + 1)); 
+        //            list.Where(x => x.Id != id && x.Sort < sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort - 1)); 
+        //        } 
+        //        else if (entity.Sort < sort) 
+        //        { 
+        //            list.Where(x => x.Id != id && x.Sort > sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort + 1)); 
+        //            list.Where(x => x.Id != id && x.Sort <= sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort - 1)); 
+        //        } 
+
+        //        entity.AdjustSort(sort); 
+        //    } 
+        //} 
+
+        //await _workTaskRepository.UpdateManyAsync(list); 
+    }
+
+    /// <summary> 
+    /// 瀵煎叆浣滀笟浠诲姟琛� 
+    /// </summary> 
+    /// <param name="input"></param> 
+    /// <returns></returns> 
+    /// <exception cref="UserFriendlyException"></exception> 
+    public async Task ImportAsync(WorkTasksImportModel input, MyCurrentUser myCurrentUser)
+    {
+        Check.NotNull(input, nameof(input));
+
+        var workTaskCreateDtos = new List<(int RowIndex, WorkTaskCreateDto Item)>();
+        var workTaskUpdateDtos = new List<(int RowIndex, Guid Id, WorkTaskUpdateDto Item)>();
+        var importItems = input.WorkTasks;
+
+        if (importItems != null && importItems.Any())
+        {
+            #region 瀵煎叆鏍¢獙 
+
+            // 鍒ゆ柇鍚嶇О鏄惁閲嶅锛屽苟杈撳嚭绗嚑琛岄噸澶� 
+            var duplicateWorkTasks = importItems.GroupBy(x => x.Son_TaskCode).Where(x => x.Count() > 1).ToList();
+            if (duplicateWorkTasks?.Any() == true)
+            {
+                var duplicateWorkTaskMsgs = duplicateWorkTasks.Select(x => $"绗� {string.Join(",", x.Select(x => x.RowIndex))} 琛岋細{x.Key}  鍚嶇О閲嶅");
+                var errorMsg = $"瀵煎叆澶辫触锛侀厤缃紝 {string.Join(",", duplicateWorkTaskMsgs)}锛岀粓姝㈠鍏�";
+                throw new UserFriendlyException(errorMsg);
+            }
+
+            #endregion
+
+            foreach (var impItem in importItems)
+            {
+                if (impItem.Son_TaskCode.IsNullOrWhiteSpace())
+                {
+                    continue;
+                }
+
+                if (impItem.Son_TaskCode.IsNullOrWhiteSpace())
+                {
+                    var errorMsg = $"瀵煎叆澶辫触锛侀厤缃紝绗瑊impItem.RowIndex}琛岋細WorkTask鍚嶇О涓嶈兘涓虹┖";
+                    throw new UserFriendlyException(errorMsg);
+                }
+
+                var oldWorkTask = await _workTaskRepository.FindByNameAsync(impItem.Son_TaskCode);
+                if (oldWorkTask != null)
+                {
+                    var workTaskUpdateDto = new WorkTaskUpdateDto
+                    {
+                        Son_TaskCode = impItem.Son_TaskCode,
+                        TaskCode = impItem.TaskCode,
+                        WorkPlanStatus = impItem.WorkPlanStatus,
+                        CallMaterialStatus = impItem.CallMaterialStatus,
+                        DataIdentifier = impItem.DataIdentifier,
+                        MaterialMode = impItem.MaterialMode,
+                        Length = impItem.Length,
+                        MarkingContent = impItem.MarkingContent,
+                        MarkingPosition = impItem.MarkingPosition,
+                        CuttingPosition = impItem.CuttingPosition,
+                        Quantity = impItem.Quantity,
+                        FlangeThickness = impItem.FlangeThickness,
+                        FlangeInnerDiameter = impItem.FlangeInnerDiameter,
+                        WeldingHeatInput = impItem.WeldingHeatInput,
+                        PipeAllowableStress = impItem.PipeAllowableStress,
+                        PipeDiameter = impItem.PipeDiameter,
+                        PipeWallThickness = impItem.PipeWallThickness,
+                        FactoryCode = impItem.FactoryCode,
+                        ProductCode = impItem.ProductCode,
+                        WorkstationCode = impItem.WorkstationCode,
+                        EquipmentCode = impItem.EquipmentCode,
+                        ProdLineCode = impItem.ProdLineCode,
+                        ShipNumber = impItem.ShipNumber,
+                        ProjectNumber = impItem.ProjectNumber,
+                        ProcessName = impItem.ProcessName,
+                        PipeFittingCode = impItem.PipeFittingCode,
+                        PreSerialNumber = impItem.PreSerialNumber,
+                        PipeSpecCode = impItem.PipeSpecCode,
+                        PipeSectionName = impItem.PipeSectionName,
+                        OuterDiameter = impItem.OuterDiameter,
+                        Thickness = impItem.Thickness,
+                        Material = impItem.Material,
+                        ProcessRouteNumber = impItem.ProcessRouteNumber,
+                        PlannedStartTime = impItem.PlannedStartTime,
+                        PlannedEndTime = impItem.PlannedEndTime,
+                        TeamInfo = impItem.TeamInfo,
+                        Timestamp = impItem.Timestamp,
+                        Remark = impItem.Remark,
+
+                    };
+
+                    workTaskUpdateDtos.Add((impItem.RowIndex, oldWorkTask.Id, workTaskUpdateDto));
+                }
+                else
+                {
+                    var workTaskCreateDto = new WorkTaskCreateDto
+                    {
+                        Son_TaskCode = impItem.Son_TaskCode,
+                        TaskCode = impItem.TaskCode,
+                        WorkPlanStatus = impItem.WorkPlanStatus,
+                        CallMaterialStatus = impItem.CallMaterialStatus,
+                        DataIdentifier = impItem.DataIdentifier,
+                        MaterialMode = impItem.MaterialMode,
+                        Length = impItem.Length,
+                        MarkingContent = impItem.MarkingContent,
+                        MarkingPosition = impItem.MarkingPosition,
+                        CuttingPosition = impItem.CuttingPosition,
+                        Quantity = impItem.Quantity,
+                        FlangeThickness = impItem.FlangeThickness,
+                        FlangeInnerDiameter = impItem.FlangeInnerDiameter,
+                        WeldingHeatInput = impItem.WeldingHeatInput,
+                        PipeAllowableStress = impItem.PipeAllowableStress,
+                        PipeDiameter = impItem.PipeDiameter,
+                        PipeWallThickness = impItem.PipeWallThickness,
+                        FactoryCode = impItem.FactoryCode,
+                        ProductCode = impItem.ProductCode,
+                        WorkstationCode = impItem.WorkstationCode,
+                        EquipmentCode = impItem.EquipmentCode,
+                        ProdLineCode = impItem.ProdLineCode,
+                        ShipNumber = impItem.ShipNumber,
+                        ProjectNumber = impItem.ProjectNumber,
+                        ProcessName = impItem.ProcessName,
+                        PipeFittingCode = impItem.PipeFittingCode,
+                        PreSerialNumber = impItem.PreSerialNumber,
+                        PipeSpecCode = impItem.PipeSpecCode,
+                        PipeSectionName = impItem.PipeSectionName,
+                        OuterDiameter = impItem.OuterDiameter,
+                        Thickness = impItem.Thickness,
+                        Material = impItem.Material,
+                        ProcessRouteNumber = impItem.ProcessRouteNumber,
+                        PlannedStartTime = impItem.PlannedStartTime,
+                        PlannedEndTime = impItem.PlannedEndTime,
+                        TeamInfo = impItem.TeamInfo,
+                        Timestamp = impItem.Timestamp,
+                        Remark = impItem.Remark,
+
+                    };
+
+                    workTaskCreateDtos.Add((impItem.RowIndex, workTaskCreateDto));
+                }
+            }
+        }
+
+        // 鏂板 
+        foreach (var workTaskDto in workTaskCreateDtos)
+        {
+            try
+            {
+                workTaskDto.Item.CreatorName = myCurrentUser.UserAccount;//鍒涘缓浜� 
+                await CreateAsync(workTaskDto.Item);
+            }
+            catch (Exception e)
+            {
+                var errorMsg = $"瀵煎叆澶辫触锛侀厤缃紝绗瑊workTaskDto.RowIndex}琛岋細{e.Message}锛岀粓姝㈠鍏�";
+                throw new UserFriendlyException(errorMsg);
+            }
+        }
+
+        // 鏇存柊 
+        foreach (var workTaskDto in workTaskUpdateDtos)
+        {
+            try
+            {
+                workTaskDto.Item.LastModifierName = myCurrentUser.UserAccount;//淇敼浜� 
+                await UpdateAsync(workTaskDto.Id, workTaskDto.Item);
+            }
+            catch (Exception e)
+            {
+                var errorMsg = $"瀵煎叆澶辫触锛侀厤缃紝绗瑊workTaskDto.RowIndex}琛岋細{e.Message}锛岀粓姝㈠鍏�";
+                throw new UserFriendlyException(errorMsg);
+            }
+        }
+    }
+
+    /// <summary> 
+    /// 瀵煎嚭浣滀笟浠诲姟琛� 
+    /// </summary> 
+    /// <param name="input"></param> 
+    /// <returns></returns> 
+    public async Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetWorkTaskInput input)
+    {
+        Check.NotNull(input, nameof(input));
+
+        if (input.Sorting.IsNullOrWhiteSpace())
+        {
+            input.Sorting = nameof(WorkTask.Sort);
+        }
+
+        #region 鍔ㄦ�佹瀯閫犳煡璇㈡潯浠�  
+
+        //鍔ㄦ�佹瀯閫犳煡璇㈡潯浠�  
+        var whereConditions = DynamicGetQueryParams(input);
+
+        #endregion
+
+
+        var list = await _workTaskRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount, includeDetails: true);
+        var result = ObjectMapper.Map<List<WorkTask>, List<WorkTaskDto>>(list);
+
+        var sheets = new Dictionary<string, object>
+        {
+            ["閰嶇疆"] = ExportHelper.ConvertListToExportData(result),
+        };
+
+        var fileName = "浣滀笟浠诲姟";
+        return (sheets, fileName);
+    }
+
+    /// <summary> 
+    /// 鏍¢獙浣滀笟浠诲姟琛紝褰撴柊寤烘垨鏇存柊鏃� 
+    /// </summary> 
+    /// <param name="input"></param> 
+    /// <returns></returns> 
+    protected Task CheckCreateOrUpdateDtoAsync(WorkTaskCreateOrUpdateDtoBase input)
+    {
+        Check.NotNull(input, nameof(input));
+        Check.NotNullOrWhiteSpace(input.Son_TaskCode, "瀛愪换鍔$紪鐮�", 256);
+        Check.NotNullOrWhiteSpace(input.TaskCode, "浠诲姟缂栫爜", 256);
+        Check.NotNull(input.WorkPlanStatus, "璁″垝鐘舵��");
+        Check.NotNull(input.CallMaterialStatus, "鍙枡鐘舵��");
+        Check.NotNull(input.Length, "闀垮害(mm)");
+        Check.NotNull(input.MarkingPosition, "鎵撶爜浣嶇疆");
+        Check.NotNull(input.CuttingPosition, "鍒囧壊浣嶇疆");
+        Check.NotNull(input.Quantity, "绠℃鏁伴噺");
+        Check.NotNull(input.FlangeThickness, "娉曞叞鍘氬害(mm)");
+        Check.NotNull(input.FlangeInnerDiameter, "娉曞叞鐩村緞(mm)");
+        Check.NotNull(input.PipeDiameter, "濂楃闀垮害(mm)");
+        Check.NotNull(input.PipeWallThickness, "濂楃鐩村緞(mm)");
+        Check.NotNull(input.OuterDiameter, "澶栧緞(mm)");
+        Check.NotNull(input.Thickness, "澹佸帤(mm)");
+
+        return Task.CompletedTask;
+    }
+
+    /// <summary> 
+    /// 鏍规嵁鏉′欢鑾峰彇浣滀笟浠诲姟琛ㄥ垪琛� 
+    /// </summary> 
+    /// <param name="whereConditions"></param> 
+    /// <param name="cancellationToken"></param> 
+    /// <returns></returns> 
+    public async Task<List<WorkTask>> GetListByFilterAsync(Expression<Func<WorkTask, bool>> whereConditions, CancellationToken cancellationToken = default)
+    {
+        return await _workTaskRepository.GetListByFilterAsync(whereConditions);
+    }
+
+    /// <summary> 
+    ///  鏍规嵁鏉′欢鑾峰彇鍗曚釜浣滀笟浠诲姟琛� 
+    /// </summary> 
+    /// <param name="whereConditions"></param> 
+    /// <param name="isMultipleThrowException">鏄惁鏌ヨ鍑哄鏉″氨鎶ラ敊</param> 
+    /// <param name="cancellationToken"></param> 
+    /// <returns></returns> 
+    /// <exception cref="UserFriendlyException"></exception> 
+    public async Task<WorkTask> GetSingleByFilterAsync(Expression<Func<WorkTask, bool>> whereConditions, bool is鈥婱ultipleThrowException = false, CancellationToken cancellationToken = default)
+    {
+        return await _workTaskRepository.GetSingleByFilterAsync(whereConditions, is鈥婱ultipleThrowException);
+    }
+
+    /// <summary>  
+    /// 鏍规嵁鏉′欢鑾峰彇浣滀笟浠诲姟琛ㄥ垪琛� 
+    /// </summary>  
+    /// <param name="input"></param>  
+    /// <returns></returns>  
+    public virtual async Task<List<WorkTaskDto>> FindListByFilterAsync(GetWorkTaskInput input, CancellationToken cancellationToken = default)
+    {
+        Check.NotNull(input, nameof(input));
+
+        if (input.Sorting.IsNullOrWhiteSpace())
+        {
+            input.Sorting = nameof(WorkTask.Sort);
+        }
+
+        #region 鍔ㄦ�佹瀯閫犳煡璇㈡潯浠�   
+
+        //鍔ㄦ�佹瀯閫犳煡璇㈡潯浠�   
+        var whereConditions = DynamicGetQueryParams(input);
+
+        #endregion
+
+        var list = await _workTaskRepository.GetListByFilterAsync(whereConditions?.data);
+
+        return new List<WorkTaskDto>(ObjectMapper.Map<List<WorkTask>, List<WorkTaskDto>>(list));
+    }
+    /// <summary>  
+    /// 鏍规嵁鏉′欢鑾峰彇鍗曚釜浣滀笟浠诲姟琛� 
+    /// </summary>  
+    /// <param name="input"></param>  
+    /// <returns></returns>  
+    public virtual async Task<WorkTaskDto> FindSingleByFilterAsync(GetWorkTaskInput input, CancellationToken cancellationToken = default)
+    {
+        Check.NotNull(input, nameof(input));
+
+        if (input.Sorting.IsNullOrWhiteSpace())
+        {
+            input.Sorting = nameof(WorkTask.Sort);
+        }
+
+        #region 鍔ㄦ�佹瀯閫犳煡璇㈡潯浠�   
+
+        //鍔ㄦ�佹瀯閫犳煡璇㈡潯浠�   
+        var whereConditions = DynamicGetQueryParams(input);
+
+        #endregion
+
+        var dataObj = await _workTaskRepository.GetSingleByFilterAsync(whereConditions?.data);
+
+        return (ObjectMapper.Map<WorkTask, WorkTaskDto>(dataObj));
+    }
+}
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/MapperProfiles/WorkTaskAutoMapperProfile.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/MapperProfiles/WorkTaskAutoMapperProfile.cs
new file mode 100644
index 0000000..5fd3bb2
--- /dev/null
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/MapperProfiles/WorkTaskAutoMapperProfile.cs
@@ -0,0 +1,29 @@
+using AutoMapper;
+using CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.WorkPlan;
+using CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.WorkTask;
+using CMS.Plugin.PipeLineLems.Domain.WorkTask;
+using Volo.Abp.ObjectExtending;
+
+namespace CMS.Plugin.PipeLineLems.Application.MapperProfiles;
+
+/// <summary> 
+/// 浣滀笟浠诲姟琛ˋutoMapper閰嶇疆 
+/// </summary> 
+/// <seealso cref="AutoMapper.Profile" /> 
+public class WorkTaskAutoMapperProfile : Profile
+{
+    /// <summary> 
+    /// Initializes a new instance of the <see cref="WorkTaskAutoMapperProfile"/> class. 
+    /// </summary> 
+    public WorkTaskAutoMapperProfile()
+    {
+        /* You can configure your AutoMapper mapping configuration here. 
+         * Alternatively, you can split your mapping configurations 
+         * into multiple profile classes for a better organization. */
+        CreateMap<WorkTask, WorkTaskDto>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None);
+        CreateMap<WorkTaskCreateDto, WorkTask>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None);
+        CreateMap<GetWorkTaskInput, WorkTask>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None);
+
+        CreateMap<WorkPlanCreateDto, WorkTaskCreateDto>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None);
+    }
+}
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Domain/WorkTask/IWorkTaskRepository.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Domain/WorkTask/IWorkTaskRepository.cs
new file mode 100644
index 0000000..1e68ad1
--- /dev/null
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Domain/WorkTask/IWorkTaskRepository.cs
@@ -0,0 +1,88 @@
+using CmsQueryExtensions.Extension; 
+using System.Linq.Expressions; 
+using Volo.Abp.Domain.Repositories; 
+ 
+namespace CMS.Plugin.PipeLineLems.Domain.WorkTask; 
+ 
+/// <summary> 
+/// 浣滀笟浠诲姟琛ㄤ粨鍌� 
+/// </summary> 
+public interface IWorkTaskRepository : IBasicRepository<WorkTask, Guid> 
+{ 
+    /// <summary> 
+    /// 鎸夌収鍚嶇О鏌ユ壘浣滀笟浠诲姟琛� 
+    /// </summary> 
+    /// <param name="name"></param> 
+    /// <param name="cancellationToken"></param> 
+    /// <returns></returns> 
+    Task<WorkTask> FindByNameAsync(string name, CancellationToken cancellationToken = default); 
+ 
+    /// <summary> 
+    /// 楠岃瘉鍚嶇О鏄惁瀛樺湪浣滀笟浠诲姟琛� 
+    /// </summary> 
+    /// <param name="name"></param> 
+    /// <param name="id"></param> 
+    /// <returns></returns> 
+    Task<bool> NameExistAsync(string name, Guid? id = null); 
+ 
+    /// <summary> 
+    /// 鑾峰彇鏈�澶ф帓搴忎綔涓氫换鍔¤〃 
+    /// </summary> 
+    /// <returns></returns> 
+    Task<int> GetMaxSortAsync(); 
+ 
+    /// <summary> 
+    /// 鑾峰彇鍒嗛〉鍒楄〃浣滀笟浠诲姟琛� 
+    /// </summary> 
+    /// <param name="whereConditions"></param> 
+    /// <param name="sorting"></param> 
+    /// <param name="maxResultCount"></param> 
+    /// <param name="skipCount"></param> 
+    /// <param name="includeDetails"></param> 
+    /// <param name="cancellationToken"></param> 
+    /// <returns></returns> 
+    Task<List<WorkTask>> GetListAsync(FunReturnResultModel<Expression<Func<WorkTask, bool>>> whereConditions, string sorting = null, int maxResultCount = int.MaxValue, int skipCount = 0, bool includeDetails = false, CancellationToken cancellationToken = default); 
+ 
+    /// <summary> 
+    /// 鑾峰彇鎬绘暟浣滀笟浠诲姟琛� 
+    /// </summary> 
+    /// <param name="whereConditions"></param> 
+    /// <param name="cancellationToken"></param> 
+    /// <returns></returns> 
+    Task<long> GetCountAsync(FunReturnResultModel<Expression<Func<WorkTask, bool>>> whereConditions, CancellationToken cancellationToken = default); 
+ 
+    /// <summary> 
+    /// 鐗╃悊鍒犻櫎浣滀笟浠诲姟琛� 
+    /// </summary> 
+    /// <param name="id">涓婚敭ID</param> 
+    /// <param name="cancellationToken"></param> 
+    /// <returns></returns> 
+    Task DeletePermanentlyAsync(Guid id, CancellationToken cancellationToken = default); 
+ 
+ 
+    /// <summary> 
+    /// 鎵归噺鐗╃悊鍒犻櫎浣滀笟浠诲姟琛紙鐩存帴鍒犻櫎锛屼笉杞垹闄わ級 
+    /// </summary> 
+    /// <param name="ids">瑕佸垹闄ょ殑涓婚敭ID鍒楄〃</param> 
+    /// <param name="cancellationToken"></param> 
+    /// <returns></returns> 
+    Task BatchDeletePermanentlyAsync(IEnumerable<Guid> ids, CancellationToken cancellationToken = default); 
+ 
+    /// <summary> 
+    /// 鏍规嵁鏉′欢鑾峰彇浣滀笟浠诲姟琛ㄥ垪琛� 
+    /// </summary> 
+    /// <param name="whereConditions"></param> 
+    /// <param name="cancellationToken"></param> 
+    /// <returns></returns> 
+    Task<List<WorkTask>> GetListByFilterAsync(Expression<Func<WorkTask, bool>> whereConditions, CancellationToken cancellationToken = default); 
+ 
+    /// <summary> 
+    ///  鏍规嵁鏉′欢鑾峰彇鍗曚釜浣滀笟浠诲姟琛� 
+    /// </summary> 
+    /// <param name="whereConditions"></param> 
+    /// <param name="isMultipleThrowException">鏄惁鏌ヨ鍑哄鏉″氨鎶ラ敊</param> 
+    /// <param name="cancellationToken"></param> 
+    /// <returns></returns> 
+    /// <exception cref="UserFriendlyException"></exception> 
+    Task<WorkTask> GetSingleByFilterAsync(Expression<Func<WorkTask, bool>> whereConditions, bool is鈥婱ultipleThrowException = false, CancellationToken cancellationToken = default); 
+} 
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Domain/WorkTask/WorkTask.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Domain/WorkTask/WorkTask.cs
new file mode 100644
index 0000000..68a7843
--- /dev/null
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Domain/WorkTask/WorkTask.cs
@@ -0,0 +1,264 @@
+using CMS.Plugin.MyExtension.Domain;
+using CMS.Plugin.PipeLineLems.Domain.Shared.Enums;
+using Microsoft.EntityFrameworkCore;
+using System.ComponentModel.DataAnnotations.Schema;
+using Volo.Abp.Domain.Entities.Auditing;
+
+namespace CMS.Plugin.PipeLineLems.Domain.WorkTask
+{
+    /// <summary>
+    /// 浣滀笟浠诲姟琛�
+    /// </summary>
+    public class WorkTask : MyFullAuditedAggregateRoot<Guid>
+    {
+        /// <summary>
+        /// 瀛愪换鍔$紪鐮�
+        /// </summary>
+        public string Son_TaskCode { get; set; }
+
+        #region 浣滀笟璁″垝琛ㄧ殑瀛楁
+
+        /// <summary>
+        /// 浠诲姟缂栫爜
+        /// </summary>
+        public string TaskCode { get; set; }
+
+        /// <summary>
+        /// 璁″垝鐘舵��
+        /// </summary>
+        public WorkPlanStatusEnum WorkPlanStatus { get; set; }
+
+        /// <summary>
+        /// 鍙枡鐘舵��
+        /// </summary>
+        public CallMaterialStatusEnum CallMaterialStatus { get; set; }
+
+        #region 鍘熸枡绠′俊鎭�
+
+        ///// <summary>
+        ///// 鍘熸枡缂栧彿
+        ///// </summary>
+        //public string OrgMaterialCode { get; set; }
+
+        /// <summary>
+        /// 鍘熸枡鏍囪瘑
+        /// </summary>
+        public string DataIdentifier { get; set; }
+
+        /// <summary>
+        /// 鍘熸枡鍨嬪彿
+        /// </summary>
+        public string MaterialMode { get; set; }
+
+
+        #endregion
+
+
+        #region 鎵撶爜
+
+        /// <summary>
+        /// 闀垮害(mm)
+        /// </summary>
+        public decimal Length { get; set; }
+
+        /// <summary>
+        /// 鎵撶爜鍐呭
+        /// </summary>
+        public string MarkingContent { get; set; }
+
+        /// <summary>
+        /// 鎵撶爜浣嶇疆
+        /// </summary>
+        public decimal MarkingPosition { get; set; }
+
+        #endregion
+
+        #region 鍒囧壊
+
+        ///// <summary>
+        ///// 鍒囧壊鏂囦欢
+        ///// </summary>
+        //public string CuttingFile { get; set; }
+
+        /// <summary>
+        /// 鍒囧壊浣嶇疆
+        /// </summary>
+        public decimal CuttingPosition { get; set; }
+
+        /// <summary>
+        /// 绠℃鏁伴噺
+        /// </summary>
+        public int Quantity { get; set; }
+
+        #endregion
+
+        #region 瑁呴厤銆佺剨鎺�
+
+        /// <summary>
+        /// 娉曞叞鍘氬害(mm)
+        /// </summary>
+        public decimal FlangeThickness { get; set; }
+
+        /// <summary>
+        /// 娉曞叞鐩村緞(mm)
+        /// </summary>
+        public decimal FlangeInnerDiameter { get; set; }
+
+        /// <summary>
+        /// 娉曞叞鍏О鍘嬪姏
+        /// </summary>
+        public string WeldingHeatInput { get; set; }
+
+        /// <summary>
+        /// 娉曞叞鍐茬爜鍐呭
+        /// </summary>
+        public string PipeAllowableStress { get; set; }
+
+        /// <summary>
+        /// 濂楃闀垮害(mm)
+        /// </summary>
+        public decimal PipeDiameter { get; set; }
+
+        /// <summary>
+        /// 濂楃鐩村緞(mm)
+        /// </summary>
+        public decimal PipeWallThickness { get; set; }
+
+        #endregion
+
+        /// <summary>
+        /// 宸ュ巶浠g爜
+        /// </summary>
+        public string FactoryCode { get; set; }
+
+        /// <summary>
+        /// 浜у搧浠g爜
+        /// </summary>
+        public string ProductCode { get; set; }
+
+        /// <summary>
+        /// 宸ヤ綅浠g爜
+        /// </summary>
+        public string WorkstationCode { get; set; }
+
+        /// <summary>
+        /// 璁惧浠g爜
+        /// </summary>
+        public string EquipmentCode { get; set; }
+
+        ///// <summary>
+        ///// 宸ヤ欢鍚嶇О
+        ///// </summary>
+        //public string WorkpieceName { get; set; }
+
+        /// <summary>
+        /// 浜х嚎缂栫爜
+        /// </summary>
+        public string ProdLineCode { get; set; }
+
+        /// <summary>
+        /// 鑸瑰彿
+        /// </summary>
+        public string ShipNumber { get; set; }
+
+        /// <summary>
+        /// 椤圭洰鍙�
+        /// </summary>
+        public string ProjectNumber { get; set; }
+
+        /// <summary>
+        /// 宸ュ簭鍚嶇О
+        /// </summary>
+        public string ProcessName { get; set; }
+
+        /// <summary>
+        /// 绠′欢缂栫爜
+        /// </summary>
+        public string PipeFittingCode { get; set; }
+
+        /// <summary>
+        /// 椤哄簭鍙�
+        /// </summary>
+        public string PreSerialNumber { get; set; }
+
+
+
+        /// <summary>
+        /// 绠℃缂栫爜
+        /// </summary>
+        public string PipeSpecCode { get; set; }
+
+        /// <summary>
+        /// 绠℃鍚嶇О
+        /// </summary>
+        public string PipeSectionName { get; set; }
+
+        /// <summary>
+        /// 澶栧緞(mm)
+        /// </summary>
+        public decimal OuterDiameter { get; set; }
+
+        /// <summary>
+        /// 澹佸帤(mm)
+        /// </summary>
+        public decimal Thickness { get; set; }
+
+        /// <summary>
+        /// 鏉愯川
+        /// </summary>
+        public string Material { get; set; }
+
+
+        ///// <summary>
+        ///// 鏄惁涓绘敮绠�
+        ///// </summary>
+        //public bool HasMainSignature { get; set; }
+
+
+
+        ///// <summary>
+        ///// 鎴愬搧绠′欢鍥�
+        ///// </summary>
+        //public string FinishedProductScale { get; set; }
+
+
+
+
+        /// <summary>
+        /// 宸ヨ壓娴佸悜缂栧彿
+        /// </summary>
+        public string ProcessRouteNumber { get; set; }
+
+        /// <summary>
+        /// 璁″垝寮�濮嬫椂闂�
+        /// </summary>
+        public DateTime? PlannedStartTime { get; set; }
+
+        /// <summary>
+        /// 璁″垝瀹屾垚鏃堕棿
+        /// </summary>
+        public DateTime? PlannedEndTime { get; set; }
+
+        /// <summary>
+        /// 鐝粍淇℃伅
+        /// </summary>
+        public string TeamInfo { get; set; }
+
+        /// <summary>
+        /// 鏃堕棿鎴�
+        /// </summary>
+        public string Timestamp { get; set; }
+
+
+        #endregion
+
+        /// <summary>
+        /// Adjusts the sort.
+        /// </summary>
+        /// <param name="sort">The sort.</param>
+        public void AdjustSort(int sort)
+        {
+            Sort = sort;
+        }
+    }
+}
\ No newline at end of file
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.EntityFrameworkCore/Extensions/CMSPluginEfCoreExtensions.WorkTask.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.EntityFrameworkCore/Extensions/CMSPluginEfCoreExtensions.WorkTask.cs
new file mode 100644
index 0000000..91324a2
--- /dev/null
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.EntityFrameworkCore/Extensions/CMSPluginEfCoreExtensions.WorkTask.cs
@@ -0,0 +1,103 @@
+using CMS.Plugin.MyExtension.Domain;
+using CMS.Plugin.PipeLineLems.Domain;
+using CMS.Plugin.PipeLineLems.Domain.Shared.MyTestEntityNames;
+using CMS.Plugin.PipeLineLems.Domain.WorkTask;
+using Microsoft.EntityFrameworkCore;
+using Volo.Abp;
+using Volo.Abp.EntityFrameworkCore.Modeling;
+
+namespace CMS.Plugin.PipeLineLems.EntityFrameworkCore.Extensions;
+
+/// <summary>
+/// EfCore鎵╁睍
+/// </summary>
+public static partial class CMSPluginEfCoreExtensions
+{
+    /// <summary>
+    /// Includes the details.
+    /// </summary>
+    /// <param name="queryable">The queryable.</param>
+    /// <param name="include">if set to <c>true</c> [include].</param>
+    /// <returns></returns>
+    public static IQueryable<WorkTask> IncludeDetails(this IQueryable<WorkTask> queryable, bool include = true)
+    {
+        if (!include)
+        {
+            return queryable;
+        }
+
+        return queryable;
+    }
+
+    /// <summary>
+    /// Configures the mytestentityname.
+    /// </summary>
+    /// <param name="builder">The builder.</param>
+    public static void ConfigureWorkTask(this ModelBuilder builder)
+    {
+        Check.NotNull(builder, nameof(builder));
+
+        builder.Entity<WorkTask>(b =>
+        {
+            //Configure table & schema name
+            b.ToTable((CMSPluginDbProperties.DbTablePrefix + "_WorkTasks").ToLower(), CMSPluginDbProperties.DbSchema).HasComment("浣滀笟浠诲姟琛�");
+
+            b.ConfigureByConvention();
+
+            b.Property(x => x.Son_TaskCode).HasMaxLength(256).IsRequired().HasComment("瀛愪换鍔$紪鐮�");
+
+            // Configure properties
+            b.Property(x => x.TaskCode).HasMaxLength(256).IsRequired().HasComment("浠诲姟缂栫爜");
+            b.Property(x => x.WorkPlanStatus).IsRequired().HasComment("璁″垝鐘舵��");
+            b.Property(x => x.CallMaterialStatus).IsRequired().HasComment("鍙枡鐘舵��");
+            b.Property(x => x.DataIdentifier).HasMaxLength(256).HasComment("鍘熸枡鏍囪瘑");
+            b.Property(x => x.MaterialMode).HasMaxLength(256).HasComment("鍘熸枡鍨嬪彿");
+            b.Property(x => x.Length).HasColumnType("decimal(18,2)").HasComment("闀垮害(mm)");
+            b.Property(x => x.MarkingContent).HasMaxLength(1024).HasComment("鎵撶爜鍐呭");
+
+            b.Property(x => x.Quantity).HasComment("绠℃鏁伴噺");
+            b.Property(x => x.FlangeThickness).HasColumnType("decimal(18,2)").HasComment("娉曞叞鍘氬害(mm)");
+            b.Property(x => x.FlangeInnerDiameter).HasColumnType("decimal(18,2)").HasComment("娉曞叞鐩村緞(mm)");
+            b.Property(x => x.WeldingHeatInput).HasMaxLength(256).HasComment("娉曞叞鍏О鍘嬪姏");
+            b.Property(x => x.PipeAllowableStress).HasMaxLength(256).HasComment("娉曞叞鍐茬爜鍐呭");
+            b.Property(x => x.PipeDiameter).HasColumnType("decimal(18,2)").HasComment("濂楃闀垮害(mm)");
+            b.Property(x => x.PipeWallThickness).HasColumnType("decimal(18,2)").HasComment("濂楃鐩村緞(mm)");
+            b.Property(x => x.FactoryCode).HasMaxLength(256).HasComment("宸ュ巶浠g爜");
+            b.Property(x => x.ProductCode).HasMaxLength(256).HasComment("浜у搧浠g爜");
+            b.Property(x => x.WorkstationCode).HasMaxLength(256).HasComment("宸ヤ綅浠g爜");
+            b.Property(x => x.EquipmentCode).HasMaxLength(256).HasComment("璁惧浠g爜");
+            b.Property(x => x.ProdLineCode).HasMaxLength(256).HasComment("浜х嚎缂栫爜");
+            b.Property(x => x.ShipNumber).HasMaxLength(256).HasComment("鑸瑰彿");
+            b.Property(x => x.ProjectNumber).HasMaxLength(256).HasComment("椤圭洰鍙�");
+
+            b.Property(x => x.ProcessName).HasMaxLength(256).HasComment("宸ュ簭鍚嶇О");
+            b.Property(x => x.PipeFittingCode).HasMaxLength(256).HasComment("绠′欢缂栫爜");
+            b.Property(x => x.PreSerialNumber).HasMaxLength(256).HasComment("椤哄簭鍙�");
+            b.Property(x => x.PipeSpecCode).HasMaxLength(256).HasComment("绠℃缂栫爜");
+            b.Property(x => x.PipeSectionName).HasMaxLength(256).HasComment("绠℃鍚嶇О");
+            b.Property(x => x.OuterDiameter).HasColumnType("decimal(18,2)").HasComment("澶栧緞(mm)");
+            b.Property(x => x.Thickness).HasColumnType("decimal(18,2)").HasComment("澹佸帤(mm)");
+            b.Property(x => x.Material).HasMaxLength(256).HasComment("鏉愯川");
+
+
+            b.Property(x => x.MarkingPosition).HasColumnType("decimal(18,2)").HasComment("鎵撶爜浣嶇疆");
+            b.Property(x => x.CuttingPosition).HasColumnType("decimal(18,2)").HasComment("鍒囧壊浣嶇疆");
+
+            b.Property(x => x.ProcessRouteNumber).HasMaxLength(256).HasComment("宸ヨ壓娴佸悜缂栧彿");
+            b.Property(x => x.PlannedStartTime).HasComment("璁″垝寮�濮嬫椂闂�");
+            b.Property(x => x.PlannedEndTime).HasComment("璁″垝瀹屾垚鏃堕棿");
+            b.Property(x => x.TeamInfo).HasMaxLength(256).HasComment("鐝粍淇℃伅");
+            b.Property(x => x.Timestamp).HasMaxLength(256).HasComment("鏃堕棿鎴�");
+
+            b.ConfigureMyCmsEntity();
+
+            // Configure indexes
+            b.HasIndex(u => u.Son_TaskCode).IsUnique();
+            b.HasIndex(u => u.DataIdentifier);
+            b.HasIndex(u => u.PlannedStartTime);
+            b.HasIndex(u => u.PlannedEndTime);
+
+            b.ApplyObjectExtensionMappings();
+        });
+    }
+}
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.EntityFrameworkCore/Repositories/EfCoreWorkTaskRepository.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.EntityFrameworkCore/Repositories/EfCoreWorkTaskRepository.cs
new file mode 100644
index 0000000..59207c9
--- /dev/null
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.EntityFrameworkCore/Repositories/EfCoreWorkTaskRepository.cs
@@ -0,0 +1,218 @@
+using CMS.Plugin.PipeLineLems.Domain.WorkTask; 
+using CMS.Plugin.PipeLineLems.EntityFrameworkCore.Extensions; 
+using CmsQueryExtensions.Extension; 
+using Microsoft.EntityFrameworkCore; 
+using System.Linq.Dynamic.Core; 
+using System.Linq.Expressions; 
+using Volo.Abp; 
+using Volo.Abp.Domain.Repositories.EntityFrameworkCore; 
+using Volo.Abp.EntityFrameworkCore; 
+ 
+ 
+namespace CMS.Plugin.PipeLineLems.EntityFrameworkCore.Repositories; 
+ 
+/// <summary> 
+/// 浣滀笟浠诲姟琛ㄤ粨鍌ㄥ疄鐜� 
+/// </summary> 
+public class EfCoreWorkTaskRepository : EfCoreRepository<ICMSPluginDbContext, WorkTask, Guid>, IWorkTaskRepository 
+{ 
+    /// <summary> 
+    /// Initializes a new instance of the <see cref="EfCoreWorkTaskRepository"/> class. 
+    /// </summary> 
+    /// <param name="dbContextProvider">The database context provider.</param> 
+    public EfCoreWorkTaskRepository(IDbContextProvider<ICMSPluginDbContext> dbContextProvider) 
+        : base(dbContextProvider) 
+    { 
+    } 
+ 
+    /// <summary> 
+    /// 鎸夌収鍚嶇О鏌ユ壘浣滀笟浠诲姟琛� 
+    /// </summary> 
+    /// <param name="name"></param> 
+    /// <param name="cancellationToken"></param> 
+    /// <returns></returns> 
+    public virtual async Task<WorkTask> FindByNameAsync(string name, CancellationToken cancellationToken = default) 
+    { 
+        return await (await GetDbSetAsync()) 
+            .IncludeDetails() 
+            .Where(x => !x.IsDeleted) 
+            .OrderByDescending(x=>x.CreationTime)  
+            .FirstOrDefaultAsync(t => t.Son_TaskCode == name, GetCancellationToken(cancellationToken)); 
+    } 
+ 
+    /// <summary> 
+    /// 楠岃瘉鍚嶇О鏄惁瀛樺湪浣滀笟浠诲姟琛� 
+    /// </summary> 
+    /// <param name="name">鏍¢獙鍊�</param> 
+    /// <param name="id"></param> 
+    /// <returns></returns> 
+    public async Task<bool> NameExistAsync(string name, Guid? id = null) 
+    { 
+        return await (await GetDbSetAsync()).WhereIf(id.HasValue, p => p.Id != id).Where(x => !x.IsDeleted).AnyAsync(x => x.Son_TaskCode == name); 
+    } 
+ 
+    /// <summary> 
+    /// 鑾峰彇鏈�澶ф帓搴忎綔涓氫换鍔¤〃 
+    /// </summary> 
+    /// <returns></returns> 
+    public async Task<int> GetMaxSortAsync() 
+    { 
+        var hasAny = await (await GetQueryableAsync()) 
+            .Where(x => !x.IsDeleted).AnyAsync(); 
+        if (!hasAny) 
+        { 
+            return 1; 
+        } 
+ 
+        var sort = await (await GetQueryableAsync()) 
+            .Where(x => !x.IsDeleted).MaxAsync(x => x.Sort); 
+        return sort + 1; 
+    } 
+ 
+    /// <summary> 
+    /// 鑾峰彇鍒嗛〉鍒楄〃浣滀笟浠诲姟琛� 
+    /// </summary> 
+    /// <param name="whereConditions"></param> 
+    /// <param name="sorting"></param> 
+    /// <param name="maxResultCount"></param> 
+    /// <param name="skipCount"></param> 
+    /// <param name="includeDetails"></param> 
+    /// <param name="cancellationToken"></param> 
+    /// <returns></returns> 
+    public async Task<List<WorkTask>> GetListAsync(FunReturnResultModel<Expression<Func<WorkTask, bool>>> whereConditions, string sorting = null, int maxResultCount = int.MaxValue, int skipCount = 0, bool includeDetails = false, CancellationToken cancellationToken = default) 
+    { 
+        return await (await GetDbSetAsync()) 
+            .IncludeDetails(includeDetails) 
+            .WhereIf(whereConditions != null, whereConditions.data) 
+            .Where(x => !x.IsDeleted) 
+            .OrderByDescending(x=>x.CreationTime) 
+            .PageBy(skipCount, maxResultCount) 
+            .ToListAsync(GetCancellationToken(cancellationToken)); 
+    } 
+ 
+    /// <summary> 
+    /// 鑾峰彇鎬绘暟浣滀笟浠诲姟琛� 
+    /// </summary> 
+    /// <param name="whereConditions"></param> 
+    /// <param name="cancellationToken"></param> 
+    /// <returns></returns> 
+    public async Task<long> GetCountAsync(FunReturnResultModel<Expression<Func<WorkTask, bool>>> whereConditions, CancellationToken cancellationToken = default) 
+    { 
+        return await (await GetQueryableAsync()) 
+            .WhereIf(whereConditions != null, whereConditions.data) 
+            .Where(x => !x.IsDeleted) 
+            .CountAsync(cancellationToken: GetCancellationToken(cancellationToken)); 
+    } 
+ 
+ 
+    /// <inheritdoc /> 
+    public override async Task<IQueryable<WorkTask>> WithDetailsAsync() 
+    { 
+        return (await GetQueryableAsync()) 
+            .Where(x => !x.IsDeleted).IncludeDetails(); 
+    } 
+ 
+    /// <summary> 
+    /// 鐗╃悊鍒犻櫎浣滀笟浠诲姟琛� 
+    /// </summary> 
+    /// <param name="id">涓婚敭ID</param> 
+    /// <param name="cancellationToken"></param> 
+    /// <returns></returns> 
+    public virtual async Task DeletePermanentlyAsync(Guid id, CancellationToken cancellationToken = default) 
+    { 
+        var entity = await (await GetDbSetAsync()) 
+            .FirstOrDefaultAsync(x => x.Id == id && !x.IsDeleted, GetCancellationToken(cancellationToken)); 
+ 
+        if (entity == null) 
+        { 
+            throw new Volo.Abp.Domain.Entities.EntityNotFoundException(typeof(WorkTask), id); 
+        } 
+ 
+        // 2. 鑾峰彇 DbContext 骞舵墽琛屽垹闄� 
+        var dbContext = await GetDbContextAsync(); 
+ 
+        // 鐩存帴鎵ц SQL 鍒犻櫎 
+        var sql = $"DELETE FROM scms_worktasks WHERE Id ='{entity.Id.ToString()}'"; 
+        await dbContext.Database.ExecuteSqlRawAsync(sql, cancellationToken); 
+    } 
+ 
+    /// <summary> 
+    /// 鎵归噺鐗╃悊鍒犻櫎浣滀笟浠诲姟琛紙鐩存帴鍒犻櫎锛屼笉杞垹闄わ級 
+    /// </summary> 
+    /// <param name="ids">瑕佸垹闄ょ殑涓婚敭ID鍒楄〃</param> 
+    /// <param name="cancellationToken"></param> 
+    /// <returns></returns> 
+    public virtual async Task BatchDeletePermanentlyAsync(IEnumerable<Guid> ids, CancellationToken cancellationToken = default) 
+    { 
+        // 1. 鏌ヨ绗﹀悎鏉′欢鐨勫疄浣擄紙鏈蒋鍒犻櫎鐨勮褰曪級 
+        var entities = await (await GetDbSetAsync()) 
+            .Where(x => ids.Contains(x.Id) && !x.IsDeleted) 
+            .ToListAsync(GetCancellationToken(cancellationToken)); 
+ 
+        if (!entities.Any()) 
+        { 
+            // 濡傛灉娌℃湁闇�瑕佸垹闄ょ殑璁板綍锛岀洿鎺ヨ繑鍥烇紙閬垮厤涓嶅繀瑕佺殑鏁版嵁搴撴搷浣滐級 
+            return; 
+        } 
+ 
+        // 2. 鑾峰彇 DbContext 骞舵墽琛屾壒閲忓垹闄� 
+        var dbContext = await GetDbContextAsync(); 
+ 
+        var idsToDelete = entities.Select(e => e.Id).ToList(); 
+ 
+        // 鐩存帴鎵ц SQL 鍒犻櫎 
+        var sql = $"DELETE FROM scms_worktasks WHERE Id IN ({string.Join(",", idsToDelete.Select(id => $"'{id}'"))})"; 
+        await dbContext.Database.ExecuteSqlRawAsync(sql, cancellationToken); 
+    } 
+ 
+    /// <summary> 
+    /// 鏍规嵁鏉′欢鑾峰彇浣滀笟浠诲姟琛ㄥ垪琛� 
+    /// </summary> 
+    /// <param name="whereConditions"></param> 
+    /// <param name="cancellationToken"></param> 
+    /// <returns></returns> 
+    public async Task<List<WorkTask>> GetListByFilterAsync(Expression<Func<WorkTask, bool>> whereConditions, CancellationToken cancellationToken = default) 
+    { 
+        return await (await GetDbSetAsync()) 
+            .IncludeDetails() 
+            .WhereIf(whereConditions != null, whereConditions) 
+            .Where(x => !x.IsDeleted) 
+            .OrderByDescending(x => x.CreationTime) 
+            .ToListAsync(GetCancellationToken(cancellationToken)); 
+    } 
+ 
+    /// <summary> 
+    ///  鏍规嵁鏉′欢鑾峰彇鍗曚釜浣滀笟浠诲姟琛� 
+    /// </summary> 
+    /// <param name="whereConditions"></param> 
+    /// <param name="isMultipleThrowException">鏄惁鏌ヨ鍑哄鏉″氨鎶ラ敊</param> 
+    /// <param name="cancellationToken"></param> 
+    /// <returns></returns> 
+    /// <exception cref="UserFriendlyException"></exception> 
+    public async Task<WorkTask> GetSingleByFilterAsync(Expression<Func<WorkTask, bool>> whereConditions, bool is鈥婱ultipleThrowException = false, CancellationToken cancellationToken = default) 
+    { 
+        if (is鈥婱ultipleThrowException) 
+        { 
+            var entitys = await (await GetDbSetAsync()) 
+                .IncludeDetails() 
+                .WhereIf(whereConditions != null, whereConditions) 
+                .Where(x => !x.IsDeleted) 
+                .OrderByDescending(x => x.CreationTime) 
+                .ToListAsync(GetCancellationToken(cancellationToken)); 
+            if (entitys?.Count > 1) 
+            { 
+                throw new UserFriendlyException("鏌ヨ鍒板鏉¤褰�"); 
+            } 
+            return entitys?.FirstOrDefault(); 
+        } 
+        else 
+        { 
+            return await (await GetDbSetAsync()) 
+                .IncludeDetails() 
+                .WhereIf(whereConditions != null, whereConditions) 
+                .Where(x => !x.IsDeleted) 
+                .OrderByDescending(x => x.CreationTime) 
+                .FirstOrDefaultAsync(GetCancellationToken(cancellationToken)); 
+        } 
+    } 
+} 
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.MySQL/Migrations/20250520032108_Update2.Designer.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.MySQL/Migrations/20250520032108_Update2.Designer.cs
new file mode 100644
index 0000000..b415230
--- /dev/null
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.MySQL/Migrations/20250520032108_Update2.Designer.cs
@@ -0,0 +1,978 @@
+锘�// <auto-generated />
+using System;
+using CMS.Plugin.PipeLineLems.MySQL;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using Volo.Abp.EntityFrameworkCore;
+
+#nullable disable
+
+namespace CMS.Plugin.PipeLineLems.MySQL.Migrations
+{
+    [DbContext(typeof(CMSPluginDbContext))]
+    [Migration("20250520032108_Update2")]
+    partial class Update2
+    {
+        protected override void BuildTargetModel(ModelBuilder modelBuilder)
+        {
+#pragma warning disable 612, 618
+            modelBuilder
+                .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.MySql)
+                .HasAnnotation("ProductVersion", "6.0.16")
+                .HasAnnotation("Relational:MaxIdentifierLength", 64);
+
+            modelBuilder.Entity("CMS.Plugin.PipeLineLems.Domain.CallMaterialOrder.CallMaterialOrder", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("char(36)");
+
+                    b.Property<int>("CallMaterialStatus")
+                        .HasColumnType("int")
+                        .HasComment("鍙枡鐘舵��");
+
+                    b.Property<string>("ConcurrencyStamp")
+                        .IsConcurrencyToken()
+                        .HasMaxLength(40)
+                        .HasColumnType("varchar(40)")
+                        .HasColumnName("ConcurrencyStamp")
+                        .HasComment("骞跺彂鎴�");
+
+                    b.Property<DateTime>("CreationTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("CreationTime")
+                        .HasComment("鍒涘缓鏃堕棿");
+
+                    b.Property<Guid?>("CreatorId")
+                        .HasMaxLength(36)
+                        .HasColumnType("char(36)")
+                        .HasColumnName("CreatorId")
+                        .HasComment("鍒涘缓浜篒D");
+
+                    b.Property<string>("CreatorName")
+                        .HasMaxLength(64)
+                        .HasColumnType("varchar(64)")
+                        .HasComment("鍒涘缓浜�");
+
+                    b.Property<string>("DataIdentifier")
+                        .IsRequired()
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("鍘熸枡鏍囪瘑");
+
+                    b.Property<string>("DeleteRemark")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("鍒犻櫎澶囨敞");
+
+                    b.Property<Guid?>("DeleterId")
+                        .HasMaxLength(36)
+                        .HasColumnType("char(36)")
+                        .HasColumnName("DeleterId")
+                        .HasComment("鍒犻櫎浜篒D");
+
+                    b.Property<DateTime?>("DeletionTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("DeletionTime")
+                        .HasComment("鍒犻櫎鏃堕棿");
+
+                    b.Property<string>("ExtraField1")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("鎵╁睍瀛楁1");
+
+                    b.Property<string>("ExtraField2")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("鎵╁睍瀛楁2");
+
+                    b.Property<string>("ExtraField3")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("鎵╁睍瀛楁3");
+
+                    b.Property<string>("ExtraProperties")
+                        .HasColumnType("longtext")
+                        .HasColumnName("ExtraProperties")
+                        .HasComment("鎵╁睍灞炴��");
+
+                    b.Property<bool>("IsDeleted")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("tinyint(1)")
+                        .HasDefaultValue(false)
+                        .HasColumnName("IsDeleted")
+                        .HasComment("鏄惁鍒犻櫎");
+
+                    b.Property<bool?>("IsDisabled")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("tinyint(1)")
+                        .HasDefaultValue(false)
+                        .HasComment("鏄惁绂佺敤");
+
+                    b.Property<DateTime?>("LastModificationTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("LastModificationTime")
+                        .HasComment("淇敼鏃堕棿");
+
+                    b.Property<Guid?>("LastModifierId")
+                        .HasMaxLength(36)
+                        .HasColumnType("char(36)")
+                        .HasColumnName("LastModifierId")
+                        .HasComment("淇敼浜篒D");
+
+                    b.Property<string>("LastModifierName")
+                        .HasMaxLength(64)
+                        .HasColumnType("varchar(64)")
+                        .HasComment("淇敼浜�");
+
+                    b.Property<string>("MaterialBatch")
+                        .HasColumnType("longtext");
+
+                    b.Property<string>("MaterialMode")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("鍘熸枡鍨嬪彿");
+
+                    b.Property<string>("OperationRemark")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("鎿嶄綔澶囨敞");
+
+                    b.Property<int>("Quantity")
+                        .HasColumnType("int")
+                        .HasComment("鍙枡鏁伴噺");
+
+                    b.Property<string>("Remark")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("澶囨敞");
+
+                    b.Property<int>("Sort")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int")
+                        .HasDefaultValue(0)
+                        .HasComment("鎺掑簭");
+
+                    b.Property<string>("WmsRetResult")
+                        .HasColumnType("longtext")
+                        .HasComment("WMS杩斿洖缁撴灉");
+
+                    b.Property<string>("WmsTaskNo")
+                        .HasColumnType("longtext")
+                        .HasComment("WMS浠诲姟鍙�");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("DataIdentifier")
+                        .IsUnique();
+
+                    b.ToTable("scms_callmaterialorders", (string)null);
+
+                    b.HasComment("鍙枡鍗曡〃");
+                });
+
+            modelBuilder.Entity("CMS.Plugin.PipeLineLems.Domain.CallMaterialOrderRecord.CallMaterialOrderRecord", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("char(36)");
+
+                    b.Property<int>("CallMaterialStatus")
+                        .HasColumnType("int")
+                        .HasComment("鍙枡鐘舵��");
+
+                    b.Property<string>("ConcurrencyStamp")
+                        .IsConcurrencyToken()
+                        .HasMaxLength(40)
+                        .HasColumnType("varchar(40)")
+                        .HasColumnName("ConcurrencyStamp")
+                        .HasComment("骞跺彂鎴�");
+
+                    b.Property<DateTime>("CreationTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("CreationTime")
+                        .HasComment("鍒涘缓鏃堕棿");
+
+                    b.Property<Guid?>("CreatorId")
+                        .HasMaxLength(36)
+                        .HasColumnType("char(36)")
+                        .HasColumnName("CreatorId")
+                        .HasComment("鍒涘缓浜篒D");
+
+                    b.Property<string>("CreatorName")
+                        .HasMaxLength(64)
+                        .HasColumnType("varchar(64)")
+                        .HasComment("鍒涘缓浜�");
+
+                    b.Property<string>("DataIdentifier")
+                        .IsRequired()
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("鍘熸枡鏍囪瘑");
+
+                    b.Property<Guid?>("DeleterId")
+                        .HasMaxLength(36)
+                        .HasColumnType("char(36)")
+                        .HasColumnName("DeleterId")
+                        .HasComment("鍒犻櫎浜篒D");
+
+                    b.Property<DateTime?>("DeletionTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("DeletionTime")
+                        .HasComment("鍒犻櫎鏃堕棿");
+
+                    b.Property<string>("ExtraField1")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("鎵╁睍瀛楁1");
+
+                    b.Property<string>("ExtraField2")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("鎵╁睍瀛楁2");
+
+                    b.Property<string>("ExtraField3")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("鎵╁睍瀛楁3");
+
+                    b.Property<string>("ExtraProperties")
+                        .HasColumnType("longtext")
+                        .HasColumnName("ExtraProperties")
+                        .HasComment("鎵╁睍灞炴��");
+
+                    b.Property<bool>("IsDeleted")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("tinyint(1)")
+                        .HasDefaultValue(false)
+                        .HasColumnName("IsDeleted")
+                        .HasComment("鏄惁鍒犻櫎");
+
+                    b.Property<DateTime?>("LastModificationTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("LastModificationTime")
+                        .HasComment("淇敼鏃堕棿");
+
+                    b.Property<Guid?>("LastModifierId")
+                        .HasMaxLength(36)
+                        .HasColumnType("char(36)")
+                        .HasColumnName("LastModifierId")
+                        .HasComment("淇敼浜篒D");
+
+                    b.Property<string>("MaterialBatch")
+                        .HasColumnType("longtext");
+
+                    b.Property<string>("MaterialMode")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("鍘熸枡鍨嬪彿");
+
+                    b.Property<int>("Quantity")
+                        .HasColumnType("int")
+                        .HasComment("鍙枡鏁伴噺");
+
+                    b.Property<string>("Remark")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("澶囨敞");
+
+                    b.Property<int>("Sort")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int")
+                        .HasDefaultValue(0)
+                        .HasComment("鎺掑簭");
+
+                    b.Property<string>("WmsRetResult")
+                        .HasColumnType("longtext")
+                        .HasComment("WMS杩斿洖缁撴灉");
+
+                    b.Property<string>("WmsTaskNo")
+                        .HasColumnType("longtext")
+                        .HasComment("WMS浠诲姟鍙�");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("DataIdentifier");
+
+                    b.ToTable("scms_callmaterialorderrecords", (string)null);
+
+                    b.HasComment("鍙枡璁板綍琛�");
+                });
+
+            modelBuilder.Entity("CMS.Plugin.PipeLineLems.Domain.MyTestEntityNames.MyTestEntityName", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("char(36)");
+
+                    b.Property<string>("Code")
+                        .IsRequired()
+                        .HasMaxLength(64)
+                        .HasColumnType("varchar(64)")
+                        .HasComment("缂栫爜");
+
+                    b.Property<string>("ConcurrencyStamp")
+                        .IsConcurrencyToken()
+                        .HasMaxLength(40)
+                        .HasColumnType("varchar(40)")
+                        .HasColumnName("ConcurrencyStamp");
+
+                    b.Property<DateTime>("CreationTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("CreationTime");
+
+                    b.Property<Guid?>("CreatorId")
+                        .HasColumnType("char(36)")
+                        .HasColumnName("CreatorId");
+
+                    b.Property<Guid?>("DeleterId")
+                        .HasColumnType("char(36)")
+                        .HasColumnName("DeleterId");
+
+                    b.Property<DateTime?>("DeletionTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("DeletionTime");
+
+                    b.Property<string>("ExtraProperties")
+                        .HasColumnType("longtext")
+                        .HasColumnName("ExtraProperties");
+
+                    b.Property<bool>("IsDeleted")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("tinyint(1)")
+                        .HasDefaultValue(false)
+                        .HasColumnName("IsDeleted");
+
+                    b.Property<bool?>("IsDisabled")
+                        .HasColumnType("tinyint(1)")
+                        .HasComment("鏄惁绂佺敤");
+
+                    b.Property<DateTime?>("LastModificationTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("LastModificationTime");
+
+                    b.Property<Guid?>("LastModifierId")
+                        .HasColumnType("char(36)")
+                        .HasColumnName("LastModifierId");
+
+                    b.Property<string>("Name")
+                        .IsRequired()
+                        .HasMaxLength(64)
+                        .HasColumnType("varchar(64)")
+                        .HasComment("鍚嶇О");
+
+                    b.Property<string>("Remark")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("澶囨敞");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int")
+                        .HasComment("鎺掑簭");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("Name");
+
+                    b.ToTable("scms_mytestentitynames", (string)null);
+
+                    b.HasComment("MyTestEntityName");
+                });
+
+            modelBuilder.Entity("CMS.Plugin.PipeLineLems.Domain.WorkPlan.WorkPlan", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("char(36)");
+
+                    b.Property<int>("CallMaterialStatus")
+                        .HasColumnType("int")
+                        .HasComment("鍙枡鐘舵��");
+
+                    b.Property<string>("ConcurrencyStamp")
+                        .IsConcurrencyToken()
+                        .HasMaxLength(40)
+                        .HasColumnType("varchar(40)")
+                        .HasColumnName("ConcurrencyStamp")
+                        .HasComment("骞跺彂鎴�");
+
+                    b.Property<DateTime>("CreationTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("CreationTime")
+                        .HasComment("鍒涘缓鏃堕棿");
+
+                    b.Property<Guid?>("CreatorId")
+                        .HasMaxLength(36)
+                        .HasColumnType("char(36)")
+                        .HasColumnName("CreatorId")
+                        .HasComment("鍒涘缓浜篒D");
+
+                    b.Property<string>("CreatorName")
+                        .HasMaxLength(64)
+                        .HasColumnType("varchar(64)")
+                        .HasComment("鍒涘缓浜�");
+
+                    b.Property<decimal>("CuttingPosition")
+                        .HasColumnType("decimal(18,2)")
+                        .HasComment("鍒囧壊浣嶇疆");
+
+                    b.Property<string>("DataIdentifier")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("鍘熸枡鏍囪瘑");
+
+                    b.Property<string>("DeleteRemark")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("鍒犻櫎澶囨敞");
+
+                    b.Property<Guid?>("DeleterId")
+                        .HasMaxLength(36)
+                        .HasColumnType("char(36)")
+                        .HasColumnName("DeleterId")
+                        .HasComment("鍒犻櫎浜篒D");
+
+                    b.Property<DateTime?>("DeletionTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("DeletionTime")
+                        .HasComment("鍒犻櫎鏃堕棿");
+
+                    b.Property<string>("EquipmentCode")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("璁惧浠g爜");
+
+                    b.Property<string>("ExtraField1")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("鎵╁睍瀛楁1");
+
+                    b.Property<string>("ExtraField2")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("鎵╁睍瀛楁2");
+
+                    b.Property<string>("ExtraField3")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("鎵╁睍瀛楁3");
+
+                    b.Property<string>("ExtraProperties")
+                        .HasColumnType("longtext")
+                        .HasColumnName("ExtraProperties")
+                        .HasComment("鎵╁睍灞炴��");
+
+                    b.Property<string>("FactoryCode")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("宸ュ巶浠g爜");
+
+                    b.Property<decimal>("FlangeInnerDiameter")
+                        .HasColumnType("decimal(18,2)")
+                        .HasComment("娉曞叞鐩村緞(mm)");
+
+                    b.Property<decimal>("FlangeThickness")
+                        .HasColumnType("decimal(18,2)")
+                        .HasComment("娉曞叞鍘氬害(mm)");
+
+                    b.Property<bool>("IsDeleted")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("tinyint(1)")
+                        .HasDefaultValue(false)
+                        .HasColumnName("IsDeleted")
+                        .HasComment("鏄惁鍒犻櫎");
+
+                    b.Property<bool?>("IsDisabled")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("tinyint(1)")
+                        .HasDefaultValue(false)
+                        .HasComment("鏄惁绂佺敤");
+
+                    b.Property<DateTime?>("LastModificationTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("LastModificationTime")
+                        .HasComment("淇敼鏃堕棿");
+
+                    b.Property<Guid?>("LastModifierId")
+                        .HasMaxLength(36)
+                        .HasColumnType("char(36)")
+                        .HasColumnName("LastModifierId")
+                        .HasComment("淇敼浜篒D");
+
+                    b.Property<string>("LastModifierName")
+                        .HasMaxLength(64)
+                        .HasColumnType("varchar(64)")
+                        .HasComment("淇敼浜�");
+
+                    b.Property<decimal>("Length")
+                        .HasColumnType("decimal(18,2)")
+                        .HasComment("闀垮害(mm)");
+
+                    b.Property<string>("MarkingContent")
+                        .HasMaxLength(1024)
+                        .HasColumnType("varchar(1024)")
+                        .HasComment("鎵撶爜鍐呭");
+
+                    b.Property<decimal>("MarkingPosition")
+                        .HasColumnType("decimal(18,2)")
+                        .HasComment("鎵撶爜浣嶇疆");
+
+                    b.Property<string>("Material")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("鏉愯川");
+
+                    b.Property<string>("MaterialMode")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("鍘熸枡鍨嬪彿");
+
+                    b.Property<string>("OperationRemark")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("鎿嶄綔澶囨敞");
+
+                    b.Property<decimal>("OuterDiameter")
+                        .HasColumnType("decimal(18,2)")
+                        .HasComment("澶栧緞(mm)");
+
+                    b.Property<string>("PipeAllowableStress")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("娉曞叞鍐茬爜鍐呭");
+
+                    b.Property<decimal>("PipeDiameter")
+                        .HasColumnType("decimal(18,2)")
+                        .HasComment("濂楃闀垮害(mm)");
+
+                    b.Property<string>("PipeFittingCode")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("绠′欢缂栫爜");
+
+                    b.Property<string>("PipeSectionName")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("绠℃鍚嶇О");
+
+                    b.Property<string>("PipeSpecCode")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("绠℃缂栫爜");
+
+                    b.Property<decimal>("PipeWallThickness")
+                        .HasColumnType("decimal(18,2)")
+                        .HasComment("濂楃鐩村緞(mm)");
+
+                    b.Property<DateTime?>("PlannedEndTime")
+                        .HasColumnType("datetime(6)")
+                        .HasComment("璁″垝瀹屾垚鏃堕棿");
+
+                    b.Property<DateTime?>("PlannedStartTime")
+                        .HasColumnType("datetime(6)")
+                        .HasComment("璁″垝寮�濮嬫椂闂�");
+
+                    b.Property<string>("PreSerialNumber")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("椤哄簭鍙�");
+
+                    b.Property<string>("ProcessName")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("宸ュ簭鍚嶇О");
+
+                    b.Property<string>("ProcessRouteNumber")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("宸ヨ壓娴佸悜缂栧彿");
+
+                    b.Property<string>("ProdLineCode")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("浜х嚎缂栫爜");
+
+                    b.Property<string>("ProductCode")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("浜у搧浠g爜");
+
+                    b.Property<string>("ProjectNumber")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("椤圭洰鍙�");
+
+                    b.Property<int>("Quantity")
+                        .HasColumnType("int")
+                        .HasComment("绠℃鏁伴噺");
+
+                    b.Property<string>("Remark")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("澶囨敞");
+
+                    b.Property<string>("ShipNumber")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("鑸瑰彿");
+
+                    b.Property<int>("Sort")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int")
+                        .HasDefaultValue(0)
+                        .HasComment("鎺掑簭");
+
+                    b.Property<string>("TaskCode")
+                        .IsRequired()
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("浠诲姟缂栫爜");
+
+                    b.Property<string>("TeamInfo")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("鐝粍淇℃伅");
+
+                    b.Property<decimal>("Thickness")
+                        .HasColumnType("decimal(18,2)")
+                        .HasComment("澹佸帤(mm)");
+
+                    b.Property<string>("Timestamp")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("鏃堕棿鎴�");
+
+                    b.Property<string>("WeldingHeatInput")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("娉曞叞鍏О鍘嬪姏");
+
+                    b.Property<int>("WorkPlanStatus")
+                        .HasColumnType("int")
+                        .HasComment("璁″垝鐘舵��");
+
+                    b.Property<string>("WorkstationCode")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("宸ヤ綅浠g爜");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("DataIdentifier");
+
+                    b.HasIndex("PlannedEndTime");
+
+                    b.HasIndex("PlannedStartTime");
+
+                    b.HasIndex("TaskCode")
+                        .IsUnique();
+
+                    b.ToTable("scms_workplans", (string)null);
+
+                    b.HasComment("浣滀笟璁″垝琛�");
+                });
+
+            modelBuilder.Entity("CMS.Plugin.PipeLineLems.Domain.WorkTask.WorkTask", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("char(36)");
+
+                    b.Property<int>("CallMaterialStatus")
+                        .HasColumnType("int")
+                        .HasComment("鍙枡鐘舵��");
+
+                    b.Property<string>("ConcurrencyStamp")
+                        .IsConcurrencyToken()
+                        .HasMaxLength(40)
+                        .HasColumnType("varchar(40)")
+                        .HasColumnName("ConcurrencyStamp")
+                        .HasComment("骞跺彂鎴�");
+
+                    b.Property<DateTime>("CreationTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("CreationTime")
+                        .HasComment("鍒涘缓鏃堕棿");
+
+                    b.Property<Guid?>("CreatorId")
+                        .HasMaxLength(36)
+                        .HasColumnType("char(36)")
+                        .HasColumnName("CreatorId")
+                        .HasComment("鍒涘缓浜篒D");
+
+                    b.Property<string>("CreatorName")
+                        .HasMaxLength(64)
+                        .HasColumnType("varchar(64)")
+                        .HasComment("鍒涘缓浜�");
+
+                    b.Property<decimal>("CuttingPosition")
+                        .HasColumnType("decimal(18,2)")
+                        .HasComment("鍒囧壊浣嶇疆");
+
+                    b.Property<string>("DataIdentifier")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("鍘熸枡鏍囪瘑");
+
+                    b.Property<string>("DeleteRemark")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("鍒犻櫎澶囨敞");
+
+                    b.Property<Guid?>("DeleterId")
+                        .HasMaxLength(36)
+                        .HasColumnType("char(36)")
+                        .HasColumnName("DeleterId")
+                        .HasComment("鍒犻櫎浜篒D");
+
+                    b.Property<DateTime?>("DeletionTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("DeletionTime")
+                        .HasComment("鍒犻櫎鏃堕棿");
+
+                    b.Property<string>("EquipmentCode")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("璁惧浠g爜");
+
+                    b.Property<string>("ExtraField1")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("鎵╁睍瀛楁1");
+
+                    b.Property<string>("ExtraField2")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("鎵╁睍瀛楁2");
+
+                    b.Property<string>("ExtraField3")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("鎵╁睍瀛楁3");
+
+                    b.Property<string>("ExtraProperties")
+                        .HasColumnType("longtext")
+                        .HasColumnName("ExtraProperties")
+                        .HasComment("鎵╁睍灞炴��");
+
+                    b.Property<string>("FactoryCode")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("宸ュ巶浠g爜");
+
+                    b.Property<decimal>("FlangeInnerDiameter")
+                        .HasColumnType("decimal(18,2)")
+                        .HasComment("娉曞叞鐩村緞(mm)");
+
+                    b.Property<decimal>("FlangeThickness")
+                        .HasColumnType("decimal(18,2)")
+                        .HasComment("娉曞叞鍘氬害(mm)");
+
+                    b.Property<bool>("IsDeleted")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("tinyint(1)")
+                        .HasDefaultValue(false)
+                        .HasColumnName("IsDeleted")
+                        .HasComment("鏄惁鍒犻櫎");
+
+                    b.Property<bool?>("IsDisabled")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("tinyint(1)")
+                        .HasDefaultValue(false)
+                        .HasComment("鏄惁绂佺敤");
+
+                    b.Property<DateTime?>("LastModificationTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("LastModificationTime")
+                        .HasComment("淇敼鏃堕棿");
+
+                    b.Property<Guid?>("LastModifierId")
+                        .HasMaxLength(36)
+                        .HasColumnType("char(36)")
+                        .HasColumnName("LastModifierId")
+                        .HasComment("淇敼浜篒D");
+
+                    b.Property<string>("LastModifierName")
+                        .HasMaxLength(64)
+                        .HasColumnType("varchar(64)")
+                        .HasComment("淇敼浜�");
+
+                    b.Property<decimal>("Length")
+                        .HasColumnType("decimal(18,2)")
+                        .HasComment("闀垮害(mm)");
+
+                    b.Property<string>("MarkingContent")
+                        .HasMaxLength(1024)
+                        .HasColumnType("varchar(1024)")
+                        .HasComment("鎵撶爜鍐呭");
+
+                    b.Property<decimal>("MarkingPosition")
+                        .HasColumnType("decimal(18,2)")
+                        .HasComment("鎵撶爜浣嶇疆");
+
+                    b.Property<string>("Material")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("鏉愯川");
+
+                    b.Property<string>("MaterialMode")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("鍘熸枡鍨嬪彿");
+
+                    b.Property<string>("OperationRemark")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("鎿嶄綔澶囨敞");
+
+                    b.Property<decimal>("OuterDiameter")
+                        .HasColumnType("decimal(18,2)")
+                        .HasComment("澶栧緞(mm)");
+
+                    b.Property<string>("PipeAllowableStress")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("娉曞叞鍐茬爜鍐呭");
+
+                    b.Property<decimal>("PipeDiameter")
+                        .HasColumnType("decimal(18,2)")
+                        .HasComment("濂楃闀垮害(mm)");
+
+                    b.Property<string>("PipeFittingCode")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("绠′欢缂栫爜");
+
+                    b.Property<string>("PipeSectionName")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("绠℃鍚嶇О");
+
+                    b.Property<string>("PipeSpecCode")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("绠℃缂栫爜");
+
+                    b.Property<decimal>("PipeWallThickness")
+                        .HasColumnType("decimal(18,2)")
+                        .HasComment("濂楃鐩村緞(mm)");
+
+                    b.Property<DateTime?>("PlannedEndTime")
+                        .HasColumnType("datetime(6)")
+                        .HasComment("璁″垝瀹屾垚鏃堕棿");
+
+                    b.Property<DateTime?>("PlannedStartTime")
+                        .HasColumnType("datetime(6)")
+                        .HasComment("璁″垝寮�濮嬫椂闂�");
+
+                    b.Property<string>("PreSerialNumber")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("椤哄簭鍙�");
+
+                    b.Property<string>("ProcessName")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("宸ュ簭鍚嶇О");
+
+                    b.Property<string>("ProcessRouteNumber")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("宸ヨ壓娴佸悜缂栧彿");
+
+                    b.Property<string>("ProdLineCode")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("浜х嚎缂栫爜");
+
+                    b.Property<string>("ProductCode")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("浜у搧浠g爜");
+
+                    b.Property<string>("ProjectNumber")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("椤圭洰鍙�");
+
+                    b.Property<int>("Quantity")
+                        .HasColumnType("int")
+                        .HasComment("绠℃鏁伴噺");
+
+                    b.Property<string>("Remark")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("澶囨敞");
+
+                    b.Property<string>("ShipNumber")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("鑸瑰彿");
+
+                    b.Property<string>("Son_TaskCode")
+                        .IsRequired()
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("瀛愪换鍔$紪鐮�");
+
+                    b.Property<int>("Sort")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int")
+                        .HasDefaultValue(0)
+                        .HasComment("鎺掑簭");
+
+                    b.Property<string>("TaskCode")
+                        .IsRequired()
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("浠诲姟缂栫爜");
+
+                    b.Property<string>("TeamInfo")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("鐝粍淇℃伅");
+
+                    b.Property<decimal>("Thickness")
+                        .HasColumnType("decimal(18,2)")
+                        .HasComment("澹佸帤(mm)");
+
+                    b.Property<string>("Timestamp")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("鏃堕棿鎴�");
+
+                    b.Property<string>("WeldingHeatInput")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("娉曞叞鍏О鍘嬪姏");
+
+                    b.Property<int>("WorkPlanStatus")
+                        .HasColumnType("int")
+                        .HasComment("璁″垝鐘舵��");
+
+                    b.Property<string>("WorkstationCode")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("宸ヤ綅浠g爜");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("DataIdentifier");
+
+                    b.HasIndex("PlannedEndTime");
+
+                    b.HasIndex("PlannedStartTime");
+
+                    b.HasIndex("Son_TaskCode")
+                        .IsUnique();
+
+                    b.ToTable("scms_worktasks", (string)null);
+
+                    b.HasComment("浣滀笟浠诲姟琛�");
+                });
+#pragma warning restore 612, 618
+        }
+    }
+}
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.MySQL/Migrations/20250520032108_Update2.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.MySQL/Migrations/20250520032108_Update2.cs
new file mode 100644
index 0000000..991b6d5
--- /dev/null
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.MySQL/Migrations/20250520032108_Update2.cs
@@ -0,0 +1,427 @@
+锘縰sing System;
+using Microsoft.EntityFrameworkCore.Migrations;
+
+#nullable disable
+
+namespace CMS.Plugin.PipeLineLems.MySQL.Migrations
+{
+    public partial class Update2 : Migration
+    {
+        protected override void Up(MigrationBuilder migrationBuilder)
+        {
+            migrationBuilder.AlterDatabase()
+                .Annotation("MySql:CharSet", "utf8mb4");
+
+            migrationBuilder.CreateTable(
+                name: "scms_callmaterialorderrecords",
+                columns: table => new
+                {
+                    Id = table.Column<Guid>(type: "char(36)", nullable: false, collation: "ascii_general_ci"),
+                    DataIdentifier = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: false, comment: "鍘熸枡鏍囪瘑")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    MaterialMode = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "鍘熸枡鍨嬪彿")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    MaterialBatch = table.Column<string>(type: "longtext", nullable: true)
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    CallMaterialStatus = table.Column<int>(type: "int", nullable: false, comment: "鍙枡鐘舵��"),
+                    Quantity = table.Column<int>(type: "int", nullable: false, comment: "鍙枡鏁伴噺"),
+                    WmsRetResult = table.Column<string>(type: "longtext", nullable: true, comment: "WMS杩斿洖缁撴灉")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    WmsTaskNo = table.Column<string>(type: "longtext", nullable: true, comment: "WMS浠诲姟鍙�")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    ExtraProperties = table.Column<string>(type: "longtext", nullable: true, comment: "鎵╁睍灞炴��")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    ConcurrencyStamp = table.Column<string>(type: "varchar(40)", maxLength: 40, nullable: true, comment: "骞跺彂鎴�")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    CreationTime = table.Column<DateTime>(type: "datetime(6)", nullable: false, comment: "鍒涘缓鏃堕棿"),
+                    CreatorId = table.Column<Guid>(type: "char(36)", maxLength: 36, nullable: true, comment: "鍒涘缓浜篒D", collation: "ascii_general_ci"),
+                    LastModificationTime = table.Column<DateTime>(type: "datetime(6)", nullable: true, comment: "淇敼鏃堕棿"),
+                    LastModifierId = table.Column<Guid>(type: "char(36)", maxLength: 36, nullable: true, comment: "淇敼浜篒D", collation: "ascii_general_ci"),
+                    IsDeleted = table.Column<bool>(type: "tinyint(1)", nullable: false, defaultValue: false, comment: "鏄惁鍒犻櫎"),
+                    DeleterId = table.Column<Guid>(type: "char(36)", maxLength: 36, nullable: true, comment: "鍒犻櫎浜篒D", collation: "ascii_general_ci"),
+                    DeletionTime = table.Column<DateTime>(type: "datetime(6)", nullable: true, comment: "鍒犻櫎鏃堕棿"),
+                    CreatorName = table.Column<string>(type: "varchar(64)", maxLength: 64, nullable: true, comment: "鍒涘缓浜�")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    Sort = table.Column<int>(type: "int", nullable: false, defaultValue: 0, comment: "鎺掑簭"),
+                    Remark = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "澶囨敞")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    ExtraField1 = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "鎵╁睍瀛楁1")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    ExtraField2 = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "鎵╁睍瀛楁2")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    ExtraField3 = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "鎵╁睍瀛楁3")
+                        .Annotation("MySql:CharSet", "utf8mb4")
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_scms_callmaterialorderrecords", x => x.Id);
+                },
+                comment: "鍙枡璁板綍琛�")
+                .Annotation("MySql:CharSet", "utf8mb4");
+
+            migrationBuilder.CreateTable(
+                name: "scms_callmaterialorders",
+                columns: table => new
+                {
+                    Id = table.Column<Guid>(type: "char(36)", nullable: false, collation: "ascii_general_ci"),
+                    DataIdentifier = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: false, comment: "鍘熸枡鏍囪瘑")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    MaterialMode = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "鍘熸枡鍨嬪彿")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    MaterialBatch = table.Column<string>(type: "longtext", nullable: true)
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    CallMaterialStatus = table.Column<int>(type: "int", nullable: false, comment: "鍙枡鐘舵��"),
+                    Quantity = table.Column<int>(type: "int", nullable: false, comment: "鍙枡鏁伴噺"),
+                    WmsRetResult = table.Column<string>(type: "longtext", nullable: true, comment: "WMS杩斿洖缁撴灉")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    WmsTaskNo = table.Column<string>(type: "longtext", nullable: true, comment: "WMS浠诲姟鍙�")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    ExtraProperties = table.Column<string>(type: "longtext", nullable: true, comment: "鎵╁睍灞炴��")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    ConcurrencyStamp = table.Column<string>(type: "varchar(40)", maxLength: 40, nullable: true, comment: "骞跺彂鎴�")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    CreationTime = table.Column<DateTime>(type: "datetime(6)", nullable: false, comment: "鍒涘缓鏃堕棿"),
+                    CreatorId = table.Column<Guid>(type: "char(36)", maxLength: 36, nullable: true, comment: "鍒涘缓浜篒D", collation: "ascii_general_ci"),
+                    LastModificationTime = table.Column<DateTime>(type: "datetime(6)", nullable: true, comment: "淇敼鏃堕棿"),
+                    LastModifierId = table.Column<Guid>(type: "char(36)", maxLength: 36, nullable: true, comment: "淇敼浜篒D", collation: "ascii_general_ci"),
+                    IsDeleted = table.Column<bool>(type: "tinyint(1)", nullable: false, defaultValue: false, comment: "鏄惁鍒犻櫎"),
+                    DeleterId = table.Column<Guid>(type: "char(36)", maxLength: 36, nullable: true, comment: "鍒犻櫎浜篒D", collation: "ascii_general_ci"),
+                    DeletionTime = table.Column<DateTime>(type: "datetime(6)", nullable: true, comment: "鍒犻櫎鏃堕棿"),
+                    CreatorName = table.Column<string>(type: "varchar(64)", maxLength: 64, nullable: true, comment: "鍒涘缓浜�")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    LastModifierName = table.Column<string>(type: "varchar(64)", maxLength: 64, nullable: true, comment: "淇敼浜�")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    OperationRemark = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "鎿嶄綔澶囨敞")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    DeleteRemark = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "鍒犻櫎澶囨敞")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    Sort = table.Column<int>(type: "int", nullable: false, defaultValue: 0, comment: "鎺掑簭"),
+                    Remark = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "澶囨敞")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    IsDisabled = table.Column<bool>(type: "tinyint(1)", nullable: true, defaultValue: false, comment: "鏄惁绂佺敤"),
+                    ExtraField1 = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "鎵╁睍瀛楁1")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    ExtraField2 = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "鎵╁睍瀛楁2")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    ExtraField3 = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "鎵╁睍瀛楁3")
+                        .Annotation("MySql:CharSet", "utf8mb4")
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_scms_callmaterialorders", x => x.Id);
+                },
+                comment: "鍙枡鍗曡〃")
+                .Annotation("MySql:CharSet", "utf8mb4");
+
+            migrationBuilder.CreateTable(
+                name: "scms_mytestentitynames",
+                columns: table => new
+                {
+                    Id = table.Column<Guid>(type: "char(36)", nullable: false, collation: "ascii_general_ci"),
+                    Code = table.Column<string>(type: "varchar(64)", maxLength: 64, nullable: false, comment: "缂栫爜")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    Name = table.Column<string>(type: "varchar(64)", maxLength: 64, nullable: false, comment: "鍚嶇О")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    Sort = table.Column<int>(type: "int", nullable: false, comment: "鎺掑簭"),
+                    Remark = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "澶囨敞")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    IsDisabled = table.Column<bool>(type: "tinyint(1)", nullable: true, comment: "鏄惁绂佺敤"),
+                    ExtraProperties = table.Column<string>(type: "longtext", nullable: true)
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    ConcurrencyStamp = table.Column<string>(type: "varchar(40)", maxLength: 40, nullable: true)
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    CreationTime = table.Column<DateTime>(type: "datetime(6)", nullable: false),
+                    CreatorId = table.Column<Guid>(type: "char(36)", nullable: true, collation: "ascii_general_ci"),
+                    LastModificationTime = table.Column<DateTime>(type: "datetime(6)", nullable: true),
+                    LastModifierId = table.Column<Guid>(type: "char(36)", nullable: true, collation: "ascii_general_ci"),
+                    IsDeleted = table.Column<bool>(type: "tinyint(1)", nullable: false, defaultValue: false),
+                    DeleterId = table.Column<Guid>(type: "char(36)", nullable: true, collation: "ascii_general_ci"),
+                    DeletionTime = table.Column<DateTime>(type: "datetime(6)", nullable: true)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_scms_mytestentitynames", x => x.Id);
+                },
+                comment: "MyTestEntityName")
+                .Annotation("MySql:CharSet", "utf8mb4");
+
+            migrationBuilder.CreateTable(
+                name: "scms_workplans",
+                columns: table => new
+                {
+                    Id = table.Column<Guid>(type: "char(36)", nullable: false, collation: "ascii_general_ci"),
+                    TaskCode = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: false, comment: "浠诲姟缂栫爜")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    WorkPlanStatus = table.Column<int>(type: "int", nullable: false, comment: "璁″垝鐘舵��"),
+                    CallMaterialStatus = table.Column<int>(type: "int", nullable: false, comment: "鍙枡鐘舵��"),
+                    DataIdentifier = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "鍘熸枡鏍囪瘑")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    MaterialMode = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "鍘熸枡鍨嬪彿")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    Length = table.Column<decimal>(type: "decimal(18,2)", nullable: false, comment: "闀垮害(mm)"),
+                    MarkingContent = table.Column<string>(type: "varchar(1024)", maxLength: 1024, nullable: true, comment: "鎵撶爜鍐呭")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    MarkingPosition = table.Column<decimal>(type: "decimal(18,2)", nullable: false, comment: "鎵撶爜浣嶇疆"),
+                    CuttingPosition = table.Column<decimal>(type: "decimal(18,2)", nullable: false, comment: "鍒囧壊浣嶇疆"),
+                    Quantity = table.Column<int>(type: "int", nullable: false, comment: "绠℃鏁伴噺"),
+                    FlangeThickness = table.Column<decimal>(type: "decimal(18,2)", nullable: false, comment: "娉曞叞鍘氬害(mm)"),
+                    FlangeInnerDiameter = table.Column<decimal>(type: "decimal(18,2)", nullable: false, comment: "娉曞叞鐩村緞(mm)"),
+                    WeldingHeatInput = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "娉曞叞鍏О鍘嬪姏")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    PipeAllowableStress = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "娉曞叞鍐茬爜鍐呭")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    PipeDiameter = table.Column<decimal>(type: "decimal(18,2)", nullable: false, comment: "濂楃闀垮害(mm)"),
+                    PipeWallThickness = table.Column<decimal>(type: "decimal(18,2)", nullable: false, comment: "濂楃鐩村緞(mm)"),
+                    FactoryCode = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "宸ュ巶浠g爜")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    ProductCode = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "浜у搧浠g爜")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    WorkstationCode = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "宸ヤ綅浠g爜")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    EquipmentCode = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "璁惧浠g爜")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    ProdLineCode = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "浜х嚎缂栫爜")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    ShipNumber = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "鑸瑰彿")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    ProjectNumber = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "椤圭洰鍙�")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    ProcessName = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "宸ュ簭鍚嶇О")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    PipeFittingCode = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "绠′欢缂栫爜")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    PreSerialNumber = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "椤哄簭鍙�")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    PipeSpecCode = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "绠℃缂栫爜")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    PipeSectionName = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "绠℃鍚嶇О")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    OuterDiameter = table.Column<decimal>(type: "decimal(18,2)", nullable: false, comment: "澶栧緞(mm)"),
+                    Thickness = table.Column<decimal>(type: "decimal(18,2)", nullable: false, comment: "澹佸帤(mm)"),
+                    Material = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "鏉愯川")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    ProcessRouteNumber = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "宸ヨ壓娴佸悜缂栧彿")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    PlannedStartTime = table.Column<DateTime>(type: "datetime(6)", nullable: true, comment: "璁″垝寮�濮嬫椂闂�"),
+                    PlannedEndTime = table.Column<DateTime>(type: "datetime(6)", nullable: true, comment: "璁″垝瀹屾垚鏃堕棿"),
+                    TeamInfo = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "鐝粍淇℃伅")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    Timestamp = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "鏃堕棿鎴�")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    ExtraProperties = table.Column<string>(type: "longtext", nullable: true, comment: "鎵╁睍灞炴��")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    ConcurrencyStamp = table.Column<string>(type: "varchar(40)", maxLength: 40, nullable: true, comment: "骞跺彂鎴�")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    CreationTime = table.Column<DateTime>(type: "datetime(6)", nullable: false, comment: "鍒涘缓鏃堕棿"),
+                    CreatorId = table.Column<Guid>(type: "char(36)", maxLength: 36, nullable: true, comment: "鍒涘缓浜篒D", collation: "ascii_general_ci"),
+                    LastModificationTime = table.Column<DateTime>(type: "datetime(6)", nullable: true, comment: "淇敼鏃堕棿"),
+                    LastModifierId = table.Column<Guid>(type: "char(36)", maxLength: 36, nullable: true, comment: "淇敼浜篒D", collation: "ascii_general_ci"),
+                    IsDeleted = table.Column<bool>(type: "tinyint(1)", nullable: false, defaultValue: false, comment: "鏄惁鍒犻櫎"),
+                    DeleterId = table.Column<Guid>(type: "char(36)", maxLength: 36, nullable: true, comment: "鍒犻櫎浜篒D", collation: "ascii_general_ci"),
+                    DeletionTime = table.Column<DateTime>(type: "datetime(6)", nullable: true, comment: "鍒犻櫎鏃堕棿"),
+                    CreatorName = table.Column<string>(type: "varchar(64)", maxLength: 64, nullable: true, comment: "鍒涘缓浜�")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    LastModifierName = table.Column<string>(type: "varchar(64)", maxLength: 64, nullable: true, comment: "淇敼浜�")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    OperationRemark = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "鎿嶄綔澶囨敞")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    DeleteRemark = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "鍒犻櫎澶囨敞")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    Sort = table.Column<int>(type: "int", nullable: false, defaultValue: 0, comment: "鎺掑簭"),
+                    Remark = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "澶囨敞")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    IsDisabled = table.Column<bool>(type: "tinyint(1)", nullable: true, defaultValue: false, comment: "鏄惁绂佺敤"),
+                    ExtraField1 = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "鎵╁睍瀛楁1")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    ExtraField2 = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "鎵╁睍瀛楁2")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    ExtraField3 = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "鎵╁睍瀛楁3")
+                        .Annotation("MySql:CharSet", "utf8mb4")
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_scms_workplans", x => x.Id);
+                },
+                comment: "浣滀笟璁″垝琛�")
+                .Annotation("MySql:CharSet", "utf8mb4");
+
+            migrationBuilder.CreateTable(
+                name: "scms_worktasks",
+                columns: table => new
+                {
+                    Id = table.Column<Guid>(type: "char(36)", nullable: false, collation: "ascii_general_ci"),
+                    Son_TaskCode = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: false, comment: "瀛愪换鍔$紪鐮�")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    TaskCode = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: false, comment: "浠诲姟缂栫爜")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    WorkPlanStatus = table.Column<int>(type: "int", nullable: false, comment: "璁″垝鐘舵��"),
+                    CallMaterialStatus = table.Column<int>(type: "int", nullable: false, comment: "鍙枡鐘舵��"),
+                    DataIdentifier = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "鍘熸枡鏍囪瘑")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    MaterialMode = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "鍘熸枡鍨嬪彿")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    Length = table.Column<decimal>(type: "decimal(18,2)", nullable: false, comment: "闀垮害(mm)"),
+                    MarkingContent = table.Column<string>(type: "varchar(1024)", maxLength: 1024, nullable: true, comment: "鎵撶爜鍐呭")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    MarkingPosition = table.Column<decimal>(type: "decimal(18,2)", nullable: false, comment: "鎵撶爜浣嶇疆"),
+                    CuttingPosition = table.Column<decimal>(type: "decimal(18,2)", nullable: false, comment: "鍒囧壊浣嶇疆"),
+                    Quantity = table.Column<int>(type: "int", nullable: false, comment: "绠℃鏁伴噺"),
+                    FlangeThickness = table.Column<decimal>(type: "decimal(18,2)", nullable: false, comment: "娉曞叞鍘氬害(mm)"),
+                    FlangeInnerDiameter = table.Column<decimal>(type: "decimal(18,2)", nullable: false, comment: "娉曞叞鐩村緞(mm)"),
+                    WeldingHeatInput = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "娉曞叞鍏О鍘嬪姏")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    PipeAllowableStress = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "娉曞叞鍐茬爜鍐呭")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    PipeDiameter = table.Column<decimal>(type: "decimal(18,2)", nullable: false, comment: "濂楃闀垮害(mm)"),
+                    PipeWallThickness = table.Column<decimal>(type: "decimal(18,2)", nullable: false, comment: "濂楃鐩村緞(mm)"),
+                    FactoryCode = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "宸ュ巶浠g爜")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    ProductCode = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "浜у搧浠g爜")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    WorkstationCode = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "宸ヤ綅浠g爜")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    EquipmentCode = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "璁惧浠g爜")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    ProdLineCode = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "浜х嚎缂栫爜")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    ShipNumber = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "鑸瑰彿")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    ProjectNumber = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "椤圭洰鍙�")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    ProcessName = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "宸ュ簭鍚嶇О")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    PipeFittingCode = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "绠′欢缂栫爜")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    PreSerialNumber = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "椤哄簭鍙�")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    PipeSpecCode = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "绠℃缂栫爜")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    PipeSectionName = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "绠℃鍚嶇О")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    OuterDiameter = table.Column<decimal>(type: "decimal(18,2)", nullable: false, comment: "澶栧緞(mm)"),
+                    Thickness = table.Column<decimal>(type: "decimal(18,2)", nullable: false, comment: "澹佸帤(mm)"),
+                    Material = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "鏉愯川")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    ProcessRouteNumber = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "宸ヨ壓娴佸悜缂栧彿")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    PlannedStartTime = table.Column<DateTime>(type: "datetime(6)", nullable: true, comment: "璁″垝寮�濮嬫椂闂�"),
+                    PlannedEndTime = table.Column<DateTime>(type: "datetime(6)", nullable: true, comment: "璁″垝瀹屾垚鏃堕棿"),
+                    TeamInfo = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "鐝粍淇℃伅")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    Timestamp = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "鏃堕棿鎴�")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    ExtraProperties = table.Column<string>(type: "longtext", nullable: true, comment: "鎵╁睍灞炴��")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    ConcurrencyStamp = table.Column<string>(type: "varchar(40)", maxLength: 40, nullable: true, comment: "骞跺彂鎴�")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    CreationTime = table.Column<DateTime>(type: "datetime(6)", nullable: false, comment: "鍒涘缓鏃堕棿"),
+                    CreatorId = table.Column<Guid>(type: "char(36)", maxLength: 36, nullable: true, comment: "鍒涘缓浜篒D", collation: "ascii_general_ci"),
+                    LastModificationTime = table.Column<DateTime>(type: "datetime(6)", nullable: true, comment: "淇敼鏃堕棿"),
+                    LastModifierId = table.Column<Guid>(type: "char(36)", maxLength: 36, nullable: true, comment: "淇敼浜篒D", collation: "ascii_general_ci"),
+                    IsDeleted = table.Column<bool>(type: "tinyint(1)", nullable: false, defaultValue: false, comment: "鏄惁鍒犻櫎"),
+                    DeleterId = table.Column<Guid>(type: "char(36)", maxLength: 36, nullable: true, comment: "鍒犻櫎浜篒D", collation: "ascii_general_ci"),
+                    DeletionTime = table.Column<DateTime>(type: "datetime(6)", nullable: true, comment: "鍒犻櫎鏃堕棿"),
+                    CreatorName = table.Column<string>(type: "varchar(64)", maxLength: 64, nullable: true, comment: "鍒涘缓浜�")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    LastModifierName = table.Column<string>(type: "varchar(64)", maxLength: 64, nullable: true, comment: "淇敼浜�")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    OperationRemark = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "鎿嶄綔澶囨敞")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    DeleteRemark = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "鍒犻櫎澶囨敞")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    Sort = table.Column<int>(type: "int", nullable: false, defaultValue: 0, comment: "鎺掑簭"),
+                    Remark = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "澶囨敞")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    IsDisabled = table.Column<bool>(type: "tinyint(1)", nullable: true, defaultValue: false, comment: "鏄惁绂佺敤"),
+                    ExtraField1 = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "鎵╁睍瀛楁1")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    ExtraField2 = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "鎵╁睍瀛楁2")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    ExtraField3 = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "鎵╁睍瀛楁3")
+                        .Annotation("MySql:CharSet", "utf8mb4")
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_scms_worktasks", x => x.Id);
+                },
+                comment: "浣滀笟浠诲姟琛�")
+                .Annotation("MySql:CharSet", "utf8mb4");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_scms_callmaterialorderrecords_DataIdentifier",
+                table: "scms_callmaterialorderrecords",
+                column: "DataIdentifier");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_scms_callmaterialorders_DataIdentifier",
+                table: "scms_callmaterialorders",
+                column: "DataIdentifier",
+                unique: true);
+
+            migrationBuilder.CreateIndex(
+                name: "IX_scms_mytestentitynames_Name",
+                table: "scms_mytestentitynames",
+                column: "Name");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_scms_workplans_DataIdentifier",
+                table: "scms_workplans",
+                column: "DataIdentifier");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_scms_workplans_PlannedEndTime",
+                table: "scms_workplans",
+                column: "PlannedEndTime");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_scms_workplans_PlannedStartTime",
+                table: "scms_workplans",
+                column: "PlannedStartTime");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_scms_workplans_TaskCode",
+                table: "scms_workplans",
+                column: "TaskCode",
+                unique: true);
+
+            migrationBuilder.CreateIndex(
+                name: "IX_scms_worktasks_DataIdentifier",
+                table: "scms_worktasks",
+                column: "DataIdentifier");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_scms_worktasks_PlannedEndTime",
+                table: "scms_worktasks",
+                column: "PlannedEndTime");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_scms_worktasks_PlannedStartTime",
+                table: "scms_worktasks",
+                column: "PlannedStartTime");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_scms_worktasks_Son_TaskCode",
+                table: "scms_worktasks",
+                column: "Son_TaskCode",
+                unique: true);
+        }
+
+        protected override void Down(MigrationBuilder migrationBuilder)
+        {
+            migrationBuilder.DropTable(
+                name: "scms_callmaterialorderrecords");
+
+            migrationBuilder.DropTable(
+                name: "scms_callmaterialorders");
+
+            migrationBuilder.DropTable(
+                name: "scms_mytestentitynames");
+
+            migrationBuilder.DropTable(
+                name: "scms_workplans");
+
+            migrationBuilder.DropTable(
+                name: "scms_worktasks");
+        }
+    }
+}
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Controller/WorkTaskController.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Controller/WorkTaskController.cs
new file mode 100644
index 0000000..b8da5f6
--- /dev/null
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Controller/WorkTaskController.cs
@@ -0,0 +1,240 @@
+using Ao.Lang; 
+using CMS.Extensions.Abp.AspNetCore.Mvc.Filters; 
+using CMS.Framework.AspNetCore.Users; 
+using CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.WorkTask; 
+using CMS.Plugin.PipeLineLems.Application.Contracts.Services; 
+using Microsoft.AspNetCore.Authorization; 
+using Microsoft.AspNetCore.Http; 
+using Microsoft.AspNetCore.Mvc; 
+using MiniExcelLibs; 
+using System.Reflection; 
+using Volo.Abp; 
+using Volo.Abp.Application.Dtos; 
+using CmsQueryExtensions.Entitys; 
+ 
+namespace CMS.Plugin.PipeLineLems.Controller 
+{ 
+    /// <summary> 
+    /// 浣滀笟浠诲姟琛ㄦ湇鍔� 
+    /// </summary> 
+    [ApiController] 
+    [TypeFilter(typeof(CMSLanguageFilter))] 
+    [TypeFilter(typeof(CMSUowActionFilter))] 
+    [TypeFilter(typeof(CMSAuditActionFilter))] 
+    [TypeFilter(typeof(CMSExceptionFilter))] 
+    [Route("api/v{version:apiVersion}/PipeLineLems/[controller]")] 
+    public class WorkTaskController : ControllerBase 
+    { 
+        private readonly IWorkTaskAppService _workTaskAppService; 
+        private readonly ICurrentUser _currentUser; 
+ 
+        /// <summary> 
+        /// Initializes a new instance of the <see cref="WorkTaskController"/> class. 
+        /// </summary> 
+        /// <param name="workTaskAppService">The workTask application service.</param> 
+        public WorkTaskController(IWorkTaskAppService workTaskAppService, ICurrentUser currentUser) 
+        { 
+            _workTaskAppService = workTaskAppService; 
+            _currentUser = currentUser; 
+        } 
+ 
+        /// <summary> 
+        /// 鑾峰彇浣滀笟浠诲姟琛� 
+        /// </summary> 
+        /// <param name="id">涓婚敭ID</param> 
+        /// <returns></returns> 
+        [HttpGet] 
+        [Route("{id}")] 
+        public virtual Task<WorkTaskDto> GetAsync(Guid id) 
+        { 
+            return _workTaskAppService.GetAsync(id); 
+        } 
+ 
+        /// <summary> 
+        /// 鍒嗛〉鑾峰彇浣滀笟浠诲姟琛ㄧ殑鍒楄〃. 
+        /// </summary> 
+        /// <param name="input">鏌ヨ鍙傛暟</param> 
+        /// <returns></returns> 
+        [HttpGet] 
+        [Route("Page")] 
+        public virtual Task<PagedResultDto<WorkTaskDto>> GetListAsync([FromQuery] GetWorkTaskInput input) 
+        { 
+            return _workTaskAppService.GetListAsync(input); 
+        } 
+ 
+        /// <summary>  
+        /// 鏍规嵁鏉′欢鑾峰彇浣滀笟浠诲姟琛� 
+        /// </summary>  
+        /// <param name="input">鏌ヨ鍙傛暟</param>  
+        /// <returns></returns>  
+        [HttpPost] 
+        [Route("FindListByFilter")] 
+        public virtual async Task<List<WorkTaskDto>> FindListByFilterAsync([FromBody]GetWorkTaskInput input) 
+        { 
+            return await _workTaskAppService.FindListByFilterAsync(input); 
+        } 
+        /// <summary>  
+        /// 鏍规嵁鏉′欢鑾峰彇鍗曚釜浣滀笟浠诲姟琛� 
+        /// </summary>  
+        /// <param name="input">鏌ヨ鍙傛暟</param>  
+        /// <returns></returns>  
+        [HttpPost] 
+        [Route("FindSingleByFilter")] 
+        public virtual async Task<WorkTaskDto> FindSingleByFilterAsync([FromBody]GetWorkTaskInput input) 
+        { 
+ 
+            return await _workTaskAppService.FindSingleByFilterAsync(input); 
+        } 
+ 
+        /// <summary> 
+        /// 鍒涘缓浣滀笟浠诲姟琛� 
+        /// </summary> 
+        /// <param name="input">鍒涘缓鍙傛暟</param> 
+        /// <returns></returns> 
+        [Authorize] 
+        [HttpPost] 
+        public virtual Task<WorkTaskDto> CreateAsync(WorkTaskCreateDto input) 
+        { 
+            input.CreatorName = _currentUser.UserAccount;//鍒涘缓浜� 
+            return _workTaskAppService.CreateAsync(input); 
+        } 
+ 
+        /// <summary> 
+        /// 鏇存柊浣滀笟浠诲姟琛� 
+        /// </summary> 
+        /// <param name="id">涓婚敭ID</param> 
+        /// <param name="input">鏇存柊鍙傛暟</param> 
+        /// <returns></returns> 
+        [Authorize] 
+        [HttpPut] 
+        [Route("{id}")] 
+        public virtual Task<WorkTaskDto> UpdateAsync(Guid id, WorkTaskUpdateDto input) 
+        { 
+            input.LastModifierName = _currentUser.UserAccount;//淇敼浜� 
+            return _workTaskAppService.UpdateAsync(id, input); 
+        } 
+ 
+        /// <summary> 
+        /// 鍏嬮殕浣滀笟浠诲姟琛� 
+        /// </summary> 
+        /// <param name="ids">Id闆嗗悎</param> 
+        /// <returns></returns> 
+        [Authorize] 
+        [HttpPost] 
+        [Route("Clone")] 
+        public virtual Task<List<WorkTaskDto>> CloneAsync([FromBody] IEnumerable<Guid> ids) 
+        { 
+            MyCurrentUser myCurrentUser = new MyCurrentUser() 
+            { 
+                UserAccount = _currentUser.UserAccount, 
+                UserId = _currentUser.UserId 
+            }; 
+            return _workTaskAppService.CloneAsync(ids, myCurrentUser); 
+        } 
+ 
+        /// <summary> 
+        /// 鍒犻櫎浣滀笟浠诲姟琛� 
+        /// </summary> 
+        /// <param name="id">涓婚敭ID</param> 
+        /// <returns></returns> 
+        [Authorize] 
+        [HttpDelete] 
+        [Route("{id}")] 
+        public virtual Task DeleteAsync(Guid id) 
+        { 
+            MyCurrentUser myCurrentUser = new MyCurrentUser() 
+            { 
+                UserAccount = _currentUser.UserAccount, 
+                UserId = _currentUser.UserId 
+            }; 
+            //return _wmsMaterialAppService.DeleteAsync(id,myCurrentUser);//閫昏緫鍒犻櫎 
+            return _workTaskAppService.DeletePermanentlyAsync(id, myCurrentUser);//鐗╃悊鍒犻櫎 
+        } 
+ 
+        /// <summary> 
+        /// 鎵归噺鍒犻櫎浣滀笟浠诲姟琛� 
+        /// </summary> 
+        /// <param name="ids">涓婚敭ID闆嗗悎</param> 
+        /// <returns></returns> 
+        [Authorize] 
+        [HttpDelete] 
+        public virtual Task DeleteAsync([FromBody] IEnumerable<Guid> ids) 
+        { 
+            MyCurrentUser myCurrentUser = new MyCurrentUser() 
+            { 
+                UserAccount = _currentUser.UserAccount, 
+                UserId = _currentUser.UserId 
+            }; 
+            // return _wmsMaterialAppService.DeleteManyAsync(ids,myCurrentUser);//閫昏緫鍒犻櫎 
+            return _workTaskAppService.BatchDeletePermanentlyAsync(ids, myCurrentUser);//鐗╃悊鍒犻櫎 
+        } 
+ 
+        /// <summary> 
+        /// 璋冩暣鎺掑簭浣滀笟浠诲姟琛� 
+        /// </summary> 
+        /// <param name="id">涓婚敭ID</param> 
+        /// <returns></returns> 
+        [HttpPut] 
+        [Route("{id}/AdjustSort/{sort}")] 
+        public virtual Task AdjustSortAsync(Guid id, int sort) 
+        { 
+            return _workTaskAppService.AdjustSortAsync(id, sort); 
+        } 
+ 
+        /// <summary> 
+        /// 瀵煎叆浣滀笟浠诲姟琛� 
+        /// </summary> 
+        /// <returns></returns> 
+        [Authorize] 
+        [HttpPost] 
+        [Route("Import")] 
+        public virtual async Task<IActionResult> ImportAsync(IFormFile file) 
+        { 
+            using var stream = new MemoryStream(); 
+            await file.CopyToAsync(stream); 
+            stream.Seek(0L, SeekOrigin.Begin); 
+ 
+            var sheetNames = stream.GetSheetNames(); 
+            var workTaskRows = sheetNames.Contains("閰嶇疆") ? MiniExcel.Query<WorkTasksImportModel.WorkTaskImportModel>(stream, sheetName: "閰嶇疆").ToList() : new(); 
+ 
+            if (!workTaskRows.Any()) 
+            { 
+                throw new UserFriendlyException("璇锋鏌ュ鍏ョ殑琛ㄦ牸"); 
+            } 
+ 
+            MyCurrentUser myCurrentUser = new MyCurrentUser() 
+            { 
+                UserAccount = _currentUser.UserAccount, 
+                UserId = _currentUser.UserId 
+            }; 
+            await _workTaskAppService.ImportAsync(new WorkTasksImportModel 
+            { 
+                WorkTasks = workTaskRows, 
+           },myCurrentUser);  
+ 
+            return Ok(); 
+        } 
+ 
+        /// <summary> 
+        /// 瀵煎嚭浣滀笟浠诲姟琛� 
+        /// </summary> 
+        /// <returns></returns> 
+        [HttpGet] 
+        [Route("Export")] 
+        public virtual async Task<IActionResult> ExportAsync([FromQuery] GetWorkTaskInput input) 
+        { 
+            input.MaxResultCount = int.MaxValue; 
+            var exportData = await _workTaskAppService.ExportAsync(input); 
+            var templatePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"Resources/Templates/WorkTask瀵煎嚭妯℃澘.xlsx"); 
+            if (!System.IO.File.Exists(templatePath)) 
+            { 
+                templatePath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ?? string.Empty, $"Resources/Templates/WorkTask瀵煎嚭妯℃澘.xlsx"); 
+            } 
+ 
+            var memoryStream = new MemoryStream(); 
+            await memoryStream.SaveAsByTemplateAsync(templatePath, exportData.Sheets); 
+            memoryStream.Seek(0L, SeekOrigin.Begin); 
+            return new FileStreamResult(memoryStream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") { FileDownloadName = $"{exportData.FileName}_{DateTime.Now:yyyyMMddhhmmss}.xlsx" }; 
+        } 
+    } 
+} 
diff --git "a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Resources/Templates/WorkTask\345\257\274\345\207\272\346\250\241\346\235\277.xlsx" "b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Resources/Templates/WorkTask\345\257\274\345\207\272\346\250\241\346\235\277.xlsx"
new file mode 100644
index 0000000..6a54540
--- /dev/null
+++ "b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Resources/Templates/WorkTask\345\257\274\345\207\272\346\250\241\346\235\277.xlsx"
Binary files differ
diff --git "a/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Code/Templete/Web/Controllers/EntityModeDrawer\346\250\241\346\235\277.txt" "b/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Code/Templete/Web/Controllers/EntityModeDrawer\346\250\241\346\235\277.txt"
index bc66791..7be9486 100644
--- "a/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Code/Templete/Web/Controllers/EntityModeDrawer\346\250\241\346\235\277.txt"
+++ "b/Weben_CMS\344\270\223\347\224\250\344\273\243\347\240\201\347\224\237\346\210\220\345\231\250/Code/Templete/Web/Controllers/EntityModeDrawer\346\250\241\346\235\277.txt"
@@ -18,7 +18,8 @@
 import {  
   BOOLEAN_OPTIONS_AddEdit 
 } from '@/utils/commonOptionConstants'; 
-
+// 引入公共表单工具文件  
+import { extractFormDataForOnConfirm,extractAndAssignFormData } from '@/utils/myformUtils'; 
 export const use$EntityName$Drawer = (props: any, ctx?: any) => {
   const $PageMenuInstanceName$Drawer = injectModel<$EntityName$Drawer>('$PageMenuInstanceName$Drawer')
   /**
@@ -115,9 +116,7 @@
    */
   const onConfirm = async () => {
     await formRef.value?.validate()
-    const data = {
-      $Save_PageAddFormAttributes$
-    }
+    const data=extractFormDataForOnConfirm(formData);
     if (!current.value) {
       await $PageMenuInstanceName$Drawer.add$EntityName$(data)
     } else {
@@ -158,10 +157,7 @@
     if (current.value) {
       const res = await $PageMenuInstanceName$Drawer.get$EntityName$Detail(current.value)
 
-      formData.value = {
-        $PageAddFormAttributesByOpen$
-        id: res.id,
-      }
+      extractAndAssignFormData(res,formData);
       disabled.value = true
       updateCheckData()
     } else {

--
Gitblit v1.9.3