2
schangxiang@126.com
2025-05-11 4d916744ba1ba9066d1ecf809f43ddddb817b26b
2
已添加28个文件
已重命名2个文件
已修改15个文件
3366 ■■■■■ 文件已修改
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/CallMaterialOrderCreateDto.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/CallMaterialOrderCreateOrUpdateDtoBase.cs 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/CallMaterialOrderDto.cs 166 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/CallMaterialOrderExportModel.cs 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/CallMaterialOrderUpdateDto.cs 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/CallMaterialOrdersImportModel.cs 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/GetCallMaterialOrderInput.cs 272 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/CallMaterialOrderRecordCreateDto.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/CallMaterialOrderRecordCreateOrUpdateDtoBase.cs 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/CallMaterialOrderRecordDto.cs 146 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/CallMaterialOrderRecordExportModel.cs 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/CallMaterialOrderRecordUpdateDto.cs 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/CallMaterialOrderRecordsImportModel.cs 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/GetCallMaterialOrderRecordInput.cs 232 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkPlan/GetWorkPlanInput.cs 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkPlan/WorkPlanCreateOrUpdateDtoBase.cs 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkPlan/WorkPlanDto.cs 35 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkPlan/WorkPlanExportModel.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkPlan/WorkPlanInput.cs 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Services/ICallMaterialOrderAppService.cs 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Services/ICallMaterialOrderRecordAppService.cs 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Services/IWorkPlanAppService.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/CallMaterialOrderAppService.cs 416 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/CallMaterialOrderRecordAppService.cs 416 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/SharedService.cs 133 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/WorkPlanAppService.cs 46 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/MapperProfiles/CallMaterialOrderAutoMapperProfile.cs 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/MapperProfiles/CallMaterialOrderRecordAutoMapperProfile.cs 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/MapperProfiles/WorkPlanAutoMapperProfile.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Domain.Shared/Enums/CallMaterialStatusEnum.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Domain.Shared/Enums/PipeLineLemsStatus.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Domain.Shared/Enums/WorkPlanStatusEnum.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Domain/CallMaterialOrder/ICallMaterialOrderRepository.cs 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Domain/CallMaterialOrderRecord/ICallMaterialOrderRecordRepository.cs 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.EntityFrameworkCore/Repositories/EfCoreCallMaterialOrderRecordRepository.cs 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.EntityFrameworkCore/Repositories/EfCoreCallMaterialOrderRepository.cs 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.MySQL/Migrations/20250511041027_Update1.Designer.cs 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.MySQL/Migrations/20250511041027_Update1.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.MySQL/Migrations/CMSPluginDbContextModelSnapshot.cs 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Controller/CallMaterialOrderController.cs 188 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Controller/CallMaterialOrderRecordController.cs 188 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Controller/WorkPlanController.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Resources/Templates/CallMaterialOrderRecord导出模板.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Resources/Templates/CallMaterialOrder导出模板.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Resources/Templates/WorkPlan导出模板.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
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;
}
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>
        /// åˆ›å»ºäººID
        /// </summary>
        public string? CreatorId { get; set; }
        /// <summary>
        /// ä¿®æ”¹äººID
        /// </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)
    {
    }
}
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>
        /// åˆ›å»ºäººID
        /// </summary>
        public string? CreatorId { get; set; }
        /// <summary>
        /// ä¿®æ”¹æ—¶é—´
        /// </summary>
        public DateTime? LastModificationTime { get; set; }
        /// <summary>
        /// ä¿®æ”¹äººID
        /// </summary>
        public string? LastModifierId { get; set; }
        /// <summary>
        /// æ˜¯å¦åˆ é™¤
        /// </summary>
        public bool IsDeleted { get; set; }
        /// <summary>
        /// åˆ é™¤äººID
        /// </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;
    }
}
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;
        }
}
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; }
}
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; }
        }
    }
}
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>
        /// åˆ›å»ºäººID
        /// </summary>
        public string CreatorId { get; set; }
        /// <summary>
        /// åˆ›å»ºäººID-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum CreatorId_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// ä¿®æ”¹æ—¶é—´
        /// </summary>
        //表示是 é«˜çº§æŸ¥è¯¢èŒƒå›´æŸ¥è¯¢ç‰¹æ€§
        [HighSearchRangeAttribute]
        public List<string> LastModificationTime { get; set; }
        /// <summary>
        /// ä¿®æ”¹äººID
        /// </summary>
        public string LastModifierId { get; set; }
        /// <summary>
        /// ä¿®æ”¹äººID-查询关系运算符
        /// </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>
        /// åˆ é™¤äººID
        /// </summary>
        public string DeleterId { get; set; }
        /// <summary>
        /// åˆ é™¤äººID-查询关系运算符
        /// </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.模糊查询;
}
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;
}
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>
        /// åˆ›å»ºäººID
        /// </summary>
        public string? CreatorId { get; set; }
        /// <summary>
        /// ä¿®æ”¹äººID
        /// </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)
    {
    }
}
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>
        /// åˆ›å»ºäººID
        /// </summary>
        public string? CreatorId { get; set; }
        /// <summary>
        /// ä¿®æ”¹æ—¶é—´
        /// </summary>
        public DateTime? LastModificationTime { get; set; }
        /// <summary>
        /// ä¿®æ”¹äººID
        /// </summary>
        public string? LastModifierId { get; set; }
        /// <summary>
        /// æ˜¯å¦åˆ é™¤
        /// </summary>
        public bool IsDeleted { get; set; }
        /// <summary>
        /// åˆ é™¤äººID
        /// </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;
    }
}
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;
        }
}
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; }
}
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; }
        }
    }
}
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>
        /// åˆ›å»ºäººID
        /// </summary>
        public string CreatorId { get; set; }
        /// <summary>
        /// åˆ›å»ºäººID-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum CreatorId_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// ä¿®æ”¹æ—¶é—´
        /// </summary>
        //表示是 é«˜çº§æŸ¥è¯¢èŒƒå›´æŸ¥è¯¢ç‰¹æ€§
        [HighSearchRangeAttribute]
        public List<string> LastModificationTime { get; set; }
        /// <summary>
        /// ä¿®æ”¹äººID
        /// </summary>
        public string LastModifierId { get; set; }
        /// <summary>
        /// ä¿®æ”¹äººID-查询关系运算符
        /// </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>
        /// åˆ é™¤äººID
        /// </summary>
        public string DeleterId { get; set; }
        /// <summary>
        /// åˆ é™¤äººID-查询关系运算符
        /// </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.模糊查询;
}
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>
        /// å·¥è‰ºæµå‘编号
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>
        /// å·¥è‰ºæµå‘编号
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>
        /// å·¥è‰ºæµå‘编号
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>
        /// å·¥è‰ºæµå‘编号
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; }
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);
}
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);
}
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Services/IWorkPlanAppService.cs
@@ -43,6 +43,4 @@
    /// <param name="input"></param> 
    /// <returns></returns> 
    Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetWorkPlanInput input);
    Task<MesOrderResponse> CreatebyApsAsync(List<WorkPlanInput> input);
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;
    }
}
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;
    }
}
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/SharedService.cs
@@ -7,6 +7,11 @@
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;
@@ -16,7 +21,9 @@
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,20 +35,39 @@
            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);
        #region äº‹åŠ¡
        using var scope = _serviceProvider.CreateScope();
        var unitOfWorkManager = scope.ServiceProvider.GetRequiredService<IUnitOfWorkManager>();
        using var uow = unitOfWorkManager.Begin(requiresNew: true);
        try
        {
            #region æ•°æ®å¤„理
            //按照 åŽŸæ–™æ ‡è¯† åˆ†ç»„
            var groupTask = input.GroupBy(x => x.DataIdentifier);
        foreach (var gTask in groupTask)
        {
            var taskCode = gTask.Key;
            var order = await orderManager.GetByCodeAsync(taskCode);
            if (order != null)
            {
                throw new UserFriendlyException($"任务编号[{taskCode}]已存在");
            }
            //var product = await productProvider.FindByNameAsync(orderItem.PipeSectionName);
@@ -66,18 +92,25 @@
            {
                throw new UserFriendlyException($"产品名称[切割原料管]无关联配方");
            }
            //分组数据
            var group = gTask.ToList().GroupBy(x => x.DataIdentifier);
                //按照 ç®¡æ®µç¼–号 åˆ†ç»„
                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 = "Cut_" + taskCode,
                        Code = prodOrderNo,
                    Source = "APS推送",
                    PlanStartTime = gTask.ToList().First().PlannedStartTime,
                    PlanFinishTime = gTask.ToList().First().PlannedEndTime,
                    PlanQty = (ulong)item.ToList().Count,
                        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 }
@@ -85,6 +118,9 @@
                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)
