From 1ad40156ec25db1b9d90c3f94819434e20d52b00 Mon Sep 17 00:00:00 2001
From: schangxiang@126.com <schangxiang@126.com>
Date: 周五, 16 5月 2025 13:12:45 +0800
Subject: [PATCH] 222

---
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/CallMaterialOrderExportModel.cs                                   |    6 
 PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrderRecord/Views/Pages/CallMaterialOrderRecord/Config.ts                                                |    5 
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/SharedService.cs                                                                        |    6 
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Domain/CallMaterialOrderRecord/ICallMaterialOrderRecordRepository.cs                                           |   35 
 PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrder/Models/CallMaterialOrder.ts                                                                        |    4 
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.EntityFrameworkCore/Repositories/EfCoreCallMaterialOrderRecordRepository.cs                                    |  105 ++
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Domain/CallMaterialOrder/ICallMaterialOrderRepository.cs                                                       |   40 
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkPlan/CallMaterialByDataIdentifierInput.cs                                       |   29 
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/CallMaterialOrderRecordExportModel.cs                       |    6 
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/CallMaterialOrderRecordCreateDto.cs                         |    5 
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/CallMaterialOrderRecordDto.cs                               |    5 
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Controller/CallMaterialOrderRecordController.cs                                                                |   66 
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Services/ICallMaterialOrderRecordAppService.cs                                           |   45 
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/CallMaterialOrderCreateDto.cs                                     |    5 
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/GetCallMaterialOrderInput.cs                                      |   16 
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/CallMaterialOrderUpdateDto.cs                                     |    5 
 PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrderRecord/Views/Pages/CallMaterialOrderRecord/CallMaterialOrderRecord.tsx                              |   52 
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Resources/Templates/CallMaterialOrder导出模板.xlsx                                                                 |    0 
 PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrderRecord/Controllers/CallMaterialOrderRecordDrawer.tsx                                                |   13 
 PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrder/Controllers/CallMaterialOrder.ts                                                                   |    4 
 PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrder/Models/Service/CallMaterialOrder.ts                                                                |    4 
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Services/ICallMaterialOrderAppService.cs                                                 |   72 
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Resources/Templates/CallMaterialOrderRecord导出模板.xlsx                                                           |    0 
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.EntityFrameworkCore/Repositories/EfCoreCallMaterialOrderRepository.cs                                          |  146 +-
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Controller/WorkPlanPublicController.cs                                                                         |   23 
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/CallMaterialOrderRecordUpdateDto.cs                         |    5 
 PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrder/Controllers/CallMaterialOrderQueryDrawer.tsx                                                       |  693 ++++++++-----
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/CallMaterialOrderAppService.cs                                                          |  658 ++++++------
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/CallMaterialOrderRecordCreateOrUpdateDtoBase.cs             |    5 
 PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrderRecord/Views/Pages/Dialog/CallMaterialOrderRecordQueryDrawer/CallMaterialOrderRecordQueryDrawer.tsx |    6 
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/CallMaterialOrderRecordAppService.cs                                                    |  647 +++++++-----
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/CallMaterialOrderCreateOrUpdateDtoBase.cs                         |   18 
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/CallMaterialOrderDto.cs                                           |    5 
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/GetCallMaterialOrderRecordInput.cs                          |   16 
 PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrder/Views/Pages/Dialog/CallMaterialOrderQueryDrawer/CallMaterialOrderQueryDrawer.tsx                   |    6 
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Controller/CallMaterialOrderController.cs                                                                      |   77 
 PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrderRecord/Controllers/CallMaterialOrderRecordQueryDrawer.tsx                                           |  110 ++
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems/ProjectService/PipeLineLemsProjectService.cs                                                                   |    8 
 38 files changed, 1,844 insertions(+), 1,107 deletions(-)

diff --git a/PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrder/Controllers/CallMaterialOrder.ts b/PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrder/Controllers/CallMaterialOrder.ts
index 980399f..6d31ed6 100644
--- a/PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrder/Controllers/CallMaterialOrder.ts
+++ b/PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrder/Controllers/CallMaterialOrder.ts
@@ -160,7 +160,9 @@
       `鏄惁瑕佸彨鏂�${names.length ? names.join(',') : ''}` 
     ).then(async () => { 
       const ids = selection.value.map((item: { id: string }) => item.id) 
-      await callMaterialOrder.callMaterialByDataIdentifier(ids[0]) 
+      await callMaterialOrder.callMaterialByDataIdentifier({
+        id:ids[0]
+      }) 
       ElMessage.success('鍙枡鎴愬姛') 
       tableRef.value.getList() 
     }) 
diff --git a/PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrder/Controllers/CallMaterialOrderQueryDrawer.tsx b/PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrder/Controllers/CallMaterialOrderQueryDrawer.tsx
index 1b66ffb..a43d578 100644
--- a/PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrder/Controllers/CallMaterialOrderQueryDrawer.tsx
+++ b/PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrder/Controllers/CallMaterialOrderQueryDrawer.tsx
@@ -1,293 +1,400 @@
-import { 
-  ref, 
-  onMounted, 
-  reactive, 
-  computed, 
-  Ref, 
-  watch, 
-  SetupContext, 
-  h, 
-} from 'vue' 
-import { injectModel } from '@/libs/Provider/Provider' 
-import { CallMaterialOrderDrawer } from '../Models/CallMaterialOrderDrawer' 
-import { ElMessage } from 'element-plus' 
-import isEqual from 'lodash/isEqual' 
-import { ConfirmBox } from '@/components/ConfirmBox/ConfirmBox' 
-import { cloneDeep } from 'lodash' 
- 
-export const useCallMaterialOrderQueryDrawer = (props: any, ctx?: any) => { 
-  const callMaterialOrderDrawer = injectModel<CallMaterialOrderDrawer>('CallMaterialOrderDrawer') 
-  /** 
-   * 鐢ㄦ潵瀵规瘮鐨勫垵濮嬪寲鏁版嵁 
-   */ 
-  const initiateData: Ref<Record<string, any>> = ref({}) 
-  const formData = ref<Record<string, any>>({}) 
-  // ref 
-  const formRef = ref() 
- 
-  const disabled = ref(false) 
- 
-  const current = computed(() => { 
-    return props.row || null 
-  }) 
- 
-  const inputNumber = (attrs) => { 
-    return ( 
-      <el-input-number 
-        min="1" 
-        step="1" 
-        precision="0" 
-        {...attrs} 
-      ></el-input-number> 
-    ) 
-  } 
- 
-    const datePickerRange = (attrs) => { 
-    return ( 
-      <el-date-picker 
-        type="daterange" 
-        value-format="YYYY-MM-DD HH:mm:ss" 
-        start-placeholder="寮�濮嬫棩鏈�" 
-        end-placeholder="缁撴潫鏃ユ湡" 
-        {...attrs} 
-      ></el-date-picker> 
-    ) 
-  } 
- 
-  const dateTimePickerRange = (attrs) => { 
-    return ( 
-      <el-date-picker 
-        type="datetimerange" 
-        value-format="YYYY-MM-DD HH:mm:ss" 
-        start-placeholder="寮�濮嬫棩鏈�" 
-        end-placeholder="缁撴潫鏃ユ湡" 
-        {...attrs} 
-      ></el-date-picker> 
-    ) 
-  } 
- 
-  const visible = computed({ 
-    get() { 
-      return props.modelValue 
-    }, 
-    set(val) { 
-      ctx.emit('update:modelValue', val) 
-    }, 
-  }) 
-  /** 
-   * 楂樼骇鏌ヨ鐨刦orm瀛楁 
-   */ 
-  const formItems = reactive([ 
-                    { 
-                   label: '鍘熸枡鏍囪瘑', 
-                   prop: 'dataIdentifier', 
-                   el: 'input', 
-                   //disabled: disabled, 
-                   placeholder: '璇疯緭鍏ュ師鏂欐爣璇�', 
-                }, 
-                { 
-                   label: '鍘熸枡鍨嬪彿', 
-                   prop: 'materialMode', 
-                   el: 'input', 
-                   //disabled: disabled, 
-                   placeholder: '璇疯緭鍏ュ師鏂欏瀷鍙�', 
-                }, 
-                { 
-                   label: '鍙枡鐘舵��', 
-                   prop: 'callMaterialStatus', 
-                   el: 'select', 
-                   clearable:true, 
-                   option: [], 
-                   //disabled: disabled, 
-                   placeholder: '璇疯緭鍏ュ彨鏂欑姸鎬�', 
-                }, 
-                { 
-                   label: '鍙枡鏁伴噺', 
-                   prop: 'quantity', 
-                   el: (props: any, { attrs }: SetupContext) => { 
-                     return h(inputNumber, {  
-                       ...props,  
-                       clearable: true,  
-                       ...attrs,  
-                     })  
-                   },
-                   width: '100%',
-                   step: 1,
-                   precision: 0, 
-                   //disabled: disabled, 
-                   placeholder: '璇疯緭鍏ュ彨鏂欐暟閲�', 
-                }, 
-                { 
-                   label: 'WMS杩斿洖缁撴灉', 
-                   prop: 'wmsRetResult', 
-                   el: 'input', 
-                   //disabled: disabled, 
-                   placeholder: '璇疯緭鍏MS杩斿洖缁撴灉', 
-                }, 
-                { 
-                   label: 'WMS浠诲姟鍙�', 
-                   prop: 'wmsTaskNo', 
-                   el: 'input', 
-                   //disabled: disabled, 
-                   placeholder: '璇疯緭鍏MS浠诲姟鍙�', 
-                }, 
-                { 
-                   label: '鍒涘缓鏃堕棿', 
-                   prop: 'creationTime', 
-                   el: (props: any, { attrs }: SetupContext) => { 
-                     return h(dateTimePickerRange, {  
-                       ...props,
-                       clearable: true, 
-                       ...attrs,  
-                     })  
-                   },
-                   width: '100%',
-                   //disabled: disabled, 
-                   placeholder: '璇疯緭鍏ュ垱寤烘椂闂�', 
-                }, 
-                { 
-                   label: '淇敼鏃堕棿', 
-                   prop: 'lastModificationTime', 
-                   el: (props: any, { attrs }: SetupContext) => { 
-                     return h(dateTimePickerRange, {  
-                       ...props,
-                       clearable: true, 
-                       ...attrs,  
-                     })  
-                   },
-                   width: '100%',
-                   //disabled: disabled, 
-                   placeholder: '璇疯緭鍏ヤ慨鏀规椂闂�', 
-                }, 
-                { 
-                   label: '鍒涘缓浜�', 
-                   prop: 'creatorName', 
-                   el: 'input', 
-                   //disabled: disabled, 
-                   placeholder: '璇疯緭鍏ュ垱寤轰汉', 
-                }, 
-                { 
-                   label: '淇敼浜�', 
-                   prop: 'lastModifierName', 
-                   el: 'input', 
-                   //disabled: disabled, 
-                   placeholder: '璇疯緭鍏ヤ慨鏀逛汉', 
-                }, 
-                { 
-                   label: '澶囨敞', 
-                   prop: 'remark', 
-                   el: 'input', 
-                   //disabled: disabled, 
-                   placeholder: '璇疯緭鍏ュ娉�', 
-                },  
-  ]) 
-  /** 
-   * 鏍¢獙鏄惁鏈夋暟鎹彉鍖� 
-   */ 
-  const checkIsEqualObject = () => { 
-    const data = { 
-      formData: formData.value, 
-    } 
-    const check = isEqual(initiateData.value, data) 
-    return check 
-  } 
-  const commonGetFormData=()=>{ 
-    const data = { 
-      dataIdentifier: formData.value.dataIdentifier || '', 
-materialMode: formData.value.materialMode || '', 
-callMaterialStatus: formData.value.callMaterialStatus || '', 
-quantity: formData.value.quantity || '', 
-wmsRetResult: formData.value.wmsRetResult || '', 
-wmsTaskNo: formData.value.wmsTaskNo || '', 
-creationTime: formData.value.creationTime || '', 
-lastModificationTime: formData.value.lastModificationTime || '', 
-creatorName: formData.value.creatorName || '', 
-lastModifierName: formData.value.lastModifierName || '', 
-remark: formData.value.remark || '',  
-    } 
-    return data; 
-  } 
-  const onClose = (done: () => void) => { 
-    if (visible.value) { 
-      visible.value = false 
-      const data =commonGetFormData(); 
-      ctx.emit('close', data) 
-    } 
-  } 
-  /** 
-   * 纭鏌ヨ 
-   */ 
-  const onConfirmQuery = async () => { 
-    const data =commonGetFormData(); 
-    ctx.emit('confirmQuery', data) 
-  } 
-  /** 
-   * 閲嶇疆鏌ヨ 
-   */ 
-  const onReset = async () => { 
-    formData.value = {} 
-    formData.value.dataIdentifier = '' 
-formData.value.materialMode = '' 
-formData.value.callMaterialStatus = '' 
-formData.value.quantity = '' 
-formData.value.wmsRetResult = '' 
-formData.value.wmsTaskNo = '' 
-formData.value.deletionTime = '' 
-formData.value.operationRemark = '' 
-formData.value.deleteRemark = '' 
-formData.value.remark = '' 
-formData.value.extraField1 = '' 
-formData.value.extraField2 = '' 
-formData.value.extraField3 = ''  
-    //鍚戠埗缁勪欢鍙戦�佽嚜瀹氫箟浜嬩欢 
-    ctx.emit('restQuery'); 
-  } 
- 
-  const updateCheckData = () => { 
-    initiateData.value = { 
-      formData: { 
-        ...formData.value, 
-      }, 
-    } 
-  } 
-  const updateFormItemOptions = (propName: string, enumData: any[]) => { 
-    const item = formItems.find((item) => item.prop === propName) 
-    if (item && enumData) { 
-      item.options = enumData.map((item) => ({ 
-        label: item.description, 
-        value: item.value, 
-      })) 
-    } 
-  } 
-  /** 
-   * 閫氱敤鏌ヨ鏋氫妇 
-   */ 
-  const commonQueryEnumForFrom = async () => { 
-    const callMaterialStatusEnumEnum = await callMaterialOrderDrawer.getWmsEnumData({ 
- EnumName: 'CallMaterialStatusEnum', 
-}) 
-updateFormItemOptions('callMaterialStatus', callMaterialStatusEnumEnum) 
- 
-  } 
-  commonQueryEnumForFrom() 
-  /** 
-   * 寮圭獥鎵撳紑鑾峰彇璇︽儏 
-   */ 
-  const onOpen = async () => { 
-    disabled.value = false 
-    updateCheckData() 
-  } 
- 
-  watch(() => current.value, onOpen) 
- 
-  return { 
-    formItems, 
-    formData, 
-    visible, 
-    formRef, 
-    onOpen, 
-    onClose, 
-    onConfirmQuery, 
-    onReset, 
-  } 
-} 
+import {
+  ref,
+  onMounted,
+  reactive,
+  computed,
+  Ref,
+  watch,
+  SetupContext,
+  h,
+} from 'vue'
+import { injectModel } from '@/libs/Provider/Provider'
+import { CallMaterialOrderDrawer } from '../Models/CallMaterialOrderDrawer'
+import { ElMessage } from 'element-plus'
+import isEqual from 'lodash/isEqual'
+import { ConfirmBox } from '@/components/ConfirmBox/ConfirmBox'
+import { cloneDeep } from 'lodash'
+// 寮曞叆鍏叡閫夐」閰嶇疆
+import {
+  FILTER_MODE_OPTIONS_STRING,
+  FILTER_MODE_OPTIONS_NUM,
+  FILTER_MODE_OPTIONS_BOOL,
+} from '@/components/DyFormForHighQuery/DyFormForHighQueryOptions'
+import { BOOLEAN_OPTIONS } from '@/utils/commonOptionConstants'
+
+export const useCallMaterialOrderQueryDrawer = (props: any, ctx?: any) => {
+  const callMaterialOrderDrawer = injectModel<CallMaterialOrderDrawer>(
+    'CallMaterialOrderDrawer'
+  )
+  /**
+   * 鐢ㄦ潵瀵规瘮鐨勫垵濮嬪寲鏁版嵁
+   */
+  const initiateData: Ref<Record<string, any>> = ref({})
+  const formData = ref<Record<string, any>>({})
+  // ref
+  const formRef = ref()
+
+  const disabled = ref(false)
+
+  const current = computed(() => {
+    return props.row || null
+  })
+
+  const inputNumber = (attrs) => {
+    return (
+      <el-input-number
+        min="1"
+        step="1"
+        precision="0"
+        {...attrs}
+      ></el-input-number>
+    )
+  }
+
+  const datePickerRange = (attrs) => {
+    return (
+      <el-date-picker
+        type="daterange"
+        value-format="YYYY-MM-DD HH:mm:ss"
+        start-placeholder="寮�濮嬫棩鏈�"
+        end-placeholder="缁撴潫鏃ユ湡"
+        {...attrs}
+      ></el-date-picker>
+    )
+  }
+
+  const dateTimePickerRange = (attrs) => {
+    return (
+      <el-date-picker
+        type="datetimerange"
+        value-format="YYYY-MM-DD HH:mm:ss"
+        start-placeholder="寮�濮嬫棩鏈�"
+        end-placeholder="缁撴潫鏃ユ湡"
+        {...attrs}
+      ></el-date-picker>
+    )
+  }
+
+  const visible = computed({
+    get() {
+      return props.modelValue
+    },
+    set(val) {
+      ctx.emit('update:modelValue', val)
+    },
+  })
+  /**
+   * 楂樼骇鏌ヨ鐨刦orm瀛楁
+   */
+  const formItems = reactive([
+    {
+      label: '鍘熸枡鏍囪瘑',
+      prop: 'dataIdentifier',
+      el: 'input',
+      //disabled: disabled,
+      placeholder: '璇疯緭鍏ュ師鏂欐爣璇�',
+      highSelectAttrs: {
+        prop: 'dataIdentifier_FilterMode',
+        el: 'select',
+        placeholder: '璇烽�夋嫨',
+        options: FILTER_MODE_OPTIONS_STRING,
+      },
+    },
+    {
+      label: '鍘熸枡鍨嬪彿',
+      prop: 'materialMode',
+      el: 'input',
+      //disabled: disabled,
+      placeholder: '璇疯緭鍏ュ師鏂欏瀷鍙�',
+      highSelectAttrs: {
+        prop: 'materialMode_FilterMode',
+        el: 'select',
+        placeholder: '璇烽�夋嫨',
+        options: FILTER_MODE_OPTIONS_STRING,
+      },
+    },
+    {
+      label: '鍘熸枡鎵规',
+      prop: 'materialBatch',
+      el: 'input',
+      //disabled: disabled,
+      placeholder: '璇疯緭鍏ュ師鏂欐壒娆�',
+      highSelectAttrs: {
+        prop: 'materialBatch_FilterMode',
+        el: 'select',
+        placeholder: '璇烽�夋嫨',
+        options: FILTER_MODE_OPTIONS_STRING,
+      },
+    },
+    {
+      label: '鍙枡鐘舵��',
+      prop: 'callMaterialStatus',
+      el: 'select',
+      clearable: true,
+      option: [],
+      //disabled: disabled,
+      placeholder: '璇疯緭鍏ュ彨鏂欑姸鎬�',
+      highSelectAttrs: {
+        prop: 'callMaterialStatus_FilterMode',
+        el: 'select',
+        placeholder: '璇烽�夋嫨',
+        options: FILTER_MODE_OPTIONS_BOOL,
+      },
+    },
+    {
+      label: '鍙枡鏁伴噺',
+      prop: 'quantity',
+      el: (props: any, { attrs }: SetupContext) => {
+        return h(inputNumber, {
+          ...props,
+          clearable: true,
+          ...attrs,
+        })
+      },
+      width: '100%',
+      step: 1,
+      precision: 0,
+      //disabled: disabled,
+      placeholder: '璇疯緭鍏ュ彨鏂欐暟閲�',
+      highSelectAttrs: {
+        prop: 'quantity_FilterMode',
+        el: 'select',
+        placeholder: '璇烽�夋嫨',
+        options: FILTER_MODE_OPTIONS_NUM,
+      },
+    },
+    {
+      label: 'WMS杩斿洖缁撴灉',
+      prop: 'wmsRetResult',
+      el: 'input',
+      //disabled: disabled,
+      placeholder: '璇疯緭鍏MS杩斿洖缁撴灉',
+      highSelectAttrs: {
+        prop: 'wmsRetResult_FilterMode',
+        el: 'select',
+        placeholder: '璇烽�夋嫨',
+        options: FILTER_MODE_OPTIONS_STRING,
+      },
+    },
+    {
+      label: 'WMS浠诲姟鍙�',
+      prop: 'wmsTaskNo',
+      el: 'input',
+      //disabled: disabled,
+      placeholder: '璇疯緭鍏MS浠诲姟鍙�',
+      highSelectAttrs: {
+        prop: 'wmsTaskNo_FilterMode',
+        el: 'select',
+        placeholder: '璇烽�夋嫨',
+        options: FILTER_MODE_OPTIONS_STRING,
+      },
+    },
+    {
+      label: '鍒涘缓鏃堕棿',
+      prop: 'creationTime',
+      el: (props: any, { attrs }: SetupContext) => {
+        return h(dateTimePickerRange, {
+          ...props,
+          clearable: true,
+          ...attrs,
+        })
+      },
+      width: '100%',
+      //disabled: disabled,
+      placeholder: '璇疯緭鍏ュ垱寤烘椂闂�',
+      isDateControl: true, // 鏄惧紡鏍囪涓烘棩鏈熸帶浠�
+    },
+    {
+      label: '淇敼鏃堕棿',
+      prop: 'lastModificationTime',
+      el: (props: any, { attrs }: SetupContext) => {
+        return h(dateTimePickerRange, {
+          ...props,
+          clearable: true,
+          ...attrs,
+        })
+      },
+      width: '100%',
+      //disabled: disabled,
+      placeholder: '璇疯緭鍏ヤ慨鏀规椂闂�',
+      isDateControl: true, // 鏄惧紡鏍囪涓烘棩鏈熸帶浠�
+    },
+    {
+      label: '鍒涘缓浜�',
+      prop: 'creatorName',
+      el: 'input',
+      //disabled: disabled,
+      placeholder: '璇疯緭鍏ュ垱寤轰汉',
+      highSelectAttrs: {
+        prop: 'creatorName_FilterMode',
+        el: 'select',
+        placeholder: '璇烽�夋嫨',
+        options: FILTER_MODE_OPTIONS_STRING,
+      },
+    },
+    {
+      label: '淇敼浜�',
+      prop: 'lastModifierName',
+      el: 'input',
+      //disabled: disabled,
+      placeholder: '璇疯緭鍏ヤ慨鏀逛汉',
+      highSelectAttrs: {
+        prop: 'lastModifierName_FilterMode',
+        el: 'select',
+        placeholder: '璇烽�夋嫨',
+        options: FILTER_MODE_OPTIONS_STRING,
+      },
+    },
+    {
+      label: '澶囨敞',
+      prop: 'remark',
+      el: 'input',
+      //disabled: disabled,
+      placeholder: '璇疯緭鍏ュ娉�',
+      highSelectAttrs: {
+        prop: 'remark_FilterMode',
+        el: 'select',
+        placeholder: '璇烽�夋嫨',
+        options: FILTER_MODE_OPTIONS_STRING,
+      },
+    },
+  ])
+  /**
+   * 鏍¢獙鏄惁鏈夋暟鎹彉鍖�
+   */
+  const checkIsEqualObject = () => {
+    const data = {
+      formData: formData.value,
+    }
+    const check = isEqual(initiateData.value, data)
+    return check
+  }
+  const commonGetFormData = () => {
+    const data = {
+      dataIdentifier: formData.value.dataIdentifier || '',
+      dataIdentifier_FilterMode: formData.value.dataIdentifier_FilterMode || '',
+      materialMode: formData.value.materialMode || '',
+      materialMode_FilterMode: formData.value.materialMode_FilterMode || '',
+      materialBatch: formData.value.materialBatch || '',
+      materialBatch_FilterMode: formData.value.materialBatch_FilterMode || '',
+      callMaterialStatus: formData.value.callMaterialStatus || '',
+      callMaterialStatus_FilterMode:
+        formData.value.callMaterialStatus_FilterMode || '',
+      quantity: formData.value.quantity || '',
+      quantity_FilterMode: formData.value.quantity_FilterMode || '',
+      wmsRetResult: formData.value.wmsRetResult || '',
+      wmsRetResult_FilterMode: formData.value.wmsRetResult_FilterMode || '',
+      wmsTaskNo: formData.value.wmsTaskNo || '',
+      wmsTaskNo_FilterMode: formData.value.wmsTaskNo_FilterMode || '',
+      creationTime: formData.value.creationTime || '',
+      lastModificationTime: formData.value.lastModificationTime || '',
+      creatorName: formData.value.creatorName || '',
+      creatorName_FilterMode: formData.value.creatorName_FilterMode || '',
+      lastModifierName: formData.value.lastModifierName || '',
+      lastModifierName_FilterMode:
+        formData.value.lastModifierName_FilterMode || '',
+      remark: formData.value.remark || '',
+      remark_FilterMode: formData.value.remark_FilterMode || '',
+    }
+    return data
+  }
+  const onClose = (done: () => void) => {
+    if (visible.value) {
+      visible.value = false
+      const data = commonGetFormData()
+      ctx.emit('close', data)
+    }
+  }
+  /**
+   * 纭鏌ヨ
+   */
+  const onConfirmQuery = async () => {
+    const data = commonGetFormData()
+    ctx.emit('confirmQuery', data)
+  }
+  /**
+   * 閲嶇疆鍏叡select鏌ヨ
+   */
+  const onResetForHighSelect = async () => {
+    formData.value.dataIdentifier_FilterMode = 1
+    formData.value.materialMode_FilterMode = 1
+    formData.value.materialBatch_FilterMode = 1
+    formData.value.callMaterialStatus_FilterMode = 2
+    formData.value.quantity_FilterMode = 2
+    formData.value.wmsRetResult_FilterMode = 1
+    formData.value.wmsTaskNo_FilterMode = 1
+    formData.value.creatorName_FilterMode = 1
+    formData.value.lastModifierName_FilterMode = 1
+    formData.value.remark_FilterMode = 1
+  }
+  /**
+   * 閲嶇疆鏌ヨ
+   */
+  const onReset = async () => {
+    formData.value = {}
+    onResetForHighSelect() //閲嶇疆鍏叡select鏌ヨ
+    formData.value.dataIdentifier = ''
+    formData.value.materialMode = ''
+    formData.value.materialBatch = ''
+    formData.value.callMaterialStatus = ''
+    formData.value.quantity = ''
+    formData.value.wmsRetResult = ''
+    formData.value.wmsTaskNo = ''
+    formData.value.creationTime = ''
+    formData.value.lastModificationTime = ''
+    formData.value.creatorName = ''
+    formData.value.lastModifierName = ''
+    formData.value.remark = ''
+    //鍚戠埗缁勪欢鍙戦�佽嚜瀹氫箟浜嬩欢
+    ctx.emit('restQuery')
+  }
+
+  const updateCheckData = () => {
+    initiateData.value = {
+      formData: {
+        ...formData.value,
+      },
+    }
+  }
+  const updateFormItemOptions = (propName: string, enumData: any[]) => {
+    const item = formItems.find((item) => item.prop === propName)
+    if (item && enumData) {
+      item.options = enumData.map((item) => ({
+        label: item.description,
+        value: item.value,
+      }))
+    }
+  }
+  /**
+   * 閫氱敤鏌ヨ鏋氫妇
+   */
+  const commonQueryEnumForFrom = async () => {
+    const callMaterialStatusEnumEnum =
+      await callMaterialOrderDrawer.getWmsEnumData({
+        EnumName: 'CallMaterialStatusEnum',
+      })
+    updateFormItemOptions('callMaterialStatus', callMaterialStatusEnumEnum)
+  }
+  commonQueryEnumForFrom()
+  onResetForHighSelect() //閲嶇疆鍏叡select鏌ヨ
+  /**
+   * 寮圭獥鎵撳紑鑾峰彇璇︽儏
+   */
+  const onOpen = async () => {
+    disabled.value = false
+    updateCheckData()
+  }
+
+  watch(() => current.value, onOpen)
+
+  return {
+    formItems,
+    formData,
+    visible,
+    formRef,
+    onOpen,
+    onClose,
+    onConfirmQuery,
+    onReset,
+  }
+}
diff --git a/PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrder/Models/CallMaterialOrder.ts b/PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrder/Models/CallMaterialOrder.ts
index 2506a38..84fbfe6 100644
--- a/PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrder/Models/CallMaterialOrder.ts
+++ b/PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrder/Models/CallMaterialOrder.ts
@@ -22,8 +22,8 @@
     return deleteCallMaterialOrders(ids) 
   } 
 
