From 21cd52c5592aad3687be74599a932012d9dd77a4 Mon Sep 17 00:00:00 2001
From: wanshenmean <cathay_xy@163.com>
Date: 星期二, 15 四月 2025 10:03:38 +0800
Subject: [PATCH] 条码上传冠宏

---
 代码管理/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Tasks/AGVJob/UpdateTaskAGV.cs                  |   61 +++++++++++++++++++
 代码管理/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Tasks/AGVJob/CommonAGVJob.cs                   |    6 +
 代码管理/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskCZService.cs               |   25 ++++++++
 代码管理/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs |    8 +-
 代码管理/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_DTO/TaskInfo/CZTaskDto.cs                      |   29 +++++++++
 代码管理/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/TaskInfo/DtCZTask.cs              |    6 ++
 6 files changed, 126 insertions(+), 9 deletions(-)

diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_DTO/TaskInfo/CZTaskDto.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_DTO/TaskInfo/CZTaskDto.cs"
index a256fb1..fd2d500 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_DTO/TaskInfo/CZTaskDto.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_DTO/TaskInfo/CZTaskDto.cs"
@@ -65,5 +65,34 @@
         /// 鍙枡鏈哄彴
         /// </summary>
         public string Tags { get; set; }
+
+        /// <summary>
+        /// 鐗╂枡鏉$爜
+        /// </summary>
+        public string MaterialBarcode { get; set; }
+    }
+
+    public class CZTaskBarCodeDto
+    {
+        /// <summary>
+        /// 1鍙锋潯鐮�
+        /// </summary>
+        public string BarCode1 { get; set; }
+
+        /// <summary>
+        /// 2鍙锋潯鐮�
+        /// </summary>
+        public string BarCode2 { get; set; }
+
+        /// <summary>
+        /// 3鍙锋潯鐮�
+        /// </summary>
+        public string BarCode3 { get; set; }
+
+        /// <summary>
+        /// 4鍙锋潯鐮�
+        /// </summary>
+        public string BarCode4 { get; set; }
+
     }
 }
\ No newline at end of file
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/TaskInfo/DtCZTask.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/TaskInfo/DtCZTask.cs"
index 09fbda6..0417d6d 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/TaskInfo/DtCZTask.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/TaskInfo/DtCZTask.cs"
@@ -107,5 +107,11 @@
         /// </summary>
         [SugarColumn( IsNullable = true)]
         public int TaskFJFinishNumber { get; set; }
+
+        /// <summary>
+        /// 浠诲姟璇︽儏(json鏍煎紡,瀛樺偍浠诲姟鐨勮缁嗕俊鎭疊arcode)
+        /// </summary>
+        [SugarColumn(IsNullable = true)]
+        public string DtCZTaskDetails { get; set; }
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskCZService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskCZService.cs"
index 342bfba..d485293 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskCZService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskCZService.cs"
@@ -18,6 +18,7 @@
 #endregion << 鐗� 鏈� 娉� 閲� >>
 
 using OfficeOpenXml.FormulaParsing.Excel.Functions.Logical;
+using System.Text.Json;
 using WIDESEAWCS_Common.TaskEnum;
 using WIDESEAWCS_Core;
 using WIDESEAWCS_Core.BaseServices;
