PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Services/ICallMaterialOrderAppService.cs
@@ -22,6 +22,9 @@ /// <returns></returns> Task DeleteManyAsync(IEnumerable<Guid> ids); Task CallMaterialByDataIdentifier(Guid id); /// <summary> /// 调整排序叫料单表 /// </summary> PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/CallMaterialOrderAppService.cs
@@ -19,14 +19,17 @@ public class CallMaterialOrderAppService : CMSPluginAppService, ICallMaterialOrderAppService { private readonly ICallMaterialOrderRepository callMaterialOrderRepository; private readonly SharedService _sharedService; private readonly IServiceProvider _serviceProvider; /// <summary> /// Initializes a new instance of the <see cref="CallMaterialOrderAppService"/> class. /// </summary> /// <param name="CallMaterialOrderRepository">The task job repository.</param> public CallMaterialOrderAppService(ICallMaterialOrderRepository _CallMaterialOrderRepository) public CallMaterialOrderAppService(ICallMaterialOrderRepository _CallMaterialOrderRepository, SharedService sharedService, IServiceProvider serviceProvider) { callMaterialOrderRepository = _CallMaterialOrderRepository; _sharedService = sharedService; _serviceProvider = serviceProvider; } /// <summary> @@ -39,6 +42,11 @@ return ObjectMapper.Map<CallMaterialOrder, CallMaterialOrderDto>(await callMaterialOrderRepository.GetAsync(id)); } public virtual async Task CallMaterialByDataIdentifier(Guid id) { await _sharedService.CallMaterialByDataIdentifier(id, _serviceProvider); } /// <summary> /// 分页获取叫料单表 /// </summary> PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/SharedService.cs
@@ -12,6 +12,9 @@ using CMS.Plugin.PipeLineLems.Application.Contracts.Services; using CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.CallMaterialOrder; using Volo.Abp.Uow; using System.Text; using CMS.Plugin.PipeLineLems.Domain.WorkPlan; using CMS.Plugin.PipeLineLems.Domain.CallMaterialOrderRecord; namespace CMS.Plugin.PipeLineLems.Application.Implements; @@ -20,6 +23,14 @@ /// </summary> public class SharedService : CMSPluginAppService { /// <summary> /// 创建作业计划 /// </summary> /// <param name="input"></param> /// <param name="_serviceProvider"></param> /// <param name="workPlanAppService"></param> /// <returns></returns> /// <exception cref="UserFriendlyException"></exception> public async Task<MesOrderResponse> CommonCreatebyApsAsync(List<WorkPlanInput> input, IServiceProvider _serviceProvider, WorkPlanAppService workPlanAppService @@ -191,12 +202,12 @@ } catch (Exception) { await uow.RollbackAsync(); throw; } finally { await uow.RollbackAsync(); } @@ -255,4 +266,107 @@ return (true, string.Empty); } /// <summary> /// 根据原料标识进行叫料操作 /// </summary> /// <param name="dataIdentifier">原料标识</param> /// <param name="_serviceProvider">服务提供者</param> /// <returns>操作结果</returns> /// <exception cref="UserFriendlyException">当数据不存在或状态不允许叫料时抛出</exception> public async Task<MesOrderResponse> CallMaterialByDataIdentifier(Guid id, IServiceProvider _serviceProvider) { if (string.IsNullOrEmpty(id.ToString())) { throw new UserFriendlyException("原料标识不能为空"); } var callMaterialOrderRepository = _serviceProvider.GetRequiredService<ICallMaterialOrderRepository>(); var workPlanRepository = _serviceProvider.GetRequiredService<IWorkPlanRepository>(); var callMaterialOrderRecordRepository = _serviceProvider.GetRequiredService<ICallMaterialOrderRecordRepository>(); var orderManager = _serviceProvider.GetRequiredService<IOrderManager>(); // 查找数据 var callMaterialOrder = await callMaterialOrderRepository.GetAsync(id); if (callMaterialOrder == null) { throw new UserFriendlyException($"找不到叫料记录"); } // 验证状态 //if (callMaterialOrder.CallMaterialStatus != Domain.Shared.Enums.CallMaterialStatusEnum.未执行) //{ // throw new UserFriendlyException($"原料标识为 '{callMaterialOrder.DataIdentifier}' 的叫料记录状态为 '{callMaterialOrder.CallMaterialStatus}',不允许叫料"); //} // 更新数据 callMaterialOrder.WmsRetResult = "成功"; callMaterialOrder.WmsTaskNo = GenerateRandomTaskNo(); callMaterialOrder.CallMaterialStatus = Domain.Shared.Enums.CallMaterialStatusEnum.叫料完成; callMaterialOrder.LastModifierName = "SuperAdmin"; await callMaterialOrderRepository.UpdateAsync(callMaterialOrder); //更新作业计划表 var workPlanList = await workPlanRepository.FindByDataIdentifierAsync(callMaterialOrder.DataIdentifier); foreach (var item in workPlanList) { item.CallMaterialStatus = Domain.Shared.Enums.CallMaterialStatusEnum.叫料完成; item.LastModifierName = "SuperAdmin"; } await workPlanRepository.UpdateManyAsync(workPlanList); //新增叫料记录表 var callMaterialOrderRecord = new CallMaterialOrderRecord() { CallMaterialStatus = Domain.Shared.Enums.CallMaterialStatusEnum.叫料完成, MaterialMode = callMaterialOrder.MaterialMode, DataIdentifier = callMaterialOrder.DataIdentifier, Quantity = 1, WmsRetResult = callMaterialOrder.WmsRetResult, WmsTaskNo = callMaterialOrder.WmsTaskNo, CreatorName = "SuperAdmin" }; await callMaterialOrderRecordRepository.InsertAsync(callMaterialOrderRecord); //更新工单表的状态 var pipeSpecCodeList = workPlanList.Select(x => x.PipeSpecCode).Distinct().ToList(); foreach (var item in pipeSpecCodeList) { var prodOrderNo = "Order_" + item; var order = await orderManager.GetByCodeAsync(prodOrderNo); if (order != null) { order.ExtraProperties["CallMaterialStatus"] = Domain.Shared.Enums.CallMaterialStatusEnum.叫料完成.ToString(); } await orderManager.UpdateAsync(order); } // 返回结果 var response = new MesOrderResponse { Code = "000000", Fail = false, Mesg = "叫料成功", Success = true, Time = DateTime.UtcNow }; return response; } /// <summary> /// 生成随机的WmsTaskNo /// </summary> /// <returns>随机生成的任务编号</returns> private string GenerateRandomTaskNo() { // 获取当前时间戳(从1970-01-01 00:00:00 UTC到现在的秒数) long timestamp = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeSeconds(); // 生成前缀 return $"WMS{timestamp}"; } } PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/WorkPlanAppService.cs
@@ -113,6 +113,7 @@ var insertObj = ObjectMapper.Map<WorkPlanCreateDto, WorkPlan>(input); insertObj.Sort = sort; insertObj.CreatorName = "SuperAdmin"; input.MapExtraPropertiesTo(insertObj, MappingPropertyDefinitionChecks.None); await workPlanRepository.InsertAsync(insertObj); PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Domain/CallMaterialOrder/ICallMaterialOrderRepository.cs
@@ -31,6 +31,9 @@ /// <returns></returns> Task<int> GetMaxSortAsync(); /// <summary> /// 获取分页列表叫料单表 /// </summary> PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Domain/WorkPlan/IWorkPlanRepository.cs
@@ -31,6 +31,15 @@ /// <returns></returns> Task<int> GetMaxSortAsync(); /// <summary> /// 按照 原料标记 查找作业计划表 /// </summary> /// <param name="name"></param> /// <param name="cancellationToken"></param> /// <returns></returns> Task<List<WorkPlan>> FindByDataIdentifierAsync(string dataIdentifier, CancellationToken cancellationToken = default); /// <summary> /// 获取分页列表作业计划表 /// </summary> PipeLineLems/server/src/CMS.Plugin.PipeLineLems.EntityFrameworkCore/Extensions/CMSPluginEfCoreExtensions.CallMaterialOrderRecord.cs
@@ -56,7 +56,6 @@ b.ConfigureMyCmsEntityForRecord(); // Configure indexes b.HasIndex(u => u.DataIdentifier).IsUnique(); b.HasIndex(u => u.DataIdentifier); b.ApplyObjectExtensionMappings(); PipeLineLems/server/src/CMS.Plugin.PipeLineLems.EntityFrameworkCore/Repositories/EfCoreWorkPlanRepository.cs
@@ -39,6 +39,23 @@ .FirstOrDefaultAsync(t => t.TaskCode == name, GetCancellationToken(cancellationToken)); } /// <summary> /// 按照 原料标记 查找作业计划表 /// </summary> /// <param name="name"></param> /// <param name="cancellationToken"></param> /// <returns></returns> public virtual async Task<List<WorkPlan>> FindByDataIdentifierAsync(string dataIdentifier, CancellationToken cancellationToken = default) { return await (await GetDbSetAsync()) .IncludeDetails() .Where(x => !x.IsDeleted) .Where(t => t.DataIdentifier == dataIdentifier) .OrderByDescending(x => x.CreationTime) .ToListAsync(GetCancellationToken(cancellationToken)); } /// <summary> /// 验证名称是否存在作业计划表 /// </summary> PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Controller/CallMaterialOrderController.cs
@@ -46,6 +46,13 @@ return _callMaterialOrderAppService.GetAsync(id); } [HttpPut] [Route("CallMaterialByDataIdentifier/{id}")] public virtual Task CallMaterialByDataIdentifier(Guid id) { return _callMaterialOrderAppService.CallMaterialByDataIdentifier(id); } /// <summary> /// 分页获取叫料单表的列表. /// </summary>