-  async callMaterialByDataIdentifier(ids: string) { 
-    return callMaterialByDataIdentifier(ids) 
+  async callMaterialByDataIdentifier(data: any) { 
+    return callMaterialByDataIdentifier(data) 
   } 
 
 
diff --git a/PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrder/Models/Service/CallMaterialOrder.ts b/PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrder/Models/Service/CallMaterialOrder.ts
index 1047452..109405b 100644
--- a/PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrder/Models/Service/CallMaterialOrder.ts
+++ b/PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrder/Models/Service/CallMaterialOrder.ts
@@ -25,8 +25,8 @@
  * callMaterialByDataIdentifier 
  * @returns 
  */ 
-export const callMaterialByDataIdentifier = (id: string) => { 
-  return request.put(`/api/v1/PipeLineLems/callMaterialOrder/callMaterialByDataIdentifier/${id}`) 
+export const callMaterialByDataIdentifier = (data: any) => { 
+  return request.post('/api/v1/PipeLineLems/WorkPlanPublic/callMaterial', data) 
 } 
  
 /** 
diff --git a/PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrder/Views/Pages/Dialog/CallMaterialOrderQueryDrawer/CallMaterialOrderQueryDrawer.tsx b/PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrder/Views/Pages/Dialog/CallMaterialOrderQueryDrawer/CallMaterialOrderQueryDrawer.tsx
index c1c94f6..2698811 100644
--- a/PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrder/Views/Pages/Dialog/CallMaterialOrderQueryDrawer/CallMaterialOrderQueryDrawer.tsx
+++ b/PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrder/Views/Pages/Dialog/CallMaterialOrderQueryDrawer/CallMaterialOrderQueryDrawer.tsx
@@ -5,7 +5,7 @@
 import BaseQueryDrawer from '@/components/BaseQueryDrawer/BaseQueryDrawer' 
 import styles from './CallMaterialOrderQueryDrawer.module.scss' 
 import { useCallMaterialOrderQueryDrawer } from '../../../../Controllers/CallMaterialOrderQueryDrawer.tsx' 
-import DyForm from '@/components/DyForm/DyForm' 
+import DyFormForHighQuery from '@/components/DyFormForHighQuery/DyFormForHighQuery'  
  
 // @ts-ignore 
 export default defineComponent<{ 
@@ -59,12 +59,12 @@
         before-close={onClose} 
         onClose={onClose} 
       > 
-        <DyForm 
+        <DyFormForHighQuery 
           ref={formRef} 
           formData={formData.value} 
           labelWidth="106px" 
           formItemProps={formItems} 
-        ></DyForm> 
+        ></DyFormForHighQuery> 
       </BaseQueryDrawer> 
     ) 
   }, 
diff --git a/PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrderRecord/Controllers/CallMaterialOrderRecordDrawer.tsx b/PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrderRecord/Controllers/CallMaterialOrderRecordDrawer.tsx
index 2cde788..b7c43cb 100644
--- a/PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrderRecord/Controllers/CallMaterialOrderRecordDrawer.tsx
+++ b/PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrderRecord/Controllers/CallMaterialOrderRecordDrawer.tsx
@@ -14,6 +14,10 @@
 import isEqual from 'lodash/isEqual' 
 import { ConfirmBox } from '@/components/ConfirmBox/ConfirmBox' 
 import { cloneDeep } from 'lodash' 
+// 寮曞叆鍏叡閫夐」閰嶇疆  
+import {   
+  BOOLEAN_OPTIONS_AddEdit  
+} from '@/utils/commonOptionConstants';  
  
 export const useCallMaterialOrderRecordDrawer = (props: any, ctx?: any) => { 
   const callMaterialOrderRecordDrawer = injectModel<CallMaterialOrderRecordDrawer>('callMaterialOrderRecordDrawer') 
@@ -90,6 +94,13 @@
                    el: 'input', 
                    //disabled: disabled, 
                    placeholder: '璇疯緭鍏ュ師鏂欏瀷鍙�', 
+                }, 
+                { 
+                   label: '鍘熸枡鎵规', 
+                   prop: 'materialBatch', 
+                   el: 'input', 
+                   //disabled: disabled, 
+                   placeholder: '璇疯緭鍏ュ師鏂欐壒娆�', 
                 }, 
                 { 
                    label: '鍙枡鐘舵��', 
@@ -176,6 +187,7 @@
     const data = { 
       dataIdentifier: formData.value.dataIdentifier, 
 materialMode: formData.value.materialMode, 
+materialBatch: formData.value.materialBatch, 
 callMaterialStatus: formData.value.callMaterialStatus, 
 quantity: formData.value.quantity, 
 wmsRetResult: formData.value.wmsRetResult, 
@@ -229,6 +241,7 @@
       formData.value = { 
         dataIdentifier: res.dataIdentifier, 
 materialMode: res.materialMode, 
+materialBatch: res.materialBatch, 
 callMaterialStatus: res.callMaterialStatus, 
 quantity: res.quantity, 
 wmsRetResult: res.wmsRetResult, 
diff --git a/PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrderRecord/Controllers/CallMaterialOrderRecordQueryDrawer.tsx b/PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrderRecord/Controllers/CallMaterialOrderRecordQueryDrawer.tsx
index 286fb38..9363d9b 100644
--- a/PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrderRecord/Controllers/CallMaterialOrderRecordQueryDrawer.tsx
+++ b/PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrderRecord/Controllers/CallMaterialOrderRecordQueryDrawer.tsx
@@ -14,6 +14,15 @@
 import isEqual from 'lodash/isEqual' 
 import { ConfirmBox } from '@/components/ConfirmBox/ConfirmBox' 
 import { cloneDeep } from 'lodash' 
+// 寮曞叆鍏叡閫夐」閰嶇疆 
+import {  
+  FILTER_MODE_OPTIONS_STRING,  
+  FILTER_MODE_OPTIONS_NUM, 
+  FILTER_MODE_OPTIONS_BOOL 
+} from '@/components/DyFormForHighQuery/DyFormForHighQueryOptions'; 
+import {  
+  BOOLEAN_OPTIONS 
+} from '@/utils/commonOptionConstants'; 
  
 export const useCallMaterialOrderRecordQueryDrawer = (props: any, ctx?: any) => { 
   const callMaterialOrderRecordDrawer = injectModel<CallMaterialOrderRecordDrawer>('CallMaterialOrderRecordDrawer') 
@@ -84,6 +93,12 @@
                    el: 'input', 
                    //disabled: disabled, 
                    placeholder: '璇疯緭鍏ュ師鏂欐爣璇�', 
+                   highSelectAttrs:{ 
+                     prop: 'dataIdentifier_FilterMode', 
+                     el: 'select',  
+                     placeholder: '璇烽�夋嫨',  
+                     options:FILTER_MODE_OPTIONS_STRING 
+                   } 
                 }, 
                 { 
                    label: '鍘熸枡鍨嬪彿', 
@@ -91,6 +106,25 @@
                    el: 'input', 
                    //disabled: disabled, 
                    placeholder: '璇疯緭鍏ュ師鏂欏瀷鍙�', 
+                   highSelectAttrs:{ 
+                     prop: 'materialMode_FilterMode', 
+                     el: 'select',  
+                     placeholder: '璇烽�夋嫨',  
+                     options:FILTER_MODE_OPTIONS_STRING 
+                   } 
+                }, 
+                { 
+                   label: '鍘熸枡鎵规', 
+                   prop: 'materialBatch', 
+                   el: 'input', 
+                   //disabled: disabled, 
+                   placeholder: '璇疯緭鍏ュ師鏂欐壒娆�', 
+                   highSelectAttrs:{ 
+                     prop: 'materialBatch_FilterMode', 
+                     el: 'select',  
+                     placeholder: '璇烽�夋嫨',  
+                     options:FILTER_MODE_OPTIONS_STRING 
+                   } 
                 }, 
                 { 
                    label: '鍙枡鐘舵��', 
@@ -100,6 +134,12 @@
                    option: [], 
                    //disabled: disabled, 
                    placeholder: '璇疯緭鍏ュ彨鏂欑姸鎬�', 
+                   highSelectAttrs:{ 
+                     prop: 'callMaterialStatus_FilterMode', 
+                     el: 'select',  
+                     placeholder: '璇烽�夋嫨',  
+                     options:FILTER_MODE_OPTIONS_BOOL 
+                   } 
                 }, 
                 { 
                    label: '鍙枡鏁伴噺', 
@@ -116,6 +156,12 @@
                    precision: 0, 
                    //disabled: disabled, 
                    placeholder: '璇疯緭鍏ュ彨鏂欐暟閲�', 
+                   highSelectAttrs:{ 
+                     prop: 'quantity_FilterMode', 
+                     el: 'select',  
+                     placeholder: '璇烽�夋嫨',  
+                     options:FILTER_MODE_OPTIONS_NUM 
+                   } 
                 }, 
                 { 
                    label: 'WMS杩斿洖缁撴灉', 
@@ -123,6 +169,12 @@
                    el: 'input', 
                    //disabled: disabled, 
                    placeholder: '璇疯緭鍏MS杩斿洖缁撴灉', 
+                   highSelectAttrs:{ 
+                     prop: 'wmsRetResult_FilterMode', 
+                     el: 'select',  
+                     placeholder: '璇烽�夋嫨',  
+                     options:FILTER_MODE_OPTIONS_STRING 
+                   } 
                 }, 
                 { 
                    label: 'WMS浠诲姟鍙�', 
@@ -130,6 +182,12 @@
                    el: 'input', 
                    //disabled: disabled, 
                    placeholder: '璇疯緭鍏MS浠诲姟鍙�', 
+                   highSelectAttrs:{ 
+                     prop: 'wmsTaskNo_FilterMode', 
+                     el: 'select',  
+                     placeholder: '璇烽�夋嫨',  
+                     options:FILTER_MODE_OPTIONS_STRING 
+                   } 
                 }, 
                 { 
                    label: '鍒涘缓鏃堕棿', 
@@ -144,6 +202,7 @@
                    width: '100%',
                    //disabled: disabled, 
                    placeholder: '璇疯緭鍏ュ垱寤烘椂闂�', 
+                   isDateControl: true, // 鏄惧紡鏍囪涓烘棩鏈熸帶浠� 
                 }, 
                 { 
                    label: '淇敼鏃堕棿', 
@@ -158,6 +217,7 @@
                    width: '100%',
                    //disabled: disabled, 
                    placeholder: '璇疯緭鍏ヤ慨鏀规椂闂�', 
+                   isDateControl: true, // 鏄惧紡鏍囪涓烘棩鏈熸帶浠� 
                 }, 
                 { 
                    label: '鍒涘缓浜�', 
@@ -165,6 +225,12 @@
                    el: 'input', 
                    //disabled: disabled, 
                    placeholder: '璇疯緭鍏ュ垱寤轰汉', 
+                   highSelectAttrs:{ 
+                     prop: 'creatorName_FilterMode', 
+                     el: 'select',  
+                     placeholder: '璇烽�夋嫨',  
+                     options:FILTER_MODE_OPTIONS_STRING 
+                   } 
                 }, 
                 { 
                    label: '澶囨敞', 
@@ -172,6 +238,12 @@
                    el: 'input', 
                    //disabled: disabled, 
                    placeholder: '璇疯緭鍏ュ娉�', 
+                   highSelectAttrs:{ 
+                     prop: 'remark_FilterMode', 
+                     el: 'select',  
+                     placeholder: '璇烽�夋嫨',  
+                     options:FILTER_MODE_OPTIONS_STRING 
+                   } 
                 },  
   ]) 
   /** 
@@ -187,15 +259,25 @@
   const commonGetFormData=()=>{ 
     const data = { 
       dataIdentifier: formData.value.dataIdentifier || '', 
+dataIdentifier_FilterMode: formData.value.dataIdentifier_FilterMode || '', 
 materialMode: formData.value.materialMode || '', 
+materialMode_FilterMode: formData.value.materialMode_FilterMode || '', 
+materialBatch: formData.value.materialBatch || '', 
+materialBatch_FilterMode: formData.value.materialBatch_FilterMode || '', 
 callMaterialStatus: formData.value.callMaterialStatus || '', 
+callMaterialStatus_FilterMode: formData.value.callMaterialStatus_FilterMode || '', 
 quantity: formData.value.quantity || '', 
+quantity_FilterMode: formData.value.quantity_FilterMode || '', 
 wmsRetResult: formData.value.wmsRetResult || '', 
+wmsRetResult_FilterMode: formData.value.wmsRetResult_FilterMode || '', 
 wmsTaskNo: formData.value.wmsTaskNo || '', 
+wmsTaskNo_FilterMode: formData.value.wmsTaskNo_FilterMode || '', 
 creationTime: formData.value.creationTime || '', 
 lastModificationTime: formData.value.lastModificationTime || '', 
 creatorName: formData.value.creatorName || '', 
-remark: formData.value.remark || '',  
+creatorName_FilterMode: formData.value.creatorName_FilterMode || '', 
+remark: formData.value.remark || '', 
+remark_FilterMode: formData.value.remark_FilterMode || '',  
     } 
     return data; 
   } 
@@ -213,22 +295,37 @@
     const data =commonGetFormData(); 
     ctx.emit('confirmQuery', data) 
   } 
+  /**  
+   * 閲嶇疆鍏叡select鏌ヨ  
+   */  
+  const onResetForHighSelect = async () => {  
+    formData.value.dataIdentifier_FilterMode = 1 
+formData.value.materialMode_FilterMode = 1 
+formData.value.materialBatch_FilterMode = 1 
+formData.value.callMaterialStatus_FilterMode = 2 
+formData.value.quantity_FilterMode = 2 
+formData.value.wmsRetResult_FilterMode = 1 
+formData.value.wmsTaskNo_FilterMode = 1 
+formData.value.creatorName_FilterMode = 1 
+formData.value.remark_FilterMode = 1  
+  }  
   /** 
    * 閲嶇疆鏌ヨ 
    */ 
   const onReset = async () => { 
     formData.value = {} 
+    onResetForHighSelect();//閲嶇疆鍏叡select鏌ヨ  
     formData.value.dataIdentifier = '' 
 formData.value.materialMode = '' 
+formData.value.materialBatch = '' 
 formData.value.callMaterialStatus = '' 
 formData.value.quantity = '' 
 formData.value.wmsRetResult = '' 
 formData.value.wmsTaskNo = '' 
-formData.value.deletionTime = '' 
-formData.value.remark = '' 
-formData.value.extraField1 = '' 
-formData.value.extraField2 = '' 
-formData.value.extraField3 = ''  
+formData.value.creationTime = '' 
+formData.value.lastModificationTime = '' 
+formData.value.creatorName = '' 
+formData.value.remark = ''  
     //鍚戠埗缁勪欢鍙戦�佽嚜瀹氫箟浜嬩欢 
     ctx.emit('restQuery'); 
   } 
@@ -260,6 +357,7 @@
  
   } 
   commonQueryEnumForFrom() 
+  onResetForHighSelect();//閲嶇疆鍏叡select鏌ヨ  
   /** 
    * 寮圭獥鎵撳紑鑾峰彇璇︽儏 
    */ 
diff --git a/PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrderRecord/Views/Pages/CallMaterialOrderRecord/CallMaterialOrderRecord.tsx b/PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrderRecord/Views/Pages/CallMaterialOrderRecord/CallMaterialOrderRecord.tsx
index ed77a29..0957ae4 100644
--- a/PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrderRecord/Views/Pages/CallMaterialOrderRecord/CallMaterialOrderRecord.tsx
+++ b/PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrderRecord/Views/Pages/CallMaterialOrderRecord/CallMaterialOrderRecord.tsx
@@ -23,6 +23,10 @@
   ElFormItem, 
 } from 'element-plus' 
 import { injectModel } from '@/libs/Provider/Provider' 