@@ -122,17 +158,51 @@
                //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();
        }
        catch (Exception)
        {
            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);
    }
}
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,30 +297,11 @@
    /// <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);
    }
    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)>();
@@ -367,6 +342,8 @@
    //                var workPlanUpdateDto = new WorkPlanUpdateDto
    //                {
    //                    TaskCode = impItem.TaskCode,
        //WorkPlanStatus = impItem.WorkPlanStatus,
        //CallMaterialStatus = impItem.CallMaterialStatus,
    //                    DataIdentifier = impItem.DataIdentifier,
    //                    MaterialMode = impItem.MaterialMode,
    //                    Length = impItem.Length,
@@ -393,7 +370,6 @@
    //                    OuterDiameter = impItem.OuterDiameter,
    //                    Thickness = impItem.Thickness,
    //                    Material = impItem.Material,
    //                    HasMainSignature = impItem.HasMainSignature,
    //                    ProcessRouteNumber = impItem.ProcessRouteNumber,
    //                    PlannedStartTime = impItem.PlannedStartTime,
    //                    PlannedEndTime = impItem.PlannedEndTime,
@@ -410,6 +386,8 @@
    //                var workPlanCreateDto = new WorkPlanCreateDto
    //                {
    //                    TaskCode = impItem.TaskCode,
        //WorkPlanStatus = impItem.WorkPlanStatus,
        //CallMaterialStatus = impItem.CallMaterialStatus,
    //                    DataIdentifier = impItem.DataIdentifier,
    //                    MaterialMode = impItem.MaterialMode,
    //                    Length = impItem.Length,
