From 4d916744ba1ba9066d1ecf809f43ddddb817b26b Mon Sep 17 00:00:00 2001
From: schangxiang@126.com <schangxiang@126.com>
Date: 周日, 11 5月 2025 14:11:31 +0800
Subject: [PATCH] 2

---
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/CallMaterialOrderExportModel.cs                       |   91 +
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Services/IWorkPlanAppService.cs                                              |    4 
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Domain.Shared/Enums/WorkPlanStatusEnum.cs                                                          |    8 
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/CallMaterialOrderRecordsImportModel.cs          |   33 
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/SharedService.cs                                                            |  289 ++-
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Domain/CallMaterialOrderRecord/ICallMaterialOrderRecordRepository.cs                               |   53 
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.EntityFrameworkCore/Repositories/EfCoreCallMaterialOrderRecordRepository.cs                        |  113 +
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/MapperProfiles/WorkPlanAutoMapperProfile.cs                                            |    5 
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Domain/CallMaterialOrder/ICallMaterialOrderRepository.cs                                           |   53 
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/CallMaterialOrdersImportModel.cs                      |   33 
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/CallMaterialOrderRecordExportModel.cs           |   85 +
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/MapperProfiles/CallMaterialOrderRecordAutoMapperProfile.cs                             |   26 
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkPlan/WorkPlanExportModel.cs                                         |   18 
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/CallMaterialOrderRecordCreateDto.cs             |   17 
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkPlan/WorkPlanInput.cs                                               |    7 
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Domain.Shared/Enums/CallMaterialStatusEnum.cs                                                      |    6 
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/CallMaterialOrderRecordDto.cs                   |  146 ++
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Controller/CallMaterialOrderRecordController.cs                                                    |  188 ++
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Services/ICallMaterialOrderRecordAppService.cs                               |   46 
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/CallMaterialOrderCreateDto.cs                         |   17 
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/GetCallMaterialOrderInput.cs                          |  272 ++++
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/CallMaterialOrderUpdateDto.cs                         |   13 
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.MySQL/Migrations/20250511041027_Update1.cs                                                         |    8 
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Resources/Templates/CallMaterialOrder导出模板.xlsx                                                     |    0 
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.MySQL/Migrations/20250511041027_Update1.Designer.cs                                                |   18 
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Controller/WorkPlanController.cs                                                                   |  271 +--
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Services/ICallMaterialOrderAppService.cs                                     |   46 
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/MapperProfiles/CallMaterialOrderAutoMapperProfile.cs                                   |   26 
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkPlan/WorkPlanDto.cs                                                 |   35 
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.MySQL/Migrations/CMSPluginDbContextModelSnapshot.cs                                                |   16 
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkPlan/WorkPlanCreateOrUpdateDtoBase.cs                               |   15 
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Resources/Templates/CallMaterialOrderRecord导出模板.xlsx                                               |    0 
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/WorkPlanAppService.cs                                                       |  342 ++--
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.EntityFrameworkCore/Repositories/EfCoreCallMaterialOrderRepository.cs                              |  113 +
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/CallMaterialOrderRecordUpdateDto.cs             |   13 
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkPlan/GetWorkPlanInput.cs                                            |   31 
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/CallMaterialOrderAppService.cs                                              |  416 ++++++
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Domain.Shared/Enums/PipeLineLemsStatus.cs                                                          |    6 
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/CallMaterialOrderRecordCreateOrUpdateDtoBase.cs |   90 +
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/CallMaterialOrderRecordAppService.cs                                        |  416 ++++++
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/CallMaterialOrderCreateOrUpdateDtoBase.cs             |  105 +
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Resources/Templates/WorkPlan导出模板.xlsx                                                              |    0 
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/CallMaterialOrderDto.cs                               |  166 ++
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/GetCallMaterialOrderRecordInput.cs              |  232 +++
 PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Controller/CallMaterialOrderController.cs                                                          |  188 ++
 45 files changed, 3,593 insertions(+), 483 deletions(-)

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
new file mode 100644
index 0000000..5454ecf
--- /dev/null
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/CallMaterialOrderCreateDto.cs
@@ -0,0 +1,17 @@
+namespace CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.CallMaterialOrder; 
+ 
+/// <summary> 
+/// 鍙枡鍗曡〃鍒涘缓鍙傛暟瀵硅薄 
+/// </summary> 
+public class CallMaterialOrderCreateDto : CallMaterialOrderCreateOrUpdateDtoBase 
+{ 
+    /// <summary> 
+    /// 鎺掑簭 
+    /// </summary> 
+    public virtual int? Sort { get; set; } 
+ 
+    /// <summary> 
+    /// 鏄惁绂佺敤 
+    /// </summary> 
+    public bool? IsDisabled { get; set; } = false; 
+} 
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
new file mode 100644
index 0000000..9eb5224
--- /dev/null
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/CallMaterialOrderCreateOrUpdateDtoBase.cs
@@ -0,0 +1,105 @@
+using CMS.Plugin.PipeLineLems.Domain.Shared.Enums; 
+using System; 
+using Volo.Abp.Application.Dtos; 
+ 
+namespace CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.CallMaterialOrder; 
+ 
+/// <summary> 
+/// 鍙枡鍗曡〃鍒涘缓鎴栨洿鏂板熀绫� 
+/// </summary> 
+public abstract class CallMaterialOrderCreateOrUpdateDtoBase : ExtensibleEntityDto 
+{ 
+            /// <summary>
+        /// 鍘熸枡鏍囪瘑
+        /// </summary>
+        public string DataIdentifier { get; set; }
+
+        /// <summary>
+        /// 鍘熸枡鍨嬪彿
+        /// </summary>
+        public string? MaterialMode { get; set; }
+
+        /// <summary>
+        /// 鍙枡鐘舵��
+        /// </summary>
+        public CallMaterialStatusEnum CallMaterialStatus { get; set; }
+
+        /// <summary>
+        /// 鍙枡鏁伴噺
+        /// </summary>
+        public int Quantity { get; set; }
+
+        /// <summary>
+        /// WMS杩斿洖缁撴灉
+        /// </summary>
+        public string? WmsRetResult { get; set; }
+
+        /// <summary>
+        /// WMS浠诲姟鍙�
+        /// </summary>
+        public string? WmsTaskNo { get; set; }
+
+        /// <summary>
+        /// 鍒涘缓浜篒D
+        /// </summary>
+        public string? CreatorId { get; set; }
+
+        /// <summary>
+        /// 淇敼浜篒D
+        /// </summary>
+        public string? LastModifierId { get; set; }
+
+        /// <summary>
+        /// 鍒犻櫎鏃堕棿
+        /// </summary>
+        public DateTime? DeletionTime { get; set; }
+
+        /// <summary>
+        /// 鎿嶄綔澶囨敞
+        /// </summary>
+        public string? OperationRemark { get; set; }
+
+        /// <summary>
+        /// 鍒犻櫎澶囨敞
+        /// </summary>
+        public string? DeleteRemark { get; set; }
+
+        /// <summary>
+        /// 鎺掑簭
+        /// </summary>
+        public int Sort { get; set; }
+
+        /// <summary>
+        /// 澶囨敞
+        /// </summary>
+        public string? Remark { get; set; }
+
+        /// <summary>
+        /// 鏄惁绂佺敤
+        /// </summary>
+        public bool? IsDisabled { get; set; }
+
+        /// <summary>
+        /// 鎵╁睍瀛楁1
+        /// </summary>
+        public string? ExtraField1 { get; set; }
+
+        /// <summary>
+        /// 鎵╁睍瀛楁2
+        /// </summary>
+        public string? ExtraField2 { get; set; }
+
+        /// <summary>
+        /// 鎵╁睍瀛楁3
+        /// </summary>
+        public string? ExtraField3 { get; set; }
+
+ 
+ 
+    /// <summary> 
+    /// Initializes a new instance of the <see cref="CallMaterialOrderCreateOrUpdateDtoBase"/> class. 
+    /// </summary> 
+    public CallMaterialOrderCreateOrUpdateDtoBase() : base(false) 
+    { 
+    } 
+} 
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
new file mode 100644
index 0000000..bd55469
--- /dev/null
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/CallMaterialOrderDto.cs
@@ -0,0 +1,166 @@
+using CMS.Plugin.PipeLineLems.Domain.Shared.Enums; 
+using CmsQueryExtensions; 
+using Volo.Abp.Application.Dtos; 
+using Volo.Abp.Data; 
+using Volo.Abp.Domain.Entities; 
+ 
+ 
+namespace CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.CallMaterialOrder; 
+ 
+/// <summary> 
+/// 鍙枡鍗曡〃鏁版嵁鍙傛暟瀵硅薄 
+/// </summary> 
+public  class CallMaterialOrderDto:  ExtensibleEntityDto<Guid>, IHasConcurrencyStamp 
+{ 
+            /// <summary>
+        /// 鍘熸枡鏍囪瘑
+        /// </summary>
+        public string DataIdentifier { get; set; }
+
+        /// <summary>
+        /// 鍘熸枡鍨嬪彿
+        /// </summary>
+        public string? MaterialMode { get; set; }
+
+        /// <summary>
+        /// 鍙枡鐘舵��
+        /// </summary>
+        public CallMaterialStatusEnum CallMaterialStatus { get; set; }
+
+        /// <summary>
+        /// 鍙枡鐘舵��
+        /// </summary>
+        public string CallMaterialStatusDesc
+        { 
+            get 
+            { 
+                return GetEnumDescriptionUtil.GetEnumDescription(CallMaterialStatus); 
+            } 
+        } 
+        /// <summary>
+        /// 鍙枡鏁伴噺
+        /// </summary>
+        public int Quantity { get; set; }
+
+        /// <summary>
+        /// WMS杩斿洖缁撴灉
+        /// </summary>
+        public string? WmsRetResult { get; set; }
+
+        /// <summary>
+        /// WMS浠诲姟鍙�
+        /// </summary>
+        public string? WmsTaskNo { get; set; }
+
+        /// <summary>
+        /// 鎵╁睍灞炴��
+        /// </summary>
+        public ExtraPropertyDictionary? ExtraProperties { get; set; }
+
+        /// <summary>
+        /// 骞跺彂鎴�
+        /// </summary>
+        public string? ConcurrencyStamp { get; set; }
+
+        /// <summary>
+        /// 鍒涘缓鏃堕棿
+        /// </summary>
+        public DateTime CreationTime { get; set; }
+
+        /// <summary>
+        /// 鍒涘缓浜篒D
+        /// </summary>
+        public string? CreatorId { get; set; }
+
+        /// <summary>
+        /// 淇敼鏃堕棿
+        /// </summary>
+        public DateTime? LastModificationTime { get; set; }
+
+        /// <summary>
+        /// 淇敼浜篒D
+        /// </summary>
+        public string? LastModifierId { get; set; }
+
+        /// <summary>
+        /// 鏄惁鍒犻櫎
+        /// </summary>
+        public bool IsDeleted { get; set; }
+
+        /// <summary>
+        /// 鍒犻櫎浜篒D
+        /// </summary>
+        public string? DeleterId { get; set; }
+
+        /// <summary>
+        /// 鍒犻櫎鏃堕棿
+        /// </summary>
+        public DateTime? DeletionTime { get; set; }
+
+        /// <summary>
+        /// 鍒涘缓浜�
+        /// </summary>
+        public string? CreatorName { get; set; }
+
+        /// <summary>
+        /// 淇敼浜�
+        /// </summary>
+        public string? LastModifierName { get; set; }
+
+        /// <summary>
+        /// 鎿嶄綔澶囨敞
+        /// </summary>
+        public string? OperationRemark { get; set; }
+
+        /// <summary>
+        /// 鍒犻櫎澶囨敞
+        /// </summary>
+        public string? DeleteRemark { get; set; }
+
+        /// <summary>
+        /// 鎺掑簭
+        /// </summary>
+        public int Sort { get; set; }
+
+        /// <summary>
+        /// 澶囨敞
+        /// </summary>
+        public string? Remark { get; set; }
+
+        /// <summary>
+        /// 鏄惁绂佺敤
+        /// </summary>
+        public bool? IsDisabled { get; set; }
+
+        /// <summary>
+        /// 鎵╁睍瀛楁1
+        /// </summary>
+        public string? ExtraField1 { get; set; }
+
+        /// <summary>
+        /// 鎵╁睍瀛楁2
+        /// </summary>
+        public string? ExtraField2 { get; set; }
+
+        /// <summary>
+        /// 鎵╁睍瀛楁3
+        /// </summary>
+        public string? ExtraField3 { get; set; }
+
+ 
+ 
+    /// <summary> 
+    /// Gets the export data. 
+    /// </summary> 
+    /// <returns></returns> 
+    public Dictionary<string, object> GetExportData() 
+    { 
+        var exportData = new Dictionary<string, object>(); 
+        foreach (var property in this.GetType().GetProperties()) 
+        { 
+            exportData.Add(property.Name, property.GetValue(this)); 
+        } 
+ 
+        return exportData; 
+    } 
+} 
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/CallMaterialOrderExportModel.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/CallMaterialOrderExportModel.cs
new file mode 100644
index 0000000..7b35d52
--- /dev/null
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/CallMaterialOrderExportModel.cs
@@ -0,0 +1,91 @@
+using MiniExcelLibs.Attributes; 
+using System.ComponentModel.DataAnnotations; 
+using System; 
+using System.ComponentModel; 
+using CMS.Plugin.PipeLineLems.Domain.Shared.Enums; 
+namespace CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.CallMaterialOrder; 
+ 
+/// <summary> 
+/// 鍙枡鍗曡〃瀵煎嚭妯″瀷 
+/// </summary> 
+public  class CallMaterialOrderExportModel 
+{ 
+            /// <summary>
+        /// 鍘熸枡鏍囪瘑
+        /// </summary>
+        [ExcelColumn(Name = "鍘熸枡鏍囪瘑", Width = 25)]
+        public string DataIdentifier { get; set; }
+
+        /// <summary>
+        /// 鍘熸枡鍨嬪彿
+        /// </summary>
+        [ExcelColumn(Name = "鍘熸枡鍨嬪彿", Width = 25)]
+        public string MaterialMode { get; set; }
+
+        /// <summary>
+        /// 鍙枡鐘舵��
+        /// </summary>
+        [ExcelColumn(Name = "鍙枡鐘舵��", Width = 25)]
+        public CallMaterialStatusEnum CallMaterialStatus { get; set; }
+
+        /// <summary>
+        /// 鍙枡鏁伴噺
+        /// </summary>
+        [ExcelColumn(Name = "鍙枡鏁伴噺", Width = 25)]
+        public int Quantity { get; set; }
+
+        /// <summary>
+        /// WMS杩斿洖缁撴灉
+        /// </summary>
+        [ExcelColumn(Name = "WMS杩斿洖缁撴灉", Width = 25)]
+        public string WmsRetResult { get; set; }
+
+        /// <summary>
+        /// WMS浠诲姟鍙�
+        /// </summary>
+        [ExcelColumn(Name = "WMS浠诲姟鍙�", Width = 25)]
+        public string WmsTaskNo { get; set; }
+
+        /// <summary>
+        /// 鍒涘缓鏃堕棿
+        /// </summary>
+        [ExcelColumn(Name = "鍒涘缓鏃堕棿", Width = 25)]
+        public DateTime CreationTime { get; set; }
+
+        /// <summary>
+        /// 淇敼鏃堕棿
+        /// </summary>
+        [ExcelColumn(Name = "淇敼鏃堕棿", Width = 25)]
+        public DateTime LastModificationTime { get; set; }
+
+        /// <summary>
+        /// 鍒涘缓浜�
+        /// </summary>
+        [ExcelColumn(Name = "鍒涘缓浜�", Width = 25)]
+        public string CreatorName { get; set; }
+
+        /// <summary>
+        /// 淇敼浜�
+        /// </summary>
+        [ExcelColumn(Name = "淇敼浜�", Width = 25)]
+        public string LastModifierName { get; set; }
+
+        /// <summary>
+        /// 澶囨敞
+        /// </summary>
+        [ExcelColumn(Name = "澶囨敞", Width = 25)]
+        public string Remark { get; set; }
+
+ 
+ 
+    public Dictionary<string, object> GetExportData() 
+        { 
+            var exportData = new Dictionary<string, object>(); 
+            foreach (var property in this.GetType().GetProperties()) 
+            { 
+                exportData.Add(property.Name, property.GetValue(this)); 
+            } 
+ 
+            return exportData; 
+        } 
+} 
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/CallMaterialOrderUpdateDto.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/CallMaterialOrderUpdateDto.cs
new file mode 100644
index 0000000..4af7767
--- /dev/null
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/CallMaterialOrderUpdateDto.cs
@@ -0,0 +1,13 @@
+using Volo.Abp.Domain.Entities; 
+namespace CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.CallMaterialOrder; 
+ 
+/// <summary> 
+/// 鍙枡鍗曡〃鏇存柊鍙傛暟瀵硅薄 
+/// </summary> 
+public class CallMaterialOrderUpdateDto : CallMaterialOrderCreateOrUpdateDtoBase, IHasConcurrencyStamp 
+{ 
+   /// <summary> 
+    /// 骞跺彂鎴� 
+    /// </summary> 
+    public string ConcurrencyStamp { get; set; } 
+} 
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/CallMaterialOrdersImportModel.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/CallMaterialOrdersImportModel.cs
new file mode 100644
index 0000000..66c34d9
--- /dev/null
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/CallMaterialOrdersImportModel.cs
@@ -0,0 +1,33 @@
+ 
+namespace CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.CallMaterialOrder 
+{ 
+    /// <summary> 
+    /// 鍙枡鍗曡〃瀵煎叆妯″瀷 
+    /// </summary> 
+    public class CallMaterialOrdersImportModel 
+    { 
+        private List<CallMaterialOrderImportModel> _CallMaterialOrders = new(); 
+ 
+        public List<CallMaterialOrderImportModel> CallMaterialOrders 
+        { 
+            get => _CallMaterialOrders; 
+            set 
+            { 
+                _CallMaterialOrders = value; 
+                var rowIndex = 2; 
+                _CallMaterialOrders?.ForEach(x => x.RowIndex = rowIndex++); 
+            } 
+        } 
+ 
+        /// <summary> 
+        /// 鍙枡鍗曡〃瀵煎叆妯″瀷 
+        /// </summary> 
+        public class CallMaterialOrderImportModel : CallMaterialOrderExportModel 
+        { 
+            /// <summary> 
+            /// 琛屽彿 
+            /// </summary> 
+            public int RowIndex { 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
new file mode 100644
index 0000000..c1faf46
--- /dev/null
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/GetCallMaterialOrderInput.cs
@@ -0,0 +1,272 @@
+using CMS.Plugin.PipeLineLems.Domain.Shared.Enums; 
+using CmsQueryExtensions.Extension; 
+using Volo.Abp.Application.Dtos; 
+ 
+namespace CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.CallMaterialOrder; 
+ 
+/// <summary> 
+/// 鍙枡鍗曡〃鏌ヨ鍙傛暟 
+/// </summary> 
+public class GetCallMaterialOrderInput : ExtensiblePagedAndSortedResultRequestDto 
+{ 
+ 
+    #region 鍏抽敭瀛楁煡璇� 
+ 
+    /// <summary> 
+    /// 鍏抽敭瀛楁ā绯婃煡璇紙娉ㄦ剰鏄皬鍐欙紒锛� 
+    /// </summary> 
+    public string searchVal { get; set; } 
+ 
+    /// <summary> 
+    /// 閫氱敤鏌ヨ閰嶇疆 (1:妯$硦鏌ヨ , 2:绮惧噯鏌ヨ)锛堟敞鎰忔槸灏忓啓锛侊級 
+    /// </summary> 
+    public SearchFilterModeEnum searchVal_FilterMode { get; set; } = SearchFilterModeEnum.妯$硦鏌ヨ; 
+ 
+    /// <summary> 
+    /// 瀛愭悳绱㈢粍浠朵紶閫掔殑閫氱敤鏌ヨ閰嶇疆鐨勫睘鎬у悕锛堟敞鎰忔槸灏忓啓锛侊級 
+    /// </summary> 
+    [NoAutoQuery] 
+    public string str_searchFormInputAttrs { get; set; } 
+    /// <summary> 
+    /// 瀛愭悳绱㈢粍浠朵紶閫掔殑閫氱敤鏌ヨ閰嶇疆鐨勫睘鎬у悕锛堟敞鎰忔槸灏忓啓锛侊級 
+    /// </summary> 
+    public List<string> searchFormInputAttrs 
+    { 
+        get 
+        { 
+            if (!string.IsNullOrEmpty(str_searchFormInputAttrs)) 
+            { 
+                return str_searchFormInputAttrs.Split(',').ToList(); 
+            } 
+            return new List<string>(); 
+        } 
+    } 
+ 
+    #endregion 
+ 
+            /// <summary>
+        /// 鍘熸枡鏍囪瘑
+        /// </summary>
+        public string DataIdentifier { get; set; }
+
+        /// <summary>
+        /// 鍘熸枡鏍囪瘑-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum DataIdentifier_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+        /// <summary>
+        /// 鍘熸枡鍨嬪彿
+        /// </summary>
+        public string MaterialMode { get; set; }
+
+        /// <summary>
+        /// 鍘熸枡鍨嬪彿-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum MaterialMode_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+        /// <summary>
+        /// 鍙枡鐘舵��
+        /// </summary>
+        public CallMaterialStatusEnum?  CallMaterialStatus { get; set; }
+
+        /// <summary>
+        /// 鍙枡鐘舵��-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum CallMaterialStatus_FilterMode { get; set; }= SearchFilterModeEnum.绮惧噯鏌ヨ;
+
+        /// <summary>
+        /// 鍙枡鏁伴噺
+        /// </summary>
+        public int?  Quantity { get; set; }
+
+        /// <summary>
+        /// 鍙枡鏁伴噺-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum Quantity_FilterMode { get; set; }= SearchFilterModeEnum.绮惧噯鏌ヨ;
+
+        /// <summary>
+        /// WMS杩斿洖缁撴灉
+        /// </summary>
+        public string WmsRetResult { get; set; }
+
+        /// <summary>
+        /// WMS杩斿洖缁撴灉-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum WmsRetResult_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+        /// <summary>
+        /// WMS浠诲姟鍙�
+        /// </summary>
+        public string WmsTaskNo { get; set; }
+
+        /// <summary>
+        /// WMS浠诲姟鍙�-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum WmsTaskNo_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+        /// <summary>
+        /// 鍒涘缓鏃堕棿
+        /// </summary>
+        //琛ㄧず鏄� 楂樼骇鏌ヨ鑼冨洿鏌ヨ鐗规��
+        [HighSearchRangeAttribute]
+        public List<string> CreationTime { get; set; }
+
+
+        /// <summary>
+        /// 鍒涘缓浜篒D
+        /// </summary>
+        public string CreatorId { get; set; }
+
+        /// <summary>
+        /// 鍒涘缓浜篒D-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum CreatorId_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+        /// <summary>
+        /// 淇敼鏃堕棿
+        /// </summary>
+        //琛ㄧず鏄� 楂樼骇鏌ヨ鑼冨洿鏌ヨ鐗规��
+        [HighSearchRangeAttribute]
+        public List<string> LastModificationTime { get; set; }
+
+
+        /// <summary>
+        /// 淇敼浜篒D
+        /// </summary>
+        public string LastModifierId { get; set; }
+
+        /// <summary>
+        /// 淇敼浜篒D-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum LastModifierId_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+        /// <summary>
+        /// 鏄惁鍒犻櫎
+        /// </summary>
+        public bool?  IsDeleted { get; set; }
+
+        /// <summary>
+        /// 鏄惁鍒犻櫎-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum IsDeleted_FilterMode { get; set; }= SearchFilterModeEnum.绮惧噯鏌ヨ;
+
+        /// <summary>
+        /// 鍒犻櫎浜篒D
+        /// </summary>
+        public string DeleterId { get; set; }
+
+        /// <summary>
+        /// 鍒犻櫎浜篒D-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum DeleterId_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+        /// <summary>
+        /// 鍒犻櫎鏃堕棿
+        /// </summary>
+        //琛ㄧず鏄� 楂樼骇鏌ヨ鑼冨洿鏌ヨ鐗规��
+        [HighSearchRangeAttribute]
+        public List<string> DeletionTime { get; set; }
+
+
+        /// <summary>
+        /// 鍒涘缓浜�
+        /// </summary>
+        public string CreatorName { get; set; }
+
+        /// <summary>
+        /// 鍒涘缓浜�-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum CreatorName_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+        /// <summary>
+        /// 淇敼浜�
+        /// </summary>
+        public string LastModifierName { get; set; }
+
+        /// <summary>
+        /// 淇敼浜�-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum LastModifierName_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+        /// <summary>
+        /// 鎿嶄綔澶囨敞
+        /// </summary>
+        public string OperationRemark { get; set; }
+
+        /// <summary>
+        /// 鎿嶄綔澶囨敞-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum OperationRemark_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+        /// <summary>
+        /// 鍒犻櫎澶囨敞
+        /// </summary>
+        public string DeleteRemark { get; set; }
+
+        /// <summary>
+        /// 鍒犻櫎澶囨敞-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum DeleteRemark_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+        /// <summary>
+        /// 鎺掑簭
+        /// </summary>
+        public int?  Sort { get; set; }
+
+        /// <summary>
+        /// 鎺掑簭-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum Sort_FilterMode { get; set; }= SearchFilterModeEnum.绮惧噯鏌ヨ;
+
+        /// <summary>
+        /// 澶囨敞
+        /// </summary>
+        public string Remark { get; set; }
+
+        /// <summary>
+        /// 澶囨敞-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum Remark_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+        /// <summary>
+        /// 鏄惁绂佺敤
+        /// </summary>
+        public bool?  IsDisabled { get; set; }
+
+        /// <summary>
+        /// 鏄惁绂佺敤-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum IsDisabled_FilterMode { get; set; }= SearchFilterModeEnum.绮惧噯鏌ヨ;
+
+        /// <summary>
+        /// 鎵╁睍瀛楁1
+        /// </summary>
+        public string ExtraField1 { get; set; }
+
+        /// <summary>
+        /// 鎵╁睍瀛楁1-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum ExtraField1_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+        /// <summary>
+        /// 鎵╁睍瀛楁2
+        /// </summary>
+        public string ExtraField2 { get; set; }
+
+        /// <summary>
+        /// 鎵╁睍瀛楁2-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum ExtraField2_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+        /// <summary>
+        /// 鎵╁睍瀛楁3
+        /// </summary>
+        public string ExtraField3 { get; set; }
+
+        /// <summary>
+        /// 鎵╁睍瀛楁3-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum ExtraField3_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+ 
+} 
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/CallMaterialOrderRecordCreateDto.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/CallMaterialOrderRecordCreateDto.cs
new file mode 100644
index 0000000..56600dc
--- /dev/null
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/CallMaterialOrderRecordCreateDto.cs
@@ -0,0 +1,17 @@
+namespace CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.CallMaterialOrderRecord; 
+ 
+/// <summary> 
+/// 鍙枡璁板綍琛ㄥ垱寤哄弬鏁板璞� 
+/// </summary> 
+public class CallMaterialOrderRecordCreateDto : CallMaterialOrderRecordCreateOrUpdateDtoBase 
+{ 
+    /// <summary> 
+    /// 鎺掑簭 
+    /// </summary> 
+    public virtual int? Sort { get; set; } 
+ 
+    /// <summary> 
+    /// 鏄惁绂佺敤 
+    /// </summary> 
+    public bool? IsDisabled { get; set; } = false; 
+} 
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
new file mode 100644
index 0000000..387dc5e
--- /dev/null
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/CallMaterialOrderRecordCreateOrUpdateDtoBase.cs
@@ -0,0 +1,90 @@
+using CMS.Plugin.PipeLineLems.Domain.Shared.Enums; 
+using System; 
+using Volo.Abp.Application.Dtos; 
+ 
+namespace CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.CallMaterialOrderRecord; 
+ 
+/// <summary> 
+/// 鍙枡璁板綍琛ㄥ垱寤烘垨鏇存柊鍩虹被 
+/// </summary> 
+public abstract class CallMaterialOrderRecordCreateOrUpdateDtoBase : ExtensibleEntityDto 
+{ 
+            /// <summary>
+        /// 鍘熸枡鏍囪瘑
+        /// </summary>
+        public string DataIdentifier { get; set; }
+
+        /// <summary>
+        /// 鍘熸枡鍨嬪彿
+        /// </summary>
+        public string? MaterialMode { get; set; }
+
+        /// <summary>
+        /// 鍙枡鐘舵��
+        /// </summary>
+        public CallMaterialStatusEnum CallMaterialStatus { get; set; }
+
+        /// <summary>
+        /// 鍙枡鏁伴噺
+        /// </summary>
+        public int Quantity { get; set; }
+
+        /// <summary>
+        /// WMS杩斿洖缁撴灉
+        /// </summary>
+        public string? WmsRetResult { get; set; }
+
+        /// <summary>
+        /// WMS浠诲姟鍙�
+        /// </summary>
+        public string? WmsTaskNo { get; set; }
+
+        /// <summary>
+        /// 鍒涘缓浜篒D
+        /// </summary>
+        public string? CreatorId { get; set; }
+
+        /// <summary>
+        /// 淇敼浜篒D
+        /// </summary>
+        public string? LastModifierId { get; set; }
+
+        /// <summary>
+        /// 鍒犻櫎鏃堕棿
+        /// </summary>
+        public DateTime? DeletionTime { get; set; }
+
+        /// <summary>
+        /// 鎺掑簭
+        /// </summary>
+        public int Sort { get; set; }
+
+        /// <summary>
+        /// 澶囨敞
+        /// </summary>
+        public string? Remark { get; set; }
+
+        /// <summary>
+        /// 鎵╁睍瀛楁1
+        /// </summary>
+        public string? ExtraField1 { get; set; }
+
+        /// <summary>
+        /// 鎵╁睍瀛楁2
+        /// </summary>
+        public string? ExtraField2 { get; set; }
+
+        /// <summary>
+        /// 鎵╁睍瀛楁3
+        /// </summary>
+        public string? ExtraField3 { get; set; }
+
+ 
+ 
+    /// <summary> 
+    /// Initializes a new instance of the <see cref="CallMaterialOrderRecordCreateOrUpdateDtoBase"/> class. 
+    /// </summary> 
+    public CallMaterialOrderRecordCreateOrUpdateDtoBase() : base(false) 
+    { 
+    } 
+} 
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
new file mode 100644
index 0000000..964f500
--- /dev/null
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/CallMaterialOrderRecordDto.cs
@@ -0,0 +1,146 @@
+using CMS.Plugin.PipeLineLems.Domain.Shared.Enums; 
+using CmsQueryExtensions; 
+using Volo.Abp.Application.Dtos; 
+using Volo.Abp.Data; 
+using Volo.Abp.Domain.Entities; 
+ 
+ 
+namespace CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.CallMaterialOrderRecord; 
+ 
+/// <summary> 
+/// 鍙枡璁板綍琛ㄦ暟鎹弬鏁板璞� 
+/// </summary> 
+public  class CallMaterialOrderRecordDto:  ExtensibleEntityDto<Guid>, IHasConcurrencyStamp 
+{ 
+            /// <summary>
+        /// 鍘熸枡鏍囪瘑
+        /// </summary>
+        public string DataIdentifier { get; set; }
+
+        /// <summary>
+        /// 鍘熸枡鍨嬪彿
+        /// </summary>
+        public string? MaterialMode { get; set; }
+
+        /// <summary>
+        /// 鍙枡鐘舵��
+        /// </summary>
+        public CallMaterialStatusEnum CallMaterialStatus { get; set; }
+
+        /// <summary>
+        /// 鍙枡鐘舵��
+        /// </summary>
+        public string CallMaterialStatusDesc
+        { 
+            get 
+            { 
+                return GetEnumDescriptionUtil.GetEnumDescription(CallMaterialStatus); 
+            } 
+        } 
+        /// <summary>
+        /// 鍙枡鏁伴噺
+        /// </summary>
+        public int Quantity { get; set; }
+
+        /// <summary>
+        /// WMS杩斿洖缁撴灉
+        /// </summary>
+        public string? WmsRetResult { get; set; }
+
+        /// <summary>
+        /// WMS浠诲姟鍙�
+        /// </summary>
+        public string? WmsTaskNo { get; set; }
+
+        /// <summary>
+        /// 鎵╁睍灞炴��
+        /// </summary>
+        public ExtraPropertyDictionary? ExtraProperties { get; set; }
+
+        /// <summary>
+        /// 骞跺彂鎴�
+        /// </summary>
+        public string? ConcurrencyStamp { get; set; }
+
+        /// <summary>
+        /// 鍒涘缓鏃堕棿
+        /// </summary>
+        public DateTime CreationTime { get; set; }
+
+        /// <summary>
+        /// 鍒涘缓浜篒D
+        /// </summary>
+        public string? CreatorId { get; set; }
+
+        /// <summary>
+        /// 淇敼鏃堕棿
+        /// </summary>
+        public DateTime? LastModificationTime { get; set; }
+
+        /// <summary>
+        /// 淇敼浜篒D
+        /// </summary>
+        public string? LastModifierId { get; set; }
+
+        /// <summary>
+        /// 鏄惁鍒犻櫎
+        /// </summary>
+        public bool IsDeleted { get; set; }
+
+        /// <summary>
+        /// 鍒犻櫎浜篒D
+        /// </summary>
+        public string? DeleterId { get; set; }
+
+        /// <summary>
+        /// 鍒犻櫎鏃堕棿
+        /// </summary>
+        public DateTime? DeletionTime { get; set; }
+
+        /// <summary>
+        /// 鍒涘缓浜�
+        /// </summary>
+        public string? CreatorName { get; set; }
+
+        /// <summary>
+        /// 鎺掑簭
+        /// </summary>
+        public int Sort { get; set; }
+
+        /// <summary>
+        /// 澶囨敞
+        /// </summary>
+        public string? Remark { get; set; }
+
+        /// <summary>
+        /// 鎵╁睍瀛楁1
+        /// </summary>
+        public string? ExtraField1 { get; set; }
+
+        /// <summary>
+        /// 鎵╁睍瀛楁2
+        /// </summary>
+        public string? ExtraField2 { get; set; }
+
+        /// <summary>
+        /// 鎵╁睍瀛楁3
+        /// </summary>
+        public string? ExtraField3 { get; set; }
+
+ 
+ 
+    /// <summary> 
+    /// Gets the export data. 
+    /// </summary> 
+    /// <returns></returns> 
+    public Dictionary<string, object> GetExportData() 
+    { 
+        var exportData = new Dictionary<string, object>(); 
+        foreach (var property in this.GetType().GetProperties()) 
+        { 
+            exportData.Add(property.Name, property.GetValue(this)); 
+        } 
+ 
+        return exportData; 
+    } 
+} 
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/CallMaterialOrderRecordExportModel.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/CallMaterialOrderRecordExportModel.cs
new file mode 100644
index 0000000..9fa756c
--- /dev/null
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/CallMaterialOrderRecordExportModel.cs
@@ -0,0 +1,85 @@
+using MiniExcelLibs.Attributes; 
+using System.ComponentModel.DataAnnotations; 
+using System; 
+using System.ComponentModel; 
+using CMS.Plugin.PipeLineLems.Domain.Shared.Enums; 
+namespace CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.CallMaterialOrderRecord; 
+ 
+/// <summary> 
+/// 鍙枡璁板綍琛ㄥ鍑烘ā鍨� 
+/// </summary> 
+public  class CallMaterialOrderRecordExportModel 
+{ 
+            /// <summary>
+        /// 鍘熸枡鏍囪瘑
+        /// </summary>
+        [ExcelColumn(Name = "鍘熸枡鏍囪瘑", Width = 25)]
+        public string DataIdentifier { get; set; }
+
+        /// <summary>
+        /// 鍘熸枡鍨嬪彿
+        /// </summary>
+        [ExcelColumn(Name = "鍘熸枡鍨嬪彿", Width = 25)]
+        public string MaterialMode { get; set; }
+
+        /// <summary>
+        /// 鍙枡鐘舵��
+        /// </summary>
+        [ExcelColumn(Name = "鍙枡鐘舵��", Width = 25)]
+        public CallMaterialStatusEnum CallMaterialStatus { get; set; }
+
+        /// <summary>
+        /// 鍙枡鏁伴噺
+        /// </summary>
+        [ExcelColumn(Name = "鍙枡鏁伴噺", Width = 25)]
+        public int Quantity { get; set; }
+
+        /// <summary>
+        /// WMS杩斿洖缁撴灉
+        /// </summary>
+        [ExcelColumn(Name = "WMS杩斿洖缁撴灉", Width = 25)]
+        public string WmsRetResult { get; set; }
+
+        /// <summary>
+        /// WMS浠诲姟鍙�
+        /// </summary>
+        [ExcelColumn(Name = "WMS浠诲姟鍙�", Width = 25)]
+        public string WmsTaskNo { get; set; }
+
+        /// <summary>
+        /// 鍒涘缓鏃堕棿
+        /// </summary>
+        [ExcelColumn(Name = "鍒涘缓鏃堕棿", Width = 25)]
+        public DateTime CreationTime { get; set; }
+
+        /// <summary>
+        /// 淇敼鏃堕棿
+        /// </summary>
+        [ExcelColumn(Name = "淇敼鏃堕棿", Width = 25)]
+        public DateTime LastModificationTime { get; set; }
+
+        /// <summary>
+        /// 鍒涘缓浜�
+        /// </summary>
+        [ExcelColumn(Name = "鍒涘缓浜�", Width = 25)]
+        public string CreatorName { get; set; }
+
+        /// <summary>
+        /// 澶囨敞
+        /// </summary>
+        [ExcelColumn(Name = "澶囨敞", Width = 25)]
+        public string Remark { get; set; }
+
+ 
+ 
+    public Dictionary<string, object> GetExportData() 
+        { 
+            var exportData = new Dictionary<string, object>(); 
+            foreach (var property in this.GetType().GetProperties()) 
+            { 
+                exportData.Add(property.Name, property.GetValue(this)); 
+            } 
+ 
+            return exportData; 
+        } 
+} 
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/CallMaterialOrderRecordUpdateDto.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/CallMaterialOrderRecordUpdateDto.cs
new file mode 100644
index 0000000..625da3a
--- /dev/null
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/CallMaterialOrderRecordUpdateDto.cs
@@ -0,0 +1,13 @@
+using Volo.Abp.Domain.Entities; 
+namespace CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.CallMaterialOrderRecord; 
+ 
+/// <summary> 
+/// 鍙枡璁板綍琛ㄦ洿鏂板弬鏁板璞� 
+/// </summary> 
+public class CallMaterialOrderRecordUpdateDto : CallMaterialOrderRecordCreateOrUpdateDtoBase, IHasConcurrencyStamp 
+{ 
+   /// <summary> 
+    /// 骞跺彂鎴� 
+    /// </summary> 
+    public string ConcurrencyStamp { get; set; } 
+} 
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/CallMaterialOrderRecordsImportModel.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/CallMaterialOrderRecordsImportModel.cs
new file mode 100644
index 0000000..ecbeaed
--- /dev/null
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/CallMaterialOrderRecordsImportModel.cs
@@ -0,0 +1,33 @@
+ 
+namespace CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.CallMaterialOrderRecord 
+{ 
+    /// <summary> 
+    /// 鍙枡璁板綍琛ㄥ鍏ユā鍨� 
+    /// </summary> 
+    public class CallMaterialOrderRecordsImportModel 
+    { 
+        private List<CallMaterialOrderRecordImportModel> _CallMaterialOrderRecords = new(); 
+ 
+        public List<CallMaterialOrderRecordImportModel> CallMaterialOrderRecords 
+        { 
+            get => _CallMaterialOrderRecords; 
+            set 
+            { 
+                _CallMaterialOrderRecords = value; 
+                var rowIndex = 2; 
+                _CallMaterialOrderRecords?.ForEach(x => x.RowIndex = rowIndex++); 
+            } 
+        } 
+ 
+        /// <summary> 
+        /// 鍙枡璁板綍琛ㄥ鍏ユā鍨� 
+        /// </summary> 
+        public class CallMaterialOrderRecordImportModel : CallMaterialOrderRecordExportModel 
+        { 
+            /// <summary> 
+            /// 琛屽彿 
+            /// </summary> 
+            public int RowIndex { 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
new file mode 100644
index 0000000..4fceba9
--- /dev/null
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/GetCallMaterialOrderRecordInput.cs
@@ -0,0 +1,232 @@
+using CMS.Plugin.PipeLineLems.Domain.Shared.Enums; 
+using CmsQueryExtensions.Extension; 
+using Volo.Abp.Application.Dtos; 
+ 
+namespace CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.CallMaterialOrderRecord; 
+ 
+/// <summary> 
+/// 鍙枡璁板綍琛ㄦ煡璇㈠弬鏁� 
+/// </summary> 
+public class GetCallMaterialOrderRecordInput : ExtensiblePagedAndSortedResultRequestDto 
+{ 
+ 
+    #region 鍏抽敭瀛楁煡璇� 
+ 
+    /// <summary> 
+    /// 鍏抽敭瀛楁ā绯婃煡璇紙娉ㄦ剰鏄皬鍐欙紒锛� 
+    /// </summary> 
+    public string searchVal { get; set; } 
+ 
+    /// <summary> 
+    /// 閫氱敤鏌ヨ閰嶇疆 (1:妯$硦鏌ヨ , 2:绮惧噯鏌ヨ)锛堟敞鎰忔槸灏忓啓锛侊級 
+    /// </summary> 
+    public SearchFilterModeEnum searchVal_FilterMode { get; set; } = SearchFilterModeEnum.妯$硦鏌ヨ; 
+ 
+    /// <summary> 
+    /// 瀛愭悳绱㈢粍浠朵紶閫掔殑閫氱敤鏌ヨ閰嶇疆鐨勫睘鎬у悕锛堟敞鎰忔槸灏忓啓锛侊級 
+    /// </summary> 
+    [NoAutoQuery] 
+    public string str_searchFormInputAttrs { get; set; } 
+    /// <summary> 
+    /// 瀛愭悳绱㈢粍浠朵紶閫掔殑閫氱敤鏌ヨ閰嶇疆鐨勫睘鎬у悕锛堟敞鎰忔槸灏忓啓锛侊級 
+    /// </summary> 
+    public List<string> searchFormInputAttrs 
+    { 
+        get 
+        { 
+            if (!string.IsNullOrEmpty(str_searchFormInputAttrs)) 
+            { 
+                return str_searchFormInputAttrs.Split(',').ToList(); 
+            } 
+            return new List<string>(); 
+        } 
+    } 
+ 
+    #endregion 
+ 
+            /// <summary>
+        /// 鍘熸枡鏍囪瘑
+        /// </summary>
+        public string DataIdentifier { get; set; }
+
+        /// <summary>
+        /// 鍘熸枡鏍囪瘑-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum DataIdentifier_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+        /// <summary>
+        /// 鍘熸枡鍨嬪彿
+        /// </summary>
+        public string MaterialMode { get; set; }
+
+        /// <summary>
+        /// 鍘熸枡鍨嬪彿-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum MaterialMode_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+        /// <summary>
+        /// 鍙枡鐘舵��
+        /// </summary>
+        public CallMaterialStatusEnum?  CallMaterialStatus { get; set; }
+
+        /// <summary>
+        /// 鍙枡鐘舵��-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum CallMaterialStatus_FilterMode { get; set; }= SearchFilterModeEnum.绮惧噯鏌ヨ;
+
+        /// <summary>
+        /// 鍙枡鏁伴噺
+        /// </summary>
+        public int?  Quantity { get; set; }
+
+        /// <summary>
+        /// 鍙枡鏁伴噺-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum Quantity_FilterMode { get; set; }= SearchFilterModeEnum.绮惧噯鏌ヨ;
+
+        /// <summary>
+        /// WMS杩斿洖缁撴灉
+        /// </summary>
+        public string WmsRetResult { get; set; }
+
+        /// <summary>
+        /// WMS杩斿洖缁撴灉-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum WmsRetResult_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+        /// <summary>
+        /// WMS浠诲姟鍙�
+        /// </summary>
+        public string WmsTaskNo { get; set; }
+
+        /// <summary>
+        /// WMS浠诲姟鍙�-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum WmsTaskNo_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+        /// <summary>
+        /// 鍒涘缓鏃堕棿
+        /// </summary>
+        //琛ㄧず鏄� 楂樼骇鏌ヨ鑼冨洿鏌ヨ鐗规��
+        [HighSearchRangeAttribute]
+        public List<string> CreationTime { get; set; }
+
+
+        /// <summary>
+        /// 鍒涘缓浜篒D
+        /// </summary>
+        public string CreatorId { get; set; }
+
+        /// <summary>
+        /// 鍒涘缓浜篒D-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum CreatorId_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+        /// <summary>
+        /// 淇敼鏃堕棿
+        /// </summary>
+        //琛ㄧず鏄� 楂樼骇鏌ヨ鑼冨洿鏌ヨ鐗规��
+        [HighSearchRangeAttribute]
+        public List<string> LastModificationTime { get; set; }
+
+
+        /// <summary>
+        /// 淇敼浜篒D
+        /// </summary>
+        public string LastModifierId { get; set; }
+
+        /// <summary>
+        /// 淇敼浜篒D-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum LastModifierId_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+        /// <summary>
+        /// 鏄惁鍒犻櫎
+        /// </summary>
+        public bool?  IsDeleted { get; set; }
+
+        /// <summary>
+        /// 鏄惁鍒犻櫎-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum IsDeleted_FilterMode { get; set; }= SearchFilterModeEnum.绮惧噯鏌ヨ;
+
+        /// <summary>
+        /// 鍒犻櫎浜篒D
+        /// </summary>
+        public string DeleterId { get; set; }
+
+        /// <summary>
+        /// 鍒犻櫎浜篒D-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum DeleterId_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+        /// <summary>
+        /// 鍒犻櫎鏃堕棿
+        /// </summary>
+        //琛ㄧず鏄� 楂樼骇鏌ヨ鑼冨洿鏌ヨ鐗规��
+        [HighSearchRangeAttribute]
+        public List<string> DeletionTime { get; set; }
+
+
+        /// <summary>
+        /// 鍒涘缓浜�
+        /// </summary>
+        public string CreatorName { get; set; }
+
+        /// <summary>
+        /// 鍒涘缓浜�-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum CreatorName_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+        /// <summary>
+        /// 鎺掑簭
+        /// </summary>
+        public int?  Sort { get; set; }
+
+        /// <summary>
+        /// 鎺掑簭-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum Sort_FilterMode { get; set; }= SearchFilterModeEnum.绮惧噯鏌ヨ;
+
+        /// <summary>
+        /// 澶囨敞
+        /// </summary>
+        public string Remark { get; set; }
+
+        /// <summary>
+        /// 澶囨敞-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum Remark_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+        /// <summary>
+        /// 鎵╁睍瀛楁1
+        /// </summary>
+        public string ExtraField1 { get; set; }
+
+        /// <summary>
+        /// 鎵╁睍瀛楁1-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum ExtraField1_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+        /// <summary>
+        /// 鎵╁睍瀛楁2
+        /// </summary>
+        public string ExtraField2 { get; set; }
+
+        /// <summary>
+        /// 鎵╁睍瀛楁2-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum ExtraField2_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+        /// <summary>
+        /// 鎵╁睍瀛楁3
+        /// </summary>
+        public string ExtraField3 { get; set; }
+
+        /// <summary>
+        /// 鎵╁睍瀛楁3-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum ExtraField3_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+ 
+} 
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkPlan/GetWorkPlanInput.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkPlan/GetWorkPlanInput.cs
index e97ec45..a39d6de 100644
--- a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkPlan/GetWorkPlanInput.cs
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkPlan/GetWorkPlanInput.cs
@@ -1,3 +1,4 @@
+using CMS.Plugin.PipeLineLems.Domain.Shared.Enums; 
 using CmsQueryExtensions.Extension; 
 using Volo.Abp.Application.Dtos; 
  
@@ -52,6 +53,26 @@
         /// 浠诲姟缂栫爜-鏌ヨ鍏崇郴杩愮畻绗� 
         /// </summary>
         public SearchFilterModeEnum TaskCode_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
+
+        /// <summary>
+        /// 璁″垝鐘舵��
+        /// </summary>
+        public WorkPlanStatusEnum?  WorkPlanStatus { get; set; }
+
+        /// <summary>
+        /// 璁″垝鐘舵��-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum WorkPlanStatus_FilterMode { get; set; }= SearchFilterModeEnum.绮惧噯鏌ヨ;
+
+        /// <summary>
+        /// 鍙枡鐘舵��
+        /// </summary>
+        public CallMaterialStatusEnum?  CallMaterialStatus { get; set; }
+
+        /// <summary>
+        /// 鍙枡鐘舵��-鏌ヨ鍏崇郴杩愮畻绗� 
+        /// </summary>
+        public SearchFilterModeEnum CallMaterialStatus_FilterMode { get; set; }= SearchFilterModeEnum.绮惧噯鏌ヨ;
 
         /// <summary>
         /// 鍘熸枡鏍囪瘑
@@ -312,16 +333,6 @@
         /// 鏉愯川-鏌ヨ鍏崇郴杩愮畻绗� 
         /// </summary>
         public SearchFilterModeEnum Material_FilterMode { get; set; }= SearchFilterModeEnum.妯$硦鏌ヨ;
-
-        /// <summary>
-        /// 鏄惁涓绘敮绠�
-        /// </summary>
-        public bool?  HasMainSignature { get; set; }
-
-        /// <summary>
-        /// 鏄惁涓绘敮绠�-鏌ヨ鍏崇郴杩愮畻绗� 
-        /// </summary>
-        public SearchFilterModeEnum HasMainSignature_FilterMode { get; set; }= SearchFilterModeEnum.绮惧噯鏌ヨ;
 
         /// <summary>
         /// 宸ヨ壓娴佸悜缂栧彿
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkPlan/WorkPlanCreateOrUpdateDtoBase.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkPlan/WorkPlanCreateOrUpdateDtoBase.cs
index a120975..c2c1949 100644
--- a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkPlan/WorkPlanCreateOrUpdateDtoBase.cs
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkPlan/WorkPlanCreateOrUpdateDtoBase.cs
@@ -15,6 +15,16 @@
         public string TaskCode { get; set; }
 
         /// <summary>
+        /// 璁″垝鐘舵��
+        /// </summary>
+        public WorkPlanStatusEnum WorkPlanStatus { get; set; }
+
+        /// <summary>
+        /// 鍙枡鐘舵��
+        /// </summary>
+        public CallMaterialStatusEnum CallMaterialStatus { get; set; }
+
+        /// <summary>
         /// 鍘熸枡鏍囪瘑
         /// </summary>
         public string? DataIdentifier { get; set; }
@@ -143,11 +153,6 @@
         /// 鏉愯川
         /// </summary>
         public string? Material { get; set; }
-
-        /// <summary>
-        /// 鏄惁涓绘敮绠�
-        /// </summary>
-        public bool HasMainSignature { get; set; }
 
         /// <summary>
         /// 宸ヨ壓娴佸悜缂栧彿
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkPlan/WorkPlanDto.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkPlan/WorkPlanDto.cs
index ad1517d..fc9db94 100644
--- a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkPlan/WorkPlanDto.cs
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkPlan/WorkPlanDto.cs
@@ -18,6 +18,36 @@
         public string TaskCode { get; set; }
 
         /// <summary>
+        /// 璁″垝鐘舵��
+        /// </summary>
+        public WorkPlanStatusEnum WorkPlanStatus { get; set; }
+
+        /// <summary>
+        /// 璁″垝鐘舵��
+        /// </summary>
+        public string WorkPlanStatusDesc
+        { 
+            get 
+            { 
+                return GetEnumDescriptionUtil.GetEnumDescription(WorkPlanStatus); 
+            } 
+        } 
+        /// <summary>
+        /// 鍙枡鐘舵��
+        /// </summary>
+        public CallMaterialStatusEnum CallMaterialStatus { get; set; }
+
+        /// <summary>
+        /// 鍙枡鐘舵��
+        /// </summary>
+        public string CallMaterialStatusDesc
+        { 
+            get 
+            { 
+                return GetEnumDescriptionUtil.GetEnumDescription(CallMaterialStatus); 
+            } 
+        } 
+        /// <summary>
         /// 鍘熸枡鏍囪瘑
         /// </summary>
         public string? DataIdentifier { get; set; }
@@ -146,11 +176,6 @@
         /// 鏉愯川
         /// </summary>
         public string? Material { get; set; }
-
-        /// <summary>
-        /// 鏄惁涓绘敮绠�
-        /// </summary>
-        public bool HasMainSignature { get; set; }
 
         /// <summary>
         /// 宸ヨ壓娴佸悜缂栧彿
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkPlan/WorkPlanExportModel.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkPlan/WorkPlanExportModel.cs
index 56e8498..f013a63 100644
--- a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkPlan/WorkPlanExportModel.cs
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkPlan/WorkPlanExportModel.cs
@@ -17,6 +17,18 @@
         public string TaskCode { get; set; }
 
         /// <summary>
+        /// 璁″垝鐘舵��
+        /// </summary>
+        [ExcelColumn(Name = "璁″垝鐘舵��", Width = 25)]
+        public WorkPlanStatusEnum WorkPlanStatus { get; set; }
+
+        /// <summary>
+        /// 鍙枡鐘舵��
+        /// </summary>
+        [ExcelColumn(Name = "鍙枡鐘舵��", Width = 25)]
+        public CallMaterialStatusEnum CallMaterialStatus { get; set; }
+
+        /// <summary>
         /// 鍘熸枡鏍囪瘑
         /// </summary>
         [ExcelColumn(Name = "鍘熸枡鏍囪瘑", Width = 25)]
@@ -171,12 +183,6 @@
         /// </summary>
         [ExcelColumn(Name = "鏉愯川", Width = 25)]
         public string Material { get; set; }
-
-        /// <summary>
-        /// 鏄惁涓绘敮绠�
-        /// </summary>
-        [ExcelColumn(Name = "鏄惁涓绘敮绠�", Width = 25)]
-        public bool HasMainSignature { get; set; }
 
         /// <summary>
         /// 宸ヨ壓娴佸悜缂栧彿
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkPlan/WorkPlanInput.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkPlan/WorkPlanInput.cs
index 5428083..347abd5 100644
--- a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkPlan/WorkPlanInput.cs
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkPlan/WorkPlanInput.cs
@@ -68,7 +68,12 @@
         public string DataIdentifier { get; set; }
 
         /// <summary>
-        /// 绠¤鏍肩爜
+        /// 鍘熸枡鍨嬪彿
+        /// </summary>
+        public string MaterialMode { get; set; }
+
+        /// <summary>
+        /// 绠℃缂栫爜
         /// </summary>
         public string PipeSpecCode { get; set; }
 
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
new file mode 100644
index 0000000..9f1e30e
--- /dev/null
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Services/ICallMaterialOrderAppService.cs
@@ -0,0 +1,46 @@
+using CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.CallMaterialOrder; 
+using Volo.Abp.Application.Services; 
+ 
+namespace CMS.Plugin.PipeLineLems.Application.Contracts.Services; 
+ 
+/// <summary> 
+/// 鍙枡鍗曡〃搴旂敤鏈嶅姟鎺ュ彛 
+/// </summary> 
+public interface ICallMaterialOrderAppService : ICrudAppService<CallMaterialOrderDto, Guid, GetCallMaterialOrderInput, CallMaterialOrderCreateDto, CallMaterialOrderUpdateDto> 
+{ 
+    /// <summary> 
+    /// 鍏嬮殕鍙枡鍗曡〃 
+    /// </summary> 
+    /// <param name="ids"></param> 
+    /// <returns></returns> 
+    Task<List<CallMaterialOrderDto>> CloneAsync(IEnumerable<Guid> ids); 
+ 
+    /// <summary> 
+    /// 鍒犻櫎鍙枡鍗曡〃 
+    /// </summary> 
+    /// <param name="ids"></param> 
+    /// <returns></returns> 
+    Task DeleteManyAsync(IEnumerable<Guid> ids); 
+ 
+    /// <summary> 
+    /// 璋冩暣鎺掑簭鍙枡鍗曡〃 
+    /// </summary> 
+    /// <param name="id"></param> 
+    /// <param name="sort"></param> 
+    /// <returns></returns> 
+    Task AdjustSortAsync(Guid id, int sort); 
+ 
+    /// <summary> 
+    /// 瀵煎叆鍙枡鍗曡〃 
+    /// </summary> 
+    /// <param name="input"></param> 
+    /// <returns></returns> 
+    Task ImportAsync(CallMaterialOrdersImportModel input); 
+ 
+    /// <summary> 
+    /// 瀵煎嚭鍙枡鍗曡〃 
+    /// </summary> 
+    /// <param name="input"></param> 
+    /// <returns></returns> 
+    Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetCallMaterialOrderInput input); 
+} 
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
new file mode 100644
index 0000000..0dc6429
--- /dev/null
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Services/ICallMaterialOrderRecordAppService.cs
@@ -0,0 +1,46 @@
+using CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.CallMaterialOrderRecord; 
+using Volo.Abp.Application.Services; 
+ 
+namespace CMS.Plugin.PipeLineLems.Application.Contracts.Services; 
+ 
+/// <summary> 
+/// 鍙枡璁板綍琛ㄥ簲鐢ㄦ湇鍔℃帴鍙� 
+/// </summary> 
+public interface ICallMaterialOrderRecordAppService : ICrudAppService<CallMaterialOrderRecordDto, Guid, GetCallMaterialOrderRecordInput, CallMaterialOrderRecordCreateDto, CallMaterialOrderRecordUpdateDto> 
+{ 
+    /// <summary> 
+    /// 鍏嬮殕鍙枡璁板綍琛� 
+    /// </summary> 
+    /// <param name="ids"></param> 
+    /// <returns></returns> 
+    Task<List<CallMaterialOrderRecordDto>> CloneAsync(IEnumerable<Guid> ids); 
+ 
+    /// <summary> 
+    /// 鍒犻櫎鍙枡璁板綍琛� 
+    /// </summary> 
+    /// <param name="ids"></param> 
+    /// <returns></returns> 
+    Task DeleteManyAsync(IEnumerable<Guid> ids); 
+ 
+    /// <summary> 
+    /// 璋冩暣鎺掑簭鍙枡璁板綍琛� 
+    /// </summary> 
+    /// <param name="id"></param> 
+    /// <param name="sort"></param> 
+    /// <returns></returns> 
+    Task AdjustSortAsync(Guid id, int sort); 
+ 
+    /// <summary> 
+    /// 瀵煎叆鍙枡璁板綍琛� 
+    /// </summary> 
+    /// <param name="input"></param> 
+    /// <returns></returns> 
+    Task ImportAsync(CallMaterialOrderRecordsImportModel input); 
+ 
+    /// <summary> 
+    /// 瀵煎嚭鍙枡璁板綍琛� 
+    /// </summary> 
+    /// <param name="input"></param> 
+    /// <returns></returns> 
+    Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetCallMaterialOrderRecordInput input); 
+} 
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Services/IWorkPlanAppService.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Services/IWorkPlanAppService.cs
index 1a55cb9..ce9762c 100644
--- a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Services/IWorkPlanAppService.cs
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Services/IWorkPlanAppService.cs
@@ -42,7 +42,5 @@
     /// </summary> 
     /// <param name="input"></param> 
     /// <returns></returns> 
-    Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetWorkPlanInput input);
-
-    Task<MesOrderResponse> CreatebyApsAsync(List<WorkPlanInput> input);
+    Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetWorkPlanInput input); 
 } 
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/CallMaterialOrderAppService.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/CallMaterialOrderAppService.cs
new file mode 100644
index 0000000..6be99b8
--- /dev/null
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/CallMaterialOrderAppService.cs
@@ -0,0 +1,416 @@
+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; 
+ 
+/// <summary> 
+/// 鍙枡鍗曡〃搴旂敤鏈嶅姟 
+/// </summary> 
+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) 
+    { 
+        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)); 
+    } 
+ 
+    /// <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); 
+        } 
+ 
+        #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)); 
+    } 
+ 
+    /// <summary>  
+    /// 鍔ㄦ�佹瀯閫犳煡璇㈡潯浠�  
+    /// </summary>  
+    /// <param name="input">杈撳叆鍙傛暟</param>  
+    /// <returns></returns>  
+    private FunReturnResultModel<Expression<Func<CallMaterialOrder, bool>>> DynamicGetQueryParams(GetCallMaterialOrderInput input) 
+    { 
+        //鍔ㄦ�佹瀯閫犳煡璇㈡潯浠�  
+        var whereConditions = WhereConditionsExtensions.GetWhereConditions<CallMaterialOrder, GetCallMaterialOrderInput>(input); 
+        if (!whereConditions.IsSuccess) 
+        { 
+            throw new Exception("鍔ㄦ�佹瀯閫犳煡璇㈡潯浠跺け璐�:" + whereConditions.ErrMsg); 
+        } 
+ 
+        //涔熷彲鍐嶆鑷畾涔夋瀯寤烘煡璇㈡潯浠�  
+        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; 
+    } 
+ 
+    /// <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); 
+ 
+        //if (input.Sort.HasValue && insertObj.Sort != maxSort) 
+        //{ 
+        //    await AdjustSortAsync(insertObj.Id, insertObj.Sort); 
+        //} 
+ 
+        return ObjectMapper.Map<CallMaterialOrder, CallMaterialOrderDto>(insertObj); 
+    } 
+ 
+    /// <summary> 
+    /// 鏇存柊鍙枡鍗曡〃 
+    /// </summary> 
+    /// <param name="id"></param> 
+    /// <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;
+        updateObj.MaterialMode = input.MaterialMode;
+        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); 
+    } 
+ 
+    /// <summary> 
+    /// 鍏嬮殕鍙枡鍗曡〃 
+    /// </summary> 
+    /// <param name="ids"></param> 
+    /// <returns></returns> 
+    public async Task<List<CallMaterialOrderDto>> CloneAsync(IEnumerable<Guid> ids) 
+    { 
+        //var callMaterialOrders = new List<CallMaterialOrder>(); 
+        //if (ids != null) 
+        //{ 
+        //    var sort = await callMaterialOrderRepository.GetMaxSortAsync(); 
+        //    foreach (var id in ids) 
+        //    { 
+        //        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); 
+        //                if (exist || callMaterialOrders.Any(x => x.Name == name)) 
+        //                { 
+        //                    name += CallMaterialOrderConsts.CloneTag; 
+        //                    continue; 
+        //                } 
+ 
+        //                notExist = true; 
+        //            } 
+ 
+        //            //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>(); 
+    } 
+ 
+    /// <summary> 
+    /// 鍒犻櫎鍗曚釜鍙枡鍗曡〃 
+    /// </summary> 
+    /// <param name="id"></param> 
+    /// <returns></returns> 
+    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); 
+        } 
+    } 
+ 
+    /// <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); 
+    } 
+ 
+    /// <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()) 
+        { 
+            #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 
+                    { 
+                        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 
+                    { 
+                        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)); 
+                } 
+            } 
+        } 
+ 
+        // 鏂板 
+        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 callMaterialOrderUpdateDtos) 
+        { 
+            try 
+            { 
+                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); 
+        } 
+ 
+        #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); 
+    } 
+ 
+    /// <summary> 
+    /// 鏍¢獙鍙枡鍗曡〃锛屽綋鏂板缓鎴栨洿鏂版椂 
+    /// </summary> 
+    /// <param name="input"></param> 
+    /// <returns></returns> 
+    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; 
+    } 
+} 
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/CallMaterialOrderRecordAppService.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/CallMaterialOrderRecordAppService.cs
new file mode 100644
index 0000000..1919b86
--- /dev/null
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/CallMaterialOrderRecordAppService.cs
@@ -0,0 +1,416 @@
+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; 
+ 
+/// <summary> 
+/// 鍙枡璁板綍琛ㄥ簲鐢ㄦ湇鍔� 
+/// </summary> 
+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; 
+    } 
+ 
+    /// <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)); 
+    } 
+ 
+    /// <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); 
+        } 
+ 
+        #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)); 
+    } 
+ 
+    /// <summary>  
+    /// 鍔ㄦ�佹瀯閫犳煡璇㈡潯浠�  
+    /// </summary>  
+    /// <param name="input">杈撳叆鍙傛暟</param>  
+    /// <returns></returns>  
+    private FunReturnResultModel<Expression<Func<CallMaterialOrderRecord, bool>>> DynamicGetQueryParams(GetCallMaterialOrderRecordInput input) 
+    { 
+        //鍔ㄦ�佹瀯閫犳煡璇㈡潯浠�  
+        var whereConditions = WhereConditionsExtensions.GetWhereConditions<CallMaterialOrderRecord, GetCallMaterialOrderRecordInput>(input); 
+        if (!whereConditions.IsSuccess) 
+        { 
+            throw new Exception("鍔ㄦ�佹瀯閫犳煡璇㈡潯浠跺け璐�:" + whereConditions.ErrMsg); 
+        } 
+ 
+        //涔熷彲鍐嶆鑷畾涔夋瀯寤烘煡璇㈡潯浠�  
+        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; 
+    } 
+ 
+    /// <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); 
+ 
+        //if (input.Sort.HasValue && insertObj.Sort != maxSort) 
+        //{ 
+        //    await AdjustSortAsync(insertObj.Id, insertObj.Sort); 
+        //} 
+ 
+        return ObjectMapper.Map<CallMaterialOrderRecord, CallMaterialOrderRecordDto>(insertObj); 
+    } 
+ 
+    /// <summary> 
+    /// 鏇存柊鍙枡璁板綍琛� 
+    /// </summary> 
+    /// <param name="id"></param> 
+    /// <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;
+        updateObj.MaterialMode = input.MaterialMode;
+        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); 
+    } 
+ 
+    /// <summary> 
+    /// 鍏嬮殕鍙枡璁板綍琛� 
+    /// </summary> 
+    /// <param name="ids"></param> 
+    /// <returns></returns> 
+    public async Task<List<CallMaterialOrderRecordDto>> CloneAsync(IEnumerable<Guid> ids) 
+    { 
+        //var callMaterialOrderRecords = new List<CallMaterialOrderRecord>(); 
+        //if (ids != null) 
+        //{ 
+        //    var sort = await callMaterialOrderRecordRepository.GetMaxSortAsync(); 
+        //    foreach (var id in ids) 
+        //    { 
+        //        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); 
+        //                if (exist || callMaterialOrderRecords.Any(x => x.Name == name)) 
+        //                { 
+        //                    name += CallMaterialOrderRecordConsts.CloneTag; 
+        //                    continue; 
+        //                } 
+ 
+        //                notExist = true; 
+        //            } 
+ 
+        //            //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>(); 
+    } 
+ 
+    /// <summary> 
+    /// 鍒犻櫎鍗曚釜鍙枡璁板綍琛� 
+    /// </summary> 
+    /// <param name="id"></param> 
+    /// <returns></returns> 
+    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); 
+        } 
+    } 
+ 
+    /// <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); 
+    } 
+ 
+    /// <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()) 
+        { 
+            #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 
+                    { 
+                        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 
+                    { 
+                        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)); 
+                } 
+            } 
+        } 
+ 
+        // 鏂板 
+        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 callMaterialOrderRecordUpdateDtos) 
+        { 
+            try 
+            { 
+                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); 
+        } 
+ 
+        #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); 
+    } 
+ 
+    /// <summary> 
+    /// 鏍¢獙鍙枡璁板綍琛紝褰撴柊寤烘垨鏇存柊鏃� 
+    /// </summary> 
+    /// <param name="input"></param> 
+    /// <returns></returns> 
+    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; 
+    } 
+} 
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 2e16c41..63676a1 100644
--- a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/SharedService.cs
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/SharedService.cs
@@ -7,16 +7,23 @@
 using Microsoft.Extensions.DependencyInjection;
 using Volo.Abp;
 using Microsoft.Extensions.DependencyInjection;