+// 寮曞叆鍏叡閫夐」閰嶇疆  
+import {   
+  FILTER_MODE_OPTIONS_STRING 
+} from '@/components/DyFormForHighQuery/DyFormForHighQueryOptions';  
  
 interface RenderTableType { 
   url?: string 
@@ -68,13 +72,14 @@
     // 鏂板鐨勬煡璇㈡潯浠� 
     const queryForm = ref({ 
       searchVal: '', 
-      str_searchFormInputAttrs:[] 
+      str_searchFormInputAttrs:[], 
+      searchVal_FilterMode:'' 
     }) 
     //瀹氫箟鏁翠綋妯$硦鏌ヨ鐨勫垪鏁扮粍(娉ㄦ剰锛氬繀椤诲ぇ灏忓啓璺熷悗绔殑瀹炰綋绫诲睘鎬у悕涓�鑷达紝鍚﹀垯浼氬鑷村尮閰嶄笉瀵圭殑闂) 
     const _searchFormInputAttrs = ref([ 
-     'DataIdentifier','MaterialMode','WmsRetResult','WmsTaskNo','CreatorName','Remark' 
+     'DataIdentifier','MaterialMode','MaterialBatch','WmsRetResult','WmsTaskNo','CreatorName','Remark' 
     ]); 
-    const searchFormInputAttrs_Placeholder = ref('璇疯緭鍏ュ師鏂欐爣璇�/鍘熸枡鍨嬪彿/WMS杩斿洖缁撴灉/WMS浠诲姟鍙�/鍒涘缓浜�/澶囨敞'); 
+    const searchFormInputAttrs_Placeholder = ref('璇疯緭鍏ュ師鏂欐爣璇�/鍘熸枡鍨嬪彿/鍘熸枡鎵规/WMS杩斿洖缁撴灉/WMS浠诲姟鍙�/鍒涘缓浜�/澶囨敞'); 
      
  
     // 鍔ㄦ�佹灇涓鹃�夐」 
@@ -98,16 +103,20 @@
       } 
     } 
  
-    // 缁勪欢鎸傝浇鏃惰幏鍙栨灇涓炬暟鎹� 
-    onMounted(() => { 
-      fetchEnumData() 
-    }) 
+    // 瀹氫箟鍝嶅簲寮忔煡璇㈡暟鎹�  
+    const _curHighQueryData = ref({ searchVal: '',str_searchFormInputAttrs:[],searchVal_FilterMode:'' });   
+    // 缁勪欢鎸傝浇鏃惰幏鍙栨灇涓炬暟鎹�  
+    onMounted(() => {  
+      fetchEnumData()  
+      queryForm.value.searchVal_FilterMode = FILTER_MODE_OPTIONS_STRING[0]?.value || '';  
+      _curHighQueryData.value.searchVal_FilterMode = queryForm.value.searchVal_FilterMode;   
+      _curHighQueryData.value.str_searchFormInputAttrs = _searchFormInputAttrs.value;  
+    })  
  
-    // 瀹氫箟鍝嶅簲寮忔煡璇㈡暟鎹� 
-    const _curHighQueryData = ref({ searchVal: '',str_searchFormInputAttrs:[] }); 
     // 鏂扮増鐨勬煡璇㈡柟娉曪紙涓婚〉闈腑鐨勬寜閽�愭煡璇€�戯級 
     const handleQueryForMain = async () => { 
       _curHighQueryData.value.searchVal = queryForm.value.searchVal; 
+      _curHighQueryData.value.searchVal_FilterMode = queryForm.value.searchVal_FilterMode;  
       _curHighQueryData.value.str_searchFormInputAttrs = _searchFormInputAttrs.value; 
       tableRef.value.getList(_curHighQueryData.value) 
     } 
@@ -120,6 +129,7 @@
     // 鏂扮増鐨勬煡璇㈤噸缃� 
     const resetQuery = () => { 
       queryForm.value.searchVal = '' 
+      queryForm.value.searchVal_FilterMode = FILTER_MODE_OPTIONS_STRING[0]?.value || ''; 
       queryForm.value.str_searchFormInputAttrs=_searchFormInputAttrs.value; 
     } 
      //鏂扮増鐨勫鍑烘柟娉� 
@@ -137,6 +147,7 @@
     const commonSaveCurHighQueryData=(filteredData={})=>{ 
       _curHighQueryData.value = { ..._curHighQueryData.value, ...filteredData }; 
       _curHighQueryData.value.searchVal = queryForm.value.searchVal 
+      _curHighQueryData.value.searchVal_FilterMode = queryForm.value.searchVal_FilterMode  
       _curHighQueryData.value.str_searchFormInputAttrs =_searchFormInputAttrs.value; 
     } 
      //鑾峰彇楂樼骇鏌ヨ寮瑰嚭妗嗙殑鏌ヨ鍊� 
@@ -150,6 +161,7 @@
       ) 
       //缁勫悎妯$硦鏌ヨ 
       filteredData.searchVal = queryForm.value.searchVal 
+      filteredData.searchVal_FilterMode = queryForm.value.searchVal_FilterMode  
       filteredData.str_searchFormInputAttrs =_searchFormInputAttrs.value; 
       return filteredData; 
     } 
@@ -271,7 +283,7 @@
  
           <div class={styles.headerContent}> 
             <div class={styles.header}> 
-              {/* <IconButton 
+              <IconButton 
                 v-permission="callMaterialOrderRecord-add" 
                 icon="add-p" 
                 onClick={onAddCallMaterialOrderRecord} 
@@ -281,8 +293,7 @@
               </IconButton> 
               <el-divider direction="vertical" /> 
  
-              <el-divider direction="vertical" />  */}
-              {/* <el-upload 
+              <el-upload 
                 v-permission="callMaterialOrderRecord-import" 
                 name="file" 
                 accept=".xlsx,.xls,.csv" 
@@ -294,7 +305,7 @@
                 action="/api/v1/PipeLineLems/callMaterialOrderRecord/import" 
               > 
                 <IconButton icon="in">瀵煎叆</IconButton> 
-              </el-upload>  */}
+              </el-upload> 
  
               <IconButton 
                 v-permission="callMaterialOrderRecord-output" 
@@ -320,6 +331,21 @@
                 /> 
                 </el-tooltip> 
               </ElFormItem> 
+              <ElFormItem label="" style="width:100px;">  
+                   <ElSelect 
+                                v-model={queryForm.value.searchVal_FilterMode} 
+                                placeholder="璇烽�夋嫨" 
+                                class={styles.formItem} 
+                              > 
+                                {FILTER_MODE_OPTIONS_STRING.map((option) => ( 
+                                  <ElOption 
+                                    key={option.value} 
+                                    label={option.label} 
+                                    value={option.value} 
+                                  /> 
+                                ))} 
+                              </ElSelect> 
+              </ElFormItem>  
               <IconButton type="primary" icon="search" onClick={handleQueryForMain}> 
                 鏌ヨ 
               </IconButton> 
diff --git a/PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrderRecord/Views/Pages/CallMaterialOrderRecord/Config.ts b/PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrderRecord/Views/Pages/CallMaterialOrderRecord/Config.ts
index c21e13b..3807f1e 100644
--- a/PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrderRecord/Views/Pages/CallMaterialOrderRecord/Config.ts
+++ b/PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrderRecord/Views/Pages/CallMaterialOrderRecord/Config.ts
@@ -15,6 +15,11 @@
   width:160, 
 }, 
 { 
+  field: 'materialBatch', 
+  title: '鍘熸枡鎵规', 
+  width:160, 
+}, 
+{ 
   field: 'callMaterialStatusDesc', 
   title: '鍙枡鐘舵��', 
   width:160, 
diff --git a/PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrderRecord/Views/Pages/Dialog/CallMaterialOrderRecordQueryDrawer/CallMaterialOrderRecordQueryDrawer.tsx b/PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrderRecord/Views/Pages/Dialog/CallMaterialOrderRecordQueryDrawer/CallMaterialOrderRecordQueryDrawer.tsx
index 2de58dd..ca66698 100644
--- a/PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrderRecord/Views/Pages/Dialog/CallMaterialOrderRecordQueryDrawer/CallMaterialOrderRecordQueryDrawer.tsx
+++ b/PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrderRecord/Views/Pages/Dialog/CallMaterialOrderRecordQueryDrawer/CallMaterialOrderRecordQueryDrawer.tsx
@@ -5,7 +5,7 @@
 import BaseQueryDrawer from '@/components/BaseQueryDrawer/BaseQueryDrawer' 
 import styles from './CallMaterialOrderRecordQueryDrawer.module.scss' 
 import { useCallMaterialOrderRecordQueryDrawer } from '../../../../Controllers/CallMaterialOrderRecordQueryDrawer.tsx' 
-import DyForm from '@/components/DyForm/DyForm' 
+import DyFormForHighQuery from '@/components/DyFormForHighQuery/DyFormForHighQuery'  
  
 // @ts-ignore 
 export default defineComponent<{ 
@@ -59,12 +59,12 @@
         before-close={onClose} 
         onClose={onClose} 
       > 
-        <DyForm 
+        <DyFormForHighQuery 
           ref={formRef} 
           formData={formData.value} 
           labelWidth="106px" 
           formItemProps={formItems} 
-        ></DyForm> 
+        ></DyFormForHighQuery> 
       </BaseQueryDrawer> 
     ) 
   }, 
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/CallMaterialOrderCreateDto.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/CallMaterialOrderCreateDto.cs
index 5454ecf..4aacfeb 100644
--- a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/CallMaterialOrderCreateDto.cs
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/CallMaterialOrderCreateDto.cs
@@ -14,4 +14,9 @@
     /// 鏄惁绂佺敤 
     /// </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/CallMaterialOrder/CallMaterialOrderCreateOrUpdateDtoBase.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/CallMaterialOrderCreateOrUpdateDtoBase.cs
index 50e4529..ec2a2f6 100644
--- a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/CallMaterialOrderCreateOrUpdateDtoBase.cs
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/CallMaterialOrderCreateOrUpdateDtoBase.cs
@@ -20,6 +20,11 @@
         public string? MaterialMode { get; set; }
 
         /// <summary>
+        /// 鍘熸枡鎵规
+        /// </summary>
+        public string? MaterialBatch { get; set; }
+
+        /// <summary>
         /// 鍙枡鐘舵��
         /// </summary>
         public CallMaterialStatusEnum CallMaterialStatus { get; set; }
@@ -29,15 +34,10 @@
         /// </summary>
         public int Quantity { get; set; }
 
-    /// <summary>
-    /// 鍒涘缓浜�
-    /// </summary>
-    public string CreatorName { get; set; }
-
-    /// <summary>
-    /// WMS杩斿洖缁撴灉
-    /// </summary>
-    public string? WmsRetResult { get; set; }
+        /// <summary>
+        /// WMS杩斿洖缁撴灉
+        /// </summary>
+        public string? WmsRetResult { get; set; }
 
         /// <summary>
         /// WMS浠诲姟鍙�
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/CallMaterialOrderDto.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/CallMaterialOrderDto.cs
index bd55469..e475e0d 100644
--- a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/CallMaterialOrderDto.cs
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/CallMaterialOrderDto.cs
@@ -23,6 +23,11 @@
         public string? MaterialMode { get; set; }
 
         /// <summary>
+        /// 鍘熸枡鎵规
+        /// </summary>
+        public string? MaterialBatch { get; set; }
+
+        /// <summary>
         /// 鍙枡鐘舵��
         /// </summary>
         public CallMaterialStatusEnum CallMaterialStatus { get; set; }
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/CallMaterialOrderExportModel.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/CallMaterialOrderExportModel.cs
index 7b35d52..23dc2c9 100644
--- a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/CallMaterialOrderExportModel.cs
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/CallMaterialOrderExportModel.cs
@@ -23,6 +23,12 @@
         public string MaterialMode { get; set; }
 
         /// <summary>
+        /// 鍘熸枡鎵规
+        /// </summary>
+        [ExcelColumn(Name = "鍘熸枡鎵规", Width = 25)]
+        public string MaterialBatch { get; set; }
+
+        /// <summary>
         /// 鍙枡鐘舵��
         /// </summary>
         [ExcelColumn(Name = "鍙枡鐘舵��", Width = 25)]
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/CallMaterialOrderUpdateDto.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/CallMaterialOrderUpdateDto.cs
index 4af7767..e218d67 100644
--- a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/CallMaterialOrderUpdateDto.cs
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/CallMaterialOrderUpdateDto.cs
@@ -10,4 +10,9 @@
     /// 骞跺彂鎴� 
     /// </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/CallMaterialOrder/GetCallMaterialOrderInput.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/GetCallMaterialOrderInput.cs
index c1faf46..4ef7313 100644
--- a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/GetCallMaterialOrderInput.cs
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/GetCallMaterialOrderInput.cs
@@ -65,6 +65,16 @@
         public SearchFilterModeEnum MaterialMode_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
 
         /// <summary>
+        /// 鍘熸枡鎵规
+        /// </summary>
+        public string MaterialBatch { get; set; }
+
+        /// <summary>
+        /// 鍘熸枡鎵规-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum MaterialBatch_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+        /// <summary>
         /// 鍙枡鐘舵��
         /// </summary>
         public CallMaterialStatusEnum?  CallMaterialStatus { get; set; }
@@ -109,7 +119,7 @@
         /// </summary>
         //琛ㄧず鏄� 楂樼骇鏌ヨ鑼冨洿鏌ヨ鐗规��
         [HighSearchRangeAttribute]
-        public List<string> CreationTime { get; set; }
+        public string CreationTime { get; set; }
 
 
         /// <summary>
@@ -127,7 +137,7 @@
         /// </summary>
         //琛ㄧず鏄� 楂樼骇鏌ヨ鑼冨洿鏌ヨ鐗规��
         [HighSearchRangeAttribute]
-        public List<string> LastModificationTime { get; set; }
+        public string LastModificationTime { get; set; }
 
 
         /// <summary>
@@ -165,7 +175,7 @@
         /// </summary>
         //琛ㄧず鏄� 楂樼骇鏌ヨ鑼冨洿鏌ヨ鐗规��
         [HighSearchRangeAttribute]
-        public List<string> DeletionTime { get; set; }
+        public string DeletionTime { get; set; }
 
 
         /// <summary>
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/CallMaterialOrderRecordCreateDto.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/CallMaterialOrderRecordCreateDto.cs
index 56600dc..691c650 100644
--- a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/CallMaterialOrderRecordCreateDto.cs
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/CallMaterialOrderRecordCreateDto.cs
@@ -14,4 +14,9 @@
     /// 鏄惁绂佺敤 
     /// </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/CallMaterialOrderRecord/CallMaterialOrderRecordCreateOrUpdateDtoBase.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/CallMaterialOrderRecordCreateOrUpdateDtoBase.cs
index 387dc5e..43ee670 100644
--- a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/CallMaterialOrderRecordCreateOrUpdateDtoBase.cs
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/CallMaterialOrderRecordCreateOrUpdateDtoBase.cs
@@ -20,6 +20,11 @@
         public string? MaterialMode { get; set; }
 
         /// <summary>
+        /// 鍘熸枡鎵规
+        /// </summary>
+        public string? MaterialBatch { get; set; }
+
+        /// <summary>
         /// 鍙枡鐘舵��
         /// </summary>
         public CallMaterialStatusEnum CallMaterialStatus { get; set; }
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/CallMaterialOrderRecordDto.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/CallMaterialOrderRecordDto.cs
index 964f500..2ca1318 100644
--- a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/CallMaterialOrderRecordDto.cs
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/CallMaterialOrderRecordDto.cs
@@ -23,6 +23,11 @@
         public string? MaterialMode { get; set; }
 
         /// <summary>
