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/pipelinelems_web/src/widgets/PipeAccessoryAssembly/Models/Service/PipeAccessoryAssembly.ts | 8 PipeLineLems/pipelinelems_web/src/widgets/PipeAccessoryAssembly/Controllers/PipeAccessoryAssembly.ts | 37 ++ PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/SharedService.cs | 564 +++++++++++++++++++++++++++++++++++---- PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkPlan/SendFlangeCodeInput.cs | 27 + PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Controller/WorkPlanPublicController.cs | 58 ++++ PipeLineLems/pipelinelems_web/src/widgets/PipeAccessoryAssembly/Models/PipeAccessoryAssembly.ts | 10 PipeLineLems/server/src/CMS.Plugin.PipeLineLems/CMSPluginEntry.cs | 1 PipeLineLems/pipelinelems_web/src/widgets/PipeAccessoryAssembly/Views/Pages/PipeAccessoryAssembly/PipeAccessoryAssembly.tsx | 15 + PipeLineLems/server/src/CMS.Plugin.PipeLineLems/ProjectService/PipeLineLemsProjectService.cs | 71 ++++ 9 files changed, 715 insertions(+), 76 deletions(-) diff --git a/PipeLineLems/pipelinelems_web/src/widgets/PipeAccessoryAssembly/Controllers/PipeAccessoryAssembly.ts b/PipeLineLems/pipelinelems_web/src/widgets/PipeAccessoryAssembly/Controllers/PipeAccessoryAssembly.ts index 382dd40..a5a52e0 100644 --- a/PipeLineLems/pipelinelems_web/src/widgets/PipeAccessoryAssembly/Controllers/PipeAccessoryAssembly.ts +++ b/PipeLineLems/pipelinelems_web/src/widgets/PipeAccessoryAssembly/Controllers/PipeAccessoryAssembly.ts @@ -142,6 +142,40 @@ }, ] + + //涓嬪彂娉曞叞鍐茬爜 + const onSendFlangeCode = () => { + const names = selection.value.map((item: { dataIdentifier: string }) => item.dataIdentifier) + if(names.length==0){ + ElMessage.warning('璇烽�夋嫨涓�鏉¤褰�'); + return; + } + if(names.length>1){ + ElMessage.warning('璇峰彧鑳介�夋嫨涓�鏉¤褰�'); + return; + } + ConfirmBox( + `鏄惁瑕佷笅鍙戞硶鍏板啿鐮�${names.length ? names.join(',') : ''}` + ).then(async () => { + // 鑾峰彇閫変腑鐨勭涓�鏉¤褰� + const selectedItem = selection.value[0]; + + // 鏋勫缓鍙傛暟瀵硅薄 + const param = { + Son_TaskCode: selectedItem.son_TaskCode || '', // 瀛愪换鍔$紪鍙� + TaskCode: selectedItem.taskCode || '', // 浠诲姟缂栧彿 + PipeSpecCode: selectedItem.pipeSpecCode || '',// 绠℃缂栫爜 + }; + + var ret= await PipeAccessoryAssembly.sendFlangeCode(param) + if(ret.code=="200"){ + ElMessage.success('涓嬪彂鎴愬姛') + tableRef.value.getList() + }else{ + ElMessage.error('涓嬪彂澶辫触:'+ret.message) + } + }) + } const onCheck = (records: any) => { selection.value = records } @@ -270,6 +304,7 @@ onConfirmPipeAccessoryAssembly, onCheck, onAddPipeAccessoryAssembly, - onAdvancedQuery + onAdvancedQuery, + onSendFlangeCode } } diff --git a/PipeLineLems/pipelinelems_web/src/widgets/PipeAccessoryAssembly/Models/PipeAccessoryAssembly.ts b/PipeLineLems/pipelinelems_web/src/widgets/PipeAccessoryAssembly/Models/PipeAccessoryAssembly.ts index 95c2457..782861f 100644 --- a/PipeLineLems/pipelinelems_web/src/widgets/PipeAccessoryAssembly/Models/PipeAccessoryAssembly.ts +++ b/PipeLineLems/pipelinelems_web/src/widgets/PipeAccessoryAssembly/Models/PipeAccessoryAssembly.ts @@ -2,6 +2,7 @@ import { // deletePipeAccessoryAssemblys, // addPipeAccessoryAssembly, + sendFlangeCode, cloneData, } from './Service/PipeAccessoryAssembly' @@ -20,7 +21,14 @@ async deletePipeAccessoryAssemblys(ids: string[]) { // return deletePipeAccessoryAssemblys(ids) } - + /** + * 涓嬪彂娉曞叞鍐茬爜 + * @param id + * @returns + */ + async sendFlangeCode(data: Record<string, any>) { + return sendFlangeCode(data) + } /** * 娣诲姞鏁版嵁 * @param data diff --git a/PipeLineLems/pipelinelems_web/src/widgets/PipeAccessoryAssembly/Models/Service/PipeAccessoryAssembly.ts b/PipeLineLems/pipelinelems_web/src/widgets/PipeAccessoryAssembly/Models/Service/PipeAccessoryAssembly.ts index 92614a8..581ae4a 100644 --- a/PipeLineLems/pipelinelems_web/src/widgets/PipeAccessoryAssembly/Models/Service/PipeAccessoryAssembly.ts +++ b/PipeLineLems/pipelinelems_web/src/widgets/PipeAccessoryAssembly/Models/Service/PipeAccessoryAssembly.ts @@ -76,4 +76,12 @@ */ export const finishProduction = (data: any) => { return request.post('/api/v1/PipeLineLems/WorkPlanPublic/finishProduction', data) +} + +/** + * 涓嬪彂娉曞叞鍐茬爜 + * @returns + */ +export const sendFlangeCode = (data: any) => { + return request.post('/api/v1/PipeLineLems/WorkPlanPublic/sendFlangeCode', data) } \ No newline at end of file diff --git a/PipeLineLems/pipelinelems_web/src/widgets/PipeAccessoryAssembly/Views/Pages/PipeAccessoryAssembly/PipeAccessoryAssembly.tsx b/PipeLineLems/pipelinelems_web/src/widgets/PipeAccessoryAssembly/Views/Pages/PipeAccessoryAssembly/PipeAccessoryAssembly.tsx index 6bca6a4..e34a429 100644 --- a/PipeLineLems/pipelinelems_web/src/widgets/PipeAccessoryAssembly/Views/Pages/PipeAccessoryAssembly/PipeAccessoryAssembly.tsx +++ b/PipeLineLems/pipelinelems_web/src/widgets/PipeAccessoryAssembly/Views/Pages/PipeAccessoryAssembly/PipeAccessoryAssembly.tsx @@ -62,6 +62,7 @@ openDetail, onSuccess, onBeforeUpload, + onSendFlangeCode } = usePipeAccessoryAssembly(props, ctx) // 鏌ヨ琛ㄥ崟鏁版嵁 @@ -196,6 +197,15 @@ routeUrl.value="/api/v1/PipeLineLems/workTask/page"; paramForProcessRoute.pipeSpecCode = queryForm.value.pipeSpecCode tableRef.value.getList(paramForProcessRoute) + } + // 涓嬪彂娉曞叞鍐茬爜 + const sendFlangeCode = () => { + console.log('鎵ц 涓嬪彂娉曞叞鍐茬爜') + if (queryForm.value.pipeSpecCode == '') { + ElMessage.error('璇疯緭鍏ョ娈电紪鐮�') + return + } + onSendFlangeCode(); } // 寮�宸ヤ簨浠跺鐞� const startWork = () => { @@ -539,10 +549,13 @@ </div> */} <div class="info-block"> <h2 class="block-title">宸ヨ壓淇℃伅</h2> - <div class={styles.actionButtons}> + <div class={styles.actionButtons} style="margin-bottom:5px;"> <ElButton type="warning" onClick={refreshProcessRoute}> 鍒锋柊 </ElButton> + <ElButton type="warning" onClick={sendFlangeCode}> + 涓嬪彂娉曞叞鍐茬爜 + </ElButton> </div> <RenderBaseTable url={routeUrl.value} diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkPlan/SendFlangeCodeInput.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkPlan/SendFlangeCodeInput.cs new file mode 100644 index 0000000..c8c633d --- /dev/null +++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkPlan/SendFlangeCodeInput.cs @@ -0,0 +1,27 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.WorkPlan +{ + /// <summary> + /// 涓嬪彂娉曞叞鍐茬爜 杈撳叆鍙傛暟妯″瀷 + /// </summary> + [Serializable] + public class SendFlangeCodeInput + { + + /// <summary> + /// 瀛愪换鍔$紪鍙� + /// </summary> + public string Son_TaskCode { get; set; } + + /// <summary> + /// 浠诲姟缂栧彿 + /// </summary> + public string TaskCode { get; set; } + + } +} \ No newline at end of file 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 867e94c..e1754ac 100644 --- a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/SharedService.cs +++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/SharedService.cs @@ -21,6 +21,7 @@ using CmsQueryExtensions; using CmsQueryExtensions.Entitys; using CmsQueryExtensions.Extension; +using Humanizer; using KissUtil.Extensions; using Microsoft.Extensions.DependencyInjection; using Newtonsoft.Json; @@ -35,6 +36,8 @@ /// </summary> public class SharedService : CMSPluginAppService { + + /// <summary> /// 鍒嗘嫞鍔熻兘 @@ -813,7 +816,7 @@ /// <summary> - /// 瑁呴厤宸ュ簭瀹屽伐 + /// 瑁呴厤/鐒婃帴宸ュ簭瀹屽伐 /// </summary> /// <param name="_serviceProvider"></param> /// <param name="input"></param> @@ -833,69 +836,7 @@ } - 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() - }); - } #region 浜嬪姟 @@ -906,6 +847,70 @@ 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); @@ -1066,6 +1071,12 @@ await traceProvider.CreateTraceAsync(traceModel); + + + #endregion + + await uow.CompleteAsync(); + var response = new MesOrderResponse { Code = "200", @@ -1074,10 +1085,6 @@ Time = DateTime.UtcNow }; return response; - - #endregion - - await uow.CompleteAsync(); } catch (Exception) { @@ -1095,6 +1102,429 @@ } + #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> /// 鍏叡澶勭悊 鍝嶅簲鍑虹珯瀹屾垚淇″彿 diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/CMSPluginEntry.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/CMSPluginEntry.cs index f9efcec..4af0a1d 100644 --- a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/CMSPluginEntry.cs +++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/CMSPluginEntry.cs @@ -50,6 +50,7 @@ context.Services.AddSingleton<IProjectService, PipeLineLemsProjectService>(); context.Services.AddScoped<IMesAppService, MesAppService>(); context.Services.AddScoped<IWorkPlanAppService, WorkPlanAppService>(); + context.Services.AddScoped<IWorkTaskAppService, WorkTaskAppService>(); //context.Services.AddScoped<ILMesOperateAppService, LMesOperateAppService>(); //context.Services.AddScoped<IWmsTaskRepository, EfCoreWmsTaskRepository>(); //context.Services.AddScoped<IWmsMaterialRepository, EfCoreWmsMaterialRepository>(); diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Controller/WorkPlanPublicController.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Controller/WorkPlanPublicController.cs index 57151fc..33a15cf 100644 --- a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Controller/WorkPlanPublicController.cs +++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Controller/WorkPlanPublicController.cs @@ -113,6 +113,64 @@ } /// <summary> + /// 涓嬪彂娉曞叞鍐茬爜 + /// </summary> + /// <param name="input">鏍囪瘑绗�.</param> + /// <returns></returns> + [Authorize] + [HttpPost] + [Route("SendFlangeCode")] + public virtual async Task<MesOrderResponse> SendFlangeCode([FromBody] SendFlangeCodeInput input) + { + try + { + MyCurrentUser myCurrentUser = new MyCurrentUser() + { + UserAccount = _currentUser.UserAccount, + UserId = _currentUser.UserId + }; + return await sharedService.SendFlangeCode_StartProduction(input, _serviceProvider, myCurrentUser); + } + catch (Exception ex) + { + return new MesOrderResponse() + { + Code = "400", + Message = ex.Message + }; + } + } + + /// <summary> + /// 娉曞叞鍐茬爜瀹屽伐 + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + [Authorize] + [HttpPost] + [Route("SendFlangeCode_FinishProduction")] + public virtual async Task<MesOrderResponse> SendFlangeCode_FinishProduction([FromBody] CompleteAssemblyProcessInput input) + { + try + { + MyCurrentUser myCurrentUser = new MyCurrentUser() + { + UserAccount = _currentUser.UserAccount, + UserId = _currentUser.UserId + }; + return await sharedService.SendFlangeCode_CompleteAssemblyProcess(_serviceProvider, input, myCurrentUser); + } + catch (Exception ex) + { + return new MesOrderResponse() + { + Code = "400", + Message = ex.Message + }; + } + } + + /// <summary> /// 寮�宸� /// </summary> /// <param name="input"></param> diff --git a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/ProjectService/PipeLineLemsProjectService.cs b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/ProjectService/PipeLineLemsProjectService.cs index 6a65e24..9e1ae40 100644 --- a/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/ProjectService/PipeLineLemsProjectService.cs +++ b/PipeLineLems/server/src/CMS.Plugin.PipeLineLems/ProjectService/PipeLineLemsProjectService.cs @@ -37,7 +37,6 @@ private readonly ILogger<PipeLineLemsProjectService> _logger; private readonly IVariableDataCache _variableDataCache; - /// <summary> /// 鍙橀噺鏈嶅姟 /// </summary> @@ -96,6 +95,7 @@ { "瑁呴厤瀹屽伐淇″彿", "瑁呴厤瀹屽伐淇″彿(鎻忚堪)" }, { "鐒婃帴瀹屽伐淇″彿", "鐒婃帴瀹屽伐淇″彿(鎻忚堪)" }, + { "娉曞叞鍐茬爜瀹屽伐淇″彿", "娉曞叞鍐茬爜瀹屽伐淇″彿(鎻忚堪)" }, }; // 鍒涘缓閫氶亾鐩戝惉 @@ -296,6 +296,24 @@ _ = Task.Run(async () => { await HanlderFor瀹屽伐淇″彿WhenFalseAsync("鐒婃帴"); + }); + } + } + + if (changed.Name == "娉曞叞鍐茬爜瀹屽伐淇″彿") + { + if (changed.New?.Value.SafeString().ToBool() == true) + { + _ = Task.Run(async () => + { + await HanlderFor娉曞叞鍐茬爜瀹屽伐淇″彿Async(); + }); + } + else + { + _ = Task.Run(async () => + { + await HanlderFor瀹屽伐淇″彿WhenFalseAsync("娉曞叞鍐茬爜"); }); } } @@ -892,12 +910,12 @@ { UserAccount = userName.Content.Value.SafeString().ToString() }; - sharedService.CompleteAssemblyProcess(_serviceProvider, new Application.Contracts.Dtos.WorkPlan.CompleteAssemblyProcessInput() { PipeSpecCode = myPipeSpecCode, ProcessName = "瑁呴厤宸ュ簭" }, myCurrentUser); + await sharedService.CompleteAssemblyProcess(_serviceProvider, new Application.Contracts.Dtos.WorkPlan.CompleteAssemblyProcessInput() { PipeSpecCode = myPipeSpecCode, ProcessName = "瑁呴厤宸ュ簭" }, myCurrentUser); } - catch (Exception) + catch (Exception ex) { - + _logger.LogException(ex, LogLevel.Error); } } } @@ -934,12 +952,53 @@ { UserAccount = userName.Content.Value.SafeString().ToString() }; - sharedService.CompleteAssemblyProcess(_serviceProvider, new Application.Contracts.Dtos.WorkPlan.CompleteAssemblyProcessInput() { PipeSpecCode = myPipeSpecCode, ProcessName = "鐒婃帴宸ュ簭" }, myCurrentUser); + await sharedService.CompleteAssemblyProcess(_serviceProvider, new Application.Contracts.Dtos.WorkPlan.CompleteAssemblyProcessInput() { PipeSpecCode = myPipeSpecCode, ProcessName = "鐒婃帴宸ュ簭" }, myCurrentUser); } - catch (Exception) + catch (Exception ex) { + _logger.LogException(ex, LogLevel.Error); + } + } + } + /// <summary> + /// 娉曞叞鍐茬爜瀹屽伐淇″彿=true鏃� + /// </summary> + /// <returns></returns> + private async Task HanlderFor娉曞叞鍐茬爜瀹屽伐淇″彿Async() + { + + var txt = "娉曞叞鍐茬爜"; + var workPlanAppService = _serviceProvider.GetRequiredService<IWorkPlanAppService>(); + var workPlanRepository = _serviceProvider.GetRequiredService<IWorkPlanRepository>(); + var callMaterialOrderAppService = _serviceProvider.GetRequiredService<ICallMaterialOrderAppService>(); + + var pipeSpecCode = await _variableService.ReadValueAsync($"{txt}绠℃缂栫爜"); + + if (string.IsNullOrEmpty(pipeSpecCode?.Content?.Value.SafeString().ToString())) + { + + } + else + { + var myPipeSpecCode = pipeSpecCode.Content.Value.SafeString().ToString(); + CallMaterialOrder callMaterialOrder = null; + try + { + var sharedService = _serviceProvider.GetRequiredService<SharedService>(); + var userName = await _variableService.ReadValueAsync($"{txt}浜�"); + MyCurrentUser myCurrentUser = new MyCurrentUser() + { + UserAccount = userName.Content.Value.SafeString().ToString() + }; + await sharedService.SendFlangeCode_CompleteAssemblyProcess(_serviceProvider, new Application.Contracts.Dtos.WorkPlan.CompleteAssemblyProcessInput() + { PipeSpecCode = myPipeSpecCode, ProcessName = $"{txt}宸ュ簭" }, myCurrentUser); + + } + catch (Exception ex) + { + _logger.LogException(ex, LogLevel.Error); } } } -- Gitblit v1.9.3