wankeda
2025-04-15 9bae33c85d698987a6c9cf8ba8edbe9497b101dc
´úÂë¹ÜÀí/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Tasks/AGVJob/UpdateTaskAGV.cs
@@ -1,5 +1,6 @@
using WIDESEAWCS_Common.AGVEnum;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_DTO.TaskInfo;
using WIDESEAWCS_ITaskInfoRepository;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob;
@@ -176,6 +177,31 @@
                                plcClient.Communicator.Write(taskFbInteractive2, 1);
                                //throw new Exception("任务状态更改为4终点已完成失败,任务ID:" + agvTask.agv_tasknum + DateTime.Now + ",任务状态不是终点执行中!");
                            }
                            if (agvTask.TargetAddress.Contains("HXWLX"))
                            {
                                if (agvTask.SourceAddress.Contains("KPHLX"))
                                {
                                    // ç©ºç›˜çº¿è¿›çƒ˜ç®±
                                    // TODO: è°ƒç”¨åˆ›æ™ºæŽ¥å£èŽ·å–å®Œæ•´æ¡ç 
                                    var materials = new List<BakingClass>
                                    {
                                            new BakingClass { BarCode = "1", MaterialType = "1" },
                                    };
                                    MESback WMSbackresult = MESAPIInvoke.BakingFeedingBinding(agvTask.TargetAddress, materials);
                                    if (WMSbackresult.Code > 0) { new Exception(WMSbackresult.Message); return; }
                                }
                                else
                                {
                                    // æå‡æœºè¿›çƒ˜ç®±
                                    // TODO: è°ƒç”¨åˆ›æ™ºæŽ¥å£èŽ·å–å®Œæ•´æ¡ç 
                                    var materials = new List<BakingClass>
                                    {
                                            new BakingClass { BarCode = "1", MaterialType = "1" },
                                    };
                                    MESback WMSbackresult = MESAPIInvoke.BakingFeedingBinding(agvTask.TargetAddress, materials);
                                    if (WMSbackresult.Code > 0) { new Exception(WMSbackresult.Message); return; }
                                }
                            }
                            //agvtask_HtyRepository.AddTaskHistory(agvTask, OperateType.Finished.ToString());
                            _taskRepository.DeleteData(agvTask);
@@ -231,7 +257,7 @@
            }
        }
        public static void UpdateTask(AGV plcClient, ITaskRepository taskRepository)
        public static void UpdateTask(AGV plcClient, ITaskRepository taskRepository, ITaskCZRepository _taskCZRepository, ITaskCZDetailsRepository _detailsRepository)
        {
            // ä½¿ç”¨Interlocked.Exchange保证同一时间只有一个线程可以执行任务更新
            if (Interlocked.Exchange(ref _readUpdateAGVTaskSignalso, 1) == 0)
@@ -322,6 +348,54 @@
                                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();
                                    var details = _detailsRepository.QueryData(x => x.TaskEndAddress == agvTask.TargetAddress && x.TaskName == agvTask.Roadway).OrderBy(x => x.CreateDate).ToList();
                                    if (details.Count >= 2)
                                    {
                                        details = details.Take(2).ToList();
                                    }
                                    var materials = details.Select(x => new BakingClass
                                    {
                                        MaterialType = x.MaterialType,
                                        BarCode = x.MaterialBarCode,
                                    }).ToList();
                                    MESback WMSbackresult = MESAPIInvoke.BakingFeedingBinding(agvTask.TargetAddress, materials);
                                    if (WMSbackresult.Code > 0) { new Exception(WMSbackresult.Message); return; }
                                    else
                                    {
                                        // åˆ é™¤details数据
                                        _detailsRepository.DeleteData(details);
                                    }
                                }
                            }
                            // åˆ é™¤å·²å®Œæˆçš„任务
                            taskRepository.DeleteData(agvTask);
                            plcClient.Communicator.Write(taskFbInteractive2, 1);
@@ -384,5 +458,31 @@
                }
            }
        }
        // è¾…助方法
        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
    {
        public string Devid { get; set; }
        public List<BakingClass> Materials { get; set; }
    }
    public class BakingClass
    {
        public string MaterialType { get; set; }
        public string BarCode { get; set; }
    }
}