+        /// 鍘熸枡鎵规
+        /// </summary>
+        public string? MaterialBatch { get; set; }
+
+        /// <summary>
         /// 鍙枡鐘舵��
         /// </summary>
         public CallMaterialStatusEnum CallMaterialStatus { get; set; }
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/CallMaterialOrderRecordExportModel.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/CallMaterialOrderRecordExportModel.cs
index 9fa756c..2339791 100644
--- a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/CallMaterialOrderRecordExportModel.cs
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/CallMaterialOrderRecordExportModel.cs
@@ -23,6 +23,12 @@
         public string MaterialMode { get; set; }
 
         /// <summary>
+        /// 鍘熸枡鎵规
+        /// </summary>
+        [ExcelColumn(Name = "鍘熸枡鎵规", Width = 25)]
+        public string MaterialBatch { get; set; }
+
+        /// <summary>
         /// 鍙枡鐘舵��
         /// </summary>
         [ExcelColumn(Name = "鍙枡鐘舵��", Width = 25)]
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/CallMaterialOrderRecordUpdateDto.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/CallMaterialOrderRecordUpdateDto.cs
index 625da3a..91e3a60 100644
--- a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/CallMaterialOrderRecordUpdateDto.cs
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/CallMaterialOrderRecordUpdateDto.cs
@@ -10,4 +10,9 @@
     /// 骞跺彂鎴� 
     /// </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/CallMaterialOrderRecord/GetCallMaterialOrderRecordInput.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/GetCallMaterialOrderRecordInput.cs
index 4fceba9..752d440 100644
--- a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/GetCallMaterialOrderRecordInput.cs
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/GetCallMaterialOrderRecordInput.cs
@@ -65,6 +65,16 @@
         public SearchFilterModeEnum MaterialMode_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
 
         /// <summary>
+        /// 鍘熸枡鎵规
+        /// </summary>
+        public string MaterialBatch { get; set; }
+
+        /// <summary>
+        /// 鍘熸枡鎵规-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum MaterialBatch_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+        /// <summary>
         /// 鍙枡鐘舵��
         /// </summary>
         public CallMaterialStatusEnum?  CallMaterialStatus { get; set; }
@@ -109,7 +119,7 @@
         /// </summary>
         //琛ㄧず鏄� 楂樼骇鏌ヨ鑼冨洿鏌ヨ鐗规��
         [HighSearchRangeAttribute]
-        public List<string> CreationTime { get; set; }
+        public string CreationTime { get; set; }
 
 
         /// <summary>
@@ -127,7 +137,7 @@
         /// </summary>
         //琛ㄧず鏄� 楂樼骇鏌ヨ鑼冨洿鏌ヨ鐗规��
         [HighSearchRangeAttribute]
-        public List<string> LastModificationTime { get; set; }
+        public string LastModificationTime { get; set; }
 
 
         /// <summary>
@@ -165,7 +175,7 @@
         /// </summary>
         //琛ㄧず鏄� 楂樼骇鏌ヨ鑼冨洿鏌ヨ鐗规��
         [HighSearchRangeAttribute]
-        public List<string> DeletionTime { get; set; }
+        public string DeletionTime { get; set; }
 
 
         /// <summary>
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkPlan/CallMaterialByDataIdentifierInput.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkPlan/CallMaterialByDataIdentifierInput.cs
new file mode 100644
index 0000000..e403ec4
--- /dev/null
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkPlan/CallMaterialByDataIdentifierInput.cs
@@ -0,0 +1,29 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.WorkPlan
+{
+    /// <summary>
+    /// 鍙枡杈撳叆鍙傛暟妯″瀷
+    /// </summary>
+    [Serializable]
+    public class CallMaterialByDataIdentifierInput
+    {
+
+        /// <summary>
+        /// 鍘熸枡鏍囪瘑
+        /// </summary>
+        public string DataIdentifier { get; set; }
+
+
+        /// <summary>
+        /// ID
+        /// </summary>
+        public Guid Id { get; set; }
+
+
+    }
+}
\ No newline at end of file
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Services/ICallMaterialOrderAppService.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Services/ICallMaterialOrderAppService.cs
index c1be461..d2778f6 100644
--- a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Services/ICallMaterialOrderAppService.cs
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Services/ICallMaterialOrderAppService.cs
@@ -1,66 +1,78 @@
-using CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.CallMaterialOrder;
-using CMS.Plugin.PipeLineLems.Domain.CallMaterialOrder;
-using System.Linq.Expressions;
-using Volo.Abp;
-using Volo.Abp.Application.Services;
-
-namespace CMS.Plugin.PipeLineLems.Application.Contracts.Services;
-
+using CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.CallMaterialOrder; 
+using Volo.Abp.Application.Services; 
+using CmsQueryExtensions.Entitys; 
+using System.Linq.Expressions; 
+using CMS.Plugin.PipeLineLems.Domain.CallMaterialOrder; 
+ 
+namespace CMS.Plugin.PipeLineLems.Application.Contracts.Services; 
+ 
 /// <summary> 
 /// 鍙枡鍗曡〃搴旂敤鏈嶅姟鎺ュ彛 
 /// </summary> 
-public interface ICallMaterialOrderAppService : ICrudAppService<CallMaterialOrderDto, Guid, GetCallMaterialOrderInput, CallMaterialOrderCreateDto, CallMaterialOrderUpdateDto>
-{
+public interface ICallMaterialOrderAppService : ICrudAppService<CallMaterialOrderDto, Guid, GetCallMaterialOrderInput, CallMaterialOrderCreateDto, CallMaterialOrderUpdateDto> 
+{ 
     /// <summary> 
     /// 鍏嬮殕鍙枡鍗曡〃 
     /// </summary> 
     /// <param name="ids"></param> 
     /// <returns></returns> 
-    Task<List<CallMaterialOrderDto>> CloneAsync(IEnumerable<Guid> ids);
-
+    Task<List<CallMaterialOrderDto>> CloneAsync(IEnumerable<Guid> ids, MyCurrentUser myCurrentUser); 
+ 
     /// <summary> 
     /// 鍒犻櫎鍙枡鍗曡〃 
     /// </summary> 
     /// <param name="ids"></param> 
     /// <returns></returns> 
-    Task DeleteManyAsync(IEnumerable<Guid> ids);
-
-    Task<CallMaterialOrder> FindByWmsTaskNoAsync(string wmsTaskNo);
-
-
-    Task CallMaterialByDataIdentifier(Guid id);
-
+    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);
-
+    Task AdjustSortAsync(Guid id, int sort); 
+ 
     /// <summary> 
     /// 瀵煎叆鍙枡鍗曡〃 
     /// </summary> 
     /// <param name="input"></param> 
     /// <returns></returns> 
-    Task ImportAsync(CallMaterialOrdersImportModel input);
-
+    Task ImportAsync(CallMaterialOrdersImportModel input, MyCurrentUser myCurrentUser); 
+ 
     /// <summary> 
     /// 瀵煎嚭鍙枡鍗曡〃 
     /// </summary> 
     /// <param name="input"></param> 
     /// <returns></returns> 
-    Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetCallMaterialOrderInput input);
-
+    Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetCallMaterialOrderInput input); 
+ 
     /// <summary> 
     /// 鏍规嵁鏉′欢鑾峰彇鍙枡鍗曡〃鍒楄〃 
     /// </summary> 
     /// <param name="whereConditions"></param> 
     /// <param name="cancellationToken"></param> 
     /// <returns></returns> 
-    Task<List<CallMaterialOrder>> GetListByFilterAsync(Expression<Func<CallMaterialOrder, bool>> whereConditions, CancellationToken cancellationToken = default);
-
-
+    Task<List<CallMaterialOrder>> GetListByFilterAsync(Expression<Func<CallMaterialOrder, bool>> whereConditions, CancellationToken cancellationToken = default); 
+ 
+ 
     /// <summary> 
     ///  鏍规嵁鏉′欢鑾峰彇鍗曚釜鍙枡鍗曡〃 
     /// </summary> 
@@ -69,5 +81,5 @@
     /// <param name="cancellationToken"></param> 
     /// <returns></returns> 
     /// <exception cref="UserFriendlyException"></exception> 
-    Task<CallMaterialOrder> GetSingleByFilterAsync(Expression<Func<CallMaterialOrder, bool>> whereConditions, bool is鈥婱ultipleThrowException = false, CancellationToken cancellationToken = default);
-}
+    Task<CallMaterialOrder> GetSingleByFilterAsync(Expression<Func<CallMaterialOrder, bool>> whereConditions, bool is鈥婱ultipleThrowException = false, CancellationToken cancellationToken = default); 
+} 
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Services/ICallMaterialOrderRecordAppService.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Services/ICallMaterialOrderRecordAppService.cs
index 0dc6429..52fe8b8 100644
--- a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Services/ICallMaterialOrderRecordAppService.cs
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Services/ICallMaterialOrderRecordAppService.cs
@@ -1,5 +1,8 @@
 using CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.CallMaterialOrderRecord; 
 using Volo.Abp.Application.Services; 
+using CmsQueryExtensions.Entitys; 
+using System.Linq.Expressions; 
+using CMS.Plugin.PipeLineLems.Domain.CallMaterialOrderRecord; 
  
 namespace CMS.Plugin.PipeLineLems.Application.Contracts.Services; 
  
@@ -13,14 +16,31 @@
     /// </summary> 
     /// <param name="ids"></param> 
     /// <returns></returns> 
-    Task<List<CallMaterialOrderRecordDto>> CloneAsync(IEnumerable<Guid> ids); 
+    Task<List<CallMaterialOrderRecordDto>> CloneAsync(IEnumerable<Guid> ids, MyCurrentUser myCurrentUser); 
  
     /// <summary> 
     /// 鍒犻櫎鍙枡璁板綍琛� 
     /// </summary> 
     /// <param name="ids"></param> 
     /// <returns></returns> 
-    Task DeleteManyAsync(IEnumerable<Guid> ids); 
+    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> 
     /// 璋冩暣鎺掑簭鍙枡璁板綍琛� 
@@ -35,7 +55,7 @@
     /// </summary> 
     /// <param name="input"></param> 
     /// <returns></returns> 
-    Task ImportAsync(CallMaterialOrderRecordsImportModel input); 
+    Task ImportAsync(CallMaterialOrderRecordsImportModel input, MyCurrentUser myCurrentUser); 
  
     /// <summary> 
     /// 瀵煎嚭鍙枡璁板綍琛� 
@@ -43,4 +63,23 @@
     /// <param name="input"></param> 
     /// <returns></returns> 
     Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetCallMaterialOrderRecordInput input); 
+ 
+    /// <summary> 
+    /// 鏍规嵁鏉′欢鑾峰彇鍙枡璁板綍琛ㄥ垪琛� 
+    /// </summary> 
+    /// <param name="whereConditions"></param> 
+    /// <param name="cancellationToken"></param> 
+    /// <returns></returns> 
+    Task<List<CallMaterialOrderRecord>> GetListByFilterAsync(Expression<Func<CallMaterialOrderRecord, 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<CallMaterialOrderRecord> GetSingleByFilterAsync(Expression<Func<CallMaterialOrderRecord, bool>> whereConditions, bool is鈥婱ultipleThrowException = false, CancellationToken cancellationToken = default); 
 } 
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/CallMaterialOrderAppService.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/CallMaterialOrderAppService.cs
index 440d4f5..bf336a6 100644
--- a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/CallMaterialOrderAppService.cs
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/CallMaterialOrderAppService.cs
@@ -1,140 +1,129 @@
-using CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.CallMaterialOrder;
-using CMS.Plugin.PipeLineLems.Application.Contracts.Services;
-using CMS.Plugin.PipeLineLems.Domain.Shared;
-using CmsQueryExtensions;
-using CMS.Plugin.PipeLineLems.Domain.CallMaterialOrder;
-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;
-
-namespace CMS.Plugin.PipeLineLems.Application.Implements;
-
+using CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.CallMaterialOrder; 
+using CMS.Plugin.PipeLineLems.Application.Contracts.Services; 
+using CMS.Plugin.PipeLineLems.Domain.Shared; 
+using CmsQueryExtensions; 
+using CMS.Plugin.PipeLineLems.Domain.CallMaterialOrder; 
+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 CallMaterialOrderAppService : CMSPluginAppService, ICallMaterialOrderAppService
-{
-    private readonly ICallMaterialOrderRepository _callMaterialOrderRepository;
-    private readonly SharedService _sharedService;
-    private readonly IServiceProvider _serviceProvider;
+public class CallMaterialOrderAppService : CMSPluginAppService, ICallMaterialOrderAppService 
+{ 
+    private readonly ICallMaterialOrderRepository _callMaterialOrderRepository; 
+ 
     /// <summary> 
     /// Initializes a new instance of the <see cref="CallMaterialOrderAppService"/> class. 
     /// </summary> 
     /// <param name="CallMaterialOrderRepository">The task job repository.</param> 
-    public CallMaterialOrderAppService(ICallMaterialOrderRepository callMaterialOrderRepository, SharedService sharedService, IServiceProvider serviceProvider)
-    {
-        _callMaterialOrderRepository = callMaterialOrderRepository;
-        _sharedService = sharedService;
-        _serviceProvider = serviceProvider;
-    }
-
+    public CallMaterialOrderAppService(ICallMaterialOrderRepository callMaterialOrderRepository) 
+    { 
+        _callMaterialOrderRepository = callMaterialOrderRepository; 
+    } 
+ 
     /// <summary> 
     /// 鑾峰彇鎸囧畾鍙枡鍗曡〃 
     /// </summary> 
     /// <param name="id"></param> 
     /// <returns></returns> 
-    public virtual async Task<CallMaterialOrderDto> GetAsync(Guid id)
-    {
-        return ObjectMapper.Map<CallMaterialOrder, CallMaterialOrderDto>(await _callMaterialOrderRepository.GetAsync(id));
-    }
-
-    public virtual async Task CallMaterialByDataIdentifier(Guid id)
-    {
-        await _sharedService.CallMaterialByDataIdentifier(id, _serviceProvider);
-    }
-
-    public virtual async Task<CallMaterialOrder> FindByWmsTaskNoAsync(string wmsTaskNo)
-    {
-        return await _callMaterialOrderRepository.FindByWmsTaskNoAsync(wmsTaskNo);
-    }
-
+    public virtual async Task<CallMaterialOrderDto> GetAsync(Guid id) 
+    { 
+        return ObjectMapper.Map<CallMaterialOrder, CallMaterialOrderDto>(await _callMaterialOrderRepository.GetAsync(id)); 
+    } 
+ 
     /// <summary> 
     /// 鍒嗛〉鑾峰彇鍙枡鍗曡〃 
     /// </summary> 
     /// <param name="input"></param> 
     /// <returns></returns> 
-    public virtual async Task<PagedResultDto<CallMaterialOrderDto>> GetListAsync(GetCallMaterialOrderInput input)
-    {
-        Check.NotNull(input, nameof(input));
-
-        if (input.Sorting.IsNullOrWhiteSpace())
-        {
-            input.Sorting = nameof(CallMaterialOrder.Sort);
-        }
-
+    public virtual async Task<PagedResultDto<CallMaterialOrderDto>> GetListAsync(GetCallMaterialOrderInput input) 
+    { 
+        Check.NotNull(input, nameof(input)); 
+ 
+        if (input.Sorting.IsNullOrWhiteSpace()) 
+        { 
+            input.Sorting = nameof(CallMaterialOrder.Sort); 
+        } 
+ 
         #region 鍔ㄦ�佹瀯閫犳煡璇㈡潯浠�  
-
+ 
         //鍔ㄦ�佹瀯閫犳煡璇㈡潯浠�  
-        var whereConditions = DynamicGetQueryParams(input);
-
-        #endregion
-
-        var count = await _callMaterialOrderRepository.GetCountAsync(whereConditions);
-        var list = await _callMaterialOrderRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount);
-
-        return new PagedResultDto<CallMaterialOrderDto>(count, ObjectMapper.Map<List<CallMaterialOrder>, List<CallMaterialOrderDto>>(list));
-    }
-
+        var whereConditions = DynamicGetQueryParams(input); 
+ 
+        #endregion 
+ 
+        var count = await _callMaterialOrderRepository.GetCountAsync(whereConditions); 
+        var list = await _callMaterialOrderRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount); 
+ 
+        return new PagedResultDto<CallMaterialOrderDto>(count, ObjectMapper.Map<List<CallMaterialOrder>, List<CallMaterialOrderDto>>(list)); 
+    } 
+ 
     /// <summary>  
     /// 鍔ㄦ�佹瀯閫犳煡璇㈡潯浠�  
     /// </summary>  
     /// <param name="input">杈撳叆鍙傛暟</param>  
     /// <returns></returns>  
-    private FunReturnResultModel<Expression<Func<CallMaterialOrder, bool>>> DynamicGetQueryParams(GetCallMaterialOrderInput input)
-    {
+    private FunReturnResultModel<Expression<Func<CallMaterialOrder, bool>>> DynamicGetQueryParams(GetCallMaterialOrderInput input) 
+    { 
         //鍔ㄦ�佹瀯閫犳煡璇㈡潯浠�  
-        var whereConditions = WhereConditionsExtensions.GetWhereConditions<CallMaterialOrder, GetCallMaterialOrderInput>(input);
-        if (!whereConditions.IsSuccess)
-        {
-            throw new Exception("鍔ㄦ�佹瀯閫犳煡璇㈡潯浠跺け璐�:" + whereConditions.ErrMsg);
-        }
-
+        var whereConditions = WhereConditionsExtensions.GetWhereConditions<CallMaterialOrder, GetCallMaterialOrderInput>(input); 
+        if (!whereConditions.IsSuccess) 
+        { 
+            throw new Exception("鍔ㄦ�佹瀯閫犳煡璇㈡潯浠跺け璐�:" + whereConditions.ErrMsg); 
+        } 
+ 
         //涔熷彲鍐嶆鑷畾涔夋瀯寤烘煡璇㈡潯浠�  
-        Expression<Func<CallMaterialOrder, bool>> extendExpression = a => a.IsDeleted == false;
+        Expression<Func<CallMaterialOrder, bool>> extendExpression = a => a.IsDeleted == false; 
         // 浣跨敤 System.Linq.PredicateBuilder 鐨� And 
-        var pres = (System.Linq.Expressions.Expression<Func<CallMaterialOrder, bool>>)(whereConditions.data);
-        whereConditions.data = System.Linq.PredicateBuilder.And(pres, extendExpression);
-
-        return whereConditions;
-    }
-
+        var pres = (System.Linq.Expressions.Expression<Func<CallMaterialOrder, 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<CallMaterialOrderDto> CreateAsync(CallMaterialOrderCreateDto input)
-    {
-        await CheckCreateOrUpdateDtoAsync(input);
-
-        var exist = await _callMaterialOrderRepository.NameExistAsync(input.DataIdentifier);
-        if (exist)
-        {
-            throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.DataIdentifier]);
-        }
-
-        var maxSort = await _callMaterialOrderRepository.GetMaxSortAsync();
-        var sort = input.Sort ?? maxSort;
-
-        var insertObj = ObjectMapper.Map<CallMaterialOrderCreateDto, CallMaterialOrder>(input);
-        insertObj.Sort = sort;
-        input.MapExtraPropertiesTo(insertObj, MappingPropertyDefinitionChecks.None);
-
-        await _callMaterialOrderRepository.InsertAsync(insertObj);
-
+    public virtual async Task<CallMaterialOrderDto> CreateAsync(CallMaterialOrderCreateDto input) 
+    { 
+        await CheckCreateOrUpdateDtoAsync(input); 
+ 
+        var exist = await _callMaterialOrderRepository.NameExistAsync(input.DataIdentifier); 
+        if (exist) 
+        { 
+            throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.DataIdentifier]); 
+        } 
+ 
+        var maxSort = await _callMaterialOrderRepository.GetMaxSortAsync(); 
+        var sort = input.Sort ?? maxSort; 
+ 
+        var insertObj = ObjectMapper.Map<CallMaterialOrderCreateDto, CallMaterialOrder>(input); 
+        insertObj.Sort = sort; 
+        input.MapExtraPropertiesTo(insertObj, MappingPropertyDefinitionChecks.None); 
+ 
+        insertObj.CreatorName = input.CreatorName;//鍒涘缓浜� 
+        await _callMaterialOrderRepository.InsertAsync(insertObj); 
+ 
         //if (input.Sort.HasValue && insertObj.Sort != maxSort) 
         //{ 
         //    await AdjustSortAsync(insertObj.Id, insertObj.Sort); 
         //} 