+using NPOI.Util;
+using CMS.Plugin.PipeLineLems.Domain.CallMaterialOrder;
+using CMS.Plugin.PipeLineLems.Application.Contracts.Services;
+using CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.CallMaterialOrder;
+using Volo.Abp.Uow;
 
 namespace CMS.Plugin.PipeLineLems.Application.Implements;
 
 /// <summary> 
 /// 浣滀笟璁″垝琛ㄥ簲鐢ㄦ湇鍔� 
 /// </summary> 
-public class SharedService: CMSPluginAppService
+public class SharedService : CMSPluginAppService
 {
-   
-    public async Task<MesOrderResponse> CommonCreatebyApsAsync(List<WorkPlanInput> input, IServiceProvider _serviceProvider, WorkPlanAppService workPlanAppService)
+
+    public async Task<MesOrderResponse> CommonCreatebyApsAsync(List<WorkPlanInput> input, IServiceProvider _serviceProvider,
+        WorkPlanAppService workPlanAppService
+        )
     {
         if (input == null)
         {
@@ -28,111 +35,174 @@
             throw new UserFriendlyException("杈撳叆鍙傛暟Data涓嶈兘涓虹┖");
         }
 
+        //鏍¢獙鏁版嵁
+        //1銆佸師鏂欐爣璇嗙浉鍚岀殑涓嶈兘瀛樺湪浜庝袱涓� 绠℃缂栧彿涓�
+        //var validationResult = ValidateUniqueDataIdentifierPerPipeSection(input);
+        //if (!validationResult.isValid)
+        //{
+        //    澶勭悊楠岃瘉澶辫触鐨勬儏鍐�
+        //    throw new UserFriendlyException($"楠岃瘉澶辫触: {validationResult.errorMessage}");
+        //    杩斿洖閿欒淇℃伅缁欏鎴风鎴栬繘琛屽叾浠栧鐞�
+        //}
+
+
+        var callMaterialOrderAppService = _serviceProvider.GetRequiredService<ICallMaterialOrderAppService>();
+
         var orderManager = _serviceProvider.GetRequiredService<IOrderManager>();
         var productProvider = _serviceProvider.GetRequiredService<IProductProvider>();
         var formulaProvider = _serviceProvider.GetRequiredService<IFormulaProvider>();
         List<OrderModel> orderModels = new List<OrderModel>();
-        //鎸夌収浠诲姟缂栧彿鍒嗙粍
-        var groupTask = input.GroupBy(x => x.TaskCode);
-        foreach (var gTask in groupTask)
+
+        #region 浜嬪姟
+
+        using var scope = _serviceProvider.CreateScope();
+        var unitOfWorkManager = scope.ServiceProvider.GetRequiredService<IUnitOfWorkManager>();
+        using var uow = unitOfWorkManager.Begin(requiresNew: true);
+
+        try
         {
-            var taskCode = gTask.Key;
-            var order = await orderManager.GetByCodeAsync(taskCode);
-            if (order != null)
+            #region 鏁版嵁澶勭悊
+
+            //鎸夌収 鍘熸枡鏍囪瘑 鍒嗙粍
+            var groupTask = input.GroupBy(x => x.DataIdentifier);
+            foreach (var gTask in groupTask)
             {
-                throw new UserFriendlyException($"浠诲姟缂栧彿[{taskCode}]宸插瓨鍦�");
-            }
 
 
-            //var product = await productProvider.FindByNameAsync(orderItem.PipeSectionName);
-            //if (product == null)
-            //{
-            //    throw new UserFriendlyException($"浜у搧鍚嶇О[{orderItem.PipeSectionName}]涓嶅瓨鍦�");
-            //}
 
-            //var formula = await formulaProvider.GetFormulaAsync(product.Id);
-            //if (formula == null)
-            //{
-            //    throw new UserFriendlyException($"浜у搧鍨嬪彿[{orderItem.MaterialCode}]鏃犲叧鑱旈厤鏂�");
-            //}
-            //棣栧厛瑕佸垱寤� 鎵撶爜鍒囧壊鐨勫伐鍗� 
-            var productForCut = await productProvider.FindByNameAsync("鍒囧壊鍘熸枡绠�");
-            if (productForCut == null)
-            {
-                throw new UserFriendlyException($"浜у搧鍚嶇О[鍒囧壊鍘熸枡绠涓嶅瓨鍦�");
-            }
-            var formulaForCut = await formulaProvider.GetFormulaAsync(productForCut.Id);
-            if (formulaForCut == null)
-            {
-                throw new UserFriendlyException($"浜у搧鍚嶇О[鍒囧壊鍘熸枡绠鏃犲叧鑱旈厤鏂�");
-            }
-            //鍒嗙粍鏁版嵁
-            var group = gTask.ToList().GroupBy(x => x.DataIdentifier);
-            foreach (var item in group)
-            {
-                OrderModel orderModelForCut = new OrderModel()
-                {
-                    Id = Guid.NewGuid(),
-                    Code = "Cut_" + taskCode,
-                    Source = "APS鎺ㄩ��",
-                    PlanStartTime = gTask.ToList().First().PlannedStartTime,
-                    PlanFinishTime = gTask.ToList().First().PlannedEndTime,
-                    PlanQty = (ulong)item.ToList().Count,
-                    Status = OrderStatus.NotActive,
-                    Product = new AssociationProductModel() { Id = productForCut.Id, Name = productForCut.Name, Model = productForCut.Model, ShortNumber = productForCut.ShortNumber },
-                    Formula = new AssociationFormulaModel() { Id = formulaForCut.Id, Code = formulaForCut.Code, Name = formulaForCut.Name }
-                };
-                orderModelForCut.ExtraProperties["OuterDiameter"] = gTask.ToList().First().OuterDiameter;//澶栧緞
-                orderModelForCut.ExtraProperties["Material"] = gTask.ToList().First().Material;//鏉愯川
-                orderModelForCut.ExtraProperties["Length"] = gTask.ToList().First().Length;//闀垮害
-
-                var orderForCut = await orderManager.GetByCodeAsync(orderModelForCut.Code);
-                if (orderForCut != null)
-                {
-                    //throw new UserFriendlyException($"宸ュ崟[{orderModelForCut.Code}]宸插瓨鍦�");
-                    //涓嶅啀鎶涘紓甯革紝鐩存帴璺宠繃
-                    break;
-                }
-
-                var orderModelResultForCut = await orderManager.CreateAsync(orderModelForCut);
-                if (orderModelResultForCut == null)
-                {
-                    throw new UserFriendlyException($"宸ュ崟[{orderModelForCut.Code}]鍒涘缓澶辫触");
-                }
-                orderModels.Add(orderModelResultForCut);
-
-
-                //OrderModel orderModel = new OrderModel();
-                //orderModel.Id = Guid.NewGuid();
-                //orderModel.Code = orderItem.TaskCode;
-                //orderModel.Source = "APS鎺ㄩ��";
-                //orderModel.Product = new AssociationProductModel() { Id = product.Id, Name = product.Name, Model = product.Model, ShortNumber = product.ShortNumber };
-                ////orderModel.Formula = new AssociationFormulaModel() { Id = formula.Id, Code = formula.Code, Name = formula.Name };
-                //orderModel.PlanStartTime = orderItem.PlannedStartTime;
-                //orderModel.PlanFinishTime = orderItem.PlannedEndTime;
-                //orderModel.PlanQty = (ulong?)orderItem.OrderQty;
-                //orderModel.Status = OrderStatus.NotActive;
-                //orderModel.ExtraProperties["Source"] = "ddd";
-                //var source = orderModel.ExtraProperties["Source"];
-                //var orderModelResult = await orderManager.CreateAsync(orderModel);
-                //if (orderModelResult == null)
+                //var product = await productProvider.FindByNameAsync(orderItem.PipeSectionName);
+                //if (product == null)
                 //{
-                //    throw new UserFriendlyException($"宸ュ崟[{orderItem.TaskCode}]鍒涘缓澶辫触");
+                //    throw new UserFriendlyException($"浜у搧鍚嶇О[{orderItem.PipeSectionName}]涓嶅瓨鍦�");
                 //}
-                //orderModels.Add(orderModelResult);
+
+                //var formula = await formulaProvider.GetFormulaAsync(product.Id);
+                //if (formula == null)
+                //{
+                //    throw new UserFriendlyException($"浜у搧鍨嬪彿[{orderItem.MaterialCode}]鏃犲叧鑱旈厤鏂�");
+                //}
+                //棣栧厛瑕佸垱寤� 鎵撶爜鍒囧壊鐨勫伐鍗� 
+                var productForCut = await productProvider.FindByNameAsync("鍒囧壊鍘熸枡绠�");
+                if (productForCut == null)
+                {
+                    throw new UserFriendlyException($"浜у搧鍚嶇О[鍒囧壊鍘熸枡绠涓嶅瓨鍦�");
+                }
+                var formulaForCut = await formulaProvider.GetFormulaAsync(productForCut.Id);
+                if (formulaForCut == null)
+                {
+                    throw new UserFriendlyException($"浜у搧鍚嶇О[鍒囧壊鍘熸枡绠鏃犲叧鑱旈厤鏂�");
+                }
+                //鎸夌収 绠℃缂栧彿 鍒嗙粍
+                var group = gTask.ToList().GroupBy(x => x.PipeSpecCode);
+                foreach (var item in group)
+                {
+                    var prodOrderNo = "Order_" + item.Key;
+                    var order = await orderManager.GetByCodeAsync(prodOrderNo);
+                    if (order != null)
+                    {
+                        throw new UserFriendlyException($"鐢熶骇宸ュ崟[{prodOrderNo}]宸插瓨鍦�");
+                    }
+
+                    OrderModel orderModelForCut = new OrderModel()
+                    {
+                        Id = Guid.NewGuid(),
+                        Code = prodOrderNo,
+                        Source = "APS鎺ㄩ��",
+                        PlanStartTime = gTask.ToList().First().PlannedStartTime,
+                        PlanFinishTime = gTask.ToList().First().PlannedEndTime,
+                        PlanQty = 1,
+                        Status = OrderStatus.NotActive,
+                        Product = new AssociationProductModel() { Id = productForCut.Id, Name = productForCut.Name, Model = productForCut.Model, ShortNumber = productForCut.ShortNumber },
+                        Formula = new AssociationFormulaModel() { Id = formulaForCut.Id, Code = formulaForCut.Code, Name = formulaForCut.Name }
+                    };
+                    orderModelForCut.ExtraProperties["OuterDiameter"] = gTask.ToList().First().OuterDiameter;//澶栧緞
+                    orderModelForCut.ExtraProperties["Material"] = gTask.ToList().First().Material;//鏉愯川
+                    orderModelForCut.ExtraProperties["Length"] = gTask.ToList().First().Length;//闀垮害
+                    orderModelForCut.ExtraProperties["DataIdentifier"] = gTask.ToList().First().DataIdentifier;//鍘熸枡鏍囪瘑
+                    orderModelForCut.ExtraProperties["MaterialMode"] = gTask.ToList().First().MaterialMode;//鍘熸枡绫诲瀷
+                    orderModelForCut.ExtraProperties["PipeFittingCode"] = gTask.ToList().First().PipeFittingCode;//绠℃缂栧彿
+
+                    var orderForCut = await orderManager.GetByCodeAsync(orderModelForCut.Code);
+                    if (orderForCut != null)
+                    {
+                        //throw new UserFriendlyException($"宸ュ崟[{orderModelForCut.Code}]宸插瓨鍦�");
+                        //涓嶅啀鎶涘紓甯革紝鐩存帴璺宠繃
+                        break;
+                    }
+
+                    var orderModelResultForCut = await orderManager.CreateAsync(orderModelForCut);
+                    if (orderModelResultForCut == null)
+                    {
+                        throw new UserFriendlyException($"宸ュ崟[{orderModelForCut.Code}]鍒涘缓澶辫触");
+                    }
+                    orderModels.Add(orderModelResultForCut);
+
+
+                    //OrderModel orderModel = new OrderModel();
+                    //orderModel.Id = Guid.NewGuid();
+                    //orderModel.Code = orderItem.TaskCode;
+                    //orderModel.Source = "APS鎺ㄩ��";
+                    //orderModel.Product = new AssociationProductModel() { Id = product.Id, Name = product.Name, Model = product.Model, ShortNumber = product.ShortNumber };
+                    ////orderModel.Formula = new AssociationFormulaModel() { Id = formula.Id, Code = formula.Code, Name = formula.Name };
+                    //orderModel.PlanStartTime = orderItem.PlannedStartTime;
+                    //orderModel.PlanFinishTime = orderItem.PlannedEndTime;
+                    //orderModel.PlanQty = (ulong?)orderItem.OrderQty;
+                    //orderModel.Status = OrderStatus.NotActive;
+                    //orderModel.ExtraProperties["Source"] = "ddd";
+                    //var source = orderModel.ExtraProperties["Source"];
+                    //var orderModelResult = await orderManager.CreateAsync(orderModel);
+                    //if (orderModelResult == null)
+                    //{
+                    //    throw new UserFriendlyException($"宸ュ崟[{orderItem.TaskCode}]鍒涘缓澶辫触");
+                    //}
+                    //orderModels.Add(orderModelResult);
+                }
+
+
+                //淇濆瓨鍒� scms_callmaterialorders 琛ㄤ腑
+                CallMaterialOrderCreateDto insertObjForOrder = new CallMaterialOrderCreateDto()
+                {
+                    CallMaterialStatus = Domain.Shared.Enums.CallMaterialStatusEnum.鏈墽琛�,
+                    DataIdentifier = gTask.Key,
+                    MaterialMode = gTask.ToList().First().MaterialMode,
+                    Quantity = 1
+                };
+
+                await callMaterialOrderAppService.CreateAsync(insertObjForOrder);
             }
 
+
+
+
+            //淇濆瓨鍒�  scms_workplans 琛ㄤ腑
+            foreach (var item in input)
+            {
+                var insertObj = ObjectMapper.Map<WorkPlanInput, WorkPlanCreateDto>(item);
+                //insertObj.OrgMaterialCode = "1111";
+                insertObj.CallMaterialStatus = Domain.Shared.Enums.CallMaterialStatusEnum.鏈墽琛�;
+                insertObj.WorkPlanStatus = Domain.Shared.Enums.WorkPlanStatusEnum.鏈墽琛�;
+                insertObj.Sort = 1;
+                await workPlanAppService.CreateAsync(insertObj);
+            }
+
+            #endregion
+
+            await uow.CompleteAsync();
         }
-
-
-        //淇濆瓨鍒拌〃涓�
-        foreach (var item in input)
+        catch (Exception)
         {
-            var insertObj = ObjectMapper.Map<WorkPlanInput, WorkPlanCreateDto>(item);
-            //insertObj.OrgMaterialCode = "1111";
-            insertObj.Sort = 1;
-            await workPlanAppService.CreateAsync(insertObj);
+
+            throw;
         }
+        finally
+        {
+            await uow.RollbackAsync();
+        }
+
+
+
+        #endregion
+
 
 
         // 鍙戝竷浜嬩欢
@@ -150,4 +220,39 @@
         return response;
     }
 
+    /// <summary>
+    /// 楠岃瘉鍘熸枡鏍囪瘑鐩稿悓鐨勮褰曚笉鑳藉瓨鍦ㄤ簬涓や釜涓嶅悓鐨勭娈电紪鍙蜂腑
+    /// </summary>
+    /// <param name="inputs">浣滀笟璁″垝杈撳叆鍙傛暟鍒楄〃</param>
+    /// <returns>楠岃瘉缁撴灉锛屽寘鍚槸鍚﹂�氳繃楠岃瘉鍙婇敊璇俊鎭�</returns>
+    public static (bool isValid, string errorMessage) ValidateUniqueDataIdentifierPerPipeSection(List<WorkPlanInput> inputs)
+    {
+        if (inputs == null || !inputs.Any())
+        {
+            return (true, string.Empty);
+        }
+
+        // 浣跨敤Lookup鍒嗙粍锛岄敭涓哄師鏂欐爣璇嗭紝鍊间负瀵瑰簲鐨勭娈电紪鍙烽泦鍚�
+        var dataIdentifierGroups = inputs.ToLookup(x => x.DataIdentifier, x => x.PipeSpecCode);
+
+        foreach (var group in dataIdentifierGroups)
+        {
+            // 蹇界暐绌虹殑鍘熸枡鏍囪瘑
+            if (string.IsNullOrEmpty(group.Key))
+            {
+                continue;
+            }
+
+            // 鑾峰彇褰撳墠鍘熸枡鏍囪瘑瀵瑰簲鐨勫敮涓�绠℃缂栧彿闆嗗悎
+            var uniquePipeSections = group.Distinct().ToList();
+
+            // 濡傛灉瀛樺湪澶氫釜涓嶅悓鐨勭娈电紪鍙凤紝鍒欒繚鍙嶈鍒�
+            if (uniquePipeSections.Count > 1)
+            {
+                return (false, $"鍘熸枡鏍囪瘑 '{group.Key}' 瀛樺湪浜庡涓笉鍚岀殑绠℃缂栧彿涓�: {string.Join(", ", uniquePipeSections)}");
+            }
+        }
+
+        return (true, string.Empty);
+    }
 }
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/WorkPlanAppService.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/WorkPlanAppService.cs
index a4b95f8..bc1a9cd 100644
--- a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/WorkPlanAppService.cs
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/WorkPlanAppService.cs
@@ -10,12 +10,6 @@
 using Volo.Abp.Data;
 using Volo.Abp.ObjectExtending;
 using Volo.Abp.ObjectMapping;
