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