-
-        return ObjectMapper.Map<CallMaterialOrder, CallMaterialOrderDto>(insertObj);
-    }
-
+ 
+        return ObjectMapper.Map<CallMaterialOrder, CallMaterialOrderDto>(insertObj); 
+    } 
+ 
     /// <summary> 
     /// 鏇存柊鍙枡鍗曡〃 
     /// </summary> 
@@ -142,302 +131,331 @@
     /// <param name="input"></param> 
     /// <returns></returns> 
     /// <exception cref="UserFriendlyException"></exception> 
-    public virtual async Task<CallMaterialOrderDto> UpdateAsync(Guid id, CallMaterialOrderUpdateDto input)
-    {
-        await CheckCreateOrUpdateDtoAsync(input);
-
-        var updateObj = await _callMaterialOrderRepository.GetAsync(id);
-        var exist = await _callMaterialOrderRepository.NameExistAsync(input.DataIdentifier, updateObj.Id);
-        if (exist)
-        {
-            throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.DataIdentifier]);
-        }
-
-        updateObj.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp);
-        input.MapExtraPropertiesTo(updateObj, MappingPropertyDefinitionChecks.None);
-
-        updateObj.DataIdentifier = input.DataIdentifier;
+    public virtual async Task<CallMaterialOrderDto> UpdateAsync(Guid id, CallMaterialOrderUpdateDto input) 
+    { 
+        await CheckCreateOrUpdateDtoAsync(input); 
+ 
+        var updateObj = await _callMaterialOrderRepository.GetAsync(id); 
+        var exist = await _callMaterialOrderRepository.NameExistAsync(input.DataIdentifier, updateObj.Id); 
+        if (exist) 
+        { 
+            throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.DataIdentifier]); 
+        } 
+ 
+        updateObj.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp); 
+        input.MapExtraPropertiesTo(updateObj, MappingPropertyDefinitionChecks.None); 
+ 
+                updateObj.DataIdentifier = input.DataIdentifier;
         updateObj.MaterialMode = input.MaterialMode;
+        updateObj.MaterialBatch = input.MaterialBatch;
         updateObj.CallMaterialStatus = input.CallMaterialStatus;
         updateObj.Quantity = input.Quantity;
         updateObj.WmsRetResult = input.WmsRetResult;
         updateObj.WmsTaskNo = input.WmsTaskNo;
         updateObj.Remark = input.Remark;
-
-
-        await _callMaterialOrderRepository.UpdateAsync(updateObj);
-
-        return ObjectMapper.Map<CallMaterialOrder, CallMaterialOrderDto>(updateObj);
-    }
-
+ 
+ 
+        updateObj.LastModifierName = input.LastModifierName;//淇敼浜� 
+ 
+        await _callMaterialOrderRepository.UpdateAsync(updateObj); 
+ 
+        return ObjectMapper.Map<CallMaterialOrder, CallMaterialOrderDto>(updateObj); 
+    } 
+ 
     /// <summary> 
     /// 鍏嬮殕鍙枡鍗曡〃 
     /// </summary> 
     /// <param name="ids"></param> 
     /// <returns></returns> 
-    public async Task<List<CallMaterialOrderDto>> CloneAsync(IEnumerable<Guid> ids)
-    {
+    public async Task<List<CallMaterialOrderDto>> CloneAsync(IEnumerable<Guid> ids, MyCurrentUser myCurrentUser) 
+    { 
         //var callMaterialOrders = new List<CallMaterialOrder>(); 
         //if (ids != null) 
         //{ 
-        //    var sort = await callMaterialOrderRepository.GetMaxSortAsync(); 
+        //    var sort = await _callMaterialOrderRepository.GetMaxSortAsync(); 
         //    foreach (var id in ids) 
         //    { 
-        //        var CallMaterialOrder = await callMaterialOrderRepository.FindAsync(id); 
+        //        var CallMaterialOrder = await _callMaterialOrderRepository.FindAsync(id); 
         //        if (CallMaterialOrder != null) 
         //        { 
         //            var name = CallMaterialOrder.Name + CallMaterialOrderConsts.CloneTag; 
         //            var notExist = false; 
         //            while (!notExist) 
         //            { 
-        //                var exist = await callMaterialOrderRepository.NameExistAsync(name); 
+        //                var exist = await _callMaterialOrderRepository.NameExistAsync(name); 
         //                if (exist || callMaterialOrders.Any(x => x.Name == name)) 
         //                { 
         //                    name += CallMaterialOrderConsts.CloneTag; 
         //                    continue; 
         //                } 
-
+ 
         //                notExist = true; 
         //            } 
-
-        //            //CallMaterialOrder = await callMaterialOrderRepository.InsertAsync(CallMaterialOrder.Clone(GuidGenerator.Create(), name, sort++)); 
+ 
+        //            //CallMaterialOrder = await _callMaterialOrderRepository.InsertAsync(CallMaterialOrder.Clone(GuidGenerator.Create(), name, sort++)); 
         //            callMaterialOrders.Add(CallMaterialOrder); 
         //        } 
         //    } 
         //} 
-
+ 
         //return ObjectMapper.Map<List<CallMaterialOrder>, List<CallMaterialOrderDto>>(callMaterialOrders); 
-        return new List<CallMaterialOrderDto>();
-    }
-
+        return new List<CallMaterialOrderDto>(); 
+    } 
+ 
     /// <summary> 
     /// 鍒犻櫎鍗曚釜鍙枡鍗曡〃 
     /// </summary> 
     /// <param name="id"></param> 
     /// <returns></returns> 
-    public virtual Task DeleteAsync(Guid id)
-    {
-        return _callMaterialOrderRepository.DeleteAsync(id);
-    }
-
+    public virtual Task DeleteAsync(Guid id) 
+    { 
+        return _callMaterialOrderRepository.DeleteAsync(id); 
+    } 
+ 
     /// <summary> 
     /// 鍒犻櫎澶氫釜鍙枡鍗曡〃 
     /// </summary> 
     /// <param name="ids"></param> 
     /// <returns></returns> 
-    public async Task DeleteManyAsync(IEnumerable<Guid> ids)
-    {
-        foreach (var id in ids)
-        {
-            await DeleteAsync(id);
-        }
-    }
-
+    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) 
+    { 
+        _callMaterialOrderRepository.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) 
+    { 
+        _callMaterialOrderRepository.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 _callMaterialOrderRepository.GetListAsync(null, nameof(CallMaterialOrder.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 _callMaterialOrderRepository.UpdateManyAsync(list);
-    }
-
+    public virtual async Task AdjustSortAsync(Guid id, int sort) 
+    { 
+        var list = await _callMaterialOrderRepository.GetListAsync(null, nameof(CallMaterialOrder.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 _callMaterialOrderRepository.UpdateManyAsync(list); 
+    } 
+ 
     /// <summary> 
     /// 瀵煎叆鍙枡鍗曡〃 
     /// </summary> 
     /// <param name="input"></param> 
     /// <returns></returns> 
     /// <exception cref="UserFriendlyException"></exception> 
-    public async Task ImportAsync(CallMaterialOrdersImportModel input)
-    {
-        Check.NotNull(input, nameof(input));
-
-        var callMaterialOrderCreateDtos = new List<(int RowIndex, CallMaterialOrderCreateDto Item)>();
-        var callMaterialOrderUpdateDtos = new List<(int RowIndex, Guid Id, CallMaterialOrderUpdateDto Item)>();
-        var importItems = input.CallMaterialOrders;
-
-        if (importItems != null && importItems.Any())
-        {
+    public async Task ImportAsync(CallMaterialOrdersImportModel input, MyCurrentUser myCurrentUser) 
+    { 
+        Check.NotNull(input, nameof(input)); 
+ 
+        var callMaterialOrderCreateDtos = new List<(int RowIndex, CallMaterialOrderCreateDto Item)>(); 
+        var callMaterialOrderUpdateDtos = new List<(int RowIndex, Guid Id, CallMaterialOrderUpdateDto Item)>(); 
+        var importItems = input.CallMaterialOrders; 
+ 
+        if (importItems != null && importItems.Any()) 
+        { 
             #region 瀵煎叆鏍¢獙 
-
+ 
             // 鍒ゆ柇鍚嶇О鏄惁閲嶅锛屽苟杈撳嚭绗嚑琛岄噸澶� 
-            var duplicateCallMaterialOrders = importItems.GroupBy(x => x.DataIdentifier).Where(x => x.Count() > 1).ToList();
-            if (duplicateCallMaterialOrders?.Any() == true)
-            {
-                var duplicateCallMaterialOrderMsgs = duplicateCallMaterialOrders.Select(x => $"绗� {string.Join(",", x.Select(x => x.RowIndex))} 琛岋細{x.Key}  鍚嶇О閲嶅");
-                var errorMsg = $"瀵煎叆澶辫触锛侀厤缃紝 {string.Join(",", duplicateCallMaterialOrderMsgs)}锛岀粓姝㈠鍏�";
-                throw new UserFriendlyException(errorMsg);
-            }
-
-            #endregion
-
-            foreach (var impItem in importItems)
-            {
-                if (impItem.DataIdentifier.IsNullOrWhiteSpace())
-                {
-                    continue;
-                }
-
-                if (impItem.DataIdentifier.IsNullOrWhiteSpace())
-                {
-                    var errorMsg = $"瀵煎叆澶辫触锛侀厤缃紝绗瑊impItem.RowIndex}琛岋細CallMaterialOrder鍚嶇О涓嶈兘涓虹┖";
-                    throw new UserFriendlyException(errorMsg);
-                }
-
-                var oldCallMaterialOrder = await _callMaterialOrderRepository.FindByNameAsync(impItem.DataIdentifier);
-                if (oldCallMaterialOrder != null)
-                {
-                    var callMaterialOrderUpdateDto = new CallMaterialOrderUpdateDto
-                    {
+            var duplicateCallMaterialOrders = importItems.GroupBy(x => x.DataIdentifier).Where(x => x.Count() > 1).ToList(); 
+            if (duplicateCallMaterialOrders?.Any() == true) 
+            { 
+                var duplicateCallMaterialOrderMsgs = duplicateCallMaterialOrders.Select(x => $"绗� {string.Join(",", x.Select(x => x.RowIndex))} 琛岋細{x.Key}  鍚嶇О閲嶅"); 
+                var errorMsg = $"瀵煎叆澶辫触锛侀厤缃紝 {string.Join(",", duplicateCallMaterialOrderMsgs)}锛岀粓姝㈠鍏�"; 
+                throw new UserFriendlyException(errorMsg); 
+            } 
+ 
+            #endregion 
+ 
+            foreach (var impItem in importItems) 
+            { 
+                if (impItem.DataIdentifier.IsNullOrWhiteSpace()) 
+                { 
+                    continue; 
+                } 
+ 
+                if (impItem.DataIdentifier.IsNullOrWhiteSpace()) 
+                { 
+                    var errorMsg = $"瀵煎叆澶辫触锛侀厤缃紝绗瑊impItem.RowIndex}琛岋細CallMaterialOrder鍚嶇О涓嶈兘涓虹┖"; 
+                    throw new UserFriendlyException(errorMsg); 
+                } 
+ 
+                var oldCallMaterialOrder = await _callMaterialOrderRepository.FindByNameAsync(impItem.DataIdentifier); 
+                if (oldCallMaterialOrder != null) 
+                { 
+                    var callMaterialOrderUpdateDto = new CallMaterialOrderUpdateDto 
+                    { 
                         DataIdentifier = impItem.DataIdentifier,
-                        MaterialMode = impItem.MaterialMode,
-                        CallMaterialStatus = impItem.CallMaterialStatus,
-                        Quantity = impItem.Quantity,
-                        WmsRetResult = impItem.WmsRetResult,
-                        WmsTaskNo = impItem.WmsTaskNo,
-                        Remark = impItem.Remark,
-
-                    };
-
-                    callMaterialOrderUpdateDtos.Add((impItem.RowIndex, oldCallMaterialOrder.Id, callMaterialOrderUpdateDto));
-                }
-                else
-                {
-                    var callMaterialOrderCreateDto = new CallMaterialOrderCreateDto
-                    {
+MaterialMode = impItem.MaterialMode,
+MaterialBatch = impItem.MaterialBatch,
+CallMaterialStatus = impItem.CallMaterialStatus,
+Quantity = impItem.Quantity,
+WmsRetResult = impItem.WmsRetResult,
+WmsTaskNo = impItem.WmsTaskNo,
+Remark = impItem.Remark,
+ 
+                    }; 
+ 
+                    callMaterialOrderUpdateDtos.Add((impItem.RowIndex, oldCallMaterialOrder.Id, callMaterialOrderUpdateDto)); 
+                } 
+                else 
+                { 
+                    var callMaterialOrderCreateDto = new CallMaterialOrderCreateDto 
+                    { 
                         DataIdentifier = impItem.DataIdentifier,
-                        MaterialMode = impItem.MaterialMode,
-                        CallMaterialStatus = impItem.CallMaterialStatus,
-                        Quantity = impItem.Quantity,
-                        WmsRetResult = impItem.WmsRetResult,
-                        WmsTaskNo = impItem.WmsTaskNo,
-                        Remark = impItem.Remark,
-
-                    };
-
-                    callMaterialOrderCreateDtos.Add((impItem.RowIndex, callMaterialOrderCreateDto));
-                }
-            }
-        }
-
+MaterialMode = impItem.MaterialMode,
+MaterialBatch = impItem.MaterialBatch,
+CallMaterialStatus = impItem.CallMaterialStatus,
+Quantity = impItem.Quantity,
+WmsRetResult = impItem.WmsRetResult,
+WmsTaskNo = impItem.WmsTaskNo,
+Remark = impItem.Remark,
+ 
+                    }; 
+ 
+                    callMaterialOrderCreateDtos.Add((impItem.RowIndex, callMaterialOrderCreateDto)); 
+                } 
+            } 
+        } 
+ 
         // 鏂板 
-        foreach (var callMaterialOrderDto in callMaterialOrderCreateDtos)
-        {
-            try
-            {
-                await CreateAsync(callMaterialOrderDto.Item);
-            }
-            catch (Exception e)
-            {
-                var errorMsg = $"瀵煎叆澶辫触锛侀厤缃紝绗瑊callMaterialOrderDto.RowIndex}琛岋細{e.Message}锛岀粓姝㈠鍏�";
-                throw new UserFriendlyException(errorMsg);
-            }
-        }
-
+        foreach (var callMaterialOrderDto in callMaterialOrderCreateDtos) 
+        { 
+            try 
+            { 
+                callMaterialOrderDto.Item.CreatorName = myCurrentUser.UserAccount;//鍒涘缓浜� 
+                await CreateAsync(callMaterialOrderDto.Item); 
+            } 
+            catch (Exception e) 
+            { 
+                var errorMsg = $"瀵煎叆澶辫触锛侀厤缃紝绗瑊callMaterialOrderDto.RowIndex}琛岋細{e.Message}锛岀粓姝㈠鍏�"; 
+                throw new UserFriendlyException(errorMsg); 
+            } 
+        } 
+ 
         // 鏇存柊 
-        foreach (var callMaterialOrderDto in callMaterialOrderUpdateDtos)
-        {
-            try
-            {
-                await UpdateAsync(callMaterialOrderDto.Id, callMaterialOrderDto.Item);
-            }
-            catch (Exception e)
-            {
-                var errorMsg = $"瀵煎叆澶辫触锛侀厤缃紝绗瑊callMaterialOrderDto.RowIndex}琛岋細{e.Message}锛岀粓姝㈠鍏�";
-                throw new UserFriendlyException(errorMsg);
-            }
-        }
-    }
-
+        foreach (var callMaterialOrderDto in callMaterialOrderUpdateDtos) 
+        { 
+            try 
+            { 
+                callMaterialOrderDto.Item.LastModifierName = myCurrentUser.UserAccount;//淇敼浜� 
+                await UpdateAsync(callMaterialOrderDto.Id, callMaterialOrderDto.Item); 
+            } 
+            catch (Exception e) 
+            { 
+                var errorMsg = $"瀵煎叆澶辫触锛侀厤缃紝绗瑊callMaterialOrderDto.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(GetCallMaterialOrderInput input)
-    {
-        Check.NotNull(input, nameof(input));
-
-        if (input.Sorting.IsNullOrWhiteSpace())
-        {
-            input.Sorting = nameof(CallMaterialOrder.Sort);
-        }
-
+    public async Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetCallMaterialOrderInput input) 
+    { 
+        Check.NotNull(input, nameof(input)); 
+ 
+        if (input.Sorting.IsNullOrWhiteSpace()) 
+        { 
+            input.Sorting = nameof(CallMaterialOrder.Sort); 
+        } 
+ 
         #region 鍔ㄦ�佹瀯閫犳煡璇㈡潯浠�  
-
+ 
         //鍔ㄦ�佹瀯閫犳煡璇㈡潯浠�  
-        var whereConditions = DynamicGetQueryParams(input);
-
-        #endregion
-
-
-        var list = await _callMaterialOrderRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount, includeDetails: true);
-        var result = ObjectMapper.Map<List<CallMaterialOrder>, List<CallMaterialOrderDto>>(list);
-
-        var sheets = new Dictionary<string, object>
-        {
-            ["閰嶇疆"] = ExportHelper.ConvertListToExportData(result),
-        };
-
-        var fileName = "鍙枡鍗�";
-        return (sheets, fileName);
-    }
-
+        var whereConditions = DynamicGetQueryParams(input); 
+ 
+        #endregion 
+ 
+ 
+        var list = await _callMaterialOrderRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount, includeDetails: true); 
+        var result = ObjectMapper.Map<List<CallMaterialOrder>, List<CallMaterialOrderDto>>(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(CallMaterialOrderCreateOrUpdateDtoBase input)
-    {
-        Check.NotNull(input, nameof(input));
-        Check.NotNullOrWhiteSpace(input.DataIdentifier, "鍘熸枡鏍囪瘑", 256);
+    protected Task CheckCreateOrUpdateDtoAsync(CallMaterialOrderCreateOrUpdateDtoBase input) 
+    { 
+        Check.NotNull(input, nameof(input)); 
+                Check.NotNullOrWhiteSpace(input.DataIdentifier, "鍘熸枡鏍囪瘑", 256);
         Check.NotNull(input.CallMaterialStatus, "鍙枡鐘舵��");
         Check.NotNull(input.Quantity, "鍙枡鏁伴噺");
-
-        return Task.CompletedTask;
-    }
-
-    /// <summary> 
+ 
+        return Task.CompletedTask; 
+    } 
+ 
+     /// <summary> 
     /// 鏍规嵁鏉′欢鑾峰彇鍙枡鍗曡〃鍒楄〃 
     /// </summary> 
     /// <param name="whereConditions"></param> 
     /// <param name="cancellationToken"></param> 
     /// <returns></returns> 
-    public async Task<List<CallMaterialOrder>> GetListByFilterAsync(Expression<Func<CallMaterialOrder, bool>> whereConditions, CancellationToken cancellationToken = default)
-    {
-        return await _callMaterialOrderRepository.GetListByFilterAsync(whereConditions);
-    }
-
+    public async Task<List<CallMaterialOrder>> GetListByFilterAsync(Expression<Func<CallMaterialOrder, bool>> whereConditions, CancellationToken cancellationToken = default) 
+    { 
+        return await _callMaterialOrderRepository.GetListByFilterAsync(whereConditions); 
+    } 
+ 
     /// <summary> 
     ///  鏍规嵁鏉′欢鑾峰彇鍗曚釜鍙枡鍗曡〃 
     /// </summary> 
@@ -446,8 +464,8 @@
     /// <param name="cancellationToken"></param> 
     /// <returns></returns> 
     /// <exception cref="UserFriendlyException"></exception> 
-    public async Task<CallMaterialOrder> GetSingleByFilterAsync(Expression<Func<CallMaterialOrder, bool>> whereConditions, bool is鈥婱ultipleThrowException = false, CancellationToken cancellationToken = default)
-    {
-        return await _callMaterialOrderRepository.GetSingleByFilterAsync(whereConditions, is鈥婱ultipleThrowException);
-    }
-}
+    public async Task<CallMaterialOrder> GetSingleByFilterAsync(Expression<Func<CallMaterialOrder, bool>> whereConditions, bool is鈥婱ultipleThrowException = false, CancellationToken cancellationToken = default) 
+    { 
+        return await _callMaterialOrderRepository.GetSingleByFilterAsync(whereConditions, is鈥婱ultipleThrowException); 
+    } 
+} 
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/CallMaterialOrderRecordAppService.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/CallMaterialOrderRecordAppService.cs
index 1919b86..064692b 100644
--- a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/CallMaterialOrderRecordAppService.cs
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/CallMaterialOrderRecordAppService.cs
@@ -1,127 +1,129 @@
-using CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.CallMaterialOrderRecord; 
-using CMS.Plugin.PipeLineLems.Application.Contracts.Services; 
-using CMS.Plugin.PipeLineLems.Domain.Shared; 
-using CmsQueryExtensions; 
-using CMS.Plugin.PipeLineLems.Domain.CallMaterialOrderRecord; 
-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; 
- 
-namespace CMS.Plugin.PipeLineLems.Application.Implements; 
- 
+using CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.CallMaterialOrderRecord;
+using CMS.Plugin.PipeLineLems.Application.Contracts.Services;
+using CMS.Plugin.PipeLineLems.Domain.Shared;
+using CmsQueryExtensions;
+using CMS.Plugin.PipeLineLems.Domain.CallMaterialOrderRecord;
+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 CallMaterialOrderRecordAppService : CMSPluginAppService, ICallMaterialOrderRecordAppService 
-{ 
-    private readonly ICallMaterialOrderRecordRepository callMaterialOrderRecordRepository; 
- 
+public class CallMaterialOrderRecordAppService : CMSPluginAppService, ICallMaterialOrderRecordAppService
+{
+    private readonly ICallMaterialOrderRecordRepository _callMaterialOrderRecordRepository;
+
     /// <summary> 
     /// Initializes a new instance of the <see cref="CallMaterialOrderRecordAppService"/> class. 
     /// </summary> 
     /// <param name="CallMaterialOrderRecordRepository">The task job repository.</param> 
-    public CallMaterialOrderRecordAppService(ICallMaterialOrderRecordRepository _CallMaterialOrderRecordRepository) 
-    { 
-        callMaterialOrderRecordRepository = _CallMaterialOrderRecordRepository; 
-    } 
- 
+    public CallMaterialOrderRecordAppService(ICallMaterialOrderRecordRepository callMaterialOrderRecordRepository)
+    {
+        _callMaterialOrderRecordRepository = callMaterialOrderRecordRepository;
+    }
+
     /// <summary> 
     /// 鑾峰彇鎸囧畾鍙枡璁板綍琛� 
     /// </summary> 
     /// <param name="id"></param> 
     /// <returns></returns> 
-    public virtual async Task<CallMaterialOrderRecordDto> GetAsync(Guid id) 
-    { 
-        return ObjectMapper.Map<CallMaterialOrderRecord, CallMaterialOrderRecordDto>(await callMaterialOrderRecordRepository.GetAsync(id)); 
-    } 
- 
+    public virtual async Task<CallMaterialOrderRecordDto> GetAsync(Guid id)
+    {
+        return ObjectMapper.Map<CallMaterialOrderRecord, CallMaterialOrderRecordDto>(await _callMaterialOrderRecordRepository.GetAsync(id));
+    }
+
     /// <summary> 
     /// 鍒嗛〉鑾峰彇鍙枡璁板綍琛� 
     /// </summary> 
     /// <param name="input"></param> 
     /// <returns></returns> 
-    public virtual async Task<PagedResultDto<CallMaterialOrderRecordDto>> GetListAsync(GetCallMaterialOrderRecordInput input) 
-    { 
-        Check.NotNull(input, nameof(input)); 
- 
-        if (input.Sorting.IsNullOrWhiteSpace()) 
-        { 
-            input.Sorting = nameof(CallMaterialOrderRecord.Sort); 
-        } 
- 
+    public virtual async Task<PagedResultDto<CallMaterialOrderRecordDto>> GetListAsync(GetCallMaterialOrderRecordInput input)
+    {
+        Check.NotNull(input, nameof(input));
+
+        if (input.Sorting.IsNullOrWhiteSpace())
+        {
+            input.Sorting = nameof(CallMaterialOrderRecord.Sort);
+        }
+
         #region 鍔ㄦ�佹瀯閫犳煡璇㈡潯浠�  
- 
+
         //鍔ㄦ�佹瀯閫犳煡璇㈡潯浠�  
-        var whereConditions = DynamicGetQueryParams(input); 
- 
-        #endregion 
- 
-        var count = await callMaterialOrderRecordRepository.GetCountAsync(whereConditions); 
-        var list = await callMaterialOrderRecordRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount); 
- 
-        return new PagedResultDto<CallMaterialOrderRecordDto>(count, ObjectMapper.Map<List<CallMaterialOrderRecord>, List<CallMaterialOrderRecordDto>>(list)); 
-    } 
- 
+        var whereConditions = DynamicGetQueryParams(input);
+
+        #endregion
+
+        var count = await _callMaterialOrderRecordRepository.GetCountAsync(whereConditions);
+        var list = await _callMaterialOrderRecordRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount);
+
+        return new PagedResultDto<CallMaterialOrderRecordDto>(count, ObjectMapper.Map<List<CallMaterialOrderRecord>, List<CallMaterialOrderRecordDto>>(list));
+    }
+
     /// <summary>  
     /// 鍔ㄦ�佹瀯閫犳煡璇㈡潯浠�  
     /// </summary>  
     /// <param name="input">杈撳叆鍙傛暟</param>  
     /// <returns></returns>  
-    private FunReturnResultModel<Expression<Func<CallMaterialOrderRecord, bool>>> DynamicGetQueryParams(GetCallMaterialOrderRecordInput input) 
-    { 
+    private FunReturnResultModel<Expression<Func<CallMaterialOrderRecord, bool>>> DynamicGetQueryParams(GetCallMaterialOrderRecordInput input)
+    {
         //鍔ㄦ�佹瀯閫犳煡璇㈡潯浠�  
-        var whereConditions = WhereConditionsExtensions.GetWhereConditions<CallMaterialOrderRecord, GetCallMaterialOrderRecordInput>(input); 
-        if (!whereConditions.IsSuccess) 
-        { 
-            throw new Exception("鍔ㄦ�佹瀯閫犳煡璇㈡潯浠跺け璐�:" + whereConditions.ErrMsg); 
-        } 
- 
+        var whereConditions = WhereConditionsExtensions.GetWhereConditions<CallMaterialOrderRecord, GetCallMaterialOrderRecordInput>(input);
+        if (!whereConditions.IsSuccess)
+        {
+            throw new Exception("鍔ㄦ�佹瀯閫犳煡璇㈡潯浠跺け璐�:" + whereConditions.ErrMsg);
+        }
+
         //涔熷彲鍐嶆鑷畾涔夋瀯寤烘煡璇㈡潯浠�  
-        Expression<Func<CallMaterialOrderRecord, bool>> extendExpression = a => a.IsDeleted == false; 
+        Expression<Func<CallMaterialOrderRecord, bool>> extendExpression = a => a.IsDeleted == false;
         // 浣跨敤 System.Linq.PredicateBuilder 鐨� And 
-        var pres = (System.Linq.Expressions.Expression<Func<CallMaterialOrderRecord, bool>>)(whereConditions.data); 
-        whereConditions.data = System.Linq.PredicateBuilder.And(pres, extendExpression); 
- 
-        return whereConditions; 
-    } 
- 
+        var pres = (System.Linq.Expressions.Expression<Func<CallMaterialOrderRecord, 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<CallMaterialOrderRecordDto> CreateAsync(CallMaterialOrderRecordCreateDto input) 
-    { 
-        await CheckCreateOrUpdateDtoAsync(input); 
- 
-        var exist = await callMaterialOrderRecordRepository.NameExistAsync(input.DataIdentifier); 
-        if (exist) 
-        { 
-            throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.DataIdentifier]); 
-        } 
- 
-        var maxSort = await callMaterialOrderRecordRepository.GetMaxSortAsync(); 
-        var sort = input.Sort ?? maxSort; 
- 
-        var insertObj = ObjectMapper.Map<CallMaterialOrderRecordCreateDto, CallMaterialOrderRecord>(input); 
-        insertObj.Sort = sort; 
-        input.MapExtraPropertiesTo(insertObj, MappingPropertyDefinitionChecks.None); 
- 
-        await callMaterialOrderRecordRepository.InsertAsync(insertObj); 
- 
+    public virtual async Task<CallMaterialOrderRecordDto> CreateAsync(CallMaterialOrderRecordCreateDto input)
+    {
+        await CheckCreateOrUpdateDtoAsync(input);
+
+        var exist = await _callMaterialOrderRecordRepository.NameExistAsync(input.DataIdentifier);
+        if (exist)
+        {
+            throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.DataIdentifier]);
+        }
+
+        var maxSort = await _callMaterialOrderRecordRepository.GetMaxSortAsync();
+        var sort = input.Sort ?? maxSort;
+
+        var insertObj = ObjectMapper.Map<CallMaterialOrderRecordCreateDto, CallMaterialOrderRecord>(input);
+        insertObj.Sort = sort;
+        input.MapExtraPropertiesTo(insertObj, MappingPropertyDefinitionChecks.None);
+
+        insertObj.CreatorName = input.CreatorName;//鍒涘缓浜� 
+        await _callMaterialOrderRecordRepository.InsertAsync(insertObj);
+
         //if (input.Sort.HasValue && insertObj.Sort != maxSort) 
         //{ 
         //    await AdjustSortAsync(insertObj.Id, insertObj.Sort); 
         //} 
- 
-        return ObjectMapper.Map<CallMaterialOrderRecord, CallMaterialOrderRecordDto>(insertObj); 
-    } 
- 
+
+        return ObjectMapper.Map<CallMaterialOrderRecord, CallMaterialOrderRecordDto>(insertObj);
+    }
+
     /// <summary> 
     /// 鏇存柊鍙枡璁板綍琛� 
     /// </summary> 
@@ -129,288 +131,341 @@
     /// <param name="input"></param> 
     /// <returns></returns> 
     /// <exception cref="UserFriendlyException"></exception> 
-    public virtual async Task<CallMaterialOrderRecordDto> UpdateAsync(Guid id, CallMaterialOrderRecordUpdateDto input) 
-    { 
-        await CheckCreateOrUpdateDtoAsync(input); 
- 
-        var updateObj = await callMaterialOrderRecordRepository.GetAsync(id); 
-        var exist = await callMaterialOrderRecordRepository.NameExistAsync(input.DataIdentifier, updateObj.Id); 
-        if (exist) 
-        { 
-            throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.DataIdentifier]); 
-        } 
- 
-        updateObj.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp); 
-        input.MapExtraPropertiesTo(updateObj, MappingPropertyDefinitionChecks.None); 
- 
-                updateObj.DataIdentifier = input.DataIdentifier;
+    public virtual async Task<CallMaterialOrderRecordDto> UpdateAsync(Guid id, CallMaterialOrderRecordUpdateDto input)
+    {
+        await CheckCreateOrUpdateDtoAsync(input);
+
+        var updateObj = await _callMaterialOrderRecordRepository.GetAsync(id);
+        var exist = await _callMaterialOrderRecordRepository.NameExistAsync(input.DataIdentifier, updateObj.Id);
+        if (exist)
+        {
+            throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.DataIdentifier]);
+        }
+
+        updateObj.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp);
+        input.MapExtraPropertiesTo(updateObj, MappingPropertyDefinitionChecks.None);
+
+        updateObj.DataIdentifier = input.DataIdentifier;
         updateObj.MaterialMode = input.MaterialMode;