-using CMS.Plugin.FormulaManagement.Abstractions;
-using CMS.Plugin.OrderManagement.Abstractions.Enums;
-using CMS.Plugin.OrderManagement.Abstractions.Models;
-using CMS.Plugin.OrderManagement.Abstractions;
-using CMS.Plugin.ProductManagement.Abstractions;
-using Microsoft.Extensions.DependencyInjection;
 
 namespace CMS.Plugin.PipeLineLems.Application.Implements;
 
@@ -25,18 +19,17 @@
 public class WorkPlanAppService : CMSPluginAppService, IWorkPlanAppService
 {
     private readonly IWorkPlanRepository workPlanRepository;
-    private readonly IServiceProvider _serviceProvider;
     private readonly SharedService _sharedService;
-
+    private readonly IServiceProvider _serviceProvider;
     /// <summary> 
     /// Initializes a new instance of the <see cref="WorkPlanAppService"/> class. 
     /// </summary> 
     /// <param name="WorkPlanRepository">The task job repository.</param> 
-    public WorkPlanAppService(IWorkPlanRepository _WorkPlanRepository, IServiceProvider serviceProvider, SharedService sharedService)
+    public WorkPlanAppService(IWorkPlanRepository _WorkPlanRepository, SharedService sharedService, IServiceProvider serviceProvider)
     {
         workPlanRepository = _WorkPlanRepository;
-        _serviceProvider = serviceProvider;
         _sharedService = sharedService;
+        _serviceProvider = serviceProvider;
     }
 
     /// <summary> 
@@ -154,6 +147,8 @@
         input.MapExtraPropertiesTo(updateObj, MappingPropertyDefinitionChecks.None);
 
         updateObj.TaskCode = input.TaskCode;
+        updateObj.WorkPlanStatus = input.WorkPlanStatus;
+        updateObj.CallMaterialStatus = input.CallMaterialStatus;
         updateObj.DataIdentifier = input.DataIdentifier;
         updateObj.MaterialMode = input.MaterialMode;
         updateObj.Length = input.Length;
@@ -180,7 +175,6 @@
         updateObj.OuterDiameter = input.OuterDiameter;
         updateObj.Thickness = input.Thickness;
         updateObj.Material = input.Material;
-     
         updateObj.ProcessRouteNumber = input.ProcessRouteNumber;
         updateObj.PlannedStartTime = input.PlannedStartTime;
         updateObj.PlannedEndTime = input.PlannedEndTime;
@@ -303,182 +297,165 @@
     /// <exception cref="UserFriendlyException"></exception> 
     public async Task ImportAsync(WorkPlansImportModel input)
     {
-
         //杞崲鏁版嵁
         var result = ObjectMapper.Map<List<WorkPlansImportModel.WorkPlanImportModel>, List<WorkPlanInput>>(input.WorkPlans);
 
         //await CreatebyApsAsync(result);
         await _sharedService.CommonCreatebyApsAsync(result, _serviceProvider, this);
+        //        Check.NotNull(input, nameof(input)); 
+
+        //        var workPlanCreateDtos = new List<(int RowIndex, WorkPlanCreateDto Item)>(); 
+        //        var workPlanUpdateDtos = new List<(int RowIndex, Guid Id, WorkPlanUpdateDto Item)>(); 
+        //        var importItems = input.WorkPlans; 
+
+        //        if (importItems != null && importItems.Any()) 
+        //        { 
+        //            #region 瀵煎叆鏍¢獙 
+
+        //            // 鍒ゆ柇鍚嶇О鏄惁閲嶅锛屽苟杈撳嚭绗嚑琛岄噸澶� 
+        //            var duplicateWorkPlans = importItems.GroupBy(x => x.TaskCode).Where(x => x.Count() > 1).ToList(); 
+        //            if (duplicateWorkPlans?.Any() == true) 
+        //            { 
+        //                var duplicateWorkPlanMsgs = duplicateWorkPlans.Select(x => $"绗� {string.Join(",", x.Select(x => x.RowIndex))} 琛岋細{x.Key}  鍚嶇О閲嶅"); 
+        //                var errorMsg = $"瀵煎叆澶辫触锛侀厤缃紝 {string.Join(",", duplicateWorkPlanMsgs)}锛岀粓姝㈠鍏�"; 
+        //                throw new UserFriendlyException(errorMsg); 
+        //            } 
+
+        //            #endregion 
+
+        //            foreach (var impItem in importItems) 
+        //            { 
+        //                if (impItem.TaskCode.IsNullOrWhiteSpace()) 
+        //                { 
+        //                    continue; 
+        //                } 
+
+        //                if (impItem.TaskCode.IsNullOrWhiteSpace()) 
+        //                { 
+        //                    var errorMsg = $"瀵煎叆澶辫触锛侀厤缃紝绗瑊impItem.RowIndex}琛岋細WorkPlan鍚嶇О涓嶈兘涓虹┖"; 
+        //                    throw new UserFriendlyException(errorMsg); 
+        //                } 
+
+        //                var oldWorkPlan = await workPlanRepository.FindByNameAsync(impItem.TaskCode); 
+        //                if (oldWorkPlan != null) 
+        //                { 
+        //                    var workPlanUpdateDto = new WorkPlanUpdateDto 
+        //                    { 
+        //                        TaskCode = impItem.TaskCode,
+        //WorkPlanStatus = impItem.WorkPlanStatus,
+        //CallMaterialStatus = impItem.CallMaterialStatus,
+        //DataIdentifier = impItem.DataIdentifier,
+        //MaterialMode = impItem.MaterialMode,
+        //Length = impItem.Length,
+        //MarkingContent = impItem.MarkingContent,
+        //MarkingPosition = impItem.MarkingPosition,
+        //CuttingPosition = impItem.CuttingPosition,
+        //Quantity = impItem.Quantity,
+        //FlangeThickness = impItem.FlangeThickness,
+        //FlangeInnerDiameter = impItem.FlangeInnerDiameter,
+        //WeldingHeatInput = impItem.WeldingHeatInput,
+        //PipeAllowableStress = impItem.PipeAllowableStress,
+        //PipeDiameter = impItem.PipeDiameter,
+        //PipeWallThickness = impItem.PipeWallThickness,
+        //FactoryCode = impItem.FactoryCode,
+        //ProductCode = impItem.ProductCode,
+        //WorkstationCode = impItem.WorkstationCode,
+        //EquipmentCode = impItem.EquipmentCode,
+        //WorkpieceName = impItem.WorkpieceName,
+        //ProcessName = impItem.ProcessName,
+        //PipeFittingCode = impItem.PipeFittingCode,
+        //PreSerialNumber = impItem.PreSerialNumber,
+        //PipeSpecCode = impItem.PipeSpecCode,
+        //PipeSectionName = impItem.PipeSectionName,
+        //OuterDiameter = impItem.OuterDiameter,
+        //Thickness = impItem.Thickness,
+        //Material = impItem.Material,
+        //ProcessRouteNumber = impItem.ProcessRouteNumber,
+        //PlannedStartTime = impItem.PlannedStartTime,
+        //PlannedEndTime = impItem.PlannedEndTime,
+        //TeamInfo = impItem.TeamInfo,
+        //Timestamp = impItem.Timestamp,
+        //Remark = impItem.Remark,
+
+        //                    }; 
+
+        //                    workPlanUpdateDtos.Add((impItem.RowIndex, oldWorkPlan.Id, workPlanUpdateDto)); 
+        //                } 
+        //                else 
+        //                { 
+        //                    var workPlanCreateDto = new WorkPlanCreateDto 
+        //                    { 
+        //                        TaskCode = impItem.TaskCode,
+        //WorkPlanStatus = impItem.WorkPlanStatus,
+        //CallMaterialStatus = impItem.CallMaterialStatus,
+        //DataIdentifier = impItem.DataIdentifier,
+        //MaterialMode = impItem.MaterialMode,
+        //Length = impItem.Length,
+        //MarkingContent = impItem.MarkingContent,
+        //MarkingPosition = impItem.MarkingPosition,
+        //CuttingPosition = impItem.CuttingPosition,
+        //Quantity = impItem.Quantity,
+        //FlangeThickness = impItem.FlangeThickness,
+        //FlangeInnerDiameter = impItem.FlangeInnerDiameter,
+        //WeldingHeatInput = impItem.WeldingHeatInput,
+        //PipeAllowableStress = impItem.PipeAllowableStress,
+        //PipeDiameter = impItem.PipeDiameter,
+        //PipeWallThickness = impItem.PipeWallThickness,
+        //FactoryCode = impItem.FactoryCode,
+        //ProductCode = impItem.ProductCode,
+        //WorkstationCode = impItem.WorkstationCode,
+        //EquipmentCode = impItem.EquipmentCode,
+        //WorkpieceName = impItem.WorkpieceName,
+        //ProcessName = impItem.ProcessName,
+        //PipeFittingCode = impItem.PipeFittingCode,
+        //PreSerialNumber = impItem.PreSerialNumber,
+        //PipeSpecCode = impItem.PipeSpecCode,
+        //PipeSectionName = impItem.PipeSectionName,
+        //OuterDiameter = impItem.OuterDiameter,
+        //Thickness = impItem.Thickness,
+        //Material = impItem.Material,
+        //ProcessRouteNumber = impItem.ProcessRouteNumber,
+        //PlannedStartTime = impItem.PlannedStartTime,
+        //PlannedEndTime = impItem.PlannedEndTime,
+        //TeamInfo = impItem.TeamInfo,
+        //Timestamp = impItem.Timestamp,
+        //Remark = impItem.Remark,
+
+        //                    }; 
+
+        //                    workPlanCreateDtos.Add((impItem.RowIndex, workPlanCreateDto)); 
+        //                } 
+        //            } 
+        //        } 
+
+        //        // 鏂板 
+        //        foreach (var workPlanDto in workPlanCreateDtos) 
+        //        { 
+        //            try 
+        //            { 
+        //                await CreateAsync(workPlanDto.Item); 
+        //            } 
+        //            catch (Exception e) 
+        //            { 
+        //                var errorMsg = $"瀵煎叆澶辫触锛侀厤缃紝绗瑊workPlanDto.RowIndex}琛岋細{e.Message}锛岀粓姝㈠鍏�"; 
+        //                throw new UserFriendlyException(errorMsg); 
+        //            } 
+        //        } 
+
+        //        // 鏇存柊 
+        //        foreach (var workPlanDto in workPlanUpdateDtos) 
+        //        { 
+        //            try 
+        //            { 
+        //                await UpdateAsync(workPlanDto.Id, workPlanDto.Item); 
+        //            } 
+        //            catch (Exception e) 
+        //            { 
+        //                var errorMsg = $"瀵煎叆澶辫触锛侀厤缃紝绗瑊workPlanDto.RowIndex}琛岋細{e.Message}锛岀粓姝㈠鍏�"; 
+        //                throw new UserFriendlyException(errorMsg); 
+        //            } 
+        //        } 
     }
-
-
-    public async Task<MesOrderResponse> CreatebyApsAsync(List<WorkPlanInput> input)
-    {
-        var response=await _sharedService.CommonCreatebyApsAsync(input, _serviceProvider, this);
-       
-        return response;
-    }
-
-    ///// <summary> 
-    ///// 瀵煎叆浣滀笟璁″垝琛� 
-    ///// </summary> 
-    ///// <param name="input"></param> 
-    ///// <returns></returns> 
-    ///// <exception cref="UserFriendlyException"></exception> 
-    //public async Task ImportAsync(WorkPlansImportModel input)
-    //{
-    //    Check.NotNull(input, nameof(input));
-
-    //    var workPlanCreateDtos = new List<(int RowIndex, WorkPlanCreateDto Item)>();
-    //    var workPlanUpdateDtos = new List<(int RowIndex, Guid Id, WorkPlanUpdateDto Item)>();
-    //    var importItems = input.WorkPlans;
-
-    //    if (importItems != null && importItems.Any())
-    //    {
-    //        #region 瀵煎叆鏍¢獙 
-
-    //        // 鍒ゆ柇鍚嶇О鏄惁閲嶅锛屽苟杈撳嚭绗嚑琛岄噸澶� 
-    //        var duplicateWorkPlans = importItems.GroupBy(x => x.TaskCode).Where(x => x.Count() > 1).ToList();
-    //        if (duplicateWorkPlans?.Any() == true)
-    //        {
-    //            var duplicateWorkPlanMsgs = duplicateWorkPlans.Select(x => $"绗� {string.Join(",", x.Select(x => x.RowIndex))} 琛岋細{x.Key}  鍚嶇О閲嶅");
-    //            var errorMsg = $"瀵煎叆澶辫触锛侀厤缃紝 {string.Join(",", duplicateWorkPlanMsgs)}锛岀粓姝㈠鍏�";
-    //            throw new UserFriendlyException(errorMsg);
-    //        }
-
-    //        #endregion
-
-    //        foreach (var impItem in importItems)
-    //        {
-    //            if (impItem.TaskCode.IsNullOrWhiteSpace())
-    //            {
-    //                continue;
-    //            }
-
-    //            if (impItem.TaskCode.IsNullOrWhiteSpace())
-    //            {
-    //                var errorMsg = $"瀵煎叆澶辫触锛侀厤缃紝绗瑊impItem.RowIndex}琛岋細WorkPlan鍚嶇О涓嶈兘涓虹┖";
-    //                throw new UserFriendlyException(errorMsg);
-    //            }
-
-    //            var oldWorkPlan = await workPlanRepository.FindByNameAsync(impItem.TaskCode);
-    //            if (oldWorkPlan != null)
-    //            {
-    //                var workPlanUpdateDto = new WorkPlanUpdateDto
-    //                {
-    //                    TaskCode = impItem.TaskCode,
-    //                    DataIdentifier = impItem.DataIdentifier,
-    //                    MaterialMode = impItem.MaterialMode,
-    //                    Length = impItem.Length,
-    //                    MarkingContent = impItem.MarkingContent,
-    //                    MarkingPosition = impItem.MarkingPosition,
-    //                    CuttingPosition = impItem.CuttingPosition,
-    //                    Quantity = impItem.Quantity,
-    //                    FlangeThickness = impItem.FlangeThickness,
-    //                    FlangeInnerDiameter = impItem.FlangeInnerDiameter,
-    //                    WeldingHeatInput = impItem.WeldingHeatInput,
-    //                    PipeAllowableStress = impItem.PipeAllowableStress,
-    //                    PipeDiameter = impItem.PipeDiameter,
-    //                    PipeWallThickness = impItem.PipeWallThickness,
-    //                    FactoryCode = impItem.FactoryCode,
-    //                    ProductCode = impItem.ProductCode,
-    //                    WorkstationCode = impItem.WorkstationCode,
-    //                    EquipmentCode = impItem.EquipmentCode,
-    //                    WorkpieceName = impItem.WorkpieceName,
-    //                    ProcessName = impItem.ProcessName,
-    //                    PipeFittingCode = impItem.PipeFittingCode,
-    //                    PreSerialNumber = impItem.PreSerialNumber,
-    //                    PipeSpecCode = impItem.PipeSpecCode,
-    //                    PipeSectionName = impItem.PipeSectionName,
-    //                    OuterDiameter = impItem.OuterDiameter,
-    //                    Thickness = impItem.Thickness,
-    //                    Material = impItem.Material,
-    //                    HasMainSignature = impItem.HasMainSignature,
-    //                    ProcessRouteNumber = impItem.ProcessRouteNumber,
-    //                    PlannedStartTime = impItem.PlannedStartTime,
-    //                    PlannedEndTime = impItem.PlannedEndTime,
-    //                    TeamInfo = impItem.TeamInfo,
-    //                    Timestamp = impItem.Timestamp,
-    //                    Remark = impItem.Remark,
-
-    //                };
-
-    //                workPlanUpdateDtos.Add((impItem.RowIndex, oldWorkPlan.Id, workPlanUpdateDto));
-    //            }
-    //            else
-    //            {
-    //                var workPlanCreateDto = new WorkPlanCreateDto
-    //                {
-    //                    TaskCode = impItem.TaskCode,
-    //                    DataIdentifier = impItem.DataIdentifier,
-    //                    MaterialMode = impItem.MaterialMode,
-    //                    Length = impItem.Length,
-    //                    MarkingContent = impItem.MarkingContent,
-    //                    MarkingPosition = impItem.MarkingPosition,
-    //                    CuttingPosition = impItem.CuttingPosition,
-    //                    Quantity = impItem.Quantity,
-    //                    FlangeThickness = impItem.FlangeThickness,
-    //                    FlangeInnerDiameter = impItem.FlangeInnerDiameter,
-    //                    WeldingHeatInput = impItem.WeldingHeatInput,
-    //                    PipeAllowableStress = impItem.PipeAllowableStress,
-    //                    PipeDiameter = impItem.PipeDiameter,
-    //                    PipeWallThickness = impItem.PipeWallThickness,
-    //                    FactoryCode = impItem.FactoryCode,
-    //                    ProductCode = impItem.ProductCode,
-    //                    WorkstationCode = impItem.WorkstationCode,
-    //                    EquipmentCode = impItem.EquipmentCode,
-    //                    WorkpieceName = impItem.WorkpieceName,
-    //                    ProcessName = impItem.ProcessName,
-    //                    PipeFittingCode = impItem.PipeFittingCode,
-    //                    PreSerialNumber = impItem.PreSerialNumber,
-    //                    PipeSpecCode = impItem.PipeSpecCode,
-    //                    PipeSectionName = impItem.PipeSectionName,
-    //                    OuterDiameter = impItem.OuterDiameter,
-    //                    Thickness = impItem.Thickness,
-    //                    Material = impItem.Material,
-    //                    HasMainSignature = impItem.HasMainSignature,
-    //                    ProcessRouteNumber = impItem.ProcessRouteNumber,
-    //                    PlannedStartTime = impItem.PlannedStartTime,
-    //                    PlannedEndTime = impItem.PlannedEndTime,
-    //                    TeamInfo = impItem.TeamInfo,
-    //                    Timestamp = impItem.Timestamp,
-    //                    Remark = impItem.Remark,
-
-    //                };
-
-    //                workPlanCreateDtos.Add((impItem.RowIndex, workPlanCreateDto));
-    //            }
-    //        }
-    //    }
-
-    //    // 鏂板 
-    //    foreach (var workPlanDto in workPlanCreateDtos)
-    //    {
-    //        try
-    //        {
-    //            await CreateAsync(workPlanDto.Item);
-    //        }
-    //        catch (Exception e)
-    //        {
-    //            var errorMsg = $"瀵煎叆澶辫触锛侀厤缃紝绗瑊workPlanDto.RowIndex}琛岋細{e.Message}锛岀粓姝㈠鍏�";
-    //            throw new UserFriendlyException(errorMsg);
-    //        }
-    //    }
-
-    //    // 鏇存柊 
-    //    foreach (var workPlanDto in workPlanUpdateDtos)
-    //    {
-    //        try
-    //        {
-    //            await UpdateAsync(workPlanDto.Id, workPlanDto.Item);
-    //        }
-    //        catch (Exception e)
-    //        {
-    //            var errorMsg = $"瀵煎叆澶辫触锛侀厤缃紝绗瑊workPlanDto.RowIndex}琛岋細{e.Message}锛岀粓姝㈠鍏�";
-    //            throw new UserFriendlyException(errorMsg);
-    //        }
-    //    }
-    //}
 
     /// <summary> 
     /// 瀵煎嚭浣滀笟璁″垝琛� 
@@ -523,6 +500,8 @@
     {
         Check.NotNull(input, nameof(input));
         Check.NotNullOrWhiteSpace(input.TaskCode, "浠诲姟缂栫爜", 256);
+        Check.NotNull(input.WorkPlanStatus, "璁″垝鐘舵��");
+        Check.NotNull(input.CallMaterialStatus, "鍙枡鐘舵��");
         Check.NotNull(input.Length, "闀垮害(mm)");
         Check.NotNull(input.MarkingPosition, "鎵撶爜浣嶇疆");
         Check.NotNull(input.CuttingPosition, "鍒囧壊浣嶇疆");
@@ -533,7 +512,6 @@
         Check.NotNull(input.PipeWallThickness, "濂楃鐩村緞(mm)");
         Check.NotNull(input.OuterDiameter, "澶栧緞(mm)");
         Check.NotNull(input.Thickness, "澹佸帤(mm)");
-        Check.NotNull(input.HasMainSignature, "鏄惁涓绘敮绠�");
 
         return Task.CompletedTask;
     }
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/MapperProfiles/CallMaterialOrderAutoMapperProfile.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/MapperProfiles/CallMaterialOrderAutoMapperProfile.cs
new file mode 100644
index 0000000..1606036
--- /dev/null
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/MapperProfiles/CallMaterialOrderAutoMapperProfile.cs
@@ -0,0 +1,26 @@
+using AutoMapper; 
+using CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.CallMaterialOrder; 
+using CMS.Plugin.PipeLineLems.Domain.CallMaterialOrder; 
+using Volo.Abp.ObjectExtending; 
+ 
+namespace CMS.Plugin.PipeLineLems.Application.MapperProfiles; 
+ 
+/// <summary> 
+/// 鍙枡鍗曡〃AutoMapper閰嶇疆 
+/// </summary> 
+/// <seealso cref="AutoMapper.Profile" /> 
+public class CallMaterialOrderAutoMapperProfile : Profile 
+{ 
+    /// <summary> 
+    /// Initializes a new instance of the <see cref="CallMaterialOrderAutoMapperProfile"/> class. 
+    /// </summary> 
+    public CallMaterialOrderAutoMapperProfile() 
+    { 
+        /* You can configure your AutoMapper mapping configuration here. 
+         * Alternatively, you can split your mapping configurations 
+         * into multiple profile classes for a better organization. */ 
+        CreateMap<CallMaterialOrder, CallMaterialOrderDto>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None); 
+        CreateMap<CallMaterialOrderCreateDto, CallMaterialOrder>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None); 
+        CreateMap<GetCallMaterialOrderInput, CallMaterialOrder>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None); 
+    } 
+} 
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/MapperProfiles/CallMaterialOrderRecordAutoMapperProfile.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/MapperProfiles/CallMaterialOrderRecordAutoMapperProfile.cs
new file mode 100644
index 0000000..30e5971
--- /dev/null
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/MapperProfiles/CallMaterialOrderRecordAutoMapperProfile.cs
@@ -0,0 +1,26 @@
+using AutoMapper; 
+using CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.CallMaterialOrderRecord; 
+using CMS.Plugin.PipeLineLems.Domain.CallMaterialOrderRecord; 
+using Volo.Abp.ObjectExtending; 
+ 
+namespace CMS.Plugin.PipeLineLems.Application.MapperProfiles; 
+ 
+/// <summary> 
+/// 鍙枡璁板綍琛ˋutoMapper閰嶇疆 
+/// </summary> 
+/// <seealso cref="AutoMapper.Profile" /> 
+public class CallMaterialOrderRecordAutoMapperProfile : Profile 
+{ 
+    /// <summary> 
+    /// Initializes a new instance of the <see cref="CallMaterialOrderRecordAutoMapperProfile"/> class. 
+    /// </summary> 
+    public CallMaterialOrderRecordAutoMapperProfile() 
+    { 
+        /* You can configure your AutoMapper mapping configuration here. 
+         * Alternatively, you can split your mapping configurations 
+         * into multiple profile classes for a better organization. */ 
+        CreateMap<CallMaterialOrderRecord, CallMaterialOrderRecordDto>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None); 
+        CreateMap<CallMaterialOrderRecordCreateDto, CallMaterialOrderRecord>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None); 
+        CreateMap<GetCallMaterialOrderRecordInput, CallMaterialOrderRecord>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None); 
+    } 
+} 
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/MapperProfiles/WorkPlanAutoMapperProfile.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/MapperProfiles/WorkPlanAutoMapperProfile.cs
index 45d1cde..1d1cea0 100644
--- a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/MapperProfiles/WorkPlanAutoMapperProfile.cs
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/MapperProfiles/WorkPlanAutoMapperProfile.cs
@@ -21,9 +21,6 @@
          * into multiple profile classes for a better organization. */ 
         CreateMap<WorkPlan, WorkPlanDto>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None); 
         CreateMap<WorkPlanCreateDto, WorkPlan>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None); 