@@ -436,7 +414,6 @@
    //                    OuterDiameter = impItem.OuterDiameter,
    //                    Thickness = impItem.Thickness,
    //                    Material = impItem.Material,
    //                    HasMainSignature = impItem.HasMainSignature,
    //                    ProcessRouteNumber = impItem.ProcessRouteNumber,
    //                    PlannedStartTime = impItem.PlannedStartTime,
    //                    PlannedEndTime = impItem.PlannedEndTime,
@@ -478,7 +455,7 @@
    //            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;
    }
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);
    }
}
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>
/// å«æ–™è®°å½•表AutoMapper配置
/// </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);
    }
}
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/MapperProfiles/WorkPlanAutoMapperProfile.cs
@@ -22,8 +22,5 @@
        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);
    } 
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>
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>
        /// å·²å®Œæˆ
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>
        /// å·²å®Œæˆ
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);
}
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);
}
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();
    }
}
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();
    }
}
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.MySQL/Migrations/20250511041027_Update1.Designer.cs
ÎļþÃû´Ó PipeLineLems/server/src/CMS.Plugin.PipeLineLems.MySQL/Migrations/20250511025035_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")
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.MySQL/Migrations/20250511041027_Update1.cs
ÎļþÃû´Ó PipeLineLems/server/src/CMS.Plugin.PipeLineLems.MySQL/Migrations/20250511025035_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: "原料型号")
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")
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" };
        }
    }
}
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" };
        }
    }
}
PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Controller/WorkPlanController.cs
@@ -1,10 +1,7 @@
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;
@@ -27,19 +24,6 @@
    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);
        }
        /// <summary> 
        /// Initializes a new instance of the <see cref="WorkPlanController"/> class. 
@@ -170,7 +154,6 @@
            {
                throw new UserFriendlyException("请检查导入的表格");
            }
            await _workPlanAppService.ImportAsync(new WorkPlansImportModel
            {
PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Resources/Templates/CallMaterialOrderRecordµ¼³öÄ£°å.xlsx
Binary files differ
PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Resources/Templates/CallMaterialOrderµ¼³öÄ£°å.xlsx
Binary files differ
PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Resources/Templates/WorkPlanµ¼³öÄ£°å.xlsx
Binary files differ