+        updateObj.MaterialBatch = input.MaterialBatch;
         updateObj.CallMaterialStatus = input.CallMaterialStatus;
         updateObj.Quantity = input.Quantity;
         updateObj.WmsRetResult = input.WmsRetResult;
         updateObj.WmsTaskNo = input.WmsTaskNo;
         updateObj.Remark = input.Remark;
- 
- 
-        await callMaterialOrderRecordRepository.UpdateAsync(updateObj); 
- 
-        return ObjectMapper.Map<CallMaterialOrderRecord, CallMaterialOrderRecordDto>(updateObj); 
-    } 
- 
+
+
+       
+
+        await _callMaterialOrderRecordRepository.UpdateAsync(updateObj);
+
+        return ObjectMapper.Map<CallMaterialOrderRecord, CallMaterialOrderRecordDto>(updateObj);
+    }
+
     /// <summary> 
     /// 鍏嬮殕鍙枡璁板綍琛� 
     /// </summary> 
     /// <param name="ids"></param> 
     /// <returns></returns> 
-    public async Task<List<CallMaterialOrderRecordDto>> CloneAsync(IEnumerable<Guid> ids) 
-    { 
+    public async Task<List<CallMaterialOrderRecordDto>> CloneAsync(IEnumerable<Guid> ids, MyCurrentUser myCurrentUser)
+    {
         //var callMaterialOrderRecords = new List<CallMaterialOrderRecord>(); 
         //if (ids != null) 
         //{ 
-        //    var sort = await callMaterialOrderRecordRepository.GetMaxSortAsync(); 
+        //    var sort = await _callMaterialOrderRecordRepository.GetMaxSortAsync(); 
         //    foreach (var id in ids) 
         //    { 
-        //        var CallMaterialOrderRecord = await callMaterialOrderRecordRepository.FindAsync(id); 
+        //        var CallMaterialOrderRecord = await _callMaterialOrderRecordRepository.FindAsync(id); 
         //        if (CallMaterialOrderRecord != null) 
         //        { 
         //            var name = CallMaterialOrderRecord.Name + CallMaterialOrderRecordConsts.CloneTag; 
         //            var notExist = false; 
         //            while (!notExist) 
         //            { 
-        //                var exist = await callMaterialOrderRecordRepository.NameExistAsync(name); 
+        //                var exist = await _callMaterialOrderRecordRepository.NameExistAsync(name); 
         //                if (exist || callMaterialOrderRecords.Any(x => x.Name == name)) 
         //                { 
         //                    name += CallMaterialOrderRecordConsts.CloneTag; 
         //                    continue; 
         //                } 
- 
+
         //                notExist = true; 
         //            } 
- 
-        //            //CallMaterialOrderRecord = await callMaterialOrderRecordRepository.InsertAsync(CallMaterialOrderRecord.Clone(GuidGenerator.Create(), name, sort++)); 
+
+        //            //CallMaterialOrderRecord = await _callMaterialOrderRecordRepository.InsertAsync(CallMaterialOrderRecord.Clone(GuidGenerator.Create(), name, sort++)); 
         //            callMaterialOrderRecords.Add(CallMaterialOrderRecord); 
         //        } 
         //    } 
         //} 
- 
+
         //return ObjectMapper.Map<List<CallMaterialOrderRecord>, List<CallMaterialOrderRecordDto>>(callMaterialOrderRecords); 
-        return new List<CallMaterialOrderRecordDto>(); 
-    } 
- 
+        return new List<CallMaterialOrderRecordDto>();
+    }
+
     /// <summary> 
     /// 鍒犻櫎鍗曚釜鍙枡璁板綍琛� 
     /// </summary> 
     /// <param name="id"></param> 
     /// <returns></returns> 
-    public virtual Task DeleteAsync(Guid id) 
-    { 
-        return callMaterialOrderRecordRepository.DeleteAsync(id); 
-    } 
- 
+    public virtual Task DeleteAsync(Guid id)
+    {
+        return _callMaterialOrderRecordRepository.DeleteAsync(id);
+    }
+
     /// <summary> 
     /// 鍒犻櫎澶氫釜鍙枡璁板綍琛� 
     /// </summary> 
     /// <param name="ids"></param> 
     /// <returns></returns> 