@@ -31,6 +32,7 @@
     public class TaskCZService : ServiceBase<DtCZTask, ITaskCZRepository>, ITaskCZService
     {
         private readonly ITaskRepository _taskRepository;
+
         public TaskCZService(ITaskCZRepository BaseDal, ITaskRepository taskRepository) : base(BaseDal)
         {
             _taskRepository = taskRepository;
@@ -109,6 +111,28 @@
                 {
                     czTask.TaskStatus = TaskInStatusEnum.Line_InExecuting.ToString();
                 }
+
+
+                if (dto.FinishNum is < 1 or > 4)
+                    throw new ArgumentException("鍙傛暟閿欒锛丗inishNum 蹇呴』涓� 1-4");
+
+                var detail = dto.FinishNum == 1
+                    ? new CZTaskBarCodeDto()
+                    : JsonSerializer.Deserialize<CZTaskBarCodeDto>(czTask.DtCZTaskDetails) ?? new CZTaskBarCodeDto();
+
+                var property = dto.FinishNum switch
+                {
+                    1 => nameof(CZTaskBarCodeDto.BarCode1),
+                    2 => nameof(CZTaskBarCodeDto.BarCode2),
+                    3 => nameof(CZTaskBarCodeDto.BarCode3),
+                    4 => nameof(CZTaskBarCodeDto.BarCode4),
+                    _ => throw new ArgumentOutOfRangeException("鍙傛暟閿欒锛佽妫�鏌ャ�怓inishNum銆戯紒")
+                };
+
+                typeof(CZTaskBarCodeDto).GetProperty(property)?.SetValue(detail, dto.MaterialBarcode);
+
+                czTask.DtCZTaskDetails = JsonSerializer.Serialize(detail);
+
                 var isTrue = BaseDal.UpdateData(czTask);
                 if (isTrue)
                 {
@@ -125,6 +149,7 @@
             }
             return Task.FromResult(response);
         }
+
         /// <summary>
         /// 杈撻�佺嚎鍥炴祦
         /// </summary>
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Tasks/AGVJob/CommonAGVJob.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Tasks/AGVJob/CommonAGVJob.cs"
index 764488b..582298d 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Tasks/AGVJob/CommonAGVJob.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Tasks/AGVJob/CommonAGVJob.cs"
@@ -8,10 +8,12 @@
     public class CommonAGVJob : JobBase, IJob, IDisposable
     {
         private readonly ITaskRepository _taskRepository;
+        private readonly ITaskCZRepository _taskCZRepository;
 
-        public CommonAGVJob(ITaskRepository taskRepository)
+        public CommonAGVJob(ITaskRepository taskRepository, ITaskCZRepository taskCZRepository)
         {
             _taskRepository = taskRepository;
+            _taskCZRepository = taskCZRepository;
         }
 
         public void Dispose()
@@ -23,7 +25,7 @@
         {
             AGV agv = (AGV)context.JobDetail.JobDataMap.Get("JobParams");
             SendTaskAGV.SendAGVTask(agv, _taskRepository);
-            UpdateTaskAGV.UpdateTask(agv, _taskRepository);
+            UpdateTaskAGV.UpdateTask(agv, _taskRepository, _taskCZRepository);
 
             return Task.CompletedTask;
         }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Tasks/AGVJob/UpdateTaskAGV.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Tasks/AGVJob/UpdateTaskAGV.cs"
index 157560b..1f66fc7 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Tasks/AGVJob/UpdateTaskAGV.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Tasks/AGVJob/UpdateTaskAGV.cs"
@@ -1,6 +1,7 @@
 锘縰sing Newtonsoft.Json;
 using WIDESEAWCS_Common.AGVEnum;
 using WIDESEAWCS_Common.TaskEnum;
+using WIDESEAWCS_DTO.TaskInfo;
 using WIDESEAWCS_ITaskInfoRepository;
 using WIDESEAWCS_Model.Models;
 using WIDESEAWCS_QuartzJob;
@@ -202,7 +203,7 @@
                                     if (WMSbackresult.Code > 0) { new Exception(WMSbackresult.Message); return; }
                                 }
                             }
-                                
+
 
                             //agvtask_HtyRepository.AddTaskHistory(agvTask, OperateType.Finished.ToString());
                             _taskRepository.DeleteData(agvTask);
@@ -258,7 +259,7 @@
             }
         }
 
-        public static void UpdateTask(AGV plcClient, ITaskRepository taskRepository)
+        public static void UpdateTask(AGV plcClient, ITaskRepository taskRepository, ITaskCZRepository _taskCZRepository)
         {
             // 浣跨敤Interlocked.Exchange淇濊瘉鍚屼竴鏃堕棿鍙湁涓�涓嚎绋嬪彲浠ユ墽琛屼换鍔℃洿鏂�
             if (Interlocked.Exchange(ref _readUpdateAGVTaskSignalso, 1) == 0)
@@ -349,6 +350,49 @@
                                 throw new Exception($"浠诲姟鐘舵�佹洿鏀逛负4缁堢偣宸插畬鎴愬け璐�,浠诲姟ID:{taskId},褰撳墠鐘舵��:{agvTask.TaskState}");
                             }
 
