wanshenmean
2025-04-15 21cd52c5592aad3687be74599a932012d9dd77a4
´úÂë¹ÜÀí/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Tasks/AGVJob/UpdateTaskAGV.cs
@@ -1,6 +1,7 @@
using 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