-        CreateMap<GetWorkPlanInput, WorkPlan>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None);
-        //CreateMap<WorkPlansImportModel.WorkPlanImportModel, WorkPlan>(MemberList.None);
-        //CreateMap<WorkPlansImportModel.WorkPlanImportModel, WorkPlanInput>(MemberList.None);
-        //CreateMap<WorkPlanInput, WorkPlanCreateDto>(MemberList.None);
+        CreateMap<GetWorkPlanInput, WorkPlan>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None); 
     } 
 } 
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Domain.Shared/Enums/CallMaterialStatusEnum.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Domain.Shared/Enums/CallMaterialStatusEnum.cs
index f6a3884..d10329b 100644
--- a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Domain.Shared/Enums/CallMaterialStatusEnum.cs
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Domain.Shared/Enums/CallMaterialStatusEnum.cs
@@ -5,19 +5,19 @@
     /// <summary>
     /// 鍙枡鐘舵��
     /// </summary>
-    public enum CallMaterialStatusEnum : byte
+    public enum CallMaterialStatusEnum
     {
         /// <summary>
         /// 鏈墽琛�
         /// </summary>
         [Description("鏈墽琛�")]
-        鏈墽琛� = 0,
+        鏈墽琛� = 1,
 
         /// <summary>
         /// 鍙枡涓�
         /// </summary>
         [Description("鍙枡涓�")]
-        鍙枡涓� = 1,
+        鍙枡涓� = 2,
 
 
         /// <summary>
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Domain.Shared/Enums/PipeLineLemsStatus.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Domain.Shared/Enums/PipeLineLemsStatus.cs
index c51f079..7053f8c 100644
--- a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Domain.Shared/Enums/PipeLineLemsStatus.cs
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Domain.Shared/Enums/PipeLineLemsStatus.cs
@@ -5,19 +5,19 @@
     /// <summary>
     /// PipeLineLems鐘舵��
     /// </summary>
-    public enum PipeLineLemsStatus : byte
+    public enum PipeLineLemsStatus 
     {
         /// <summary>
         /// 鏈墽琛�
         /// </summary>
         [Description("鏈墽琛�")]
-        Initial = 0,
+        Initial = 1,
 
         /// <summary>
         /// 鎵ц涓�
         /// </summary>
         [Description("鎵ц涓�")]
-        Excuting = 1,
+        Excuting = 2,
 
         /// <summary>
         /// 宸插畬鎴�
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Domain.Shared/Enums/WorkPlanStatusEnum.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Domain.Shared/Enums/WorkPlanStatusEnum.cs
index 67b46c5..3286321 100644
--- a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Domain.Shared/Enums/WorkPlanStatusEnum.cs
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Domain.Shared/Enums/WorkPlanStatusEnum.cs
@@ -5,25 +5,25 @@
     /// <summary>
     /// 浣滀笟璁″垝鐘舵��
     /// </summary>
-    public enum WorkPlanStatusEnum : byte
+    public enum WorkPlanStatusEnum
     {
         /// <summary>
         /// 鏈墽琛�
         /// </summary>
         [Description("鏈墽琛�")]
-        鏈墽琛� = 0,
+        鏈墽琛� = 1,
 
         /// <summary>
         /// 鎵ц涓�
         /// </summary>
         [Description("鎵ц涓�")]
-        鎵ц涓� = 1,
+        鎵ц涓� = 2,
 
         /// <summary>
         /// 鏆傚仠涓�
         /// </summary>
         [Description("鏆傚仠涓�")]
-        鏆傚仠涓� = 2,
+        鏆傚仠涓� = 3,
 
         /// <summary>
         /// 宸插畬鎴�
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Domain/CallMaterialOrder/ICallMaterialOrderRepository.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Domain/CallMaterialOrder/ICallMaterialOrderRepository.cs
new file mode 100644
index 0000000..54c3638
--- /dev/null
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Domain/CallMaterialOrder/ICallMaterialOrderRepository.cs
@@ -0,0 +1,53 @@
+using CmsQueryExtensions.Extension; 
+using System.Linq.Expressions; 
+using Volo.Abp.Domain.Repositories; 
+ 
+namespace CMS.Plugin.PipeLineLems.Domain.CallMaterialOrder; 
+ 
+/// <summary> 
+/// 鍙枡鍗曡〃浠撳偍 
+/// </summary> 
+public interface ICallMaterialOrderRepository : IBasicRepository<CallMaterialOrder, Guid> 
+{ 
+    /// <summary> 
+    /// 鎸夌収鍚嶇О鏌ユ壘鍙枡鍗曡〃 
+    /// </summary> 
+    /// <param name="name"></param> 
+    /// <param name="cancellationToken"></param> 
+    /// <returns></returns> 
+    Task<CallMaterialOrder> FindByNameAsync(string name, CancellationToken cancellationToken = default); 
+ 
+    /// <summary> 
+    /// 楠岃瘉鍚嶇О鏄惁瀛樺湪鍙枡鍗曡〃 
+    /// </summary> 
+    /// <param name="name"></param> 
+    /// <param name="id"></param> 
+    /// <returns></returns> 
+    Task<bool> NameExistAsync(string name, Guid? id = null); 
+ 
+    /// <summary> 
+    /// 鑾峰彇鏈�澶ф帓搴忓彨鏂欏崟琛� 
+    /// </summary> 
+    /// <returns></returns> 
+    Task<int> GetMaxSortAsync(); 
+ 
+    /// <summary> 
+    /// 鑾峰彇鍒嗛〉鍒楄〃鍙枡鍗曡〃 
+    /// </summary> 
+    /// <param name="whereConditions"></param> 
+    /// <param name="sorting"></param> 
+    /// <param name="maxResultCount"></param> 
+    /// <param name="skipCount"></param> 
+    /// <param name="includeDetails"></param> 
+    /// <param name="cancellationToken"></param> 
+    /// <returns></returns> 
+    Task<List<CallMaterialOrder>> GetListAsync(FunReturnResultModel<Expression<Func<CallMaterialOrder, bool>>> whereConditions, string sorting = null, int maxResultCount = int.MaxValue, int skipCount = 0, bool includeDetails = false, CancellationToken cancellationToken = default); 
+ 
+    /// <summary> 
+    /// 鑾峰彇鎬绘暟鍙枡鍗曡〃 
+    /// </summary> 
+    /// <param name="whereConditions"></param> 
+    /// <param name="cancellationToken"></param> 
+    /// <returns></returns> 
+    Task<long> GetCountAsync(FunReturnResultModel<Expression<Func<CallMaterialOrder, bool>>> whereConditions, 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
new file mode 100644
index 0000000..1ac2ea7
--- /dev/null
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Domain/CallMaterialOrderRecord/ICallMaterialOrderRecordRepository.cs
@@ -0,0 +1,53 @@
+using CmsQueryExtensions.Extension; 
+using System.Linq.Expressions; 
+using Volo.Abp.Domain.Repositories; 
+ 
+namespace CMS.Plugin.PipeLineLems.Domain.CallMaterialOrderRecord; 
+ 
+/// <summary> 
+/// 鍙枡璁板綍琛ㄤ粨鍌� 
+/// </summary> 
+public interface ICallMaterialOrderRecordRepository : IBasicRepository<CallMaterialOrderRecord, Guid> 
+{ 
+    /// <summary> 
+    /// 鎸夌収鍚嶇О鏌ユ壘鍙枡璁板綍琛� 
+    /// </summary> 
+    /// <param name="name"></param> 
+    /// <param name="cancellationToken"></param> 
+    /// <returns></returns> 
+    Task<CallMaterialOrderRecord> FindByNameAsync(string name, CancellationToken cancellationToken = default); 
+ 
+    /// <summary> 
+    /// 楠岃瘉鍚嶇О鏄惁瀛樺湪鍙枡璁板綍琛� 
+    /// </summary> 
+    /// <param name="name"></param> 
+    /// <param name="id"></param> 
+    /// <returns></returns> 
+    Task<bool> NameExistAsync(string name, Guid? id = null); 
+ 
+    /// <summary> 
+    /// 鑾峰彇鏈�澶ф帓搴忓彨鏂欒褰曡〃 
+    /// </summary> 
+    /// <returns></returns> 
+    Task<int> GetMaxSortAsync(); 
+ 
+    /// <summary> 
+    /// 鑾峰彇鍒嗛〉鍒楄〃鍙枡璁板綍琛� 
+    /// </summary> 
+    /// <param name="whereConditions"></param> 
+    /// <param name="sorting"></param> 
+    /// <param name="maxResultCount"></param> 
+    /// <param name="skipCount"></param> 
+    /// <param name="includeDetails"></param> 
+    /// <param name="cancellationToken"></param> 
+    /// <returns></returns> 
+    Task<List<CallMaterialOrderRecord>> GetListAsync(FunReturnResultModel<Expression<Func<CallMaterialOrderRecord, bool>>> whereConditions, string sorting = null, int maxResultCount = int.MaxValue, int skipCount = 0, bool includeDetails = false, CancellationToken cancellationToken = default); 
+ 
+    /// <summary> 
+    /// 鑾峰彇鎬绘暟鍙枡璁板綍琛� 
+    /// </summary> 
+    /// <param name="whereConditions"></param> 
+    /// <param name="cancellationToken"></param> 
+    /// <returns></returns> 
+    Task<long> GetCountAsync(FunReturnResultModel<Expression<Func<CallMaterialOrderRecord, bool>>> whereConditions, 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
new file mode 100644
index 0000000..f9842e2
--- /dev/null
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.EntityFrameworkCore/Repositories/EfCoreCallMaterialOrderRecordRepository.cs
@@ -0,0 +1,113 @@
+using CMS.Plugin.PipeLineLems.Domain.CallMaterialOrderRecord; 
+using CMS.Plugin.PipeLineLems.EntityFrameworkCore.Extensions; 
+using CmsQueryExtensions.Extension; 
+using Microsoft.EntityFrameworkCore; 
+using System.Linq.Dynamic.Core; 
+using System.Linq.Expressions; 
+using Volo.Abp.Domain.Repositories.EntityFrameworkCore; 
+using Volo.Abp.EntityFrameworkCore; 
+ 
+ 
+namespace CMS.Plugin.PipeLineLems.EntityFrameworkCore.Repositories; 
+ 
+/// <summary> 
+/// 鍙枡璁板綍琛ㄤ粨鍌ㄥ疄鐜� 
+/// </summary> 
+public class EfCoreCallMaterialOrderRecordRepository : EfCoreRepository<ICMSPluginDbContext, CallMaterialOrderRecord, Guid>, ICallMaterialOrderRecordRepository 
+{ 
+    /// <summary> 
+    /// Initializes a new instance of the <see cref="EfCoreCallMaterialOrderRecordRepository"/> class. 
+    /// </summary> 
+    /// <param name="dbContextProvider">The database context provider.</param> 
+    public EfCoreCallMaterialOrderRecordRepository(IDbContextProvider<ICMSPluginDbContext> dbContextProvider) 
+        : base(dbContextProvider) 
+    { 
+    } 
+ 
+    /// <summary> 
+    /// 鎸夌収鍚嶇О鏌ユ壘鍙枡璁板綍琛� 
+    /// </summary> 
+    /// <param name="name"></param> 
+    /// <param name="cancellationToken"></param> 
+    /// <returns></returns> 
+    public virtual async Task<CallMaterialOrderRecord> FindByNameAsync(string name, CancellationToken cancellationToken = default) 
+    { 
+        return await (await GetDbSetAsync()) 
+            .IncludeDetails() 
+            .Where(x => !x.IsDeleted) 
+            .OrderByDescending(x=>x.CreationTime)  
+            .FirstOrDefaultAsync(t => t.DataIdentifier == name, GetCancellationToken(cancellationToken)); 
+    } 
+ 
+    /// <summary> 
+    /// 楠岃瘉鍚嶇О鏄惁瀛樺湪鍙枡璁板綍琛� 
+    /// </summary> 
+    /// <param name="name">鏍¢獙鍊�</param> 
+    /// <param name="id"></param> 
+    /// <returns></returns> 
+    public async Task<bool> NameExistAsync(string name, Guid? id = null) 
+    { 
+        return await (await GetDbSetAsync()).WhereIf(id.HasValue, p => p.Id != id).Where(x => !x.IsDeleted).AnyAsync(x => x.DataIdentifier == name); 
+    } 
+ 
+    /// <summary> 
+    /// 鑾峰彇鏈�澶ф帓搴忓彨鏂欒褰曡〃 
+    /// </summary> 
+    /// <returns></returns> 
+    public async Task<int> GetMaxSortAsync() 
+    { 
+        var hasAny = await (await GetQueryableAsync()) 
+            .Where(x => !x.IsDeleted).AnyAsync(); 
+        if (!hasAny) 
+        { 
+            return 1; 
+        } 
+ 
+        var sort = await (await GetQueryableAsync()) 
+            .Where(x => !x.IsDeleted).MaxAsync(x => x.Sort); 
+        return sort + 1; 
+    } 
+ 
+    /// <summary> 
+    /// 鑾峰彇鍒嗛〉鍒楄〃鍙枡璁板綍琛� 
+    /// </summary> 
+    /// <param name="whereConditions"></param> 
+    /// <param name="sorting"></param> 
+    /// <param name="maxResultCount"></param> 
+    /// <param name="skipCount"></param> 
+    /// <param name="includeDetails"></param> 
+    /// <param name="cancellationToken"></param> 
+    /// <returns></returns> 
+    public async Task<List<CallMaterialOrderRecord>> GetListAsync(FunReturnResultModel<Expression<Func<CallMaterialOrderRecord, bool>>> whereConditions, string sorting = null, int maxResultCount = int.MaxValue, int skipCount = 0, bool includeDetails = false, CancellationToken cancellationToken = default) 
+    { 
+        return await (await GetDbSetAsync()) 
+            .IncludeDetails(includeDetails) 
+            .WhereIf(whereConditions != null, whereConditions.data) 
+            .Where(x => !x.IsDeleted) 
+            .OrderByDescending(x=>x.CreationTime) 
+            .PageBy(skipCount, maxResultCount) 
+            .ToListAsync(GetCancellationToken(cancellationToken)); 
+    } 
+ 
+    /// <summary> 
+    /// 鑾峰彇鎬绘暟鍙枡璁板綍琛� 
+    /// </summary> 
+    /// <param name="whereConditions"></param> 
+    /// <param name="cancellationToken"></param> 
+    /// <returns></returns> 
+    public async Task<long> GetCountAsync(FunReturnResultModel<Expression<Func<CallMaterialOrderRecord, bool>>> whereConditions, CancellationToken cancellationToken = default) 
+    { 
+        return await (await GetQueryableAsync()) 
+            .WhereIf(whereConditions != null, whereConditions.data) 
+            .Where(x => !x.IsDeleted) 
+            .CountAsync(cancellationToken: GetCancellationToken(cancellationToken)); 
+    } 
+ 
+ 
+    /// <inheritdoc /> 
+    public override async Task<IQueryable<CallMaterialOrderRecord>> WithDetailsAsync() 
+    { 
+        return (await GetQueryableAsync()) 
+            .Where(x => !x.IsDeleted).IncludeDetails(); 
+    } 
+} 
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.EntityFrameworkCore/Repositories/EfCoreCallMaterialOrderRepository.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.EntityFrameworkCore/Repositories/EfCoreCallMaterialOrderRepository.cs
new file mode 100644
index 0000000..1253904
--- /dev/null
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.EntityFrameworkCore/Repositories/EfCoreCallMaterialOrderRepository.cs
@@ -0,0 +1,113 @@
+using CMS.Plugin.PipeLineLems.Domain.CallMaterialOrder; 
+using CMS.Plugin.PipeLineLems.EntityFrameworkCore.Extensions; 
+using CmsQueryExtensions.Extension; 
+using Microsoft.EntityFrameworkCore; 
+using System.Linq.Dynamic.Core; 
+using System.Linq.Expressions; 
+using Volo.Abp.Domain.Repositories.EntityFrameworkCore; 
+using Volo.Abp.EntityFrameworkCore; 
+ 
+ 
+namespace CMS.Plugin.PipeLineLems.EntityFrameworkCore.Repositories; 
+ 
+/// <summary> 
+/// 鍙枡鍗曡〃浠撳偍瀹炵幇 
+/// </summary> 
+public class EfCoreCallMaterialOrderRepository : EfCoreRepository<ICMSPluginDbContext, CallMaterialOrder, Guid>, ICallMaterialOrderRepository 
+{ 
+    /// <summary> 
+    /// Initializes a new instance of the <see cref="EfCoreCallMaterialOrderRepository"/> class. 
+    /// </summary> 
+    /// <param name="dbContextProvider">The database context provider.</param> 
+    public EfCoreCallMaterialOrderRepository(IDbContextProvider<ICMSPluginDbContext> dbContextProvider) 
+        : base(dbContextProvider) 
+    { 
+    } 
+ 
+    /// <summary> 
+    /// 鎸夌収鍚嶇О鏌ユ壘鍙枡鍗曡〃 
+    /// </summary> 
+    /// <param name="name"></param> 
+    /// <param name="cancellationToken"></param> 
+    /// <returns></returns> 
+    public virtual async Task<CallMaterialOrder> FindByNameAsync(string name, CancellationToken cancellationToken = default) 
+    { 
+        return await (await GetDbSetAsync()) 
+            .IncludeDetails() 
+            .Where(x => !x.IsDeleted) 
+            .OrderByDescending(x=>x.CreationTime)  
+            .FirstOrDefaultAsync(t => t.DataIdentifier == name, GetCancellationToken(cancellationToken)); 
+    } 
+ 
+    /// <summary> 
+    /// 楠岃瘉鍚嶇О鏄惁瀛樺湪鍙枡鍗曡〃 
+    /// </summary> 
+    /// <param name="name">鏍¢獙鍊�</param> 
+    /// <param name="id"></param> 
+    /// <returns></returns> 
+    public async Task<bool> NameExistAsync(string name, Guid? id = null) 
+    { 
+        return await (await GetDbSetAsync()).WhereIf(id.HasValue, p => p.Id != id).Where(x => !x.IsDeleted).AnyAsync(x => x.DataIdentifier == name); 
+    } 
+ 
+    /// <summary> 
+    /// 鑾峰彇鏈�澶ф帓搴忓彨鏂欏崟琛� 
+    /// </summary> 
+    /// <returns></returns> 
+    public async Task<int> GetMaxSortAsync() 
+    { 
+        var hasAny = await (await GetQueryableAsync()) 
+            .Where(x => !x.IsDeleted).AnyAsync(); 
+        if (!hasAny) 
+        { 
+            return 1; 
+        } 
+ 
+        var sort = await (await GetQueryableAsync()) 
+            .Where(x => !x.IsDeleted).MaxAsync(x => x.Sort); 
+        return sort + 1; 
+    } 
+ 
+    /// <summary> 
+    /// 鑾峰彇鍒嗛〉鍒楄〃鍙枡鍗曡〃 
+    /// </summary> 
+    /// <param name="whereConditions"></param> 
+    /// <param name="sorting"></param> 
+    /// <param name="maxResultCount"></param> 
+    /// <param name="skipCount"></param> 
+    /// <param name="includeDetails"></param> 
+    /// <param name="cancellationToken"></param> 
+    /// <returns></returns> 
+    public async Task<List<CallMaterialOrder>> GetListAsync(FunReturnResultModel<Expression<Func<CallMaterialOrder, bool>>> whereConditions, string sorting = null, int maxResultCount = int.MaxValue, int skipCount = 0, bool includeDetails = false, CancellationToken cancellationToken = default) 
+    { 
+        return await (await GetDbSetAsync()) 
+            .IncludeDetails(includeDetails) 
+            .WhereIf(whereConditions != null, whereConditions.data) 
+            .Where(x => !x.IsDeleted) 
+            .OrderByDescending(x=>x.CreationTime) 
+            .PageBy(skipCount, maxResultCount) 
+            .ToListAsync(GetCancellationToken(cancellationToken)); 
+    } 
+ 
+    /// <summary> 
+    /// 鑾峰彇鎬绘暟鍙枡鍗曡〃 
+    /// </summary> 
+    /// <param name="whereConditions"></param> 
+    /// <param name="cancellationToken"></param> 
+    /// <returns></returns> 
+    public async Task<long> GetCountAsync(FunReturnResultModel<Expression<Func<CallMaterialOrder, bool>>> whereConditions, CancellationToken cancellationToken = default) 
+    { 
+        return await (await GetQueryableAsync()) 
+            .WhereIf(whereConditions != null, whereConditions.data) 
+            .Where(x => !x.IsDeleted) 
+            .CountAsync(cancellationToken: GetCancellationToken(cancellationToken)); 
+    } 
+ 
+ 
+    /// <inheritdoc /> 
+    public override async Task<IQueryable<CallMaterialOrder>> WithDetailsAsync() 
+    { 
+        return (await GetQueryableAsync()) 
+            .Where(x => !x.IsDeleted).IncludeDetails(); 
+    } 
+} 
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.MySQL/Migrations/20250511025035_Update1.Designer.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.MySQL/Migrations/20250511041027_Update1.Designer.cs
similarity index 97%
rename from PipeLineLems/server/src/CMS.Plugin.PipeLineLems.MySQL/Migrations/20250511025035_Update1.Designer.cs
rename to PipeLineLems/server/src/CMS.Plugin.PipeLineLems.MySQL/Migrations/20250511041027_Update1.Designer.cs
index 5d02775..78e4266 100644
--- a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.MySQL/Migrations/20250511025035_Update1.Designer.cs
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.MySQL/Migrations/20250511041027_Update1.Designer.cs
@@ -12,7 +12,7 @@
 namespace CMS.Plugin.PipeLineLems.MySQL.Migrations
 {
     [DbContext(typeof(CMSPluginDbContext))]
-    [Migration("20250511025035_Update1")]
+    [Migration("20250511041027_Update1")]
     partial class Update1
     {
         protected override void BuildTargetModel(ModelBuilder modelBuilder)
@@ -29,8 +29,8 @@
                         .ValueGeneratedOnAdd()
                         .HasColumnType("char(36)");
 
-                    b.Property<byte>("CallMaterialStatus")
-                        .HasColumnType("tinyint unsigned")
+                    b.Property<int>("CallMaterialStatus")
+                        .HasColumnType("int")
                         .HasComment("鍙枡鐘舵��");
 
                     b.Property<string>("ConcurrencyStamp")
@@ -176,8 +176,8 @@
                         .ValueGeneratedOnAdd()
                         .HasColumnType("char(36)");
 
-                    b.Property<byte>("CallMaterialStatus")
-                        .HasColumnType("tinyint unsigned")
+                    b.Property<int>("CallMaterialStatus")
+                        .HasColumnType("int")
                         .HasComment("鍙枡鐘舵��");
 
                     b.Property<string>("ConcurrencyStamp")
@@ -382,8 +382,8 @@
                         .ValueGeneratedOnAdd()
                         .HasColumnType("char(36)");
 
-                    b.Property<byte>("CallMaterialStatus")
-                        .HasColumnType("tinyint unsigned")
+                    b.Property<int>("CallMaterialStatus")
+                        .HasColumnType("int")
                         .HasComment("鍙枡鐘舵��");
 
                     b.Property<string>("ConcurrencyStamp")
@@ -629,8 +629,8 @@
                         .HasColumnType("varchar(256)")
                         .HasComment("娉曞叞鍏О鍘嬪姏");
 
-                    b.Property<byte>("WorkPlanStatus")
-                        .HasColumnType("tinyint unsigned")
+                    b.Property<int>("WorkPlanStatus")
+                        .HasColumnType("int")
                         .HasComment("璁″垝鐘舵��");
 
                     b.Property<string>("WorkpieceName")
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.MySQL/Migrations/20250511025035_Update1.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.MySQL/Migrations/20250511041027_Update1.cs
similarity index 97%
rename from PipeLineLems/server/src/CMS.Plugin.PipeLineLems.MySQL/Migrations/20250511025035_Update1.cs
rename to PipeLineLems/server/src/CMS.Plugin.PipeLineLems.MySQL/Migrations/20250511041027_Update1.cs
index 217edf9..34e010d 100644
--- a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.MySQL/Migrations/20250511025035_Update1.cs
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.MySQL/Migrations/20250511041027_Update1.cs
@@ -21,7 +21,7 @@
                         .Annotation("MySql:CharSet", "utf8mb4"),
                     MaterialMode = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "鍘熸枡鍨嬪彿")
                         .Annotation("MySql:CharSet", "utf8mb4"),
-                    CallMaterialStatus = table.Column<byte>(type: "tinyint unsigned", nullable: false, comment: "鍙枡鐘舵��"),
+                    CallMaterialStatus = table.Column<int>(type: "int", nullable: false, comment: "鍙枡鐘舵��"),
                     Quantity = table.Column<int>(type: "int", nullable: false, comment: "鍙枡鏁伴噺"),
                     WmsRetResult = table.Column<string>(type: "longtext", nullable: true, comment: "WMS杩斿洖缁撴灉")
                         .Annotation("MySql:CharSet", "utf8mb4"),
@@ -66,7 +66,7 @@
                         .Annotation("MySql:CharSet", "utf8mb4"),
                     MaterialMode = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "鍘熸枡鍨嬪彿")
                         .Annotation("MySql:CharSet", "utf8mb4"),
-                    CallMaterialStatus = table.Column<byte>(type: "tinyint unsigned", nullable: false, comment: "鍙枡鐘舵��"),
+                    CallMaterialStatus = table.Column<int>(type: "int", nullable: false, comment: "鍙枡鐘舵��"),
                     Quantity = table.Column<int>(type: "int", nullable: false, comment: "鍙枡鏁伴噺"),
                     WmsRetResult = table.Column<string>(type: "longtext", nullable: true, comment: "WMS杩斿洖缁撴灉")
                         .Annotation("MySql:CharSet", "utf8mb4"),
@@ -148,8 +148,8 @@
                     Id = table.Column<Guid>(type: "char(36)", nullable: false, collation: "ascii_general_ci"),
                     TaskCode = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: false, comment: "浠诲姟缂栫爜")
                         .Annotation("MySql:CharSet", "utf8mb4"),
-                    WorkPlanStatus = table.Column<byte>(type: "tinyint unsigned", nullable: false, comment: "璁″垝鐘舵��"),
-                    CallMaterialStatus = table.Column<byte>(type: "tinyint unsigned", nullable: false, comment: "鍙枡鐘舵��"),
+                    WorkPlanStatus = table.Column<int>(type: "int", nullable: false, comment: "璁″垝鐘舵��"),
+                    CallMaterialStatus = table.Column<int>(type: "int", nullable: false, comment: "鍙枡鐘舵��"),
                     DataIdentifier = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "鍘熸枡鏍囪瘑")
                         .Annotation("MySql:CharSet", "utf8mb4"),
                     MaterialMode = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "鍘熸枡鍨嬪彿")
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.MySQL/Migrations/CMSPluginDbContextModelSnapshot.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.MySQL/Migrations/CMSPluginDbContextModelSnapshot.cs
index 1845792..4c19fa8 100644
--- a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.MySQL/Migrations/CMSPluginDbContextModelSnapshot.cs
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.MySQL/Migrations/CMSPluginDbContextModelSnapshot.cs
@@ -27,8 +27,8 @@
                         .ValueGeneratedOnAdd()
                         .HasColumnType("char(36)");
 
-                    b.Property<byte>("CallMaterialStatus")
-                        .HasColumnType("tinyint unsigned")
+                    b.Property<int>("CallMaterialStatus")
+                        .HasColumnType("int")
                         .HasComment("鍙枡鐘舵��");
 
                     b.Property<string>("ConcurrencyStamp")
@@ -174,8 +174,8 @@
                         .ValueGeneratedOnAdd()
                         .HasColumnType("char(36)");
 
-                    b.Property<byte>("CallMaterialStatus")
-                        .HasColumnType("tinyint unsigned")
+                    b.Property<int>("CallMaterialStatus")
+                        .HasColumnType("int")
                         .HasComment("鍙枡鐘舵��");
 
                     b.Property<string>("ConcurrencyStamp")
@@ -380,8 +380,8 @@
                         .ValueGeneratedOnAdd()
                         .HasColumnType("char(36)");
 
-                    b.Property<byte>("CallMaterialStatus")
-                        .HasColumnType("tinyint unsigned")
+                    b.Property<int>("CallMaterialStatus")
+                        .HasColumnType("int")
                         .HasComment("鍙枡鐘舵��");
 
                     b.Property<string>("ConcurrencyStamp")
@@ -627,8 +627,8 @@
                         .HasColumnType("varchar(256)")
                         .HasComment("娉曞叞鍏О鍘嬪姏");
 
-                    b.Property<byte>("WorkPlanStatus")
-                        .HasColumnType("tinyint unsigned")
+                    b.Property<int>("WorkPlanStatus")
+                        .HasColumnType("int")
                         .HasComment("璁″垝鐘舵��");
 
                     b.Property<string>("WorkpieceName")
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Controller/CallMaterialOrderController.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Controller/CallMaterialOrderController.cs
new file mode 100644
index 0000000..7d66f61
--- /dev/null
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Controller/CallMaterialOrderController.cs
@@ -0,0 +1,188 @@
+using Ao.Lang; 
+using CMS.Extensions.Abp.AspNetCore.Mvc.Filters; 
+using CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.CallMaterialOrder; 
+using CMS.Plugin.PipeLineLems.Application.Contracts.Services; 
+using Microsoft.AspNetCore.Authorization; 
+using Microsoft.AspNetCore.Http; 
+using Microsoft.AspNetCore.Mvc; 
+using MiniExcelLibs; 
+using System.Reflection; 
+using Volo.Abp; 
+using Volo.Abp.Application.Dtos; 
+ 
+namespace CMS.Plugin.PipeLineLems.Controller 
+{ 
+    /// <summary> 
+    /// 鍙枡鍗曡〃鏈嶅姟 
+    /// </summary> 
+    [ApiController] 
+    [TypeFilter(typeof(CMSLanguageFilter))] 
+    [TypeFilter(typeof(CMSUowActionFilter))] 
+    [TypeFilter(typeof(CMSAuditActionFilter))] 
+    [TypeFilter(typeof(CMSExceptionFilter))] 
+    [Route("api/v{version:apiVersion}/PipeLineLems/[controller]")] 
+    public class CallMaterialOrderController : ControllerBase 
+    { 
+        private readonly ICallMaterialOrderAppService _callMaterialOrderAppService; 
+ 
+        /// <summary> 
+        /// Initializes a new instance of the <see cref="CallMaterialOrderController"/> class. 
+        /// </summary> 
+        /// <param name="callMaterialOrderAppService">The callMaterialOrder application service.</param> 
+        public CallMaterialOrderController(ICallMaterialOrderAppService callMaterialOrderAppService) 
+        { 
+            _callMaterialOrderAppService = callMaterialOrderAppService; 
+        } 
+ 
+        /// <summary> 
+        /// 鑾峰彇鍙枡鍗曡〃 
+        /// </summary> 
+        /// <param name="id">鏍囪瘑绗�.</param> 
+        /// <returns></returns> 
+        [HttpGet] 
+        [Route("{id}")] 
+        public virtual Task<CallMaterialOrderDto> GetAsync(Guid id) 
+        { 
+            return _callMaterialOrderAppService.GetAsync(id); 
+        } 
+ 
+        /// <summary> 
+        /// 鍒嗛〉鑾峰彇鍙枡鍗曡〃鐨勫垪琛�. 
+        /// </summary> 
+        /// <param name="input">杈撳叆.</param> 
+        /// <returns></returns> 
+        [HttpGet] 
+        [Route("Page")] 
+        public virtual Task<PagedResultDto<CallMaterialOrderDto>> GetListAsync([FromQuery] GetCallMaterialOrderInput input) 
+        { 
+            return _callMaterialOrderAppService.GetListAsync(input); 
+        } 
+ 
+        /// <summary> 
+        /// 鍒涘缓鍙枡鍗曡〃 
+        /// </summary> 
+        /// <param name="input">杈撳叆.</param> 
+        /// <returns></returns> 
+        //[Authorize] 
+        [HttpPost] 
+        public virtual Task<CallMaterialOrderDto> CreateAsync(CallMaterialOrderCreateDto input) 
+        { 
+            return _callMaterialOrderAppService.CreateAsync(input); 
+        } 
+ 
+        /// <summary> 
+        /// 鏇存柊鍙枡鍗曡〃 
+        /// </summary> 
+        /// <param name="id">鏍囪瘑绗�.</param> 
+        /// <param name="input">杈撳叆.</param> 
+        /// <returns></returns> 
+        //[Authorize] 
+        [HttpPut] 
+        [Route("{id}")] 
+        public virtual Task<CallMaterialOrderDto> UpdateAsync(Guid id, CallMaterialOrderUpdateDto input) 
+        { 
+            return _callMaterialOrderAppService.UpdateAsync(id, input); 
+        } 
+ 
+        /// <summary> 
+        /// 鍏嬮殕鍙枡鍗曡〃 
+        /// </summary> 
+        /// <param name="ids">Id闆嗗悎.</param> 
+        /// <returns></returns> 
+        //[Authorize] 
+        [HttpPost] 
+        [Route("Clone")] 
+        public virtual Task<List<CallMaterialOrderDto>> CloneAsync([FromBody] IEnumerable<Guid> ids) 
+        { 
+            return _callMaterialOrderAppService.CloneAsync(ids); 
+        } 
+ 
+        /// <summary> 
+        /// 鍒犻櫎鍙枡鍗曡〃 
+        /// </summary> 
+        /// <param name="id">鏍囪瘑绗�.</param> 
+        /// <returns></returns> 
+        //[Authorize] 
+        [HttpDelete] 
+        [Route("{id}")] 
+        public virtual Task DeleteAsync(Guid id) 
+        { 
+            return _callMaterialOrderAppService.DeleteAsync(id); 
+        } 
+ 
+        /// <summary> 
+        /// 鎵归噺鍒犻櫎鍙枡鍗曡〃 
+        /// </summary> 
+        /// <param name="ids">The ids.</param> 
+        /// <returns></returns> 
+        //[Authorize] 
+        [HttpDelete] 
+        public virtual Task DeleteAsync([FromBody] IEnumerable<Guid> ids) 
+        { 
+            return _callMaterialOrderAppService.DeleteManyAsync(ids); 
+        } 
+ 
+        /// <summary> 
+        /// 璋冩暣鎺掑簭鍙枡鍗曡〃 
+        /// </summary> 
+        /// <param name="id">鏍囪瘑绗�.</param> 
+        /// <returns></returns> 
+        [HttpPut] 
+        [Route("{id}/AdjustSort/{sort}")] 
+        public virtual Task AdjustSortAsync(Guid id, int sort) 
+        { 
+            return _callMaterialOrderAppService.AdjustSortAsync(id, sort); 
+        } 
+ 
+        /// <summary> 
+        /// 瀵煎叆鍙枡鍗曡〃 
+        /// </summary> 
+        /// <returns></returns> 
+        [Authorize] 
+        [HttpPost] 
+        [Route("Import")] 
+        public virtual async Task<IActionResult> ImportAsync(IFormFile file) 
+        { 
+            using var stream = new MemoryStream(); 
+            await file.CopyToAsync(stream); 
+            stream.Seek(0L, SeekOrigin.Begin); 
+ 
+            var sheetNames = stream.GetSheetNames(); 
+            var callMaterialOrderRows = sheetNames.Contains("閰嶇疆") ? MiniExcel.Query<CallMaterialOrdersImportModel.CallMaterialOrderImportModel>(stream, sheetName: "閰嶇疆").ToList() : new(); 
+ 
+            if (!callMaterialOrderRows.Any()) 
+            { 
+                throw new UserFriendlyException("璇锋鏌ュ鍏ョ殑琛ㄦ牸"); 
+            } 
+ 
+            await _callMaterialOrderAppService.ImportAsync(new CallMaterialOrdersImportModel 
+            { 
+                CallMaterialOrders = callMaterialOrderRows, 
+            }); 
+ 
+            return Ok(); 
+        } 
+ 
+        /// <summary> 
+        /// 瀵煎嚭鍙枡鍗曡〃 
+        /// </summary> 
+        /// <returns></returns> 
+        [HttpGet] 
+        [Route("Export")] 
+        public virtual async Task<IActionResult> ExportAsync([FromQuery] GetCallMaterialOrderInput input) 
+        { 
+            input.MaxResultCount = int.MaxValue; 
+            var exportData = await _callMaterialOrderAppService.ExportAsync(input); 
+            var templatePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"Resources/Templates/CallMaterialOrder瀵煎嚭妯℃澘.xlsx"); 
+            if (!System.IO.File.Exists(templatePath)) 
+            { 
+                templatePath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ?? string.Empty, $"Resources/Templates/CallMaterialOrder瀵煎嚭妯℃澘.xlsx"); 
+            } 
+ 
+            var memoryStream = new MemoryStream(); 
+            await memoryStream.SaveAsByTemplateAsync(templatePath, exportData.Sheets); 
+            memoryStream.Seek(0L, SeekOrigin.Begin); 
+            return new FileStreamResult(memoryStream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") { FileDownloadName = $"{exportData.FileName}_{DateTime.Now:yyyyMMddhhmmss}.xlsx" }; 
+        } 
+    } 
+} 
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Controller/CallMaterialOrderRecordController.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Controller/CallMaterialOrderRecordController.cs
new file mode 100644
index 0000000..84d8020
--- /dev/null
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Controller/CallMaterialOrderRecordController.cs
@@ -0,0 +1,188 @@
+using Ao.Lang; 
+using CMS.Extensions.Abp.AspNetCore.Mvc.Filters; 
+using CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.CallMaterialOrderRecord; 
+using CMS.Plugin.PipeLineLems.Application.Contracts.Services; 
+using Microsoft.AspNetCore.Authorization; 
+using Microsoft.AspNetCore.Http; 
+using Microsoft.AspNetCore.Mvc; 
+using MiniExcelLibs; 
+using System.Reflection; 
+using Volo.Abp; 
+using Volo.Abp.Application.Dtos; 
+ 
+namespace CMS.Plugin.PipeLineLems.Controller 
+{ 
+    /// <summary> 
+    /// 鍙枡璁板綍琛ㄦ湇鍔� 
+    /// </summary> 
+    [ApiController] 
+    [TypeFilter(typeof(CMSLanguageFilter))] 
+    [TypeFilter(typeof(CMSUowActionFilter))] 
+    [TypeFilter(typeof(CMSAuditActionFilter))] 
+    [TypeFilter(typeof(CMSExceptionFilter))] 
+    [Route("api/v{version:apiVersion}/PipeLineLems/[controller]")] 
+    public class CallMaterialOrderRecordController : ControllerBase 
+    { 
+        private readonly ICallMaterialOrderRecordAppService _callMaterialOrderRecordAppService; 
+ 
+        /// <summary> 
+        /// Initializes a new instance of the <see cref="CallMaterialOrderRecordController"/> class. 
+        /// </summary> 
+        /// <param name="callMaterialOrderRecordAppService">The callMaterialOrderRecord application service.</param> 
+        public CallMaterialOrderRecordController(ICallMaterialOrderRecordAppService callMaterialOrderRecordAppService) 
+        { 
+            _callMaterialOrderRecordAppService = callMaterialOrderRecordAppService; 
+        } 
+ 
+        /// <summary> 
+        /// 鑾峰彇鍙枡璁板綍琛� 
+        /// </summary> 
+        /// <param name="id">鏍囪瘑绗�.</param> 
+        /// <returns></returns> 
+        [HttpGet] 
+        [Route("{id}")] 
+        public virtual Task<CallMaterialOrderRecordDto> GetAsync(Guid id) 
+        { 
+            return _callMaterialOrderRecordAppService.GetAsync(id); 
+        } 
+ 
+        /// <summary> 
+        /// 鍒嗛〉鑾峰彇鍙枡璁板綍琛ㄧ殑鍒楄〃. 
+        /// </summary> 
+        /// <param name="input">杈撳叆.</param> 
+        /// <returns></returns> 
+        [HttpGet] 
+        [Route("Page")] 
+        public virtual Task<PagedResultDto<CallMaterialOrderRecordDto>> GetListAsync([FromQuery] GetCallMaterialOrderRecordInput input) 
+        { 
+            return _callMaterialOrderRecordAppService.GetListAsync(input); 
+        } 
+ 
+        /// <summary> 
+        /// 鍒涘缓鍙枡璁板綍琛� 
+        /// </summary> 
+        /// <param name="input">杈撳叆.</param> 
+        /// <returns></returns> 
+        //[Authorize] 
+        [HttpPost] 
+        public virtual Task<CallMaterialOrderRecordDto> CreateAsync(CallMaterialOrderRecordCreateDto input) 
+        { 
+            return _callMaterialOrderRecordAppService.CreateAsync(input); 
+        } 
+ 
+        /// <summary> 
+        /// 鏇存柊鍙枡璁板綍琛� 
+        /// </summary> 
+        /// <param name="id">鏍囪瘑绗�.</param> 
+        /// <param name="input">杈撳叆.</param> 
+        /// <returns></returns> 
+        //[Authorize] 
+        [HttpPut] 
+        [Route("{id}")] 
+        public virtual Task<CallMaterialOrderRecordDto> UpdateAsync(Guid id, CallMaterialOrderRecordUpdateDto input) 
+        { 
+            return _callMaterialOrderRecordAppService.UpdateAsync(id, input); 
+        } 
+ 
+        /// <summary> 
+        /// 鍏嬮殕鍙枡璁板綍琛� 
+        /// </summary> 
+        /// <param name="ids">Id闆嗗悎.</param> 
+        /// <returns></returns> 
+        //[Authorize] 
+        [HttpPost] 
+        [Route("Clone")] 
+        public virtual Task<List<CallMaterialOrderRecordDto>> CloneAsync([FromBody] IEnumerable<Guid> ids) 
+        { 
+            return _callMaterialOrderRecordAppService.CloneAsync(ids); 
+        } 
+ 
+        /// <summary> 
+        /// 鍒犻櫎鍙枡璁板綍琛� 
+        /// </summary> 
+        /// <param name="id">鏍囪瘑绗�.</param> 
+        /// <returns></returns> 
+        //[Authorize] 
+        [HttpDelete] 
+        [Route("{id}")] 
+        public virtual Task DeleteAsync(Guid id) 
+        { 
+            return _callMaterialOrderRecordAppService.DeleteAsync(id); 
+        } 
+ 
+        /// <summary> 
+        /// 鎵归噺鍒犻櫎鍙枡璁板綍琛� 
+        /// </summary> 
+        /// <param name="ids">The ids.</param> 
+        /// <returns></returns> 
+        //[Authorize] 
+        [HttpDelete] 
+        public virtual Task DeleteAsync([FromBody] IEnumerable<Guid> ids) 
+        { 
+            return _callMaterialOrderRecordAppService.DeleteManyAsync(ids); 
+        } 
+ 
+        /// <summary> 
+        /// 璋冩暣鎺掑簭鍙枡璁板綍琛� 
+        /// </summary> 
+        /// <param name="id">鏍囪瘑绗�.</param> 
+        /// <returns></returns> 
+        [HttpPut] 
+        [Route("{id}/AdjustSort/{sort}")] 
+        public virtual Task AdjustSortAsync(Guid id, int sort) 
+        { 
+            return _callMaterialOrderRecordAppService.AdjustSortAsync(id, sort); 
+        } 
+ 
+        /// <summary> 
+        /// 瀵煎叆鍙枡璁板綍琛� 
+        /// </summary> 
+        /// <returns></returns> 
+        [Authorize] 
+        [HttpPost] 
+        [Route("Import")] 
+        public virtual async Task<IActionResult> ImportAsync(IFormFile file) 
+        { 
+            using var stream = new MemoryStream(); 
+            await file.CopyToAsync(stream); 
+            stream.Seek(0L, SeekOrigin.Begin); 
+ 
+            var sheetNames = stream.GetSheetNames(); 
+            var callMaterialOrderRecordRows = sheetNames.Contains("閰嶇疆") ? MiniExcel.Query<CallMaterialOrderRecordsImportModel.CallMaterialOrderRecordImportModel>(stream, sheetName: "閰嶇疆").ToList() : new(); 
+ 
+            if (!callMaterialOrderRecordRows.Any()) 
+            { 
+                throw new UserFriendlyException("璇锋鏌ュ鍏ョ殑琛ㄦ牸"); 
+            } 
+ 
+            await _callMaterialOrderRecordAppService.ImportAsync(new CallMaterialOrderRecordsImportModel 
+            { 
+                CallMaterialOrderRecords = callMaterialOrderRecordRows, 
+            }); 
+ 
+            return Ok(); 
+        } 
+ 
+        /// <summary> 
+        /// 瀵煎嚭鍙枡璁板綍琛� 
+        /// </summary> 
+        /// <returns></returns> 
+        [HttpGet] 
+        [Route("Export")] 
+        public virtual async Task<IActionResult> ExportAsync([FromQuery] GetCallMaterialOrderRecordInput input) 
+        { 
+            input.MaxResultCount = int.MaxValue; 
+            var exportData = await _callMaterialOrderRecordAppService.ExportAsync(input); 
+            var templatePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"Resources/Templates/CallMaterialOrderRecord瀵煎嚭妯℃澘.xlsx"); 
+            if (!System.IO.File.Exists(templatePath)) 
+            { 
+                templatePath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ?? string.Empty, $"Resources/Templates/CallMaterialOrderRecord瀵煎嚭妯℃澘.xlsx"); 
+            } 
+ 
+            var memoryStream = new MemoryStream(); 
+            await memoryStream.SaveAsByTemplateAsync(templatePath, exportData.Sheets); 
+            memoryStream.Seek(0L, SeekOrigin.Begin); 
+            return new FileStreamResult(memoryStream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") { FileDownloadName = $"{exportData.FileName}_{DateTime.Now:yyyyMMddhhmmss}.xlsx" }; 
+        } 
+    } 
+} 
diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Controller/WorkPlanController.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Controller/WorkPlanController.cs
index 8d564bd4..e792517 100644
--- a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Controller/WorkPlanController.cs
+++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Controller/WorkPlanController.cs
@@ -1,91 +1,75 @@
-using Ao.Lang;
-using AutoMapper.Internal.Mappers;
-using CMS.Extensions.Abp.AspNetCore.Mvc.Filters;
-using CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.WorkPlan;
-using CMS.Plugin.PipeLineLems.Application.Contracts.Services;
-using CMS.Plugin.PipeLineLems.Application.Implements;
-using CMS.Plugin.PipeLineLems.Domain.WorkPlan;
-using Microsoft.AspNetCore.Authorization;
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using MiniExcelLibs;
-using System.Reflection;
-using Volo.Abp;
-using Volo.Abp.Application.Dtos;
-
-namespace CMS.Plugin.PipeLineLems.Controller
-{
+using Ao.Lang; 
+using CMS.Extensions.Abp.AspNetCore.Mvc.Filters; 
+using CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.WorkPlan; 
+using CMS.Plugin.PipeLineLems.Application.Contracts.Services; 
+using Microsoft.AspNetCore.Authorization; 
+using Microsoft.AspNetCore.Http; 
+using Microsoft.AspNetCore.Mvc; 
+using MiniExcelLibs; 
+using System.Reflection; 
+using Volo.Abp; 
+using Volo.Abp.Application.Dtos; 
+ 
+namespace CMS.Plugin.PipeLineLems.Controller 
+{ 
     /// <summary> 
     /// 浣滀笟璁″垝琛ㄦ湇鍔� 
     /// </summary> 
-    [ApiController]
-    [TypeFilter(typeof(CMSLanguageFilter))]
-    [TypeFilter(typeof(CMSUowActionFilter))]
-    [TypeFilter(typeof(CMSAuditActionFilter))]
-    [TypeFilter(typeof(CMSExceptionFilter))]
-    [Route("api/v{version:apiVersion}/PipeLineLems/[controller]")]
-    public class WorkPlanController : ControllerBase
-    {
-        private readonly IWorkPlanAppService _workPlanAppService;
-
-
-        /// <summary>
-        /// 鑾峰彇鐢熶骇璁″垝.
-        /// </summary>
-        /// <param name="input">鏍囪瘑绗�.</param>
-        /// <returns></returns>
-        [HttpPost]
-        [Route("GetWorkPlanByAps")]
-        public virtual async Task<MesOrderResponse> CreateWorkPlanByApsAsync([FromBody] List<WorkPlanInput> input)
-        {
-            return await _workPlanAppService.CreatebyApsAsync(input);
-        }
-
+    [ApiController] 
+    [TypeFilter(typeof(CMSLanguageFilter))] 
+    [TypeFilter(typeof(CMSUowActionFilter))] 
+    [TypeFilter(typeof(CMSAuditActionFilter))] 
+    [TypeFilter(typeof(CMSExceptionFilter))] 
+    [Route("api/v{version:apiVersion}/PipeLineLems/[controller]")] 
+    public class WorkPlanController : ControllerBase 
+    { 
+        private readonly IWorkPlanAppService _workPlanAppService; 
+ 
         /// <summary> 
         /// Initializes a new instance of the <see cref="WorkPlanController"/> class. 
         /// </summary> 
         /// <param name="workPlanAppService">The workPlan application service.</param> 
-        public WorkPlanController(IWorkPlanAppService workPlanAppService)
-        {
-            _workPlanAppService = workPlanAppService;
-        }
-
+        public WorkPlanController(IWorkPlanAppService workPlanAppService) 
+        { 
+            _workPlanAppService = workPlanAppService; 
+        } 
+ 
         /// <summary> 
         /// 鑾峰彇浣滀笟璁″垝琛� 
         /// </summary> 
         /// <param name="id">鏍囪瘑绗�.</param> 
         /// <returns></returns> 
-        [HttpGet]
-        [Route("{id}")]
-        public virtual Task<WorkPlanDto> GetAsync(Guid id)
-        {
-            return _workPlanAppService.GetAsync(id);
-        }
-
+        [HttpGet] 
+        [Route("{id}")] 
+        public virtual Task<WorkPlanDto> GetAsync(Guid id) 
+        { 
+            return _workPlanAppService.GetAsync(id); 
+        } 
+ 
         /// <summary> 
         /// 鍒嗛〉鑾峰彇浣滀笟璁″垝琛ㄧ殑鍒楄〃. 
         /// </summary> 
         /// <param name="input">杈撳叆.</param> 
         /// <returns></returns> 
-        [HttpGet]
-        [Route("Page")]
-        public virtual Task<PagedResultDto<WorkPlanDto>> GetListAsync([FromQuery] GetWorkPlanInput input)
-        {
-            return _workPlanAppService.GetListAsync(input);
-        }
-
+        [HttpGet] 
+        [Route("Page")] 
+        public virtual Task<PagedResultDto<WorkPlanDto>> GetListAsync([FromQuery] GetWorkPlanInput input) 
+        { 
+            return _workPlanAppService.GetListAsync(input); 
+        } 
+ 
         /// <summary> 
         /// 鍒涘缓浣滀笟璁″垝琛� 
         /// </summary> 
         /// <param name="input">杈撳叆.</param> 
         /// <returns></returns> 
         //[Authorize] 
-        [HttpPost]
-        public virtual Task<WorkPlanDto> CreateAsync(WorkPlanCreateDto input)
-        {
-            return _workPlanAppService.CreateAsync(input);
-        }
-
+        [HttpPost] 
+        public virtual Task<WorkPlanDto> CreateAsync(WorkPlanCreateDto input) 
+        { 
+            return _workPlanAppService.CreateAsync(input); 
+        } 
+ 
         /// <summary> 
         /// 鏇存柊浣滀笟璁″垝琛� 
         /// </summary> 
@@ -93,113 +77,112 @@
         /// <param name="input">杈撳叆.</param> 
         /// <returns></returns> 
         //[Authorize] 
-        [HttpPut]
-        [Route("{id}")]
-        public virtual Task<WorkPlanDto> UpdateAsync(Guid id, WorkPlanUpdateDto input)
-        {
-            return _workPlanAppService.UpdateAsync(id, input);
-        }
-
+        [HttpPut] 
+        [Route("{id}")] 
+        public virtual Task<WorkPlanDto> UpdateAsync(Guid id, WorkPlanUpdateDto input) 
+        { 
+            return _workPlanAppService.UpdateAsync(id, input); 
+        } 
+ 
         /// <summary> 
         /// 鍏嬮殕浣滀笟璁″垝琛� 
         /// </summary> 
         /// <param name="ids">Id闆嗗悎.</param> 
         /// <returns></returns> 
         //[Authorize] 
-        [HttpPost]
-        [Route("Clone")]
-        public virtual Task<List<WorkPlanDto>> CloneAsync([FromBody] IEnumerable<Guid> ids)
-        {
-            return _workPlanAppService.CloneAsync(ids);
-        }
-
+        [HttpPost] 
+        [Route("Clone")] 
+        public virtual Task<List<WorkPlanDto>> CloneAsync([FromBody] IEnumerable<Guid> ids) 
+        { 
+            return _workPlanAppService.CloneAsync(ids); 
+        } 
+ 
         /// <summary> 
         /// 鍒犻櫎浣滀笟璁″垝琛� 
         /// </summary> 
         /// <param name="id">鏍囪瘑绗�.</param> 
         /// <returns></returns> 
         //[Authorize] 
-        [HttpDelete]
-        [Route("{id}")]
-        public virtual Task DeleteAsync(Guid id)
-        {
-            return _workPlanAppService.DeleteAsync(id);
-        }
-
+        [HttpDelete] 
+        [Route("{id}")] 
+        public virtual Task DeleteAsync(Guid id) 
+        { 
+            return _workPlanAppService.DeleteAsync(id); 
+        } 
+ 
         /// <summary> 
         /// 鎵归噺鍒犻櫎浣滀笟璁″垝琛� 
         /// </summary> 
         /// <param name="ids">The ids.</param> 
         /// <returns></returns> 
         //[Authorize] 
-        [HttpDelete]
-        public virtual Task DeleteAsync([FromBody] IEnumerable<Guid> ids)
-        {
-            return _workPlanAppService.DeleteManyAsync(ids);
-        }
-
+        [HttpDelete] 
+        public virtual Task DeleteAsync([FromBody] IEnumerable<Guid> ids) 
+        { 
+            return _workPlanAppService.DeleteManyAsync(ids); 
+        } 
+ 
         /// <summary> 
         /// 璋冩暣鎺掑簭浣滀笟璁″垝琛� 
         /// </summary> 
         /// <param name="id">鏍囪瘑绗�.</param> 
         /// <returns></returns> 
-        [HttpPut]
-        [Route("{id}/AdjustSort/{sort}")]
-        public virtual Task AdjustSortAsync(Guid id, int sort)
-        {
-            return _workPlanAppService.AdjustSortAsync(id, sort);
-        }
-
+        [HttpPut] 
+        [Route("{id}/AdjustSort/{sort}")] 
+        public virtual Task AdjustSortAsync(Guid id, int sort) 
+        { 
+            return _workPlanAppService.AdjustSortAsync(id, sort); 
+        } 
+ 
         /// <summary> 
         /// 瀵煎叆浣滀笟璁″垝琛� 
         /// </summary> 
         /// <returns></returns> 
-        [Authorize]
-        [HttpPost]
-        [Route("Import")]
-        public virtual async Task<IActionResult> ImportAsync(IFormFile file)
-        {
-            using var stream = new MemoryStream();
-            await file.CopyToAsync(stream);
-            stream.Seek(0L, SeekOrigin.Begin);
-
-            var sheetNames = stream.GetSheetNames();
-            var workPlanRows = sheetNames.Contains("閰嶇疆") ? MiniExcel.Query<WorkPlansImportModel.WorkPlanImportModel>(stream, sheetName: "閰嶇疆").ToList() : new();
-
-            if (!workPlanRows.Any())
-            {
-                throw new UserFriendlyException("璇锋鏌ュ鍏ョ殑琛ㄦ牸");
-            }
-
-
-            await _workPlanAppService.ImportAsync(new WorkPlansImportModel
-            {
-                WorkPlans = workPlanRows,
-            });
-
-            return Ok();
-        }
-
+        [Authorize] 
+        [HttpPost] 
+        [Route("Import")] 
+        public virtual async Task<IActionResult> ImportAsync(IFormFile file) 
+        { 
+            using var stream = new MemoryStream(); 
+            await file.CopyToAsync(stream); 
+            stream.Seek(0L, SeekOrigin.Begin); 
+ 
+            var sheetNames = stream.GetSheetNames(); 
+            var workPlanRows = sheetNames.Contains("閰嶇疆") ? MiniExcel.Query<WorkPlansImportModel.WorkPlanImportModel>(stream, sheetName: "閰嶇疆").ToList() : new(); 
+ 
+            if (!workPlanRows.Any()) 
+            { 
+                throw new UserFriendlyException("璇锋鏌ュ鍏ョ殑琛ㄦ牸"); 
+            } 
+ 
+            await _workPlanAppService.ImportAsync(new WorkPlansImportModel 
+            { 
+                WorkPlans = workPlanRows, 
+            }); 
+ 
+            return Ok(); 
+        } 
+ 
         /// <summary> 
         /// 瀵煎嚭浣滀笟璁″垝琛� 
         /// </summary> 
         /// <returns></returns> 
-        [HttpGet]
-        [Route("Export")]
-        public virtual async Task<IActionResult> ExportAsync([FromQuery] GetWorkPlanInput input)
-        {
-            input.MaxResultCount = int.MaxValue;
-            var exportData = await _workPlanAppService.ExportAsync(input);
-            var templatePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"Resources/Templates/WorkPlan瀵煎嚭妯℃澘.xlsx");
-            if (!System.IO.File.Exists(templatePath))
-            {
-                templatePath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ?? string.Empty, $"Resources/Templates/WorkPlan瀵煎嚭妯℃澘.xlsx");
-            }
-
-            var memoryStream = new MemoryStream();
-            await memoryStream.SaveAsByTemplateAsync(templatePath, exportData.Sheets);
-            memoryStream.Seek(0L, SeekOrigin.Begin);
-            return new FileStreamResult(memoryStream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") { FileDownloadName = $"{exportData.FileName}_{DateTime.Now:yyyyMMddhhmmss}.xlsx" };
-        }
-    }
-}
+        [HttpGet] 
+        [Route("Export")] 
+        public virtual async Task<IActionResult> ExportAsync([FromQuery] GetWorkPlanInput input) 
+        { 
+            input.MaxResultCount = int.MaxValue; 
+            var exportData = await _workPlanAppService.ExportAsync(input); 
+            var templatePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"Resources/Templates/WorkPlan瀵煎嚭妯℃澘.xlsx"); 
+            if (!System.IO.File.Exists(templatePath)) 
+            { 
+                templatePath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ?? string.Empty, $"Resources/Templates/WorkPlan瀵煎嚭妯℃澘.xlsx"); 
+            } 
+ 
+            var memoryStream = new MemoryStream(); 
+            await memoryStream.SaveAsByTemplateAsync(templatePath, exportData.Sheets); 
+            memoryStream.Seek(0L, SeekOrigin.Begin); 
+            return new FileStreamResult(memoryStream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") { FileDownloadName = $"{exportData.FileName}_{DateTime.Now:yyyyMMddhhmmss}.xlsx" }; 
+        } 
+    } 
+} 
diff --git "a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Resources/Templates/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"
new file mode 100644
index 0000000..53546f3
--- /dev/null
+++ "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"
new file mode 100644
index 0000000..caccfc1
--- /dev/null
+++ "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
diff --git "a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Resources/Templates/WorkPlan\345\257\274\345\207\272\346\250\241\346\235\277.xlsx" "b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Resources/Templates/WorkPlan\345\257\274\345\207\272\346\250\241\346\235\277.xlsx"
index d268187..38f4583 100644
--- "a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Resources/Templates/WorkPlan\345\257\274\345\207\272\346\250\241\346\235\277.xlsx"
+++ "b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Resources/Templates/WorkPlan\345\257\274\345\207\272\346\250\241\346\235\277.xlsx"
Binary files differ

--
Gitblit v1.9.3