+                            if (agvTask.TargetAddress.Contains("HXWLX"))
+                            {
+                                if (agvTask.SourceAddress.Contains("KPHLX"))
+                                {
+                                    // 绌虹洏绾胯繘鐑樼
+                                    // TODO: 浠诲姟鎴彇瀹屾暣鏉$爜
+                                    var materials = new List<BakingClass>();
+
+                                    MESback WMSbackresult = MESAPIInvoke.BakingFeedingBinding(agvTask.TargetAddress, materials);
+                                    if (WMSbackresult.Code > 0) { new Exception(WMSbackresult.Message); return; }
+                                }
+                                else
+                                {
+                                    // 鎻愬崌鏈鸿繘鐑樼
+                                    // TODO: 璋冪敤鍒涙櫤鎺ュ彛鑾峰彇瀹屾暣鏉$爜
+                                    var czTask = _taskCZRepository.QueryFirst(x => x.Id == agvTask.WMSId);
+                                    CZTaskBarCodeDto barCodeDto = JsonConvert.DeserializeObject<CZTaskBarCodeDto>(czTask.DtCZTaskDetails);
+                                    var materials = Enumerable.Range(0, 2)
+                                            .Select(i => new BakingClass
+                                            {
+                                                MaterialType = czTask.TaskProductCode,
+                                                BarCode = GetBarCodeByIndex(barCodeDto, i, hasDesc: !string.IsNullOrEmpty(czTask.TaskDesc))
+                                            })
+                                            .ToList();
+
+                                    MESback WMSbackresult = MESAPIInvoke.BakingFeedingBinding(agvTask.TargetAddress, materials);
+                                    if (WMSbackresult.Code > 0) { new Exception(WMSbackresult.Message); return; }
+                                    else
+                                    {
+                                        if (!string.IsNullOrEmpty(czTask.TaskDesc))
+                                        {
+                                            czTask.TaskDesc = "浠诲姟瀹屾垚涓ゆ娆�";
+                                            _taskCZRepository.DeleteData(czTask);
+                                        }
+                                        else
+                                        {
+                                            czTask.TaskDesc = "浠诲姟瀹屾垚涓�娆�";
+                                            _taskCZRepository.UpdateData(czTask);
+                                        }
+                                    }
+                                }
+                            }
+
                             // 鍒犻櫎宸插畬鎴愮殑浠诲姟
                             taskRepository.DeleteData(agvTask);
                             plcClient.Communicator.Write(taskFbInteractive2, 1);
@@ -411,6 +455,19 @@
                 }
             }
         }
+
+        // 杈呭姪鏂规硶
+        private static string GetBarCodeByIndex(CZTaskBarCodeDto dto, int index, bool hasDesc)
+        {
+            return (index, hasDesc) switch
+            {
+                (0, false) => dto.BarCode1,
+                (1, false) => dto.BarCode2,
+                (0, true) => dto.BarCode3,
+                (1, true) => dto.BarCode4,
+                _ => throw new IndexOutOfRangeException()
+            };
+        }
     }
 
     public class BakingFeedingClass
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs"
index 68847ca..93f0168 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs"
@@ -53,8 +53,6 @@
 
         public Task Execute(IJobExecutionContext context)
 
-
-
         {
             try
             {
@@ -131,7 +129,7 @@
                 }
 
                 // 鍒涘缓骞舵坊鍔犳柊浠诲姟鍒颁换鍔′粨搴�
-                task = CreateTask(fromAdd, czTask.TaskEndAddress, czTask.TaskOrderNo, czTask.TaskProductCode, taskType);
+                task = CreateTask(fromAdd, czTask.TaskEndAddress, czTask.TaskOrderNo, czTask.TaskProductCode, taskType, czTask.Id);
                 _taskRepository.AddData(task);
                 ConsoleHelper.WriteInfoLine($"{nameof(CommonConveyorLineJob)}: {taskType}{requestType},浠诲姟宸茬敓鎴愶紝绛夊緟鎵ц......");
             }
@@ -191,7 +189,7 @@
         }
 
         // 杈呭姪鏂规硶锛氬垱寤轰换鍔″璞�
-        private Dt_Task CreateTask(string currentAddress, string targetAddress, string remark, string palletCode, string taskType)
+        private Dt_Task CreateTask(string currentAddress, string targetAddress, string remark, string palletCode, string taskType, int czTaskID = 0)
         {
             Dt_Task dt_Task = _taskRepository.QueryFirst(x => x.SourceAddress == currentAddress);
             if (dt_Task != null)
@@ -213,7 +211,7 @@
                 NextAddress = targetAddress,
                 Barcode = "",
                 Roadway = $"{taskType}AGV",
-                WMSId = 0,
+                WMSId = czTaskID > 0 ? czTaskID : 0,
                 Remark = remark
             };
         }

--
Gitblit v1.9.3