-    public async Task DeleteManyAsync(IEnumerable<Guid> ids) 
-    { 
-        foreach (var id in ids) 
-        { 
-            await DeleteAsync(id); 
-        } 
-    } 
- 
+    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)
+    {
+        _callMaterialOrderRecordRepository.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)
+    {
+        _callMaterialOrderRecordRepository.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 callMaterialOrderRecordRepository.GetListAsync(null, nameof(CallMaterialOrderRecord.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 callMaterialOrderRecordRepository.UpdateManyAsync(list); 
-    } 
- 
+    public virtual async Task AdjustSortAsync(Guid id, int sort)
+    {
+        var list = await _callMaterialOrderRecordRepository.GetListAsync(null, nameof(CallMaterialOrderRecord.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 _callMaterialOrderRecordRepository.UpdateManyAsync(list);
+    }
+
     /// <summary> 
     /// 瀵煎叆鍙枡璁板綍琛� 
     /// </summary> 
     /// <param name="input"></param> 
     /// <returns></returns> 
     /// <exception cref="UserFriendlyException"></exception> 
-    public async Task ImportAsync(CallMaterialOrderRecordsImportModel input) 
-    { 
-        Check.NotNull(input, nameof(input)); 
- 
-        var callMaterialOrderRecordCreateDtos = new List<(int RowIndex, CallMaterialOrderRecordCreateDto Item)>(); 
-        var callMaterialOrderRecordUpdateDtos = new List<(int RowIndex, Guid Id, CallMaterialOrderRecordUpdateDto Item)>(); 
-        var importItems = input.CallMaterialOrderRecords; 
- 
-        if (importItems != null && importItems.Any()) 
-        { 
+    public async Task ImportAsync(CallMaterialOrderRecordsImportModel input, MyCurrentUser myCurrentUser)
+    {
+        Check.NotNull(input, nameof(input));
+
+        var callMaterialOrderRecordCreateDtos = new List<(int RowIndex, CallMaterialOrderRecordCreateDto Item)>();
+        var callMaterialOrderRecordUpdateDtos = new List<(int RowIndex, Guid Id, CallMaterialOrderRecordUpdateDto Item)>();
+        var importItems = input.CallMaterialOrderRecords;
+
+        if (importItems != null && importItems.Any())
+        {
             #region 瀵煎叆鏍¢獙 
- 
+
             // 鍒ゆ柇鍚嶇О鏄惁閲嶅锛屽苟杈撳嚭绗嚑琛岄噸澶� 
-            var duplicateCallMaterialOrderRecords = importItems.GroupBy(x => x.DataIdentifier).Where(x => x.Count() > 1).ToList(); 
-            if (duplicateCallMaterialOrderRecords?.Any() == true) 
-            { 
-                var duplicateCallMaterialOrderRecordMsgs = duplicateCallMaterialOrderRecords.Select(x => $"绗� {string.Join(",", x.Select(x => x.RowIndex))} 琛岋細{x.Key}  鍚嶇О閲嶅"); 
-                var errorMsg = $"瀵煎叆澶辫触锛侀厤缃紝 {string.Join(",", duplicateCallMaterialOrderRecordMsgs)}锛岀粓姝㈠鍏�"; 
-                throw new UserFriendlyException(errorMsg); 
-            } 
- 
-            #endregion 
- 
-            foreach (var impItem in importItems) 
-            { 
-                if (impItem.DataIdentifier.IsNullOrWhiteSpace()) 
-                { 
-                    continue; 
-                } 
- 
-                if (impItem.DataIdentifier.IsNullOrWhiteSpace()) 
-                { 
-                    var errorMsg = $"瀵煎叆澶辫触锛侀厤缃紝绗瑊impItem.RowIndex}琛岋細CallMaterialOrderRecord鍚嶇О涓嶈兘涓虹┖"; 
-                    throw new UserFriendlyException(errorMsg); 
-                } 
- 
-                var oldCallMaterialOrderRecord = await callMaterialOrderRecordRepository.FindByNameAsync(impItem.DataIdentifier); 
-                if (oldCallMaterialOrderRecord != null) 
-                { 
-                    var callMaterialOrderRecordUpdateDto = new CallMaterialOrderRecordUpdateDto 
-                    { 
+            var duplicateCallMaterialOrderRecords = importItems.GroupBy(x => x.DataIdentifier).Where(x => x.Count() > 1).ToList();
+            if (duplicateCallMaterialOrderRecords?.Any() == true)
+            {
+                var duplicateCallMaterialOrderRecordMsgs = duplicateCallMaterialOrderRecords.Select(x => $"绗� {string.Join(",", x.Select(x => x.RowIndex))} 琛岋細{x.Key}  鍚嶇О閲嶅");
+                var errorMsg = $"瀵煎叆澶辫触锛侀厤缃紝 {string.Join(",", duplicateCallMaterialOrderRecordMsgs)}锛岀粓姝㈠鍏�";
+                throw new UserFriendlyException(errorMsg);
+            }
+
+            #endregion
+
+            foreach (var impItem in importItems)
+            {
+                if (impItem.DataIdentifier.IsNullOrWhiteSpace())
+                {
+                    continue;
+                }
+
+                if (impItem.DataIdentifier.IsNullOrWhiteSpace())
+                {
+                    var errorMsg = $"瀵煎叆澶辫触锛侀厤缃紝绗瑊impItem.RowIndex}琛岋細CallMaterialOrderRecord鍚嶇О涓嶈兘涓虹┖";
+                    throw new UserFriendlyException(errorMsg);
+                }
+
+                var oldCallMaterialOrderRecord = await _callMaterialOrderRecordRepository.FindByNameAsync(impItem.DataIdentifier);
+                if (oldCallMaterialOrderRecord != null)
+                {
+                    var callMaterialOrderRecordUpdateDto = new CallMaterialOrderRecordUpdateDto
+                    {
                         DataIdentifier = impItem.DataIdentifier,
-MaterialMode = impItem.MaterialMode,
-CallMaterialStatus = impItem.CallMaterialStatus,
-Quantity = impItem.Quantity,
-WmsRetResult = impItem.WmsRetResult,
-WmsTaskNo = impItem.WmsTaskNo,
-Remark = impItem.Remark,
- 
-                    }; 
- 
-                    callMaterialOrderRecordUpdateDtos.Add((impItem.RowIndex, oldCallMaterialOrderRecord.Id, callMaterialOrderRecordUpdateDto)); 
-                } 
-                else 
-                { 
-                    var callMaterialOrderRecordCreateDto = new CallMaterialOrderRecordCreateDto 
-                    { 
+                        MaterialMode = impItem.MaterialMode,
+                        MaterialBatch = impItem.MaterialBatch,
+                        CallMaterialStatus = impItem.CallMaterialStatus,
+                        Quantity = impItem.Quantity,
+                        WmsRetResult = impItem.WmsRetResult,
+                        WmsTaskNo = impItem.WmsTaskNo,
+                        Remark = impItem.Remark,
+
+                    };
+
+                    callMaterialOrderRecordUpdateDtos.Add((impItem.RowIndex, oldCallMaterialOrderRecord.Id, callMaterialOrderRecordUpdateDto));
+                }
+                else
+                {
+                    var callMaterialOrderRecordCreateDto = new CallMaterialOrderRecordCreateDto
+                    {
                         DataIdentifier = impItem.DataIdentifier,
-MaterialMode = impItem.MaterialMode,
-CallMaterialStatus = impItem.CallMaterialStatus,
-Quantity = impItem.Quantity,
-WmsRetResult = impItem.WmsRetResult,
-WmsTaskNo = impItem.WmsTaskNo,
-Remark = impItem.Remark,
- 
-                    }; 
- 
-                    callMaterialOrderRecordCreateDtos.Add((impItem.RowIndex, callMaterialOrderRecordCreateDto)); 
-                } 
-            } 
-        } 
- 
+                        MaterialMode = impItem.MaterialMode,
+                        MaterialBatch = impItem.MaterialBatch,
+                        CallMaterialStatus = impItem.CallMaterialStatus,
+                        Quantity = impItem.Quantity,
+                        WmsRetResult = impItem.WmsRetResult,
+                        WmsTaskNo = impItem.WmsTaskNo,
+                        Remark = impItem.Remark,
+
+                    };
+
+                    callMaterialOrderRecordCreateDtos.Add((impItem.RowIndex, callMaterialOrderRecordCreateDto));
+                }
+            }
+        }
+
         // 鏂板 
-        foreach (var callMaterialOrderRecordDto in callMaterialOrderRecordCreateDtos) 
-        { 
-            try 
-            { 
-                await CreateAsync(callMaterialOrderRecordDto.Item); 
-            } 
-            catch (Exception e) 
-            { 
-                var errorMsg = $"瀵煎叆澶辫触锛侀厤缃紝绗瑊callMaterialOrderRecordDto.RowIndex}琛岋細{e.Message}锛岀粓姝㈠鍏�"; 
-                throw new UserFriendlyException(errorMsg); 
-            } 
-        } 
- 
+        foreach (var callMaterialOrderRecordDto in callMaterialOrderRecordCreateDtos)
+        {
+            try
+            {
+                callMaterialOrderRecordDto.Item.CreatorName = myCurrentUser.UserAccount;//鍒涘缓浜� 
+                await CreateAsync(callMaterialOrderRecordDto.Item);
+            }
+            catch (Exception e)
+            {
+                var errorMsg = $"瀵煎叆澶辫触锛侀厤缃紝绗瑊callMaterialOrderRecordDto.RowIndex}琛岋細{e.Message}锛岀粓姝㈠鍏�";
+                throw new UserFriendlyException(errorMsg);
+            }
+        }
+
         // 鏇存柊 
-        foreach (var callMaterialOrderRecordDto in callMaterialOrderRecordUpdateDtos) 
-        { 
-            try 
-            { 
-                await UpdateAsync(callMaterialOrderRecordDto.Id, callMaterialOrderRecordDto.Item); 
-            } 
-            catch (Exception e) 
-            { 
-                var errorMsg = $"瀵煎叆澶辫触锛侀厤缃紝绗瑊callMaterialOrderRecordDto.RowIndex}琛岋細{e.Message}锛岀粓姝㈠鍏�"; 
-                throw new UserFriendlyException(errorMsg); 
-            } 
-        } 
-    } 
- 
+        foreach (var callMaterialOrderRecordDto in callMaterialOrderRecordUpdateDtos)
+        {
+            try
+            {
+                callMaterialOrderRecordDto.Item.LastModifierName = myCurrentUser.UserAccount;//淇敼浜� 
+                await UpdateAsync(callMaterialOrderRecordDto.Id, callMaterialOrderRecordDto.Item);
+            }
+            catch (Exception e)
+            {
+                var errorMsg = $"瀵煎叆澶辫触锛侀厤缃紝绗瑊callMaterialOrderRecordDto.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(GetCallMaterialOrderRecordInput input) 
-    { 
-        Check.NotNull(input, nameof(input)); 
- 
-        if (input.Sorting.IsNullOrWhiteSpace()) 
-        { 
-            input.Sorting = nameof(CallMaterialOrderRecord.Sort); 
-        } 
- 
+    public async Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetCallMaterialOrderRecordInput input)
+    {
+        Check.NotNull(input, nameof(input));
+
+        if (input.Sorting.IsNullOrWhiteSpace())
+        {
+            input.Sorting = nameof(CallMaterialOrderRecord.Sort);
+        }
+
         #region 鍔ㄦ�佹瀯閫犳煡璇㈡潯浠�  
- 
+
         //鍔ㄦ�佹瀯閫犳煡璇㈡潯浠�  
-        var whereConditions = DynamicGetQueryParams(input); 
- 
-        #endregion 
- 
- 
-        var list = await callMaterialOrderRecordRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount, includeDetails: true); 
-        var result = ObjectMapper.Map<List<CallMaterialOrderRecord>, List<CallMaterialOrderRecordDto>>(list); 
- 
-        var sheets = new Dictionary<string, object> 
-        { 
-            ["閰嶇疆"] = ExportHelper.ConvertListToExportData(result), 
-        }; 
- 
-        var fileName = "鍙枡璁板綍"; 
-        return (sheets, fileName); 
-    } 
- 
+        var whereConditions = DynamicGetQueryParams(input);
+
+        #endregion
+
+
+        var list = await _callMaterialOrderRecordRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount, includeDetails: true);
+        var result = ObjectMapper.Map<List<CallMaterialOrderRecord>, List<CallMaterialOrderRecordDto>>(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(CallMaterialOrderRecordCreateOrUpdateDtoBase input) 
-    { 
-        Check.NotNull(input, nameof(input)); 
-                Check.NotNullOrWhiteSpace(input.DataIdentifier, "鍘熸枡鏍囪瘑", 256);
+    protected Task CheckCreateOrUpdateDtoAsync(CallMaterialOrderRecordCreateOrUpdateDtoBase input)
+    {
+        Check.NotNull(input, nameof(input));
+        Check.NotNullOrWhiteSpace(input.DataIdentifier, "鍘熸枡鏍囪瘑", 256);
         Check.NotNull(input.CallMaterialStatus, "鍙枡鐘舵��");
         Check.NotNull(input.Quantity, "鍙枡鏁伴噺");
- 
-        return Task.CompletedTask; 
-    } 
-} 
+
+        return Task.CompletedTask;
+    }
+
+    /// <summary> 
+    /// 鏍规嵁鏉′欢鑾峰彇鍙枡璁板綍琛ㄥ垪琛� 
+    /// </summary> 
+    /// <param name="whereConditions"></param> 
+    /// <param name="cancellationToken"></param> 
+    /// <returns></returns> 
+    public async Task<List<CallMaterialOrderRecord>> GetListByFilterAsync(Expression<Func<CallMaterialOrderRecord, bool>> whereConditions, CancellationToken cancellationToken = default)
+    {
+        return await _callMaterialOrderRecordRepository.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<CallMaterialOrderRecord> GetSingleByFilterAsync(Expression<Func<CallMaterialOrderRecord, bool>> whereConditions, bool is鈥婱ultipleThrowException = false, CancellationToken cancellationToken = default)
+    {
+        return await _callMaterialOrderRecordRepository.GetSingleByFilterAsync(whereConditions, is鈥婱ultipleThrowException);
+    }
+}
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/SharedService.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/SharedService.cs
index ee97a01..3a1e6b2 100644
--- a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/SharedService.cs
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/SharedService.cs
@@ -437,9 +437,9 @@
     /// <param name="_serviceProvider">鏈嶅姟鎻愪緵鑰�</param>
     /// <returns>鎿嶄綔缁撴灉</returns>
     /// <exception cref="UserFriendlyException">褰撴暟鎹笉瀛樺湪鎴栫姸鎬佷笉鍏佽鍙枡鏃舵姏鍑�</exception>
-    public async Task<MesOrderResponse> CallMaterialByDataIdentifier(Guid id, IServiceProvider _serviceProvider)
+    public async Task<MesOrderResponse> CallMaterial(CallMaterialByDataIdentifierInput input, IServiceProvider _serviceProvider, MyCurrentUser myCurrentUser)
     {
-        if (string.IsNullOrEmpty(id.ToString()))
+        if (string.IsNullOrEmpty(input.Id.ToString()))
         {
             throw new UserFriendlyException("鍘熸枡鏍囪瘑涓嶈兘涓虹┖");
         }
@@ -451,7 +451,7 @@
 
         // 鏌ユ壘鏁版嵁
 
-        var callMaterialOrder = await callMaterialOrderRepository.GetAsync(id);
+        var callMaterialOrder = await callMaterialOrderRepository.GetAsync(input.Id);
         if (callMaterialOrder == null)
         {
             throw new UserFriendlyException($"鎵句笉鍒板彨鏂欒褰�");
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Domain/CallMaterialOrder/ICallMaterialOrderRepository.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Domain/CallMaterialOrder/ICallMaterialOrderRepository.cs
index 4cc38c4..13bdc95 100644
--- a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Domain/CallMaterialOrder/ICallMaterialOrderRepository.cs
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Domain/CallMaterialOrder/ICallMaterialOrderRepository.cs
@@ -15,10 +15,8 @@
     /// <param name="name"></param> 
     /// <param name="cancellationToken"></param> 
     /// <returns></returns> 
-    Task<CallMaterialOrder> FindByNameAsync(string name, CancellationToken cancellationToken = default);
-
-    Task<CallMaterialOrder> FindByWmsTaskNoAsync(string wmsTaskNo, CancellationToken cancellationToken = default);
-
+    Task<CallMaterialOrder> FindByNameAsync(string name, CancellationToken cancellationToken = default); 
+ 
     /// <summary> 
     /// 楠岃瘉鍚嶇О鏄惁瀛樺湪鍙枡鍗曡〃 
     /// </summary> 
@@ -31,11 +29,8 @@
     /// 鑾峰彇鏈�澶ф帓搴忓彨鏂欏崟琛� 
     /// </summary> 
     /// <returns></returns> 
-    Task<int> GetMaxSortAsync();
-
-
-
-
+    Task<int> GetMaxSortAsync(); 
+ 
     /// <summary> 
     /// 鑾峰彇鍒嗛〉鍒楄〃鍙枡鍗曡〃 
     /// </summary> 
@@ -54,16 +49,33 @@
     /// <param name="whereConditions"></param> 
     /// <param name="cancellationToken"></param> 
     /// <returns></returns> 
-    Task<long> GetCountAsync(FunReturnResultModel<Expression<Func<CallMaterialOrder, bool>>> whereConditions, CancellationToken cancellationToken = default);
-
+    Task<long> GetCountAsync(FunReturnResultModel<Expression<Func<CallMaterialOrder, 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<CallMaterialOrder>> GetListByFilterAsync(Expression<Func<CallMaterialOrder, bool>> whereConditions, CancellationToken cancellationToken = default);
-
+    Task<List<CallMaterialOrder>> GetListByFilterAsync(Expression<Func<CallMaterialOrder, bool>> whereConditions, CancellationToken cancellationToken = default); 
+ 
     /// <summary> 
     ///  鏍规嵁鏉′欢鑾峰彇鍗曚釜鍙枡鍗曡〃 
     /// </summary> 
@@ -72,5 +84,5 @@
     /// <param name="cancellationToken"></param> 
     /// <returns></returns> 
     /// <exception cref="UserFriendlyException"></exception> 
-    Task<CallMaterialOrder> GetSingleByFilterAsync(Expression<Func<CallMaterialOrder, bool>> whereConditions, bool is鈥婱ultipleThrowException = false, CancellationToken cancellationToken = default);
+    Task<CallMaterialOrder> GetSingleByFilterAsync(Expression<Func<CallMaterialOrder, bool>> whereConditions, bool is鈥婱ultipleThrowException = false, CancellationToken cancellationToken = default); 
 } 
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Domain/CallMaterialOrderRecord/ICallMaterialOrderRecordRepository.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Domain/CallMaterialOrderRecord/ICallMaterialOrderRecordRepository.cs
index 1ac2ea7..1c1417d 100644
--- a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Domain/CallMaterialOrderRecord/ICallMaterialOrderRecordRepository.cs
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Domain/CallMaterialOrderRecord/ICallMaterialOrderRecordRepository.cs
@@ -50,4 +50,39 @@
     /// <param name="cancellationToken"></param> 
     /// <returns></returns> 
     Task<long> GetCountAsync(FunReturnResultModel<Expression<Func<CallMaterialOrderRecord, 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<CallMaterialOrderRecord>> GetListByFilterAsync(Expression<Func<CallMaterialOrderRecord, 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<CallMaterialOrderRecord> GetSingleByFilterAsync(Expression<Func<CallMaterialOrderRecord, bool>> whereConditions, bool is鈥婱ultipleThrowException = false, CancellationToken cancellationToken = default); 
 } 
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.EntityFrameworkCore/Repositories/EfCoreCallMaterialOrderRecordRepository.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.EntityFrameworkCore/Repositories/EfCoreCallMaterialOrderRecordRepository.cs
index f9842e2..5a1e841 100644
--- a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.EntityFrameworkCore/Repositories/EfCoreCallMaterialOrderRecordRepository.cs
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.EntityFrameworkCore/Repositories/EfCoreCallMaterialOrderRecordRepository.cs
@@ -4,6 +4,7 @@
 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; 
  
@@ -110,4 +111,108 @@
         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(CallMaterialOrderRecord), id); 
+        } 
+ 
+        // 2. 鑾峰彇 DbContext 骞舵墽琛屽垹闄� 
+        var dbContext = await GetDbContextAsync(); 
+ 
+        // 鐩存帴鎵ц SQL 鍒犻櫎 
+        var sql = $"DELETE FROM scms_callmaterialorderrecords 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_callmaterialorderrecords 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<CallMaterialOrderRecord>> GetListByFilterAsync(Expression<Func<CallMaterialOrderRecord, 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<CallMaterialOrderRecord> GetSingleByFilterAsync(Expression<Func<CallMaterialOrderRecord, 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.EntityFrameworkCore/Repositories/EfCoreCallMaterialOrderRepository.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.EntityFrameworkCore/Repositories/EfCoreCallMaterialOrderRepository.cs
index da7e88a..3091f2b 100644
--- a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.EntityFrameworkCore/Repositories/EfCoreCallMaterialOrderRepository.cs
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.EntityFrameworkCore/Repositories/EfCoreCallMaterialOrderRepository.cs
@@ -3,8 +3,8 @@
 using CmsQueryExtensions.Extension; 
 using Microsoft.EntityFrameworkCore; 
 using System.Linq.Dynamic.Core; 
-using System.Linq.Expressions;
-using Volo.Abp;
+using System.Linq.Expressions; 
+using Volo.Abp; 
 using Volo.Abp.Domain.Repositories.EntityFrameworkCore; 
 using Volo.Abp.EntityFrameworkCore; 
  
@@ -38,17 +38,8 @@
             .Where(x => !x.IsDeleted) 
             .OrderByDescending(x=>x.CreationTime)  
             .FirstOrDefaultAsync(t => t.DataIdentifier == name, GetCancellationToken(cancellationToken)); 
-    }
-
-    public virtual async Task<CallMaterialOrder> FindByWmsTaskNoAsync(string wmsTaskNo, CancellationToken cancellationToken = default)
-    {
-        return await (await GetDbSetAsync())
-            .IncludeDetails()
-            .Where(x => !x.IsDeleted)
-            .OrderByDescending(x => x.CreationTime)
-            .FirstOrDefaultAsync(t => t.WmsTaskNo == wmsTaskNo, GetCancellationToken(cancellationToken));
-    }
-
+    } 
+ 
     /// <summary> 
     /// 楠岃瘉鍚嶇О鏄惁瀛樺湪鍙枡鍗曡〃 
     /// </summary> 
@@ -119,24 +110,77 @@
     { 
         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(CallMaterialOrder), id); 
+        } 
+ 
+        // 2. 鑾峰彇 DbContext 骞舵墽琛屽垹闄� 
+        var dbContext = await GetDbContextAsync(); 
+ 
+        // 鐩存帴鎵ц SQL 鍒犻櫎 
+        var sql = $"DELETE FROM scms_callmaterialorders 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_callmaterialorders 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<CallMaterialOrder>> GetListByFilterAsync(Expression<Func<CallMaterialOrder, 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));
-    }
-
+    public async Task<List<CallMaterialOrder>> GetListByFilterAsync(Expression<Func<CallMaterialOrder, 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> 
@@ -145,30 +189,30 @@
     /// <param name="cancellationToken"></param> 
     /// <returns></returns> 
     /// <exception cref="UserFriendlyException"></exception> 
-    public async Task<CallMaterialOrder> GetSingleByFilterAsync(Expression<Func<CallMaterialOrder, 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));
-        }
-    }
+    public async Task<CallMaterialOrder> GetSingleByFilterAsync(Expression<Func<CallMaterialOrder, 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/Controller/CallMaterialOrderController.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Controller/CallMaterialOrderController.cs
index 68c31db..35ecda2 100644
--- a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Controller/CallMaterialOrderController.cs
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Controller/CallMaterialOrderController.cs
@@ -1,5 +1,6 @@
 using Ao.Lang; 
 using CMS.Extensions.Abp.AspNetCore.Mvc.Filters; 
+using CMS.Framework.AspNetCore.Users; 
 using CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.CallMaterialOrder; 
 using CMS.Plugin.PipeLineLems.Application.Contracts.Services; 
 using Microsoft.AspNetCore.Authorization; 
@@ -9,6 +10,7 @@
 using System.Reflection; 
 using Volo.Abp; 
 using Volo.Abp.Application.Dtos; 
+using CmsQueryExtensions.Entitys; 
  
 namespace CMS.Plugin.PipeLineLems.Controller 
 { 
@@ -24,39 +26,34 @@
     public class CallMaterialOrderController : ControllerBase 
     { 
         private readonly ICallMaterialOrderAppService _callMaterialOrderAppService; 
+        private readonly ICurrentUser _currentUser; 
  
         /// <summary> 
         /// Initializes a new instance of the <see cref="CallMaterialOrderController"/> class. 
         /// </summary> 
         /// <param name="callMaterialOrderAppService">The callMaterialOrder application service.</param> 
-        public CallMaterialOrderController(ICallMaterialOrderAppService callMaterialOrderAppService) 
+        public CallMaterialOrderController(ICallMaterialOrderAppService callMaterialOrderAppService, ICurrentUser currentUser) 
         { 
             _callMaterialOrderAppService = callMaterialOrderAppService; 
+            _currentUser = currentUser; 
         } 
  
         /// <summary> 
         /// 鑾峰彇鍙枡鍗曡〃 
         /// </summary> 
-        /// <param name="id">鏍囪瘑绗�.</param> 
+        /// <param name="id">涓婚敭ID</param> 
         /// <returns></returns> 
         [HttpGet] 
         [Route("{id}")] 
         public virtual Task<CallMaterialOrderDto> GetAsync(Guid id) 
         { 
             return _callMaterialOrderAppService.GetAsync(id); 
-        }
-
-        [HttpPut]
-        [Route("CallMaterialByDataIdentifier/{id}")]
-        public virtual Task CallMaterialByDataIdentifier(Guid id)
-        {
-            return _callMaterialOrderAppService.CallMaterialByDataIdentifier(id);
-        }
-
+        } 
+ 
         /// <summary> 
         /// 鍒嗛〉鑾峰彇鍙枡鍗曡〃鐨勫垪琛�. 
         /// </summary> 
-        /// <param name="input">杈撳叆.</param> 
+        /// <param name="input">鏌ヨ鍙傛暟</param> 
         /// <returns></returns> 
         [HttpGet] 
         [Route("Page")] 
@@ -68,71 +65,90 @@
         /// <summary> 
         /// 鍒涘缓鍙枡鍗曡〃 
         /// </summary> 
-        /// <param name="input">杈撳叆.</param> 
+        /// <param name="input">鍒涘缓鍙傛暟</param> 
         /// <returns></returns> 
-       [Authorize] 
+        [Authorize] 
         [HttpPost] 
         public virtual Task<CallMaterialOrderDto> CreateAsync(CallMaterialOrderCreateDto input) 
         { 
+            input.CreatorName = _currentUser.UserAccount;//鍒涘缓浜� 
             return _callMaterialOrderAppService.CreateAsync(input); 
         } 
  
         /// <summary> 
         /// 鏇存柊鍙枡鍗曡〃 
         /// </summary> 
-        /// <param name="id">鏍囪瘑绗�.</param> 
-        /// <param name="input">杈撳叆.</param> 
+        /// <param name="id">涓婚敭ID</param> 
+        /// <param name="input">鏇存柊鍙傛暟</param> 
         /// <returns></returns> 
-       [Authorize] 
+        [Authorize] 
         [HttpPut] 
         [Route("{id}")] 
         public virtual Task<CallMaterialOrderDto> UpdateAsync(Guid id, CallMaterialOrderUpdateDto input) 
         { 
+            input.LastModifierName = _currentUser.UserAccount;//淇敼浜� 
             return _callMaterialOrderAppService.UpdateAsync(id, input); 
         } 
  
         /// <summary> 
         /// 鍏嬮殕鍙枡鍗曡〃 
         /// </summary> 
-        /// <param name="ids">Id闆嗗悎.</param> 
+        /// <param name="ids">Id闆嗗悎</param> 
         /// <returns></returns> 
-       [Authorize] 
+        [Authorize] 
         [HttpPost] 
         [Route("Clone")] 
         public virtual Task<List<CallMaterialOrderDto>> CloneAsync([FromBody] IEnumerable<Guid> ids) 
         { 
-            return _callMaterialOrderAppService.CloneAsync(ids); 
+            MyCurrentUser myCurrentUser = new MyCurrentUser() 
+            { 
+                UserAccount = _currentUser.UserAccount, 
+                UserId = _currentUser.UserId 
+            }; 
+            return _callMaterialOrderAppService.CloneAsync(ids, myCurrentUser); 
         } 
  
         /// <summary> 
         /// 鍒犻櫎鍙枡鍗曡〃 
         /// </summary> 
-        /// <param name="id">鏍囪瘑绗�.</param> 
+        /// <param name="id">涓婚敭ID</param> 
         /// <returns></returns> 
-       [Authorize] 
+        [Authorize] 
         [HttpDelete] 
         [Route("{id}")] 
         public virtual Task DeleteAsync(Guid id) 
         { 
-            return _callMaterialOrderAppService.DeleteAsync(id); 
+            MyCurrentUser myCurrentUser = new MyCurrentUser() 
+            { 
+                UserAccount = _currentUser.UserAccount, 
+                UserId = _currentUser.UserId 
+            }; 
+            //return _wmsMaterialAppService.DeleteAsync(id,myCurrentUser);//閫昏緫鍒犻櫎 
+            return _callMaterialOrderAppService.DeletePermanentlyAsync(id, myCurrentUser);//鐗╃悊鍒犻櫎 
         } 
  
         /// <summary> 
         /// 鎵归噺鍒犻櫎鍙枡鍗曡〃 
         /// </summary> 
-        /// <param name="ids">The ids.</param> 
+        /// <param name="ids">涓婚敭ID闆嗗悎</param> 
         /// <returns></returns> 
-       [Authorize] 
+        [Authorize] 
         [HttpDelete] 
         public virtual Task DeleteAsync([FromBody] IEnumerable<Guid> ids) 
         { 
-            return _callMaterialOrderAppService.DeleteManyAsync(ids); 
+            MyCurrentUser myCurrentUser = new MyCurrentUser() 
+            { 
+                UserAccount = _currentUser.UserAccount, 
+                UserId = _currentUser.UserId 
+            }; 
+            // return _wmsMaterialAppService.DeleteManyAsync(ids,myCurrentUser);//閫昏緫鍒犻櫎 
+            return _callMaterialOrderAppService.BatchDeletePermanentlyAsync(ids, myCurrentUser);//鐗╃悊鍒犻櫎 
         } 
  
         /// <summary> 
         /// 璋冩暣鎺掑簭鍙枡鍗曡〃 
         /// </summary> 
-        /// <param name="id">鏍囪瘑绗�.</param> 
+        /// <param name="id">涓婚敭ID</param> 
         /// <returns></returns> 
         [HttpPut] 
         [Route("{id}/AdjustSort/{sort}")] 
@@ -162,10 +178,15 @@
                 throw new UserFriendlyException("璇锋鏌ュ鍏ョ殑琛ㄦ牸"); 
             } 
  
+            MyCurrentUser myCurrentUser = new MyCurrentUser() 
+            { 
+                UserAccount = _currentUser.UserAccount, 
+                UserId = _currentUser.UserId 
+            }; 
             await _callMaterialOrderAppService.ImportAsync(new CallMaterialOrdersImportModel 
             { 
                 CallMaterialOrders = callMaterialOrderRows, 
-            }); 
+           },myCurrentUser);  
  
             return Ok(); 
         } 
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Controller/CallMaterialOrderRecordController.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Controller/CallMaterialOrderRecordController.cs
index 123e408..0ed699d 100644
--- a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Controller/CallMaterialOrderRecordController.cs
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Controller/CallMaterialOrderRecordController.cs
@@ -1,5 +1,6 @@
 using Ao.Lang; 
 using CMS.Extensions.Abp.AspNetCore.Mvc.Filters; 
