From 0e42f871905f207658d822fcbe29aeb57b2156af Mon Sep 17 00:00:00 2001 From: schangxiang@126.com <schangxiang@126.com> Date: 周三, 21 5月 2025 16:18:01 +0800 Subject: [PATCH] 修复查询bug --- PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/SharedService.cs | 1287 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 1,244 insertions(+), 43 deletions(-) diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/SharedService.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/SharedService.cs index c3dc2d5..e1754ac 100644 --- a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/SharedService.cs +++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/SharedService.cs @@ -1,30 +1,33 @@ +using CMS.Extensions.Variable; using CMS.Plugin.FormulaManagement.Abstractions; +using CMS.Plugin.HIAWms.Application.Contracts.Dtos.CommonDto; +using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterialStocks; +using CMS.Plugin.MaterialManagement.Abstractions; using CMS.Plugin.OrderManagement.Abstractions; using CMS.Plugin.OrderManagement.Abstractions.Enums; using CMS.Plugin.OrderManagement.Abstractions.Models; -using CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.WorkPlan; -using CMS.Plugin.ProductManagement.Abstractions; -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; -using System.Text; -using CMS.Plugin.PipeLineLems.Domain.WorkPlan; +using CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.WorkPlan; +using CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.WorkTask; +using CMS.Plugin.PipeLineLems.Application.Contracts.Services; +using CMS.Plugin.PipeLineLems.Domain.CallMaterialOrder; using CMS.Plugin.PipeLineLems.Domain.CallMaterialOrderRecord; -using Volo.Abp.Users; -using CmsQueryExtensions.Entitys; -using CMS.Unit.RuntimeValue.Abstractions; -using CMS.Extensions.Variable; -using CMS.Plugin.TraceManagement.Abstractions.Models.Traces; +using CMS.Plugin.PipeLineLems.Domain.WorkPlan; +using CMS.Plugin.PipeLineLems.Domain.WorkTask; using CMS.Plugin.ProcessManagement.Abstractions; -using KissUtil.Extensions; +using CMS.Plugin.ProductManagement.Abstractions; using CMS.Plugin.TraceManagement.Abstractions; -using CMS.Plugin.ProductManagement.Abstractions.Models; -using CMS.Plugin.MaterialManagement.Abstractions; +using CMS.Plugin.TraceManagement.Abstractions.Models.Traces; +using CmsQueryExtensions; +using CmsQueryExtensions.Entitys; +using CmsQueryExtensions.Extension; +using Humanizer; +using KissUtil.Extensions; +using Microsoft.Extensions.DependencyInjection; +using Newtonsoft.Json; +using Volo.Abp; +using Volo.Abp.ObjectMapping; +using Volo.Abp.Uow; namespace CMS.Plugin.PipeLineLems.Application.Implements; @@ -35,11 +38,34 @@ { + + /// <summary> + /// 鍒嗘嫞鍔熻兘 + /// </summary> + /// <param name="_serviceProvider"></param> + /// <param name="input"></param> + /// <param name="myCurrentUser"></param> + /// <returns></returns> public async Task<MesOrderResponse> CommonPick(IServiceProvider _serviceProvider, PickInput input, MyCurrentUser myCurrentUser) { + if (string.IsNullOrEmpty(input.TaskCode)) + { + throw new UserFriendlyException("璇疯緭鍏ヤ换鍔$紪鍙�"); + }; + if (string.IsNullOrEmpty(input.PipeSpecCode)) + { + throw new UserFriendlyException("璇疯緭鍏ョ娈电紪鐮�"); + }; + if (string.IsNullOrEmpty(input.ContinerNo)) + { + throw new UserFriendlyException("璇疯緭鍏ユ墭鐩樺彿"); + }; //1銆佽褰曞垎鎷h褰曡〃 //2銆佹洿鏂颁綔涓氳鍒掕〃鐨勭姸鎬� =宸插垎鎷� //3銆佸啓鍏� 鍒嗘嫞鍙橀噺 + //4銆佸啓鍏ヨ拷婧姤琛� + //5銆佺墿鏂欑粍鐩� + VariableService _variableService = _serviceProvider.GetRequiredService<VariableService>(); var _workSectionManager = _serviceProvider.GetRequiredService<IWorkSectionManager>(); @@ -47,14 +73,15 @@ var traceProvider = _serviceProvider.GetRequiredService<ITraceProvider>(); var materialProvider = _serviceProvider.GetRequiredService<IMaterialProvider>(); var workPlanAppService = _serviceProvider.GetRequiredService<IWorkPlanAppService>(); + var callMaterialOrderAppService = _serviceProvider.GetRequiredService<ICallMaterialOrderAppService>(); - Dictionary<string, object?> keyValuePairs = new Dictionary<string, object?> - { - { "鍒嗘嫞鎵樼洏鍙�","鎵樼洏1"}, - { "鍒嗘嫞鏂瑰悜", "鐭瑁呴厤"}, - { "鍒嗘嫞浜�", myCurrentUser.UserAccount } - }; - _variableService.WriteValueAsync(keyValuePairs); + //Dictionary<string, object?> keyValuePairs = new Dictionary<string, object?> + // { + // { "鍒嗘嫞鎵樼洏鍙�","鎵樼洏1"}, + // { "鍒嗘嫞鏂瑰悜", "鐭瑁呴厤"}, + // { "鍒嗘嫞浜�", myCurrentUser.UserAccount } + // }; + //_variableService.WriteValueAsync(keyValuePairs); //鏍规嵁宸ュ簭鍚嶈幏鍙栧伐搴忓璞� var workSection = await _workSectionManager.GetByNameAsync("鍒嗘嫞宸ュ簭"); @@ -86,15 +113,66 @@ }); } //鐗╂枡鍙傛暟鍒楄〃 - var firstWorkPlans = await workPlanAppService.GetListByFilterAsync(x => x.PipeSpecCode == input.PipeSpecCode); + var firstWorkPlan = await workPlanAppService.GetSingleByFilterAsync(x => x.TaskCode == input.TaskCode); + var callMaterialOrder = await callMaterialOrderAppService.GetSingleByFilterAsync(x => x.DataIdentifier == firstWorkPlan.DataIdentifier); + //TODO:杩欓噷璋冪敤wms鐨勫彨鏂欐帴鍙� + try + { + //棣栧厛鍒ゆ柇搴撳瓨鏄惁瀛樺湪 + var dto = await IsExistInWms(input.PipeSpecCode); + if (dto != null) + { + throw new UserFriendlyException($"宸茬粡鍒嗘嫞杩囷紝搴撳瓨鍦ㄥ簱浣峽dto.PlaceNo},鎵樼洏鍙穥dto.ContainerNo}"); + } - var firstWorkPlan = await workPlanAppService.GetSingleByFilterAsync(x => x.PipeSpecCode == input.PipeSpecCode); - var rawPipe_DataIdentifier = await materialProvider.FindByNameAsync("鍒嗘嫞鍘熸枡绠℃爣璇�"); - var rawPipe_MaterialMode = await materialProvider.FindByNameAsync("鍒嗘嫞鍘熸枡绠″瀷鍙�"); + + WmsMaterialStockCreateDto param = new WmsMaterialStockCreateDto() + { + ContainerNo = input.ContinerNo, + MaterialModel = firstWorkPlan.MaterialMode, + PlaceNo = input.PlaceNo, + StockNumber = 1, + MaterialBatch = callMaterialOrder.MaterialBatch, + + RedundantField1 = firstWorkPlan.ProcessRouteNumber, //鎵╁睍瀛楁鏄剧ず 宸ヨ壓娴佸悜缂栧彿 + RedundantField2 = firstWorkPlan.PipeSpecCode, //鎵╁睍瀛楁鏄剧ず 绠℃缂栫爜 + RedundantField3 = firstWorkPlan.PipeSectionName, //鎵╁睍瀛楁鏄剧ず 绠℃鍚嶇О + + }; + string baseUrl = @"http://127.0.0.1:18000/api/v1/HIAWms/"; + string url = baseUrl + "LMesOperate/LMesPick"; + string json = JsonConvert.SerializeObject(param); + var result = HttpApiRequest.HttpPost(url, json); + var res = JsonConvert.DeserializeObject<CmsApiResponse<WmsMaterialStockDto>>(result); + if (res.Code == 200) + { + var retData = res.Data; + //callMaterialOrder.MaterialBatch = retData[0].MaterialBatch; + //callMaterialOrder.WmsTaskNo = retData[0].TaskNo; + //callMaterialOrder.WmsRetResult = res.Message; + } + else + { + throw new UserFriendlyException(res.Message); + } + } + catch (Exception) + { + + throw; + } + + + + + + var rawPipe_DataIdentifier = await materialProvider.FindByNameAsync("鍘熸枡绠℃爣璇�"); + var rawPipe_MaterialMode = await materialProvider.FindByNameAsync("鍘熸枡绠″瀷鍙�"); + var rawPipe_Batch = await materialProvider.FindByNameAsync("鍘熸枡绠℃壒娆�"); List<TraceMaterialModel> _MaterialParams = new List<TraceMaterialModel>(); foreach (var item in workSection.MaterialParameters) { - if (item.Name == "鍒嗘嫞鍘熸枡绠″瀷鍙�") + if (item.Name == "鍘熸枡绠″瀷鍙�") { _MaterialParams.Add(new TraceMaterialModel() { @@ -106,7 +184,7 @@ }); } - if (item.Name == "鍒嗘嫞鍘熸枡绠℃爣璇�") + if (item.Name == "鍘熸枡绠℃爣璇�") { _MaterialParams.Add(new TraceMaterialModel() { @@ -115,6 +193,18 @@ MaterialId = rawPipe_DataIdentifier.MaterialId, MaterialDetailId = rawPipe_DataIdentifier.MaterialDetails.First().Id, Value = firstWorkPlan.DataIdentifier, + + }); + } + if (item.Name == "鍘熸枡绠℃壒娆�") + { + _MaterialParams.Add(new TraceMaterialModel() + { + Key = item.Key, + Quantity = 1, + MaterialId = rawPipe_Batch.MaterialId, + MaterialDetailId = rawPipe_Batch.MaterialDetails.First().Id, + Value = callMaterialOrder.MaterialBatch,//鎵规鏆傛椂鍐欐 }); } @@ -127,7 +217,38 @@ string _value = ""; if (item.Name == "鍒嗘嫞鏂瑰悜") { - _value = "鐭瑁呴厤"; + _value = "鐭鍒嗘嫞"; + } + if (item.Name == "鍒嗘嫞鎵樼洏鍙�") + { + _value = input.ContinerNo; + } + if (item.Name == "鍒嗘嫞浜�") + { + _value = myCurrentUser.UserAccount; + } + //item.Key + TraceParamModel traceParamModel = new TraceParamModel() + { + Key = item.Key, + Value = _value + }; + traceModel.Params.Add(traceParamModel); + }; + foreach (var item in workSection.FormulaParameters) + { + string _value = ""; + if (item.Name == "鍒嗘嫞鏂瑰悜") + { + _value = "鐭鍒嗘嫞"; + } + if (item.Name == "鍒嗘嫞鎵樼洏鍙�") + { + _value = input.ContinerNo; + } + if (item.Name == "鍒嗘嫞浜�") + { + _value = myCurrentUser.UserAccount; } //item.Key TraceParamModel traceParamModel = new TraceParamModel() @@ -151,6 +272,7 @@ }; return response; } + /// <summary> /// 鍒涘缓浣滀笟璁″垝 /// </summary> @@ -159,7 +281,6 @@ /// <param name="workPlanAppService"></param> /// <returns></returns> /// <exception cref="UserFriendlyException"></exception> - public async Task<MesOrderResponse> CommonCreatebyApsAsync(List<WorkPlanInput> input, IServiceProvider _serviceProvider, WorkPlanAppService workPlanAppService, string userId, string userAccount @@ -174,6 +295,13 @@ if (input.Count == 0) { throw new UserFriendlyException("杈撳叆鍙傛暟Data涓嶈兘涓虹┖"); + } + + //鍐欐 鎵撶爜鍐呭 + foreach (var item in input) + { + //鏍煎紡 绠℃缂栫爜,绠℃鍚嶇О,鑸瑰彿,椤圭洰鍙� + item.MarkingContent = item.PipeSpecCode + "," + item.PipeSectionName + "," + item.ShipNumber + "," + item.ProjectNumber; } //鏍¢獙鏁版嵁 @@ -192,6 +320,8 @@ var orderManager = _serviceProvider.GetRequiredService<IOrderManager>(); var productProvider = _serviceProvider.GetRequiredService<IProductProvider>(); var formulaProvider = _serviceProvider.GetRequiredService<IFormulaProvider>(); + + var workTaskAppService = _serviceProvider.GetRequiredService<IWorkTaskAppService>(); List<OrderModel> orderModels = new List<OrderModel>(); @@ -329,16 +459,36 @@ insertObj.CreatorName = userAccount; insertObj.Remark = "绯荤粺瀵煎叆"; await workPlanAppService.CreateAsync(insertObj); + + //澧炲姞鏂板璁″垝浠诲姟琛ㄦ暟鎹� 銆怑ditby shaocx,2025-05-20銆� + var org_insertTaskObj = ObjectMapper.Map<WorkPlanCreateDto, WorkTaskCreateDto>(insertObj); + org_insertTaskObj.Son_TaskCode = insertObj.TaskCode; + await workTaskAppService.CreateAsync(org_insertTaskObj); + if (insertObj.ProcessName == "鍒囧壊宸ュ簭") + {//鏂板缓 鍒嗘嫞宸ュ簭 + var insertTaskObj = ObjectMapper.Map<WorkPlanCreateDto, WorkTaskCreateDto>(insertObj); + insertTaskObj.Son_TaskCode = insertObj.TaskCode + "_1"; + insertTaskObj.ProcessName = "鍒嗘嫞宸ュ簭"; + await workTaskAppService.CreateAsync(insertTaskObj); + } + else if (insertObj.ProcessName == "瑁呴厤宸ュ簭") + {//鏂板缓 娉曞叞鍐茬爜宸ュ簭(澶氫釜) + //鐩墠鏆傛椂鎼炴垚涓�涓硶鍏� + var insertTaskObj = ObjectMapper.Map<WorkPlanCreateDto, WorkTaskCreateDto>(insertObj); + insertTaskObj.Son_TaskCode = insertObj.TaskCode + "_1"; + insertTaskObj.ProcessName = "娉曞叞鍐茬爜宸ュ簭"; + await workTaskAppService.CreateAsync(insertTaskObj); + } } #endregion await uow.CompleteAsync(); } - catch (Exception) + catch (Exception ex) { await uow.RollbackAsync(); - throw; + throw ex; } finally { @@ -408,21 +558,22 @@ /// <param name="_serviceProvider">鏈嶅姟鎻愪緵鑰�</param> /// <returns>鎿嶄綔缁撴灉</returns> /// <exception cref="UserFriendlyException">褰撴暟鎹笉瀛樺湪鎴栫姸鎬佷笉鍏佽鍙枡鏃舵姏鍑�</exception> - public async Task<MesOrderResponse> CallMaterialByDataIdentifier(Guid id, IServiceProvider _serviceProvider) + public async Task<MesOrderResponse> CallMaterial(CallMaterialByDataIdentifierInput input, IServiceProvider _serviceProvider, MyCurrentUser myCurrentUser) { - if (string.IsNullOrEmpty(id.ToString())) + if (string.IsNullOrEmpty(input.Id.ToString())) { throw new UserFriendlyException("鍘熸枡鏍囪瘑涓嶈兘涓虹┖"); } var callMaterialOrderRepository = _serviceProvider.GetRequiredService<ICallMaterialOrderRepository>(); var workPlanRepository = _serviceProvider.GetRequiredService<IWorkPlanRepository>(); + var workTaskRepository = _serviceProvider.GetRequiredService<IWorkTaskRepository>(); var callMaterialOrderRecordRepository = _serviceProvider.GetRequiredService<ICallMaterialOrderRecordRepository>(); var orderManager = _serviceProvider.GetRequiredService<IOrderManager>(); // 鏌ユ壘鏁版嵁 - var callMaterialOrder = await callMaterialOrderRepository.GetAsync(id); + var callMaterialOrder = await callMaterialOrderRepository.GetAsync(input.Id); if (callMaterialOrder == null) { throw new UserFriendlyException($"鎵句笉鍒板彨鏂欒褰�"); @@ -431,19 +582,55 @@ // 楠岃瘉鐘舵�� if (callMaterialOrder.CallMaterialStatus != Domain.Shared.Enums.CallMaterialStatusEnum.鏈墽琛�) { - throw new UserFriendlyException($"鍘熸枡鏍囪瘑涓� '{callMaterialOrder.DataIdentifier}' 鐨勫彨鏂欒褰曠姸鎬佷负 '{callMaterialOrder.CallMaterialStatus}'锛屼笉鍏佽鍙枡"); + //throw new UserFriendlyException($"鍘熸枡鏍囪瘑涓� '{callMaterialOrder.DataIdentifier}' 鐨勫彨鏂欒褰曠姸鎬佷负 '{callMaterialOrder.CallMaterialStatus}'锛屼笉鍏佽鍙枡"); } + //TODO:杩欓噷璋冪敤wms鐨勫彨鏂欐帴鍙� + try + { + List<LMesCallMaterialInput> param = new List<LMesCallMaterialInput>() { + new LMesCallMaterialInput(){ + DataIdentifier=callMaterialOrder.DataIdentifier, + MaterialMode=callMaterialOrder.MaterialMode, + } + }; + string baseUrl = @"http://127.0.0.1:18000/api/v1/HIAWms/"; + string url = baseUrl + "lMesOperate/LMesCallMaterial"; + string json = JsonConvert.SerializeObject(param); + var result = HttpApiRequest.HttpPost(url, json); + + var res = JsonConvert.DeserializeObject<CmsApiResponse<List<MyCallMaterialOutput>>>(result); + if (res.Code == 200) + { + var retData = res.Data; + callMaterialOrder.MaterialBatch = retData[0].MaterialBatch; + callMaterialOrder.WmsTaskNo = retData[0].TaskNo; + callMaterialOrder.WmsRetResult = res.Message; + } + else + { + throw new UserFriendlyException(res.Message); + } + //*/ + } + catch (Exception) + { + + throw; + } + + // 鏇存柊鏁版嵁 - callMaterialOrder.WmsRetResult = "鎴愬姛"; - callMaterialOrder.WmsTaskNo = GenerateRandomTaskNo(); + //callMaterialOrder.MaterialBatch = GenerateRandomBatch();//wms杩斿洖鐨勫師鏂欐壒娆� + //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); + var workPlanList = await workPlanRepository.GetListByFilterAsync(x => x.DataIdentifier == callMaterialOrder.DataIdentifier); foreach (var item in workPlanList) { item.CallMaterialStatus = Domain.Shared.Enums.CallMaterialStatusEnum.鍙枡瀹屾垚; @@ -451,10 +638,20 @@ } await workPlanRepository.UpdateManyAsync(workPlanList); + //鏇存柊浣滀笟浠诲姟琛� + var workTaskList = await workTaskRepository.GetListByFilterAsync(x => x.DataIdentifier == callMaterialOrder.DataIdentifier); + foreach (var item in workTaskList) + { + item.CallMaterialStatus = Domain.Shared.Enums.CallMaterialStatusEnum.鍙枡瀹屾垚; + item.LastModifierName = "SuperAdmin"; + } + await workTaskRepository.UpdateManyAsync(workTaskList); + //鏂板鍙枡璁板綍琛� var callMaterialOrderRecord = new CallMaterialOrderRecord() { CallMaterialStatus = Domain.Shared.Enums.CallMaterialStatusEnum.鍙枡瀹屾垚, + MaterialBatch = callMaterialOrder.MaterialBatch, MaterialMode = callMaterialOrder.MaterialMode, DataIdentifier = callMaterialOrder.DataIdentifier, Quantity = 1, @@ -489,6 +686,1001 @@ } /// <summary> + ///瑁呴厤/鐒婃帴寮�宸� + /// </summary> + /// <param name="input"></param> + /// <param name="_serviceProvider"></param> + /// <param name="myCurrentUser"></param> + /// <returns></returns> + /// <exception cref="UserFriendlyException"></exception> + public async Task<MesOrderResponse> StartProduction(StartProductionInput input, IServiceProvider _serviceProvider, MyCurrentUser myCurrentUser) + { + if (string.IsNullOrEmpty(input.TaskCode.ToString())) + { + throw new UserFriendlyException("浠诲姟缂栫爜涓嶈兘涓虹┖"); + } + + string processName = ""; + + VariableService _variableService = _serviceProvider.GetRequiredService<VariableService>(); + var callMaterialOrderRepository = _serviceProvider.GetRequiredService<ICallMaterialOrderRepository>(); + var workPlanRepository = _serviceProvider.GetRequiredService<IWorkPlanRepository>(); + var workTaskRepository = _serviceProvider.GetRequiredService<IWorkTaskRepository>(); + var callMaterialOrderRecordRepository = _serviceProvider.GetRequiredService<ICallMaterialOrderRecordRepository>(); + var orderManager = _serviceProvider.GetRequiredService<IOrderManager>(); + var callMaterialOrderAppService = _serviceProvider.GetRequiredService<ICallMaterialOrderAppService>(); + + // 鏌ユ壘鏁版嵁 + var workTask = await workTaskRepository.GetSingleByFilterAsync(x => x.TaskCode == input.TaskCode); + if (workTask == null) + { + throw new UserFriendlyException($"鎵句笉鍒颁綔涓氳鍒�"); + } + var workPlan = await workPlanRepository.GetSingleByFilterAsync(x => x.TaskCode == input.TaskCode); + if (workPlan == null) + { + throw new UserFriendlyException($"鎵句笉鍒颁綔涓氳鍒�"); + } + if (workPlan.ProcessName == "瑁呴厤宸ュ簭") + { + processName = "瑁呴厤"; + } + else if (workPlan.ProcessName == "鐒婃帴宸ュ簭") + { + processName = "鐒婃帴"; + } + + // 楠岃瘉鐘舵�� + if (workPlan.WorkPlanStatus != Domain.Shared.Enums.WorkPlanStatusEnum.鏆傚仠涓� && workPlan.WorkPlanStatus != Domain.Shared.Enums.WorkPlanStatusEnum.鏈敓浜�) + { + //鏆傛椂娉ㄩ噴 + //throw new UserFriendlyException($"浠诲姟缂栫爜 '{input.TaskCode}' 鐨勫綍鐘舵�佷负 '{workPlan.WorkPlanStatus}'锛屼笉鍏佽寮�宸�"); + } + + var callMaterialOrder = await callMaterialOrderAppService.GetSingleByFilterAsync(x => x.DataIdentifier == workPlan.DataIdentifier); + #region 浜嬪姟 + + using var scope = _serviceProvider.CreateScope(); + var unitOfWorkManager = scope.ServiceProvider.GetRequiredService<IUnitOfWorkManager>(); + using var uow = unitOfWorkManager.Begin(requiresNew: true); + + try + { + #region 鏁版嵁澶勭悊 + + //1銆佹洿鏂颁綔涓氳鍒掕〃涓� 鐢熶骇涓� + //2銆佺粰PLC鍙戝伐鑹哄弬鏁版寚浠�,骞跺啓鍏� plc涓� 浜у搧id + //if (workPlan.ProcessName == "瑁呴厤宸ュ簭") + //{ + // workPlan.WorkPlanStatus = Domain.Shared.Enums.WorkPlanStatusEnum.鐢熶骇涓�; + //} + //else if (workPlan.ProcessName == "鐒婃帴宸ュ簭") + //{ + // workPlan.WorkPlanStatus = Domain.Shared.Enums.WorkPlanStatusEnum.宸插畬鎴�; + //} + workPlan.WorkPlanStatus = Domain.Shared.Enums.WorkPlanStatusEnum.鐢熶骇涓�; + workTask.WorkPlanStatus = Domain.Shared.Enums.WorkPlanStatusEnum.鐢熶骇涓�; + + await workPlanRepository.UpdateAsync(workPlan); + + Dictionary<string, object?> keyValuePairs = new Dictionary<string, object?> + { + { $"{processName}_ProductID", workPlan.PipeSpecCode }, + { $"{processName}绠℃缂栫爜", workPlan.PipeSpecCode }, + { $"{processName}绠℃鍚嶇О", workPlan.PipeSectionName }, + { $"{processName}鍘熸枡绠℃壒娆�", callMaterialOrder.MaterialBatch }, + { $"{processName}鍘熸枡绠″瀷鍙�", callMaterialOrder.MaterialMode }, + { $"{processName}鍘熸枡绠℃爣璇�", callMaterialOrder.DataIdentifier }, + { $"{processName}椤圭洰鍙�", workPlan.ProjectNumber }, + { $"{processName}鑸瑰彿", workPlan.ShipNumber }, + + //閲囬泦鏁版嵁妯℃嫙鍐欏叆 + { $"{processName}鍘嬪姏", "10.0 MPa" }, + { $"{processName}閫熷害", "18mm/s"}, + + { $"{processName}浜�", myCurrentUser.UserAccount}, + { $"{processName}闂撮殭","15mm"}, + { $"{processName}浣嶇疆", "10,23,24"}, + }; + _variableService.WriteValueAsync(keyValuePairs); + + + #endregion + + await uow.CompleteAsync(); + + // 杩斿洖缁撴灉 + var response = new MesOrderResponse + { + Code = "200", + Message = "澶勭悊鎴愬姛", + Time = DateTime.UtcNow + }; + return response; + } + catch (Exception) + { + await uow.RollbackAsync(); + throw; + } + finally + { + + } + + + + #endregion + } + + + + /// <summary> + /// 瑁呴厤/鐒婃帴宸ュ簭瀹屽伐 + /// </summary> + /// <param name="_serviceProvider"></param> + /// <param name="input"></param> + /// <param name="myCurrentUser"></param> + /// <returns></returns> + public async Task<MesOrderResponse> CompleteAssemblyProcess(IServiceProvider _serviceProvider, CompleteAssemblyProcessInput input, MyCurrentUser myCurrentUser) + { + //1銆佽褰曞垎鎷h褰曡〃 + //2銆佹洿鏂颁綔涓氳鍒掕〃鐨勭姸鎬� =宸插垎鎷� + //3銆佸啓鍏� 鍒嗘嫞鍙橀噺 + //4銆佸啓鍏ヨ拷婧姤琛� + //5銆佺墿鏂欑粍鐩� + + if (string.IsNullOrEmpty(input.PipeSpecCode)) + { + throw new UserFriendlyException($"绠℃缂栫爜涓嶈兘涓虹┖"); + } + + + + + #region 浜嬪姟 + + using var scope = _serviceProvider.CreateScope(); + var unitOfWorkManager = scope.ServiceProvider.GetRequiredService<IUnitOfWorkManager>(); + using var uow = unitOfWorkManager.Begin(requiresNew: true); + + try + { + #region 鏁版嵁澶勭悊 + + 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>(); + var workTaskAppService = _serviceProvider.GetRequiredService<IWorkTaskAppService>(); + var workPlanRepository = _serviceProvider.GetRequiredService<IWorkPlanRepository>(); + var workTaskRepository = _serviceProvider.GetRequiredService<IWorkTaskRepository>(); + var callMaterialOrderAppService = _serviceProvider.GetRequiredService<ICallMaterialOrderAppService>(); + + string processName = ""; + var firstWorkTask = await workTaskAppService.GetSingleByFilterAsync(x => x.PipeSpecCode == input.PipeSpecCode && x.ProcessName == input.ProcessName); + if (firstWorkTask == null) + { + throw new UserFriendlyException($"鎵句笉鍒颁綔涓氳鍒�"); + } + //鐗╂枡鍙傛暟鍒楄〃 + var firstWorkPlan = await workPlanAppService.GetSingleByFilterAsync(x => x.PipeSpecCode == input.PipeSpecCode && x.ProcessName == input.ProcessName); + if (firstWorkPlan == null) + { + throw new UserFriendlyException($"鎵句笉鍒颁綔涓氳鍒�"); + } + if (firstWorkPlan.ProcessName == "瑁呴厤宸ュ簭") + { + processName = "瑁呴厤"; + } + else if (firstWorkPlan.ProcessName == "鐒婃帴宸ュ簭") + { + processName = "鐒婃帴"; + } + + await CompleteHandleOutStoreFinish(_serviceProvider, processName, true); + + //鏍规嵁宸ュ簭鍚嶈幏鍙栧伐搴忓璞� + var workSection = await _workSectionManager.GetByNameAsync($"{processName}宸ュ簭"); + var workStation = await _workStationManager.GetByNameAsync($"{processName}宸ヤ綅"); + //鍐欏叆杩芥函鎶ヨ〃 + 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() + }); + } + + firstWorkTask.WorkPlanStatus = Domain.Shared.Enums.WorkPlanStatusEnum.宸插畬鎴�; + await workTaskRepository.UpdateAsync(firstWorkTask); + + firstWorkPlan.WorkPlanStatus = Domain.Shared.Enums.WorkPlanStatusEnum.宸插畬鎴�; + await workPlanRepository.UpdateAsync(firstWorkPlan); + + var callMaterialOrder = await callMaterialOrderAppService.GetSingleByFilterAsync(x => x.DataIdentifier == firstWorkPlan.DataIdentifier); + + var rawPipe_DataIdentifier = await materialProvider.FindByNameAsync("鍘熸枡绠℃爣璇�"); + var rawPipe_MaterialMode = await materialProvider.FindByNameAsync("鍘熸枡绠″瀷鍙�"); + var rawPipe_Batch = await materialProvider.FindByNameAsync("鍘熸枡绠℃壒娆�"); + var rawPipe_ProjectNumber = await materialProvider.FindByNameAsync("椤圭洰鍙�"); + var rawPipe_ShipNumber = await materialProvider.FindByNameAsync("鑸瑰彿"); + List<TraceMaterialModel> _MaterialParams = new List<TraceMaterialModel>(); + foreach (var item in workSection.MaterialParameters) + { + if (item.Name == "鍘熸枡绠″瀷鍙�") + { + _MaterialParams.Add(new TraceMaterialModel() + { + Key = item.Key, + Quantity = 1, + MaterialId = rawPipe_MaterialMode.MaterialId, + MaterialDetailId = rawPipe_MaterialMode.MaterialDetails.First().Id, + Value = firstWorkPlan.MaterialMode + + }); + } + if (item.Name == "鍘熸枡绠℃爣璇�") + { + _MaterialParams.Add(new TraceMaterialModel() + { + Key = item.Key, + Quantity = 1, + MaterialId = rawPipe_DataIdentifier.MaterialId, + MaterialDetailId = rawPipe_DataIdentifier.MaterialDetails.First().Id, + Value = firstWorkPlan.DataIdentifier, + + }); + } + if (item.Name == "鍘熸枡绠℃壒娆�") + { + _MaterialParams.Add(new TraceMaterialModel() + { + Key = item.Key, + Quantity = 1, + MaterialId = rawPipe_Batch.MaterialId, + MaterialDetailId = rawPipe_Batch.MaterialDetails.First().Id, + Value = callMaterialOrder.MaterialBatch,//鎵规鏆傛椂鍐欐 + + }); + } + if (item.Name == "椤圭洰鍙�") + { + _MaterialParams.Add(new TraceMaterialModel() + { + Key = item.Key, + Quantity = 1, + MaterialId = rawPipe_ProjectNumber.MaterialId, + MaterialDetailId = rawPipe_ProjectNumber.MaterialDetails.First().Id, + Value = firstWorkPlan.ProjectNumber, + + }); + } + if (item.Name == "鑸瑰彿") + { + _MaterialParams.Add(new TraceMaterialModel() + { + Key = item.Key, + Quantity = 1, + MaterialId = rawPipe_ShipNumber.MaterialId, + MaterialDetailId = rawPipe_ShipNumber.MaterialDetails.First().Id, + Value = firstWorkPlan.ShipNumber, + + }); + } + }; + + //閰嶇疆杩囩▼鍙傛暟(閲囬泦鍙傛暟銆侀厤鏂瑰弬鏁�) + traceModel.Params = new List<TraceParamModel>(); + foreach (var item in workSection.ProcessParameters) + { + string _value = ""; + + //閲囬泦鍙傛暟 + if (item.Name == $"{processName}鍘嬪姏") + { + var _getValue = await _variableService.ReadValueAsync($"{processName}鍘嬪姏"); + _value = _getValue.Content.Value.SafeString().ToString(); + } + if (item.Name == $"{processName}浣嶇疆") + { + var _getValue = await _variableService.ReadValueAsync($"{processName}浣嶇疆"); + _value = _getValue.Content.Value.SafeString().ToString(); + } + if (item.Name == $"{processName}閫熷害") + { + var _getValue = await _variableService.ReadValueAsync($"{processName}閫熷害"); + _value = _getValue.Content.Value.SafeString().ToString(); + } + + if (item.Name == $"{processName}闂撮殭") + { + _value = "15mm"; + } + if (item.Name == $"{processName}浜�") + { + _value = myCurrentUser.UserAccount; + } + //item.Key + TraceParamModel traceParamModel = new TraceParamModel() + { + Key = item.Key, + Value = _value + }; + traceModel.Params.Add(traceParamModel); + }; + foreach (var item in workSection.FormulaParameters) + { + string _value = ""; + + //閲囬泦鍙傛暟 + if (item.Name == $"{processName}鍘嬪姏") + { + var _getValue = await _variableService.ReadValueAsync($"{processName}鍘嬪姏"); + _value = _getValue.Content.Value.SafeString().ToString(); + } + if (item.Name == $"{processName}浣嶇疆") + { + var _getValue = await _variableService.ReadValueAsync($"{processName}浣嶇疆"); + _value = _getValue.Content.Value.SafeString().ToString(); + } + if (item.Name == $"{processName}閫熷害") + { + var _getValue = await _variableService.ReadValueAsync($"{processName}閫熷害"); + _value = _getValue.Content.Value.SafeString().ToString(); + } + + if (item.Name == $"{processName}闂撮殭") + { + _value = "15mm"; + } + if (item.Name == $"{processName}浜�") + { + _value = myCurrentUser.UserAccount; + } + //item.Key + TraceParamModel traceParamModel = new TraceParamModel() + { + Key = item.Key, + Value = _value + }; + traceModel.Params.Add(traceParamModel); + }; + + traceModel.MaterialParams = _MaterialParams; + + await traceProvider.CreateTraceAsync(traceModel); + + + + #endregion + + await uow.CompleteAsync(); + + var response = new MesOrderResponse + { + Code = "200", + Data = "", + Message = "澶勭悊鎴愬姛", + Time = DateTime.UtcNow + }; + return response; + } + catch (Exception) + { + await uow.RollbackAsync(); + throw; + } + finally + { + + } + + + + #endregion + + } + + #region 娉曞叞鍐茬爜 + + + /// <summary> + ///涓嬪彂娉曞叞鍐茬爜 寮�宸� + /// </summary> + /// <param name="input"></param> + /// <param name="_serviceProvider"></param> + /// <param name="myCurrentUser"></param> + /// <returns></returns> + /// <exception cref="UserFriendlyException"></exception> + public async Task<MesOrderResponse> SendFlangeCode_StartProduction(SendFlangeCodeInput input, IServiceProvider _serviceProvider, MyCurrentUser myCurrentUser) + { + if (string.IsNullOrEmpty(input.TaskCode.ToString())) + { + throw new UserFriendlyException("浠诲姟缂栫爜涓嶈兘涓虹┖"); + } + + string processName = "娉曞叞鍐茬爜"; + + VariableService _variableService = _serviceProvider.GetRequiredService<VariableService>(); + var callMaterialOrderRepository = _serviceProvider.GetRequiredService<ICallMaterialOrderRepository>(); + var workPlanRepository = _serviceProvider.GetRequiredService<IWorkPlanRepository>(); + var workTaskRepository = _serviceProvider.GetRequiredService<IWorkTaskRepository>(); + var callMaterialOrderRecordRepository = _serviceProvider.GetRequiredService<ICallMaterialOrderRecordRepository>(); + var orderManager = _serviceProvider.GetRequiredService<IOrderManager>(); + var callMaterialOrderAppService = _serviceProvider.GetRequiredService<ICallMaterialOrderAppService>(); + + var workTaskAppService = _serviceProvider.GetRequiredService<IWorkTaskAppService>(); + + + // 鏌ユ壘鏁版嵁 + var workTask = await workTaskRepository.GetSingleByFilterAsync(x => x.Son_TaskCode == input.Son_TaskCode); + if (workTask == null) + { + throw new UserFriendlyException($"娌℃湁鎵惧埌瀛愪换鍔$紪鍙穥input.Son_TaskCode}鐨勪换鍔℃暟鎹�"); + } + if (workTask.WorkPlanStatus != Domain.Shared.Enums.WorkPlanStatusEnum.鏈敓浜�) + { + throw new UserFriendlyException($"瀛愪换鍔$紪鍙穥input.Son_TaskCode}鐨勪换鍔$姸鎬佷笉鏄�'{Domain.Shared.Enums.WorkPlanStatusEnum.鏈敓浜�.ToString()}'"); + } + var workPlan = await workPlanRepository.GetSingleByFilterAsync(x => x.TaskCode == input.TaskCode); + if (workPlan == null) + { + throw new UserFriendlyException($"鎵句笉鍒颁綔涓氳鍒�"); + } + + + // 楠岃瘉鐘舵�� + if (workPlan.WorkPlanStatus != Domain.Shared.Enums.WorkPlanStatusEnum.鏆傚仠涓� && workPlan.WorkPlanStatus != Domain.Shared.Enums.WorkPlanStatusEnum.鏈敓浜�) + { + //鏆傛椂娉ㄩ噴 + //throw new UserFriendlyException($"浠诲姟缂栫爜 '{input.TaskCode}' 鐨勫綍鐘舵�佷负 '{workPlan.WorkPlanStatus}'锛屼笉鍏佽寮�宸�"); + } + + var callMaterialOrder = await callMaterialOrderAppService.GetSingleByFilterAsync(x => x.DataIdentifier == workPlan.DataIdentifier); + #region 浜嬪姟 + + using var scope = _serviceProvider.CreateScope(); + var unitOfWorkManager = scope.ServiceProvider.GetRequiredService<IUnitOfWorkManager>(); + using var uow = unitOfWorkManager.Begin(requiresNew: true); + + try + { + #region 鏁版嵁澶勭悊 + + //1銆佹洿鏂颁綔涓氳鍒掕〃涓� 鐢熶骇涓� + //2銆佺粰PLC鍙戝伐鑹哄弬鏁版寚浠�,骞跺啓鍏� plc涓� 浜у搧id + //if (workPlan.ProcessName == "瑁呴厤宸ュ簭") + //{ + // workPlan.WorkPlanStatus = Domain.Shared.Enums.WorkPlanStatusEnum.鐢熶骇涓�; + //} + //else if (workPlan.ProcessName == "鐒婃帴宸ュ簭") + //{ + // workPlan.WorkPlanStatus = Domain.Shared.Enums.WorkPlanStatusEnum.宸插畬鎴�; + //} + workPlan.WorkPlanStatus = Domain.Shared.Enums.WorkPlanStatusEnum.鐢熶骇涓�; + workTask.WorkPlanStatus = Domain.Shared.Enums.WorkPlanStatusEnum.鐢熶骇涓�; + + await workPlanRepository.UpdateAsync(workPlan); + + await workTaskRepository.UpdateAsync(workTask); + + Dictionary<string, object?> keyValuePairs = new Dictionary<string, object?> + { + { $"{processName}_ProductID", workPlan.PipeSpecCode }, + { $"{processName}绠℃缂栫爜", workPlan.PipeSpecCode }, + { $"{processName}绠℃鍚嶇О", workPlan.PipeSectionName }, + { $"{processName}鍘熸枡绠℃壒娆�", callMaterialOrder.MaterialBatch }, + { $"{processName}鍘熸枡绠″瀷鍙�", callMaterialOrder.MaterialMode }, + { $"{processName}鍘熸枡绠℃爣璇�", callMaterialOrder.DataIdentifier }, + { $"{processName}椤圭洰鍙�", workPlan.ProjectNumber }, + { $"{processName}鑸瑰彿", workPlan.ShipNumber }, + + //閲囬泦鏁版嵁妯℃嫙鍐欏叆 + { $"{processName}鍘嬪姏", "10.0 MPa" }, + { $"{processName}閫熷害", "18mm/s"}, + + { $"{processName}鍐呭", workTask.PipeAllowableStress}, + + { $"{processName}浜�", myCurrentUser.UserAccount}, + { $"{processName}闂撮殭","15mm"}, + { $"{processName}浣嶇疆", "10,23,24"}, + }; + _variableService.WriteValueAsync(keyValuePairs); + + + #endregion + + await uow.CompleteAsync(); + + // 杩斿洖缁撴灉 + var response = new MesOrderResponse + { + Code = "200", + Message = "澶勭悊鎴愬姛", + Time = DateTime.UtcNow + }; + return response; + } + catch (Exception) + { + await uow.RollbackAsync(); + throw; + } + finally + { + + } + + + + #endregion + } + + + /// <summary> + /// 涓嬪彂娉曞叞鍐茬爜 瀹屽伐 + /// </summary> + /// <param name="_serviceProvider"></param> + /// <param name="input"></param> + /// <param name="myCurrentUser"></param> + /// <returns></returns> + public async Task<MesOrderResponse> SendFlangeCode_CompleteAssemblyProcess(IServiceProvider _serviceProvider, CompleteAssemblyProcessInput input, MyCurrentUser myCurrentUser) + { + //1銆佽褰曞垎鎷h褰曡〃 + //2銆佹洿鏂颁綔涓氳鍒掕〃鐨勭姸鎬� =宸插垎鎷� + //3銆佸啓鍏� 鍒嗘嫞鍙橀噺 + //4銆佸啓鍏ヨ拷婧姤琛� + //5銆佺墿鏂欑粍鐩� + + if (string.IsNullOrEmpty(input.PipeSpecCode)) + { + throw new UserFriendlyException($"绠℃缂栫爜涓嶈兘涓虹┖"); + } + + + + + #region 浜嬪姟 + + using var scope = _serviceProvider.CreateScope(); + var unitOfWorkManager = scope.ServiceProvider.GetRequiredService<IUnitOfWorkManager>(); + using var uow = unitOfWorkManager.Begin(requiresNew: true); + + try + { + #region 鏁版嵁澶勭悊 + + 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>(); + var workTaskAppService = _serviceProvider.GetRequiredService<IWorkTaskAppService>(); + var workPlanRepository = _serviceProvider.GetRequiredService<IWorkPlanRepository>(); + var workTaskRepository = _serviceProvider.GetRequiredService<IWorkTaskRepository>(); + var callMaterialOrderAppService = _serviceProvider.GetRequiredService<ICallMaterialOrderAppService>(); + + string processName = "娉曞叞鍐茬爜"; + var firstWorkTask = await workTaskAppService.GetSingleByFilterAsync(x => x.PipeSpecCode == input.PipeSpecCode && x.ProcessName == (input.ProcessName)); + if (firstWorkTask == null) + { + throw new UserFriendlyException($"鎵句笉鍒颁綔涓氳鍒�"); + } + //鐗╂枡鍙傛暟鍒楄〃 + var firstWorkPlan = await workPlanAppService.GetSingleByFilterAsync(x => x.PipeSpecCode == input.PipeSpecCode && x.ProcessName == "瑁呴厤宸ュ簭"); + if (firstWorkPlan == null) + { + throw new UserFriendlyException($"鎵句笉鍒颁綔涓氳鍒�"); + } + + await CompleteHandleOutStoreFinish(_serviceProvider, processName, true); + + //鏍规嵁宸ュ簭鍚嶈幏鍙栧伐搴忓璞� + var workSection = await _workSectionManager.GetByNameAsync($"{processName}宸ュ簭"); + var workStation = await _workStationManager.GetByNameAsync($"{processName}宸ヤ綅"); + //鍐欏叆杩芥函鎶ヨ〃 + 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() + }); + } + + firstWorkTask.WorkPlanStatus = Domain.Shared.Enums.WorkPlanStatusEnum.宸插畬鎴�; + await workTaskRepository.UpdateAsync(firstWorkTask); + + //杩欎釜鍦版柟涓嶆敼鏁版嵁 + //firstWorkPlan.WorkPlanStatus = Domain.Shared.Enums.WorkPlanStatusEnum.宸插畬鎴�; + //await workPlanRepository.UpdateAsync(firstWorkPlan); + + var callMaterialOrder = await callMaterialOrderAppService.GetSingleByFilterAsync(x => x.DataIdentifier == firstWorkPlan.DataIdentifier); + + var rawPipe_DataIdentifier = await materialProvider.FindByNameAsync("鍘熸枡绠℃爣璇�"); + var rawPipe_MaterialMode = await materialProvider.FindByNameAsync("鍘熸枡绠″瀷鍙�"); + var rawPipe_Batch = await materialProvider.FindByNameAsync("鍘熸枡绠℃壒娆�"); + var rawPipe_ProjectNumber = await materialProvider.FindByNameAsync("椤圭洰鍙�"); + var rawPipe_ShipNumber = await materialProvider.FindByNameAsync("鑸瑰彿"); + List<TraceMaterialModel> _MaterialParams = new List<TraceMaterialModel>(); + foreach (var item in workSection.MaterialParameters) + { + if (item.Name == "鍘熸枡绠″瀷鍙�") + { + _MaterialParams.Add(new TraceMaterialModel() + { + Key = item.Key, + Quantity = 1, + MaterialId = rawPipe_MaterialMode.MaterialId, + MaterialDetailId = rawPipe_MaterialMode.MaterialDetails.First().Id, + Value = firstWorkPlan.MaterialMode + + }); + } + if (item.Name == "鍘熸枡绠℃爣璇�") + { + _MaterialParams.Add(new TraceMaterialModel() + { + Key = item.Key, + Quantity = 1, + MaterialId = rawPipe_DataIdentifier.MaterialId, + MaterialDetailId = rawPipe_DataIdentifier.MaterialDetails.First().Id, + Value = firstWorkPlan.DataIdentifier, + + }); + } + if (item.Name == "鍘熸枡绠℃壒娆�") + { + _MaterialParams.Add(new TraceMaterialModel() + { + Key = item.Key, + Quantity = 1, + MaterialId = rawPipe_Batch.MaterialId, + MaterialDetailId = rawPipe_Batch.MaterialDetails.First().Id, + Value = callMaterialOrder.MaterialBatch,//鎵规鏆傛椂鍐欐 + + }); + } + if (item.Name == "椤圭洰鍙�") + { + _MaterialParams.Add(new TraceMaterialModel() + { + Key = item.Key, + Quantity = 1, + MaterialId = rawPipe_ProjectNumber.MaterialId, + MaterialDetailId = rawPipe_ProjectNumber.MaterialDetails.First().Id, + Value = firstWorkPlan.ProjectNumber, + + }); + } + if (item.Name == "鑸瑰彿") + { + _MaterialParams.Add(new TraceMaterialModel() + { + Key = item.Key, + Quantity = 1, + MaterialId = rawPipe_ShipNumber.MaterialId, + MaterialDetailId = rawPipe_ShipNumber.MaterialDetails.First().Id, + Value = firstWorkPlan.ShipNumber, + + }); + } + }; + + //閰嶇疆杩囩▼鍙傛暟(閲囬泦鍙傛暟銆侀厤鏂瑰弬鏁�) + traceModel.Params = new List<TraceParamModel>(); + foreach (var item in workSection.ProcessParameters) + { + string _value = ""; + + //閲囬泦鍙傛暟 + if (item.Name == $"{processName}鍘嬪姏") + { + var _getValue = await _variableService.ReadValueAsync($"{processName}鍘嬪姏"); + _value = _getValue.Content.Value.SafeString().ToString(); + } + if (item.Name == $"{processName}浣嶇疆") + { + var _getValue = await _variableService.ReadValueAsync($"{processName}浣嶇疆"); + _value = _getValue.Content.Value.SafeString().ToString(); + } + if (item.Name == $"{processName}閫熷害") + { + var _getValue = await _variableService.ReadValueAsync($"{processName}閫熷害"); + _value = _getValue.Content.Value.SafeString().ToString(); + } + + if (item.Name == $"{processName}闂撮殭") + { + _value = "15mm"; + } + if (item.Name == $"{processName}浜�") + { + _value = myCurrentUser.UserAccount; + } + //item.Key + TraceParamModel traceParamModel = new TraceParamModel() + { + Key = item.Key, + Value = _value + }; + traceModel.Params.Add(traceParamModel); + }; + foreach (var item in workSection.FormulaParameters) + { + string _value = ""; + + //閲囬泦鍙傛暟 + if (item.Name == $"{processName}鍘嬪姏") + { + var _getValue = await _variableService.ReadValueAsync($"{processName}鍘嬪姏"); + _value = _getValue.Content.Value.SafeString().ToString(); + } + if (item.Name == $"{processName}浣嶇疆") + { + var _getValue = await _variableService.ReadValueAsync($"{processName}浣嶇疆"); + _value = _getValue.Content.Value.SafeString().ToString(); + } + if (item.Name == $"{processName}閫熷害") + { + var _getValue = await _variableService.ReadValueAsync($"{processName}閫熷害"); + _value = _getValue.Content.Value.SafeString().ToString(); + } + if (item.Name == $"{processName}鍐呭") + { + var _getValue = await _variableService.ReadValueAsync($"{processName}鍐呭"); + _value = _getValue.Content.Value.SafeString().ToString(); + } + + if (item.Name == $"{processName}闂撮殭") + { + _value = "15mm"; + } + if (item.Name == $"{processName}浜�") + { + _value = myCurrentUser.UserAccount; + } + //item.Key + TraceParamModel traceParamModel = new TraceParamModel() + { + Key = item.Key, + Value = _value + }; + traceModel.Params.Add(traceParamModel); + }; + + traceModel.MaterialParams = _MaterialParams; + + await traceProvider.CreateTraceAsync(traceModel); + + + + #endregion + + await uow.CompleteAsync(); + + var response = new MesOrderResponse + { + Code = "200", + Data = "", + Message = "澶勭悊鎴愬姛", + Time = DateTime.UtcNow + }; + return response; + } + catch (Exception) + { + await uow.RollbackAsync(); + throw; + } + finally + { + + } + + + + #endregion + + } + + #endregion + + + /// <summary> + /// 鍏叡澶勭悊 鍝嶅簲鍑虹珯瀹屾垚淇″彿 + /// </summary> + /// <param name="_serviceProvider"></param> + /// <param name="input"></param> + /// <param name="myCurrentUser"></param> + /// <returns></returns> + public async Task CompleteHandleOutStoreFinish(IServiceProvider _serviceProvider, string processName, bool isOutResult) + { + + VariableService _variableService = _serviceProvider.GetRequiredService<VariableService>(); + + Dictionary<string, object?> keyValuePairs = new Dictionary<string, object?> + { + { $"{processName}鍑虹珯瀹屾垚",isOutResult}, + { $"{processName}鍑虹珯缁撴灉",isOutResult? "鎴愬姛":""}, + }; + await _variableService.WriteValueAsync(keyValuePairs); + + } + + + /// <summary> + /// 鍒嗘嫞鏃惰幏鍙栫敓浜ц鍒掑拰鍒嗛厤鍖哄煙 + /// </summary> + /// <param name="input"></param> + /// <param name="_serviceProvider"></param> + /// <param name="myCurrentUser"></param> + /// <returns></returns> + /// <exception cref="UserFriendlyException"></exception> + public async Task<CmsApiResponse<PickOutput>> GetPickRetAsync(GetWorkPlanInput input, IServiceProvider _serviceProvider, MyCurrentUser myCurrentUser) + { + + + var callMaterialOrderRepository = _serviceProvider.GetRequiredService<ICallMaterialOrderRepository>(); + var workPlanRepository = _serviceProvider.GetRequiredService<IWorkPlanRepository>(); + var _workPlanAppService = _serviceProvider.GetRequiredService<IWorkPlanAppService>(); + var callMaterialOrderRecordRepository = _serviceProvider.GetRequiredService<ICallMaterialOrderRecordRepository>(); + var orderManager = _serviceProvider.GetRequiredService<IOrderManager>(); + + // 鏌ユ壘鏁版嵁 + + WorkPlanDto workPlanDto = await _workPlanAppService.FindSingleByFilterAsync(input); + + //TODO:杩欓噷璋冪敤wms鐨勫簱瀛樻煡璇㈡帴鍙� + try + { + GetWmsMaterialStockInput param = new GetWmsMaterialStockInput() + { + RedundantField1 = workPlanDto.ProcessRouteNumber, + RedundantField1_FilterMode = SearchFilterModeEnum.绮惧噯鏌ヨ + }; + + string baseUrl = @"http://127.0.0.1:18000/api/v1/HIAWms/"; + string url = baseUrl + "LMesOperate/FindListByFilter"; + string json = JsonConvert.SerializeObject(param); + var result = HttpApiRequest.HttpPost(url, json); + var res = JsonConvert.DeserializeObject<CmsApiResponse<List<WmsMaterialStockDto>>>(result); + if (res.Code == 200) + { + var retData = res.Data as List<WmsMaterialStockDto>; + var data = new PickOutput() + { + WorkPlan = workPlanDto, + PlaceNo = "",//寰呰祴鍊� + ContinerNo = ""//寰呰祴鍊� + }; + if (retData?.Count > 0) + { + data.PlaceNo = retData.First().PlaceNo; + data.ContinerNo = retData.First().ContainerNo; + } + + var response = new CmsApiResponse<PickOutput> + { + Code = 200, + Data = data, + Message = "澶勭悊鎴愬姛", + }; + return response; + + } + else + { + throw new UserFriendlyException(res.Message); + }; + //*/ + //妯℃嫙 + //var data = new PickOutput() + //{ + // WorkPlan = workPlanDto, + // PlaceNo = "",//寰呰祴鍊� + // ContinerNo = ""//寰呰祴鍊� + //}; + //var response = new CmsApiResponse<PickOutput> + //{ + // Code = 200, + // Data = data, + // Message = "澶勭悊鎴愬姛", + //}; + //return response; + + } + catch (Exception) + { + + throw; + } + } + + /// <summary> + /// 绠℃缂栫爜鏄惁瀛樺湪搴撳瓨涓� + /// </summary> + /// <param name="pipeSpecCode"></param> + /// <returns></returns> + /// <exception cref="UserFriendlyException"></exception> + public async Task<WmsMaterialStockDto> IsExistInWms(string pipeSpecCode) + { + //TODO:杩欓噷璋冪敤wms鐨勫簱瀛樻煡璇㈡帴鍙� + try + { + GetWmsMaterialStockInput param = new GetWmsMaterialStockInput() + { + RedundantField2 = pipeSpecCode, + RedundantField2_FilterMode = SearchFilterModeEnum.绮惧噯鏌ヨ + }; + + string baseUrl = @"http://127.0.0.1:18000/api/v1/HIAWms/"; + string url = baseUrl + "LMesOperate/FindListByFilter"; + string json = JsonConvert.SerializeObject(param); + var result = HttpApiRequest.HttpPost(url, json); + var res = JsonConvert.DeserializeObject<CmsApiResponse<List<WmsMaterialStockDto>>>(result); + if (res.Code == 200) + { + var retData = res.Data as List<WmsMaterialStockDto>; + if (retData?.Count > 0) + { + return retData.First(); + } + return null; + + } + else + { + throw new UserFriendlyException(res.Message); + }; + } + catch (Exception) + { + + throw; + } + } + + /// <summary> /// 鐢熸垚闅忔満鐨刉msTaskNo /// </summary> /// <returns>闅忔満鐢熸垚鐨勪换鍔$紪鍙�</returns> @@ -500,4 +1692,13 @@ // 鐢熸垚鍓嶇紑 return $"WMS{timestamp}"; } + + private string GenerateRandomBatch() + { + // 鑾峰彇褰撳墠鏃堕棿鎴筹紙浠�1970-01-01 00:00:00 UTC鍒扮幇鍦ㄧ殑绉掓暟锛� + long timestamp = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeSeconds(); + + // 鐢熸垚鍓嶇紑 + return $"Batch{timestamp}"; + } } -- Gitblit v1.9.3