| | |
| | | using CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.WorkTask; |
| | | using CMS.Plugin.PipeLineLems.Application.Contracts.Services; |
| | | using CMS.Plugin.PipeLineLems.Domain.Shared; |
| | | using CmsQueryExtensions; |
| | | using CMS.Plugin.PipeLineLems.Domain.WorkTask; |
| | | using CmsQueryExtensions.Extension; |
| | | using System.Linq.Expressions; |
| | | using Volo.Abp; |
| | | using Volo.Abp.Application.Dtos; |
| | | using Volo.Abp.Data; |
| | | using Volo.Abp.ObjectExtending; |
| | | using Volo.Abp.ObjectMapping; |
| | | using CmsQueryExtensions.Entitys; |
| | | |
| | | namespace CMS.Plugin.PipeLineLems.Application.Implements; |
| | | |
| | | using CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.WorkTask; |
| | | using CMS.Plugin.PipeLineLems.Application.Contracts.Services; |
| | | using CMS.Plugin.PipeLineLems.Domain.Shared; |
| | | using CMS.Plugin.PipeLineLems.Domain.WorkTask; |
| | | using CmsQueryExtensions; |
| | | using CmsQueryExtensions.Entitys; |
| | | using CmsQueryExtensions.Extension; |
| | | using System.Linq.Expressions; |
| | | using Volo.Abp; |
| | | using Volo.Abp.Application.Dtos; |
| | | using Volo.Abp.Data; |
| | | using Volo.Abp.ObjectExtending; |
| | | |
| | | namespace CMS.Plugin.PipeLineLems.Application.Implements; |
| | | |
| | | /// <summary> |
| | | /// 作业任务表应用服务 |
| | | /// </summary> |
| | | public class WorkTaskAppService : CMSPluginAppService, IWorkTaskAppService |
| | | { |
| | | private readonly IWorkTaskRepository _workTaskRepository; |
| | | |
| | | public class WorkTaskAppService : CMSPluginAppService, IWorkTaskAppService |
| | | { |
| | | private readonly IWorkTaskRepository _workTaskRepository; |
| | | |
| | | /// <summary> |
| | | /// Initializes a new instance of the <see cref="WorkTaskAppService"/> class. |
| | | /// </summary> |
| | | /// <param name="WorkTaskRepository">The task job repository.</param> |
| | | public WorkTaskAppService(IWorkTaskRepository workTaskRepository) |
| | | { |
| | | _workTaskRepository = workTaskRepository; |
| | | } |
| | | |
| | | public WorkTaskAppService(IWorkTaskRepository workTaskRepository) |
| | | { |
| | | _workTaskRepository = workTaskRepository; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取指定作业任务表 |
| | | /// </summary> |
| | | /// <param name="id"></param> |
| | | /// <returns></returns> |
| | | public virtual async Task<WorkTaskDto> GetAsync(Guid id) |
| | | { |
| | | return ObjectMapper.Map<WorkTask, WorkTaskDto>(await _workTaskRepository.GetAsync(id)); |
| | | } |
| | | |
| | | public virtual async Task<WorkTaskDto> GetAsync(Guid id) |
| | | { |
| | | return ObjectMapper.Map<WorkTask, WorkTaskDto>(await _workTaskRepository.GetAsync(id)); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 分页获取作业任务表 |
| | | /// </summary> |
| | | /// <param name="input"></param> |
| | | /// <returns></returns> |
| | | public virtual async Task<PagedResultDto<WorkTaskDto>> GetListAsync(GetWorkTaskInput input) |
| | | { |
| | | Check.NotNull(input, nameof(input)); |
| | | |
| | | if (input.Sorting.IsNullOrWhiteSpace()) |
| | | { |
| | | input.Sorting = nameof(WorkTask.Sort); |
| | | } |
| | | |
| | | public virtual async Task<PagedResultDto<WorkTaskDto>> GetListAsync(GetWorkTaskInput input) |
| | | { |
| | | Check.NotNull(input, nameof(input)); |
| | | |
| | | if (input.Sorting.IsNullOrWhiteSpace()) |
| | | { |
| | | input.Sorting = nameof(WorkTask.Sort); |
| | | } |
| | | |
| | | #region 动态构造查询条件 |
| | | |
| | | |
| | | //动态构造查询条件 |
| | | var whereConditions = DynamicGetQueryParams(input); |
| | | |
| | | #endregion |
| | | |
| | | var count = await _workTaskRepository.GetCountAsync(whereConditions); |
| | | var list = await _workTaskRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount); |
| | | |
| | | return new PagedResultDto<WorkTaskDto>(count, ObjectMapper.Map<List<WorkTask>, List<WorkTaskDto>>(list)); |
| | | } |
| | | |
| | | var whereConditions = DynamicGetQueryParams(input); |
| | | |
| | | #endregion |
| | | |
| | | var count = await _workTaskRepository.GetCountAsync(whereConditions); |
| | | var list = await _workTaskRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount); |
| | | |
| | | return new PagedResultDto<WorkTaskDto>(count, ObjectMapper.Map<List<WorkTask>, List<WorkTaskDto>>(list)); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 动态构造查询条件 |
| | | /// </summary> |
| | | /// <param name="input">输入参数</param> |
| | | /// <returns></returns> |
| | | private FunReturnResultModel<Expression<Func<WorkTask, bool>>> DynamicGetQueryParams(GetWorkTaskInput input) |
| | | { |
| | | private FunReturnResultModel<Expression<Func<WorkTask, bool>>> DynamicGetQueryParams(GetWorkTaskInput input) |
| | | { |
| | | //动态构造查询条件 |
| | | var whereConditions = WhereConditionsExtensions.GetWhereConditions<WorkTask, GetWorkTaskInput>(input); |
| | | if (!whereConditions.IsSuccess) |
| | | { |
| | | throw new Exception("动态构造查询条件失败:" + whereConditions.ErrMsg); |
| | | } |
| | | |
| | | var whereConditions = WhereConditionsExtensions.GetWhereConditions<WorkTask, GetWorkTaskInput>(input); |
| | | if (!whereConditions.IsSuccess) |
| | | { |
| | | throw new Exception("动态构造查询条件失败:" + whereConditions.ErrMsg); |
| | | } |
| | | |
| | | //也可再次自定义构建查询条件 |
| | | Expression<Func<WorkTask, bool>> extendExpression = a => a.IsDeleted == false; |
| | | Expression<Func<WorkTask, bool>> extendExpression = a => a.IsDeleted == false; |
| | | // 使用 System.Linq.PredicateBuilder 的 And |
| | | var pres = (System.Linq.Expressions.Expression<Func<WorkTask, bool>>)(whereConditions.data); |
| | | whereConditions.data = System.Linq.PredicateBuilder.And(pres, extendExpression); |
| | | |
| | | return whereConditions; |
| | | } |
| | | |
| | | var pres = (System.Linq.Expressions.Expression<Func<WorkTask, bool>>)(whereConditions.data); |
| | | whereConditions.data = System.Linq.PredicateBuilder.And(pres, extendExpression); |
| | | |
| | | return whereConditions; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 新建作业任务表 |
| | | /// </summary> |
| | | /// <param name="input"></param> |
| | | /// <returns></returns> |
| | | /// <exception cref="UserFriendlyException"></exception> |
| | | public virtual async Task<WorkTaskDto> CreateAsync(WorkTaskCreateDto input) |
| | | { |
| | | await CheckCreateOrUpdateDtoAsync(input); |
| | | |
| | | var exist = await _workTaskRepository.NameExistAsync(input.Son_TaskCode); |
| | | if (exist) |
| | | { |
| | | throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.Son_TaskCode]); |
| | | } |
| | | |
| | | var maxSort = await _workTaskRepository.GetMaxSortAsync(); |
| | | var sort = input.Sort ?? maxSort; |
| | | |
| | | var insertObj = ObjectMapper.Map<WorkTaskCreateDto, WorkTask>(input); |
| | | insertObj.Sort = sort; |
| | | input.MapExtraPropertiesTo(insertObj, MappingPropertyDefinitionChecks.None); |
| | | |
| | | public virtual async Task<WorkTaskDto> CreateAsync(WorkTaskCreateDto input) |
| | | { |
| | | await CheckCreateOrUpdateDtoAsync(input); |
| | | |
| | | var exist = await _workTaskRepository.NameExistAsync(input.Son_TaskCode); |
| | | if (exist) |
| | | { |
| | | throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.Son_TaskCode]); |
| | | } |
| | | |
| | | var maxSort = await _workTaskRepository.GetMaxSortAsync(); |
| | | var sort = input.Sort ?? maxSort; |
| | | |
| | | var insertObj = ObjectMapper.Map<WorkTaskCreateDto, WorkTask>(input); |
| | | insertObj.Sort = sort; |
| | | input.MapExtraPropertiesTo(insertObj, MappingPropertyDefinitionChecks.None); |
| | | |
| | | insertObj.CreatorName = input.CreatorName;//创建人 |
| | | await _workTaskRepository.InsertAsync(insertObj); |
| | | |
| | | await _workTaskRepository.InsertAsync(insertObj); |
| | | |
| | | //if (input.Sort.HasValue && insertObj.Sort != maxSort) |
| | | //{ |
| | | // await AdjustSortAsync(insertObj.Id, insertObj.Sort); |
| | | //} |
| | | |
| | | return ObjectMapper.Map<WorkTask, WorkTaskDto>(insertObj); |
| | | } |
| | | |
| | | |
| | | return ObjectMapper.Map<WorkTask, WorkTaskDto>(insertObj); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 更新作业任务表 |
| | | /// </summary> |
| | |
| | | /// <param name="input"></param> |
| | | /// <returns></returns> |
| | | /// <exception cref="UserFriendlyException"></exception> |
| | | public virtual async Task<WorkTaskDto> UpdateAsync(Guid id, WorkTaskUpdateDto input) |
| | | { |
| | | await CheckCreateOrUpdateDtoAsync(input); |
| | | |
| | | var updateObj = await _workTaskRepository.GetAsync(id); |
| | | var exist = await _workTaskRepository.NameExistAsync(input.Son_TaskCode, updateObj.Id); |
| | | if (exist) |
| | | { |
| | | throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.Son_TaskCode]); |
| | | } |
| | | |
| | | updateObj.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp); |
| | | input.MapExtraPropertiesTo(updateObj, MappingPropertyDefinitionChecks.None); |
| | | |
| | | |
| | | // 批量赋值所有可映射字段(通过匿名对象) |
| | | updateObj = ObjectMapper.Map(input, updateObj); // 等效于手动赋值所有匹配字段 |
| | | //updateObj.Id = id; |
| | | //updateObj.Son_TaskCode = input.Son_TaskCode; |
| | | //updateObj.TaskCode = input.TaskCode; |
| | | //updateObj.WorkPlanStatus = input.WorkPlanStatus; |
| | | //updateObj.CallMaterialStatus = input.CallMaterialStatus; |
| | | //updateObj.DataIdentifier = input.DataIdentifier; |
| | | //updateObj.MaterialMode = input.MaterialMode; |
| | | //updateObj.Length = input.Length; |
| | | //updateObj.MarkingContent = input.MarkingContent; |
| | | //updateObj.MarkingPosition = input.MarkingPosition; |
| | | //updateObj.CuttingPosition = input.CuttingPosition; |
| | | //updateObj.Quantity = input.Quantity; |
| | | //updateObj.FlangeThickness = input.FlangeThickness; |
| | | //updateObj.FlangeInnerDiameter = input.FlangeInnerDiameter; |
| | | //updateObj.WeldingHeatInput = input.WeldingHeatInput; |
| | | //updateObj.PipeAllowableStress = input.PipeAllowableStress; |
| | | //updateObj.PipeDiameter = input.PipeDiameter; |
| | | //updateObj.PipeWallThickness = input.PipeWallThickness; |
| | | //updateObj.FactoryCode = input.FactoryCode; |
| | | //updateObj.ProductCode = input.ProductCode; |
| | | //updateObj.WorkstationCode = input.WorkstationCode; |
| | | //updateObj.EquipmentCode = input.EquipmentCode; |
| | | //updateObj.ProdLineCode = input.ProdLineCode; |
| | | //updateObj.ShipNumber = input.ShipNumber; |
| | | //updateObj.ProjectNumber = input.ProjectNumber; |
| | | //updateObj.ProcessName = input.ProcessName; |
| | | //updateObj.PipeFittingCode = input.PipeFittingCode; |
| | | //updateObj.PreSerialNumber = input.PreSerialNumber; |
| | | //updateObj.PipeSpecCode = input.PipeSpecCode; |
| | | //updateObj.PipeSectionName = input.PipeSectionName; |
| | | //updateObj.OuterDiameter = input.OuterDiameter; |
| | | //updateObj.Thickness = input.Thickness; |
| | | //updateObj.Material = input.Material; |
| | | //updateObj.ProcessRouteNumber = input.ProcessRouteNumber; |
| | | //updateObj.PlannedStartTime = input.PlannedStartTime; |
| | | //updateObj.PlannedEndTime = input.PlannedEndTime; |
| | | //updateObj.TeamInfo = input.TeamInfo; |
| | | //updateObj.Timestamp = input.Timestamp; |
| | | //updateObj.Remark = input.Remark; |
| | | |
| | | |
| | | public virtual async Task<WorkTaskDto> UpdateAsync(Guid id, WorkTaskUpdateDto input) |
| | | { |
| | | await CheckCreateOrUpdateDtoAsync(input); |
| | | |
| | | var updateObj = await _workTaskRepository.GetAsync(id); |
| | | var exist = await _workTaskRepository.NameExistAsync(input.Son_TaskCode, updateObj.Id); |
| | | if (exist) |
| | | { |
| | | throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.Son_TaskCode]); |
| | | } |
| | | |
| | | updateObj.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp); |
| | | input.MapExtraPropertiesTo(updateObj, MappingPropertyDefinitionChecks.None); |
| | | |
| | | // 批量赋值所有可映射字段(通过匿名对象) |
| | | updateObj = ObjectMapper.Map(input, updateObj); // 等效于手动赋值所有匹配字段 |
| | | |
| | | updateObj.LastModifierName = input.LastModifierName;//修改人 |
| | | |
| | | await _workTaskRepository.UpdateAsync(updateObj); |
| | | |
| | | return ObjectMapper.Map<WorkTask, WorkTaskDto>(updateObj); |
| | | } |
| | | |
| | | |
| | | await _workTaskRepository.UpdateAsync(updateObj); |
| | | |
| | | return ObjectMapper.Map<WorkTask, WorkTaskDto>(updateObj); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 克隆作业任务表 |
| | | /// </summary> |
| | | /// <param name="ids"></param> |
| | | /// <returns></returns> |
| | | public async Task<List<WorkTaskDto>> CloneAsync(IEnumerable<Guid> ids, MyCurrentUser myCurrentUser) |
| | | { |
| | | public async Task<List<WorkTaskDto>> CloneAsync(IEnumerable<Guid> ids, MyCurrentUser myCurrentUser) |
| | | { |
| | | //var workTasks = new List<WorkTask>(); |
| | | //if (ids != null) |
| | | //{ |
| | |
| | | // name += WorkTaskConsts.CloneTag; |
| | | // continue; |
| | | // } |
| | | |
| | | |
| | | // notExist = true; |
| | | // } |
| | | |
| | | |
| | | // //WorkTask = await _workTaskRepository.InsertAsync(WorkTask.Clone(GuidGenerator.Create(), name, sort++)); |
| | | // workTasks.Add(WorkTask); |
| | | // } |
| | | // } |
| | | //} |
| | | |
| | | |
| | | //return ObjectMapper.Map<List<WorkTask>, List<WorkTaskDto>>(workTasks); |
| | | return new List<WorkTaskDto>(); |
| | | } |
| | | |
| | | return new List<WorkTaskDto>(); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 删除单个作业任务表 |
| | | /// </summary> |
| | | /// <param name="id"></param> |
| | | /// <returns></returns> |
| | | public virtual Task DeleteAsync(Guid id) |
| | | { |
| | | return _workTaskRepository.DeleteAsync(id); |
| | | } |
| | | |
| | | public virtual Task DeleteAsync(Guid id) |
| | | { |
| | | return _workTaskRepository.DeleteAsync(id); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 删除多个作业任务表 |
| | | /// </summary> |
| | | /// <param name="ids"></param> |
| | | /// <returns></returns> |
| | | public async Task DeleteManyAsync(IEnumerable<Guid> ids, MyCurrentUser myCurrentUser) |
| | | { |
| | | foreach (var id in ids) |
| | | { |
| | | await DeleteAsync(id); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | public async Task DeleteManyAsync(IEnumerable<Guid> ids, MyCurrentUser myCurrentUser) |
| | | { |
| | | foreach (var id in ids) |
| | | { |
| | | await DeleteAsync(id); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 物理删除作业任务表 |
| | | /// </summary> |
| | | /// <param name="id">主键ID</param> |
| | | /// <param name="cancellationToken"></param> |
| | | /// <returns></returns> |
| | | public virtual async Task DeletePermanentlyAsync(Guid id, MyCurrentUser myCurrentUser, CancellationToken cancellationToken = default) |
| | | { |
| | | _workTaskRepository.DeletePermanentlyAsync(id); |
| | | } |
| | | |
| | | public virtual async Task DeletePermanentlyAsync(Guid id, MyCurrentUser myCurrentUser, CancellationToken cancellationToken = default) |
| | | { |
| | | _workTaskRepository.DeletePermanentlyAsync(id); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 批量物理删除作业任务表(直接删除,不软删除) |
| | | /// </summary> |
| | | /// <param name="ids">要删除的主键ID列表</param> |
| | | /// <param name="cancellationToken"></param> |
| | | /// <returns></returns> |
| | | public virtual async Task BatchDeletePermanentlyAsync(IEnumerable<Guid> ids, MyCurrentUser myCurrentUser, CancellationToken cancellationToken = default) |
| | | { |
| | | _workTaskRepository.BatchDeletePermanentlyAsync(ids); |
| | | } |
| | | |
| | | public virtual async Task BatchDeletePermanentlyAsync(IEnumerable<Guid> ids, MyCurrentUser myCurrentUser, CancellationToken cancellationToken = default) |
| | | { |
| | | _workTaskRepository.BatchDeletePermanentlyAsync(ids); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 调整排序作业任务表 |
| | | /// </summary> |
| | | /// <param name="id"></param> |
| | | /// <param name="sort"></param> |
| | | /// <returns></returns> |
| | | public virtual async Task AdjustSortAsync(Guid id, int sort) |
| | | { |
| | | //var list = await _workTaskRepository.GetListAsync(null, nameof(WorkTask.Sort)); |
| | | //if (list != null && list.Any()) |
| | | //{ |
| | | // var initSort = 1; |
| | | // list.ForEach(x => x.AdjustSort(initSort++)); |
| | | // var entity = list.FirstOrDefault(x => x.Id == id); |
| | | // if (entity != null) |
| | | // { |
| | | // if (sort == 1) |
| | | // { |
| | | // list.Where(x => x.Id != id).ToList()?.ForEach(x => x.AdjustSort(x.Sort + 1)); |
| | | // } |
| | | // else if (entity.Sort > sort) |
| | | // { |
| | | // list.Where(x => x.Id != id && x.Sort >= sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort + 1)); |
| | | // list.Where(x => x.Id != id && x.Sort < sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort - 1)); |
| | | // } |
| | | // else if (entity.Sort < sort) |
| | | // { |
| | | // list.Where(x => x.Id != id && x.Sort > sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort + 1)); |
| | | // list.Where(x => x.Id != id && x.Sort <= sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort - 1)); |
| | | // } |
| | | |
| | | // entity.AdjustSort(sort); |
| | | // } |
| | | //} |
| | | |
| | | //await _workTaskRepository.UpdateManyAsync(list); |
| | | } |
| | | |
| | | public virtual async Task AdjustSortAsync(Guid id, int sort) |
| | | { |
| | | var list = await _workTaskRepository.GetListAsync(null, nameof(WorkTask.Sort)); |
| | | if (list != null && list.Any()) |
| | | { |
| | | var initSort = 1; |
| | | list.ForEach(x => x.AdjustSort(initSort++)); |
| | | var entity = list.FirstOrDefault(x => x.Id == id); |
| | | if (entity != null) |
| | | { |
| | | if (sort == 1) |
| | | { |
| | | list.Where(x => x.Id != id).ToList()?.ForEach(x => x.AdjustSort(x.Sort + 1)); |
| | | } |
| | | else if (entity.Sort > sort) |
| | | { |
| | | list.Where(x => x.Id != id && x.Sort >= sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort + 1)); |
| | | list.Where(x => x.Id != id && x.Sort < sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort - 1)); |
| | | } |
| | | else if (entity.Sort < sort) |
| | | { |
| | | list.Where(x => x.Id != id && x.Sort > sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort + 1)); |
| | | list.Where(x => x.Id != id && x.Sort <= sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort - 1)); |
| | | } |
| | | |
| | | entity.AdjustSort(sort); |
| | | } |
| | | } |
| | | |
| | | await _workTaskRepository.UpdateManyAsync(list); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 导入作业任务表 |
| | | /// </summary> |
| | | /// <param name="input"></param> |
| | | /// <returns></returns> |
| | | /// <exception cref="UserFriendlyException"></exception> |
| | | public async Task ImportAsync(WorkTasksImportModel input, MyCurrentUser myCurrentUser) |
| | | { |
| | | Check.NotNull(input, nameof(input)); |
| | | |
| | | var workTaskCreateDtos = new List<(int RowIndex, WorkTaskCreateDto Item)>(); |
| | | var workTaskUpdateDtos = new List<(int RowIndex, Guid Id, WorkTask Item)>(); |
| | | var importItems = input.WorkTasks; |
| | | |
| | | if (importItems != null && importItems.Any()) |
| | | { |
| | | public async Task ImportAsync(WorkTasksImportModel input, MyCurrentUser myCurrentUser) |
| | | { |
| | | Check.NotNull(input, nameof(input)); |
| | | |
| | | var workTaskCreateDtos = new List<(int RowIndex, WorkTaskCreateDto Item)>(); |
| | | var workTaskUpdateDtos = new List<(int RowIndex, Guid Id, WorkTask Item)>(); |
| | | var importItems = input.WorkTasks; |
| | | |
| | | if (importItems != null && importItems.Any()) |
| | | { |
| | | #region 导入校验 |
| | | |
| | | |
| | | // 判断名称是否重复,并输出第几行重复 |
| | | var duplicateWorkTasks = importItems.GroupBy(x => x.Son_TaskCode).Where(x => x.Count() > 1).ToList(); |
| | | if (duplicateWorkTasks?.Any() == true) |
| | | { |
| | | var duplicateWorkTaskMsgs = duplicateWorkTasks.Select(x => $"第 {string.Join(",", x.Select(x => x.RowIndex))} 行:{x.Key} 名称重复"); |
| | | var errorMsg = $"导入失败!配置, {string.Join(",", duplicateWorkTaskMsgs)},终止导入"; |
| | | throw new UserFriendlyException(errorMsg); |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | foreach (var impItem in importItems) |
| | | { |
| | | if (impItem.Son_TaskCode.IsNullOrWhiteSpace()) |
| | | { |
| | | continue; |
| | | } |
| | | |
| | | if (impItem.Son_TaskCode.IsNullOrWhiteSpace()) |
| | | { |
| | | var errorMsg = $"导入失败!配置,第{impItem.RowIndex}行:WorkTask名称不能为空"; |
| | | throw new UserFriendlyException(errorMsg); |
| | | } |
| | | |
| | | var oldWorkTask = await _workTaskRepository.FindByNameAsync(impItem.Son_TaskCode); |
| | | if (oldWorkTask != null) |
| | | { |
| | | //var workTaskUpdateDto = new WorkTaskUpdateDto { }; |
| | | oldWorkTask = ObjectMapper.Map(impItem, oldWorkTask); // 等效于手动赋值所有匹配字段 |
| | | //var workTaskUpdateDto = new WorkTaskUpdateDto |
| | | //{ |
| | | // Son_TaskCode = impItem.Son_TaskCode, |
| | | // TaskCode = impItem.TaskCode, |
| | | // WorkPlanStatus = impItem.WorkPlanStatus, |
| | | // CallMaterialStatus = impItem.CallMaterialStatus, |
| | | // DataIdentifier = impItem.DataIdentifier, |
| | | // MaterialMode = impItem.MaterialMode, |
| | | // Length = impItem.Length, |
| | | // MarkingContent = impItem.MarkingContent, |
| | | // MarkingPosition = impItem.MarkingPosition, |
| | | // CuttingPosition = impItem.CuttingPosition, |
| | | // Quantity = impItem.Quantity, |
| | | // FlangeThickness = impItem.FlangeThickness, |
| | | // FlangeInnerDiameter = impItem.FlangeInnerDiameter, |
| | | // WeldingHeatInput = impItem.WeldingHeatInput, |
| | | // PipeAllowableStress = impItem.PipeAllowableStress, |
| | | // PipeDiameter = impItem.PipeDiameter, |
| | | // PipeWallThickness = impItem.PipeWallThickness, |
| | | // FactoryCode = impItem.FactoryCode, |
| | | // ProductCode = impItem.ProductCode, |
| | | // WorkstationCode = impItem.WorkstationCode, |
| | | // EquipmentCode = impItem.EquipmentCode, |
| | | // ProdLineCode = impItem.ProdLineCode, |
| | | // ShipNumber = impItem.ShipNumber, |
| | | // ProjectNumber = impItem.ProjectNumber, |
| | | // ProcessName = impItem.ProcessName, |
| | | // PipeFittingCode = impItem.PipeFittingCode, |
| | | // PreSerialNumber = impItem.PreSerialNumber, |
| | | // PipeSpecCode = impItem.PipeSpecCode, |
| | | // PipeSectionName = impItem.PipeSectionName, |
| | | // OuterDiameter = impItem.OuterDiameter, |
| | | // Thickness = impItem.Thickness, |
| | | // Material = impItem.Material, |
| | | // ProcessRouteNumber = impItem.ProcessRouteNumber, |
| | | // PlannedStartTime = impItem.PlannedStartTime, |
| | | // PlannedEndTime = impItem.PlannedEndTime, |
| | | // TeamInfo = impItem.TeamInfo, |
| | | // Timestamp = impItem.Timestamp, |
| | | // Remark = impItem.Remark, |
| | | |
| | | //}; |
| | | |
| | | workTaskUpdateDtos.Add((impItem.RowIndex, oldWorkTask.Id, oldWorkTask)); |
| | | } |
| | | else |
| | | { |
| | | var workTaskCreateDto = new WorkTaskCreateDto { }; |
| | | workTaskCreateDto = ObjectMapper.Map(impItem, workTaskCreateDto); // 等效于手动赋值所有匹配字段 |
| | | //var workTaskCreateDto = new WorkTaskCreateDto |
| | | //{ |
| | | // Son_TaskCode = impItem.Son_TaskCode, |
| | | // TaskCode = impItem.TaskCode, |
| | | // WorkPlanStatus = impItem.WorkPlanStatus, |
| | | // CallMaterialStatus = impItem.CallMaterialStatus, |
| | | // DataIdentifier = impItem.DataIdentifier, |
| | | // MaterialMode = impItem.MaterialMode, |
| | | // Length = impItem.Length, |
| | | // MarkingContent = impItem.MarkingContent, |
| | | // MarkingPosition = impItem.MarkingPosition, |
| | | // CuttingPosition = impItem.CuttingPosition, |
| | | // Quantity = impItem.Quantity, |
| | | // FlangeThickness = impItem.FlangeThickness, |
| | | // FlangeInnerDiameter = impItem.FlangeInnerDiameter, |
| | | // WeldingHeatInput = impItem.WeldingHeatInput, |
| | | // PipeAllowableStress = impItem.PipeAllowableStress, |
| | | // PipeDiameter = impItem.PipeDiameter, |
| | | // PipeWallThickness = impItem.PipeWallThickness, |
| | | // FactoryCode = impItem.FactoryCode, |
| | | // ProductCode = impItem.ProductCode, |
| | | // WorkstationCode = impItem.WorkstationCode, |
| | | // EquipmentCode = impItem.EquipmentCode, |
| | | // ProdLineCode = impItem.ProdLineCode, |
| | | // ShipNumber = impItem.ShipNumber, |
| | | // ProjectNumber = impItem.ProjectNumber, |
| | | // ProcessName = impItem.ProcessName, |
| | | // PipeFittingCode = impItem.PipeFittingCode, |
| | | // PreSerialNumber = impItem.PreSerialNumber, |
| | | // PipeSpecCode = impItem.PipeSpecCode, |
| | | // PipeSectionName = impItem.PipeSectionName, |
| | | // OuterDiameter = impItem.OuterDiameter, |
| | | // Thickness = impItem.Thickness, |
| | | // Material = impItem.Material, |
| | | // ProcessRouteNumber = impItem.ProcessRouteNumber, |
| | | // PlannedStartTime = impItem.PlannedStartTime, |
| | | // PlannedEndTime = impItem.PlannedEndTime, |
| | | // TeamInfo = impItem.TeamInfo, |
| | | // Timestamp = impItem.Timestamp, |
| | | // Remark = impItem.Remark, |
| | | |
| | | //}; |
| | | |
| | | workTaskCreateDtos.Add((impItem.RowIndex, workTaskCreateDto)); |
| | | } |
| | | } |
| | | } |
| | | |
| | | var duplicateWorkTasks = importItems.GroupBy(x => x.Son_TaskCode).Where(x => x.Count() > 1).ToList(); |
| | | if (duplicateWorkTasks?.Any() == true) |
| | | { |
| | | var duplicateWorkTaskMsgs = duplicateWorkTasks.Select(x => $"第 {string.Join(",", x.Select(x => x.RowIndex))} 行:{x.Key} 名称重复"); |
| | | var errorMsg = $"导入失败!配置, {string.Join(",", duplicateWorkTaskMsgs)},终止导入"; |
| | | throw new UserFriendlyException(errorMsg); |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | foreach (var impItem in importItems) |
| | | { |
| | | if (impItem.Son_TaskCode.IsNullOrWhiteSpace()) |
| | | { |
| | | continue; |
| | | } |
| | | |
| | | if (impItem.Son_TaskCode.IsNullOrWhiteSpace()) |
| | | { |
| | | var errorMsg = $"导入失败!配置,第{impItem.RowIndex}行:WorkTask名称不能为空"; |
| | | throw new UserFriendlyException(errorMsg); |
| | | } |
| | | |
| | | var oldWorkTask = await _workTaskRepository.FindByNameAsync(impItem.Son_TaskCode); |
| | | if (oldWorkTask != null) |
| | | { |
| | | oldWorkTask = ObjectMapper.Map(impItem, oldWorkTask); // 等效于手动赋值所有匹配字段 |
| | | workTaskUpdateDtos.Add((impItem.RowIndex, oldWorkTask.Id, oldWorkTask)); |
| | | } |
| | | else |
| | | { |
| | | var workTaskCreateDto = new WorkTaskCreateDto { }; |
| | | workTaskCreateDto = ObjectMapper.Map(impItem, workTaskCreateDto); // 等效于手动赋值所有匹配字段 |
| | | workTaskCreateDtos.Add((impItem.RowIndex, workTaskCreateDto)); |
| | | } |
| | | } |
| | | } |
| | | |
| | | // 新增 |
| | | foreach (var workTaskDto in workTaskCreateDtos) |
| | | { |
| | | try |
| | | { |
| | | foreach (var workTaskDto in workTaskCreateDtos) |
| | | { |
| | | try |
| | | { |
| | | workTaskDto.Item.CreatorName = myCurrentUser.UserAccount;//创建人 |
| | | await CreateAsync(workTaskDto.Item); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | var errorMsg = $"导入失败!配置,第{workTaskDto.RowIndex}行:{e.Message},终止导入"; |
| | | throw new UserFriendlyException(errorMsg); |
| | | } |
| | | } |
| | | |
| | | await CreateAsync(workTaskDto.Item); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | var errorMsg = $"导入失败!配置,第{workTaskDto.RowIndex}行:{e.Message},终止导入"; |
| | | throw new UserFriendlyException(errorMsg); |
| | | } |
| | | } |
| | | |
| | | // 更新 |
| | | foreach (var oldWorkObj in workTaskUpdateDtos) |
| | | { |
| | | try |
| | | { |
| | | oldWorkObj.Item.LastModifierName = myCurrentUser.UserAccount;//修改人 |
| | | await _workTaskRepository.UpdateAsync(oldWorkObj.Item); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | var errorMsg = $"导入失败!配置,第{oldWorkObj.RowIndex}行:{e.Message},终止导入"; |
| | | throw new UserFriendlyException(errorMsg); |
| | | } |
| | | } |
| | | } |
| | | |
| | | foreach (var workTaskDto in workTaskUpdateDtos) |
| | | { |
| | | try |
| | | { |
| | | workTaskDto.Item.LastModifierName = myCurrentUser.UserAccount;//修改人 |
| | | await _workTaskRepository.UpdateAsync(workTaskDto.Item); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | var errorMsg = $"导入失败!配置,第{workTaskDto.RowIndex}行:{e.Message},终止导入"; |
| | | throw new UserFriendlyException(errorMsg); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 导出作业任务表 |
| | | /// </summary> |
| | | /// <param name="input"></param> |
| | | /// <returns></returns> |
| | | public async Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetWorkTaskInput input) |
| | | { |
| | | Check.NotNull(input, nameof(input)); |
| | | |
| | | if (input.Sorting.IsNullOrWhiteSpace()) |
| | | { |
| | | input.Sorting = nameof(WorkTask.Sort); |
| | | } |
| | | |
| | | public async Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetWorkTaskInput input) |
| | | { |
| | | Check.NotNull(input, nameof(input)); |
| | | |
| | | if (input.Sorting.IsNullOrWhiteSpace()) |
| | | { |
| | | input.Sorting = nameof(WorkTask.Sort); |
| | | } |
| | | |
| | | #region 动态构造查询条件 |
| | | |
| | | |
| | | //动态构造查询条件 |
| | | var whereConditions = DynamicGetQueryParams(input); |
| | | |
| | | #endregion |
| | | |
| | | |
| | | var list = await _workTaskRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount, includeDetails: true); |
| | | var result = ObjectMapper.Map<List<WorkTask>, List<WorkTaskDto>>(list); |
| | | |
| | | var sheets = new Dictionary<string, object> |
| | | { |
| | | ["配置"] = ExportHelper.ConvertListToExportData(result), |
| | | }; |
| | | |
| | | var fileName = "作业任务"; |
| | | return (sheets, fileName); |
| | | } |
| | | |
| | | var whereConditions = DynamicGetQueryParams(input); |
| | | |
| | | #endregion |
| | | |
| | | |
| | | var list = await _workTaskRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount, includeDetails: true); |
| | | var result = ObjectMapper.Map<List<WorkTask>, List<WorkTaskDto>>(list); |
| | | |
| | | var sheets = new Dictionary<string, object> |
| | | { |
| | | ["配置"] = ExportHelper.ConvertListToExportData(result), |
| | | }; |
| | | |
| | | var fileName = "作业任务"; |
| | | return (sheets, fileName); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 校验作业任务表,当新建或更新时 |
| | | /// </summary> |
| | | /// <param name="input"></param> |
| | | /// <returns></returns> |
| | | protected Task CheckCreateOrUpdateDtoAsync(WorkTaskCreateOrUpdateDtoBase input) |
| | | { |
| | | Check.NotNull(input, nameof(input)); |
| | | Check.NotNullOrWhiteSpace(input.Son_TaskCode, "子任务编码", 256); |
| | | protected Task CheckCreateOrUpdateDtoAsync(WorkTaskCreateOrUpdateDtoBase input) |
| | | { |
| | | Check.NotNull(input, nameof(input)); |
| | | Check.NotNullOrWhiteSpace(input.Son_TaskCode, "子任务编码", 256); |
| | | Check.NotNullOrWhiteSpace(input.TaskCode, "任务编码", 256); |
| | | Check.NotNull(input.WorkPlanStatus, "计划状态"); |
| | | Check.NotNull(input.CallMaterialStatus, "叫料状态"); |
| | |
| | | Check.NotNull(input.PipeWallThickness, "套管直径(mm)"); |
| | | Check.NotNull(input.OuterDiameter, "外径(mm)"); |
| | | Check.NotNull(input.Thickness, "壁厚(mm)"); |
| | | |
| | | return Task.CompletedTask; |
| | | } |
| | | |
| | | /// <summary> |
| | | |
| | | return Task.CompletedTask; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 根据条件获取作业任务表列表 |
| | | /// </summary> |
| | | /// <param name="whereConditions"></param> |
| | | /// <param name="cancellationToken"></param> |
| | | /// <returns></returns> |
| | | public async Task<List<WorkTask>> GetListByFilterAsync(Expression<Func<WorkTask, bool>> whereConditions, CancellationToken cancellationToken = default) |
| | | { |
| | | return await _workTaskRepository.GetListByFilterAsync(whereConditions); |
| | | } |
| | | |
| | | public async Task<List<WorkTask>> GetListByFilterAsync(Expression<Func<WorkTask, bool>> whereConditions, CancellationToken cancellationToken = default) |
| | | { |
| | | return await _workTaskRepository.GetListByFilterAsync(whereConditions); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 根据条件获取单个作业任务表 |
| | | /// </summary> |
| | |
| | | /// <param name="cancellationToken"></param> |
| | | /// <returns></returns> |
| | | /// <exception cref="UserFriendlyException"></exception> |
| | | public async Task<WorkTask> GetSingleByFilterAsync(Expression<Func<WorkTask, bool>> whereConditions, bool isMultipleThrowException = false, CancellationToken cancellationToken = default) |
| | | { |
| | | return await _workTaskRepository.GetSingleByFilterAsync(whereConditions, isMultipleThrowException); |
| | | } |
| | | |
| | | /// <summary> |
| | | public async Task<WorkTask> GetSingleByFilterAsync(Expression<Func<WorkTask, bool>> whereConditions, bool isMultipleThrowException = false, CancellationToken cancellationToken = default) |
| | | { |
| | | return await _workTaskRepository.GetSingleByFilterAsync(whereConditions, isMultipleThrowException); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 根据条件获取作业任务表列表 |
| | | /// </summary> |
| | | /// <param name="input"></param> |
| | | /// <returns></returns> |
| | | public virtual async Task<List<WorkTaskDto>> FindListByFilterAsync(GetWorkTaskInput input, CancellationToken cancellationToken = default) |
| | | { |
| | | Check.NotNull(input, nameof(input)); |
| | | |
| | | if (input.Sorting.IsNullOrWhiteSpace()) |
| | | { |
| | | input.Sorting = nameof(WorkTask.Sort); |
| | | } |
| | | |
| | | public virtual async Task<List<WorkTaskDto>> FindListByFilterAsync(GetWorkTaskInput input, CancellationToken cancellationToken = default) |
| | | { |
| | | Check.NotNull(input, nameof(input)); |
| | | |
| | | if (input.Sorting.IsNullOrWhiteSpace()) |
| | | { |
| | | input.Sorting = nameof(WorkTask.Sort); |
| | | } |
| | | |
| | | #region 动态构造查询条件 |
| | | |
| | | |
| | | //动态构造查询条件 |
| | | var whereConditions = DynamicGetQueryParams(input); |
| | | |
| | | #endregion |
| | | |
| | | var list = await _workTaskRepository.GetListByFilterAsync(whereConditions?.data); |
| | | |
| | | return new List<WorkTaskDto>(ObjectMapper.Map<List<WorkTask>, List<WorkTaskDto>>(list)); |
| | | } |
| | | var whereConditions = DynamicGetQueryParams(input); |
| | | |
| | | #endregion |
| | | |
| | | var list = await _workTaskRepository.GetListByFilterAsync(whereConditions?.data); |
| | | |
| | | return new List<WorkTaskDto>(ObjectMapper.Map<List<WorkTask>, List<WorkTaskDto>>(list)); |
| | | } |
| | | /// <summary> |
| | | /// 根据条件获取单个作业任务表 |
| | | /// </summary> |
| | | /// <param name="input"></param> |
| | | /// <returns></returns> |
| | | public virtual async Task<WorkTaskDto> FindSingleByFilterAsync(GetWorkTaskInput input, CancellationToken cancellationToken = default) |
| | | { |
| | | Check.NotNull(input, nameof(input)); |
| | | |
| | | if (input.Sorting.IsNullOrWhiteSpace()) |
| | | { |
| | | input.Sorting = nameof(WorkTask.Sort); |
| | | } |
| | | |
| | | public virtual async Task<WorkTaskDto> FindSingleByFilterAsync(GetWorkTaskInput input, CancellationToken cancellationToken = default) |
| | | { |
| | | Check.NotNull(input, nameof(input)); |
| | | |
| | | if (input.Sorting.IsNullOrWhiteSpace()) |
| | | { |
| | | input.Sorting = nameof(WorkTask.Sort); |
| | | } |
| | | |
| | | #region 动态构造查询条件 |
| | | |
| | | |
| | | //动态构造查询条件 |
| | | var whereConditions = DynamicGetQueryParams(input); |
| | | |
| | | #endregion |
| | | |
| | | var dataObj = await _workTaskRepository.GetSingleByFilterAsync(whereConditions?.data); |
| | | |
| | | return (ObjectMapper.Map<WorkTask, WorkTaskDto>(dataObj)); |
| | | } |
| | | } |
| | | var whereConditions = DynamicGetQueryParams(input); |
| | | |
| | | #endregion |
| | | |
| | | var dataObj = await _workTaskRepository.GetSingleByFilterAsync(whereConditions?.data); |
| | | |
| | | return (ObjectMapper.Map<WorkTask, WorkTaskDto>(dataObj)); |
| | | } |
| | | } |