PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkPlan/MesOrderResponse.cs
@@ -15,14 +15,14 @@ [JsonPropertyName("data")] public object Data { get; set; } [JsonPropertyName("fail")] public bool Fail { get; set; } //[JsonPropertyName("fail")] //public bool Fail { get; set; } [JsonPropertyName("mesg")] public string Mesg { get; set; } [JsonPropertyName("message")] public string Message { get; set; } [JsonPropertyName("success")] public bool Success { get; set; } //[JsonPropertyName("success")] //public bool Success { get; set; } [JsonPropertyName("time")] public DateTime Time { get; set; } PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Services/IWorkPlanAppService.cs
@@ -1,5 +1,7 @@ using CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.WorkPlan; using CMS.Plugin.PipeLineLems.Domain.WorkPlan; using System.Linq.Expressions; using Volo.Abp; using Volo.Abp.Application.Services; using Volo.Abp.Users; @@ -54,4 +56,23 @@ /// <param name="input"></param> /// <returns></returns> Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetWorkPlanInput input); /// <summary> /// 根据条件获取作业计划表列表 /// </summary> /// <param name="whereConditions"></param> /// <param name="cancellationToken"></param> /// <returns></returns> Task<List<WorkPlan>> GetListByFilterAsync(Expression<Func<WorkPlan, bool>> whereConditions, CancellationToken cancellationToken = default); /// <summary> /// 根据条件获取单个作业计划表 /// </summary> /// <param name="whereConditions"></param> /// <param name="isMultipleThrowException">是否查询出多条就报错</param> /// <param name="cancellationToken"></param> /// <returns></returns> /// <exception cref="UserFriendlyException"></exception> Task<WorkPlan> GetSingleByFilterAsync(Expression<Func<WorkPlan, bool>> whereConditions, bool isMultipleThrowException = false, CancellationToken cancellationToken = default); } PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/SharedService.cs
@@ -19,6 +19,12 @@ using CmsQueryExtensions.Entitys; using CMS.Unit.RuntimeValue.Abstractions; using CMS.Extensions.Variable; using CMS.Plugin.TraceManagement.Abstractions.Models.Traces; using CMS.Plugin.ProcessManagement.Abstractions; using KissUtil.Extensions; using CMS.Plugin.TraceManagement.Abstractions; using CMS.Plugin.ProductManagement.Abstractions.Models; using CMS.Plugin.MaterialManagement.Abstractions; namespace CMS.Plugin.PipeLineLems.Application.Implements; @@ -36,6 +42,11 @@ //3、写入 分拣变量 VariableService _variableService = _serviceProvider.GetRequiredService<VariableService>(); var _workSectionManager = _serviceProvider.GetRequiredService<IWorkSectionManager>(); var _workStationManager = _serviceProvider.GetRequiredService<IWorkStationManager>(); var traceProvider = _serviceProvider.GetRequiredService<ITraceProvider>(); var materialProvider = _serviceProvider.GetRequiredService<IMaterialProvider>(); var workPlanAppService = _serviceProvider.GetRequiredService<IWorkPlanAppService>(); Dictionary<string, object?> keyValuePairs = new Dictionary<string, object?> { @@ -44,13 +55,69 @@ { "分拣人", myCurrentUser.UserAccount } }; _variableService.WriteValueAsync(keyValuePairs); //根据工序名获取工序对象 var workSection = await _workSectionManager.GetByNameAsync("分拣工序"); var workStation = await _workStationManager.GetByNameAsync("分拣工位"); //写入追溯报表 var finishTime = DateTime.Now; TraceModel traceModel = new TraceModel() { SerialNumber = input.PipeSpecCode, WorkSectionId = workSection.Id, WorkSectionName = workSection.Name, WorkStationName = workStation.Name, FinishTime = finishTime, IsQualified = true, UnqualifiedReason = "", ProductModel = "", ProductName = "", }; traceModel.Params = new List<TraceParamModel>(); foreach (var item in workSection.ProcessParameters) { var value = "ssss"; traceModel.Params.Add(new TraceParamModel() { Key = item.Key, Value = value.SafeString() }); } //物料参数列表 var firstWorkPlans = await workPlanAppService.GetListByFilterAsync(x => x.PipeSpecCode == input.PipeSpecCode); var firstWorkPlan = await workPlanAppService.GetSingleByFilterAsync(x => x.PipeSpecCode == input.PipeSpecCode); var rawPipe_DataIdentifier = await materialProvider.FindByNameAsync("分拣原料管标识"); var rawPipe_MaterialMode = await materialProvider.FindByNameAsync("分拣原料管型号"); List<TraceMaterialModel> _MaterialParams = new List<TraceMaterialModel>(); _MaterialParams.Add(new TraceMaterialModel() { Key = "分拣原料管标识", Quantity = 1, MaterialId = rawPipe_DataIdentifier.MaterialId, MaterialDetailId = rawPipe_DataIdentifier.MaterialDetails.First().Id, Value = firstWorkPlan.DataIdentifier, }); _MaterialParams.Add(new TraceMaterialModel() { Key = "分拣原料管型号", Quantity = 1, MaterialId = rawPipe_MaterialMode.MaterialId, MaterialDetailId = rawPipe_MaterialMode.MaterialDetails.First().Id, Value = firstWorkPlan.MaterialMode }); traceModel.MaterialParams = _MaterialParams; await traceProvider.CreateTraceAsync(traceModel); var response = new MesOrderResponse { Code = "000000", Code = "200", Data = "", Fail = false, Mesg = "处理成功", Success = true, Message = "处理成功", Time = DateTime.UtcNow }; return response; @@ -262,9 +329,7 @@ { Code = "000000", Data = orderModels, Fail = false, Mesg = "处理成功", Success = true, Message = "处理成功", Time = DateTime.UtcNow }; return response; @@ -387,10 +452,8 @@ // 返回结果 var response = new MesOrderResponse { Code = "000000", Fail = false, Mesg = "叫料成功", Success = true, Code = "200", Message = "叫料成功", Time = DateTime.UtcNow }; return response; PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/WorkPlanAppService.cs
@@ -19,16 +19,16 @@ /// </summary> public class WorkPlanAppService : CMSPluginAppService, IWorkPlanAppService { private readonly IWorkPlanRepository workPlanRepository; private readonly IWorkPlanRepository _workPlanRepository; 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, SharedService sharedService, IServiceProvider serviceProvider) public WorkPlanAppService(IWorkPlanRepository workPlanRepository, SharedService sharedService, IServiceProvider serviceProvider) { workPlanRepository = _WorkPlanRepository; _workPlanRepository = workPlanRepository; _sharedService = sharedService; _serviceProvider = serviceProvider; } @@ -40,7 +40,7 @@ /// <returns></returns> public virtual async Task<WorkPlanDto> GetAsync(Guid id) { return ObjectMapper.Map<WorkPlan, WorkPlanDto>(await workPlanRepository.GetAsync(id)); return ObjectMapper.Map<WorkPlan, WorkPlanDto>(await _workPlanRepository.GetAsync(id)); } /// <summary> @@ -51,7 +51,7 @@ /// <returns></returns> public virtual async Task<List<WorkPlan>> FindByDataIdentifierAsync(string dataIdentifier) { return await workPlanRepository.FindByDataIdentifierAsync(dataIdentifier); return await _workPlanRepository.FindByDataIdentifierAsync(dataIdentifier); } /// <summary> @@ -75,8 +75,8 @@ #endregion var count = await workPlanRepository.GetCountAsync(whereConditions); var list = await workPlanRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount); var count = await _workPlanRepository.GetCountAsync(whereConditions); var list = await _workPlanRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount); return new PagedResultDto<WorkPlanDto>(count, ObjectMapper.Map<List<WorkPlan>, List<WorkPlanDto>>(list)); } @@ -114,13 +114,13 @@ { await CheckCreateOrUpdateDtoAsync(input); var exist = await workPlanRepository.NameExistAsync(input.TaskCode); var exist = await _workPlanRepository.NameExistAsync(input.TaskCode); if (exist) { throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.TaskCode]); } var maxSort = await workPlanRepository.GetMaxSortAsync(); var maxSort = await _workPlanRepository.GetMaxSortAsync(); var sort = input.Sort ?? maxSort; var insertObj = ObjectMapper.Map<WorkPlanCreateDto, WorkPlan>(input); @@ -128,7 +128,7 @@ insertObj.CreatorName = "SuperAdmin"; input.MapExtraPropertiesTo(insertObj, MappingPropertyDefinitionChecks.None); await workPlanRepository.InsertAsync(insertObj); await _workPlanRepository.InsertAsync(insertObj); //if (input.Sort.HasValue && insertObj.Sort != maxSort) //{ @@ -149,8 +149,8 @@ { await CheckCreateOrUpdateDtoAsync(input); var updateObj = await workPlanRepository.GetAsync(id); var exist = await workPlanRepository.NameExistAsync(input.TaskCode, updateObj.Id); var updateObj = await _workPlanRepository.GetAsync(id); var exist = await _workPlanRepository.NameExistAsync(input.TaskCode, updateObj.Id); if (exist) { throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.TaskCode]); @@ -196,7 +196,7 @@ updateObj.Remark = input.Remark; await workPlanRepository.UpdateAsync(updateObj); await _workPlanRepository.UpdateAsync(updateObj); return ObjectMapper.Map<WorkPlan, WorkPlanDto>(updateObj); } @@ -248,7 +248,7 @@ /// <returns></returns> public virtual Task DeleteAsync(Guid id) { return workPlanRepository.DeleteAsync(id); return _workPlanRepository.DeleteAsync(id); } /// <summary> @@ -272,7 +272,7 @@ /// <returns></returns> public virtual async Task AdjustSortAsync(Guid id, int sort) { var list = await workPlanRepository.GetListAsync(null, nameof(WorkPlan.Sort)); var list = await _workPlanRepository.GetListAsync(null, nameof(WorkPlan.Sort)); if (list != null && list.Any()) { var initSort = 1; @@ -299,7 +299,7 @@ } } await workPlanRepository.UpdateManyAsync(list); await _workPlanRepository.UpdateManyAsync(list); } /// <summary> @@ -308,7 +308,7 @@ /// <param name="input"></param> /// <returns></returns> /// <exception cref="UserFriendlyException"></exception> public async Task ImportAsync(WorkPlansImportModel input, string userId,string userAccount) public async Task ImportAsync(WorkPlansImportModel input, string userId, string userAccount) { //转换数据 var result = ObjectMapper.Map<List<WorkPlansImportModel.WorkPlanImportModel>, List<WorkPlanInput>>(input.WorkPlans); @@ -492,7 +492,7 @@ #endregion var list = await workPlanRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount, includeDetails: true); var list = await _workPlanRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount, includeDetails: true); var result = ObjectMapper.Map<List<WorkPlan>, List<WorkPlanDto>>(list); var sheets = new Dictionary<string, object> @@ -528,4 +528,28 @@ return Task.CompletedTask; } /// <summary> /// 根据条件获取作业计划表列表 /// </summary> /// <param name="whereConditions"></param> /// <param name="cancellationToken"></param> /// <returns></returns> public async Task<List<WorkPlan>> GetListByFilterAsync(Expression<Func<WorkPlan, bool>> whereConditions, CancellationToken cancellationToken = default) { return await _workPlanRepository.GetListByFilterAsync(whereConditions); } /// <summary> /// 根据条件获取单个作业计划表 /// </summary> /// <param name="whereConditions"></param> /// <param name="isMultipleThrowException">是否查询出多条就报错</param> /// <param name="cancellationToken"></param> /// <returns></returns> /// <exception cref="UserFriendlyException"></exception> public async Task<WorkPlan> GetSingleByFilterAsync(Expression<Func<WorkPlan, bool>> whereConditions, bool isMultipleThrowException = false, CancellationToken cancellationToken = default) { return await _workPlanRepository.GetSingleByFilterAsync(whereConditions, isMultipleThrowException); } } PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Domain/WorkPlan/IWorkPlanRepository.cs
@@ -58,5 +58,24 @@ /// <param name="whereConditions"></param> /// <param name="cancellationToken"></param> /// <returns></returns> Task<long> GetCountAsync(FunReturnResultModel<Expression<Func<WorkPlan, bool>>> whereConditions, CancellationToken cancellationToken = default); Task<long> GetCountAsync(FunReturnResultModel<Expression<Func<WorkPlan, bool>>> whereConditions, CancellationToken cancellationToken = default); /// <summary> /// 根据条件获取作业计划表列表 /// </summary> /// <param name="whereConditions"></param> /// <param name="cancellationToken"></param> /// <returns></returns> Task<List<WorkPlan>> GetListByFilterAsync(Expression<Func<WorkPlan, bool>> whereConditions, CancellationToken cancellationToken = default); /// <summary> /// 根据条件获取单个作业计划表 /// </summary> /// <param name="whereConditions"></param> /// <param name="isMultipleThrowException">是否查询出多条就报错</param> /// <param name="cancellationToken"></param> /// <returns></returns> /// <exception cref="UserFriendlyException"></exception> Task<WorkPlan> GetSingleByFilterAsync(Expression<Func<WorkPlan, bool>> whereConditions, bool isMultipleThrowException = false, CancellationToken cancellationToken = default); } PipeLineLems/server/src/CMS.Plugin.PipeLineLems.EntityFrameworkCore/Repositories/EfCoreWorkPlanRepository.cs
@@ -4,6 +4,7 @@ using Microsoft.EntityFrameworkCore; using System.Linq.Dynamic.Core; using System.Linq.Expressions; using Volo.Abp; using Volo.Abp.Domain.Repositories.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore; @@ -127,4 +128,55 @@ return (await GetQueryableAsync()) .Where(x => !x.IsDeleted).IncludeDetails(); } /// <summary> /// 根据条件获取作业计划表列表 /// </summary> /// <param name="whereConditions"></param> /// <param name="cancellationToken"></param> /// <returns></returns> public async Task<List<WorkPlan>> GetListByFilterAsync(Expression<Func<WorkPlan, bool>> whereConditions, CancellationToken cancellationToken = default) { return await (await GetDbSetAsync()) .IncludeDetails() .WhereIf(whereConditions != null, whereConditions) .Where(x => !x.IsDeleted) .OrderByDescending(x => x.CreationTime) .ToListAsync(GetCancellationToken(cancellationToken)); } /// <summary> /// 根据条件获取单个作业计划表 /// </summary> /// <param name="whereConditions"></param> /// <param name="isMultipleThrowException">是否查询出多条就报错</param> /// <param name="cancellationToken"></param> /// <returns></returns> /// <exception cref="UserFriendlyException"></exception> public async Task<WorkPlan> GetSingleByFilterAsync(Expression<Func<WorkPlan, bool>> whereConditions, bool isMultipleThrowException = false, CancellationToken cancellationToken = default) { if (isMultipleThrowException) { var entitys = await (await GetDbSetAsync()) .IncludeDetails() .WhereIf(whereConditions != null, whereConditions) .Where(x => !x.IsDeleted) .OrderByDescending(x => x.CreationTime) .ToListAsync(GetCancellationToken(cancellationToken)); if (entitys?.Count > 1) { throw new UserFriendlyException("查询到多条记录"); } return entitys?.FirstOrDefault(); } else { return await (await GetDbSetAsync()) .IncludeDetails() .WhereIf(whereConditions != null, whereConditions) .Where(x => !x.IsDeleted) .OrderByDescending(x => x.CreationTime) .FirstOrDefaultAsync(GetCancellationToken(cancellationToken)); } } }