+using CMS.Framework.AspNetCore.Users; 
 using CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.CallMaterialOrderRecord; 
 using CMS.Plugin.PipeLineLems.Application.Contracts.Services; 
 using Microsoft.AspNetCore.Authorization; 
@@ -9,6 +10,7 @@
 using System.Reflection; 
 using Volo.Abp; 
 using Volo.Abp.Application.Dtos; 
+using CmsQueryExtensions.Entitys; 
  
 namespace CMS.Plugin.PipeLineLems.Controller 
 { 
@@ -24,20 +26,22 @@
     public class CallMaterialOrderRecordController : ControllerBase 
     { 
         private readonly ICallMaterialOrderRecordAppService _callMaterialOrderRecordAppService; 
+        private readonly ICurrentUser _currentUser; 
  
         /// <summary> 
         /// Initializes a new instance of the <see cref="CallMaterialOrderRecordController"/> class. 
         /// </summary> 
         /// <param name="callMaterialOrderRecordAppService">The callMaterialOrderRecord application service.</param> 
-        public CallMaterialOrderRecordController(ICallMaterialOrderRecordAppService callMaterialOrderRecordAppService) 
+        public CallMaterialOrderRecordController(ICallMaterialOrderRecordAppService callMaterialOrderRecordAppService, ICurrentUser currentUser) 
         { 
             _callMaterialOrderRecordAppService = callMaterialOrderRecordAppService; 
+            _currentUser = currentUser; 
         } 
  
         /// <summary> 
         /// 鑾峰彇鍙枡璁板綍琛� 
         /// </summary> 
-        /// <param name="id">鏍囪瘑绗�.</param> 
+        /// <param name="id">涓婚敭ID</param> 
         /// <returns></returns> 
         [HttpGet] 
         [Route("{id}")] 
@@ -49,7 +53,7 @@
         /// <summary> 
         /// 鍒嗛〉鑾峰彇鍙枡璁板綍琛ㄧ殑鍒楄〃. 
         /// </summary> 
-        /// <param name="input">杈撳叆.</param> 
+        /// <param name="input">鏌ヨ鍙傛暟</param> 
         /// <returns></returns> 
         [HttpGet] 
         [Route("Page")] 
@@ -61,71 +65,90 @@
         /// <summary> 
         /// 鍒涘缓鍙枡璁板綍琛� 
         /// </summary> 
-        /// <param name="input">杈撳叆.</param> 
+        /// <param name="input">鍒涘缓鍙傛暟</param> 
         /// <returns></returns> 
-       [Authorize] 
+        [Authorize] 
         [HttpPost] 
         public virtual Task<CallMaterialOrderRecordDto> CreateAsync(CallMaterialOrderRecordCreateDto input) 
         { 
+            input.CreatorName = _currentUser.UserAccount;//鍒涘缓浜� 
             return _callMaterialOrderRecordAppService.CreateAsync(input); 
         } 
  
         /// <summary> 
         /// 鏇存柊鍙枡璁板綍琛� 
         /// </summary> 
-        /// <param name="id">鏍囪瘑绗�.</param> 
-        /// <param name="input">杈撳叆.</param> 
+        /// <param name="id">涓婚敭ID</param> 
+        /// <param name="input">鏇存柊鍙傛暟</param> 
         /// <returns></returns> 
-       [Authorize] 
+        [Authorize] 
         [HttpPut] 
         [Route("{id}")] 
         public virtual Task<CallMaterialOrderRecordDto> UpdateAsync(Guid id, CallMaterialOrderRecordUpdateDto input) 
         { 
+            input.LastModifierName = _currentUser.UserAccount;//淇敼浜� 
             return _callMaterialOrderRecordAppService.UpdateAsync(id, input); 
         } 
  
         /// <summary> 
         /// 鍏嬮殕鍙枡璁板綍琛� 
         /// </summary> 
-        /// <param name="ids">Id闆嗗悎.</param> 
+        /// <param name="ids">Id闆嗗悎</param> 
         /// <returns></returns> 
-       [Authorize] 
+        [Authorize] 
         [HttpPost] 
         [Route("Clone")] 
         public virtual Task<List<CallMaterialOrderRecordDto>> CloneAsync([FromBody] IEnumerable<Guid> ids) 
         { 
-            return _callMaterialOrderRecordAppService.CloneAsync(ids); 
+            MyCurrentUser myCurrentUser = new MyCurrentUser() 
+            { 
+                UserAccount = _currentUser.UserAccount, 
+                UserId = _currentUser.UserId 
+            }; 
+            return _callMaterialOrderRecordAppService.CloneAsync(ids, myCurrentUser); 
         } 
  
         /// <summary> 
         /// 鍒犻櫎鍙枡璁板綍琛� 
         /// </summary> 
-        /// <param name="id">鏍囪瘑绗�.</param> 
+        /// <param name="id">涓婚敭ID</param> 
         /// <returns></returns> 
-       [Authorize] 
+        [Authorize] 
         [HttpDelete] 
         [Route("{id}")] 
         public virtual Task DeleteAsync(Guid id) 
         { 
-            return _callMaterialOrderRecordAppService.DeleteAsync(id); 
+            MyCurrentUser myCurrentUser = new MyCurrentUser() 
+            { 
+                UserAccount = _currentUser.UserAccount, 
+                UserId = _currentUser.UserId 
+            }; 
+            //return _wmsMaterialAppService.DeleteAsync(id,myCurrentUser);//閫昏緫鍒犻櫎 
+            return _callMaterialOrderRecordAppService.DeletePermanentlyAsync(id, myCurrentUser);//鐗╃悊鍒犻櫎 
         } 
  
         /// <summary> 
         /// 鎵归噺鍒犻櫎鍙枡璁板綍琛� 
         /// </summary> 
-        /// <param name="ids">The ids.</param> 
+        /// <param name="ids">涓婚敭ID闆嗗悎</param> 
         /// <returns></returns> 
-       [Authorize] 
+        [Authorize] 
         [HttpDelete] 
         public virtual Task DeleteAsync([FromBody] IEnumerable<Guid> ids) 
         { 
-            return _callMaterialOrderRecordAppService.DeleteManyAsync(ids); 
+            MyCurrentUser myCurrentUser = new MyCurrentUser() 
+            { 
+                UserAccount = _currentUser.UserAccount, 
+                UserId = _currentUser.UserId 
+            }; 
+            // return _wmsMaterialAppService.DeleteManyAsync(ids,myCurrentUser);//閫昏緫鍒犻櫎 
+            return _callMaterialOrderRecordAppService.BatchDeletePermanentlyAsync(ids, myCurrentUser);//鐗╃悊鍒犻櫎 
         } 
  
         /// <summary> 
         /// 璋冩暣鎺掑簭鍙枡璁板綍琛� 
         /// </summary> 
-        /// <param name="id">鏍囪瘑绗�.</param> 
+        /// <param name="id">涓婚敭ID</param> 
         /// <returns></returns> 
         [HttpPut] 
         [Route("{id}/AdjustSort/{sort}")] 
@@ -155,10 +178,15 @@
                 throw new UserFriendlyException("璇锋鏌ュ鍏ョ殑琛ㄦ牸"); 
             } 
  
+            MyCurrentUser myCurrentUser = new MyCurrentUser() 
+            { 
+                UserAccount = _currentUser.UserAccount, 
+                UserId = _currentUser.UserId 
+            }; 
             await _callMaterialOrderRecordAppService.ImportAsync(new CallMaterialOrderRecordsImportModel 
             { 
                 CallMaterialOrderRecords = callMaterialOrderRecordRows, 
-            }); 
+           },myCurrentUser);  
  
             return Ok(); 
         } 
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Controller/WorkPlanPublicController.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Controller/WorkPlanPublicController.cs
index b027c3f..0ad0a16 100644
--- a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Controller/WorkPlanPublicController.cs
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Controller/WorkPlanPublicController.cs
@@ -47,7 +47,7 @@
         [HttpPost]
         public virtual async Task<MesOrderResponse> GetWorkPlanAsync([FromBody] List<WorkPlanInput> input)
         {
-            return await _mesAppService.CreateAsync(input,"","");
+            return await _mesAppService.CreateAsync(input, "", "");
         }
 
         /// <summary>
@@ -67,5 +67,26 @@
             };
             return await sharedService.CommonPick(_serviceProvider, input, myCurrentUser);
         }
+
+
+        /// <summary>
+        /// 鍙枡
+        /// </summary>
+        /// <param name="input">鏍囪瘑绗�.</param>
+        /// <returns></returns>
+        [Authorize]
+        [HttpPost]
+        [Route("CallMaterial")]
+        public virtual async Task<MesOrderResponse> CallMaterial([FromBody] CallMaterialByDataIdentifierInput input)
+        {
+            MyCurrentUser myCurrentUser = new MyCurrentUser()
+            {
+                UserAccount = _currentUser.UserAccount,
+                UserId = _currentUser.UserId
+            };
+            return await sharedService.CallMaterial(input, _serviceProvider, myCurrentUser);
+        }
+
+
     }
 }
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/ProjectService/PipeLineLemsProjectService.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/ProjectService/PipeLineLemsProjectService.cs
index 81e821c..3d83626 100644
--- a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/ProjectService/PipeLineLemsProjectService.cs
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/ProjectService/PipeLineLemsProjectService.cs
@@ -326,7 +326,7 @@
                 try
                 {
                     //鏍规嵁wms浠诲姟鍙峰鎵� 鍙枡宸ュ崟
-                    callMaterialOrder = await callMaterialOrderAppService.FindByWmsTaskNoAsync(myTaskNo);
+                    callMaterialOrder = await callMaterialOrderAppService.GetSingleByFilterAsync(x => x.WmsTaskNo == myTaskNo);
                     if (callMaterialOrder == null) return;//缁撴潫
 
 
@@ -446,7 +446,7 @@
                 try
                 {
                     //鏍规嵁wms浠诲姟鍙峰鎵� 鍙枡宸ュ崟
-                    callMaterialOrder = await callMaterialOrderAppService.FindByWmsTaskNoAsync(myTaskNo);
+                    callMaterialOrder = await callMaterialOrderAppService.GetSingleByFilterAsync(x => x.WmsTaskNo == myTaskNo);
                     if (callMaterialOrder == null) return;//缁撴潫
 
 
@@ -599,7 +599,7 @@
                 try
                 {
                     //鏍规嵁wms浠诲姟鍙峰鎵� 鍙枡宸ュ崟
-                    callMaterialOrder = await callMaterialOrderAppService.FindByWmsTaskNoAsync(myTaskNo);
+                    callMaterialOrder = await callMaterialOrderAppService.GetSingleByFilterAsync(x => x.WmsTaskNo == myTaskNo);
                     if (callMaterialOrder == null) return;//缁撴潫
 
 
@@ -718,7 +718,7 @@
                 try
                 {
                     //鏍规嵁wms浠诲姟鍙峰鎵� 鍙枡宸ュ崟
-                    callMaterialOrder = await callMaterialOrderAppService.FindByWmsTaskNoAsync(myTaskNo);
+                    callMaterialOrder = await callMaterialOrderAppService.GetSingleByFilterAsync(x => x.WmsTaskNo == myTaskNo);
                     if (callMaterialOrder == null) return;//缁撴潫
 
 
diff --git "a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Resources/Templates/CallMaterialOrderRecord\345\257\274\345\207\272\346\250\241\346\235\277.xlsx" "b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Resources/Templates/CallMaterialOrderRecord\345\257\274\345\207\272\346\250\241\346\235\277.xlsx"
index 53546f3..0f1b3bc 100644
--- "a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Resources/Templates/CallMaterialOrderRecord\345\257\274\345\207\272\346\250\241\346\235\277.xlsx"
+++ "b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Resources/Templates/CallMaterialOrderRecord\345\257\274\345\207\272\346\250\241\346\235\277.xlsx"
Binary files differ
diff --git "a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Resources/Templates/CallMaterialOrder\345\257\274\345\207\272\346\250\241\346\235\277.xlsx" "b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Resources/Templates/CallMaterialOrder\345\257\274\345\207\272\346\250\241\346\235\277.xlsx"
index caccfc1..4722dc7 100644
--- "a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Resources/Templates/CallMaterialOrder\345\257\274\345\207\272\346\250\241\346\235\277.xlsx"
+++ "b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Resources/Templates/CallMaterialOrder\345\257\274\345\207\272\346\250\241\346\235\277.xlsx"
Binary files differ

--
Gitblit v1.9.3