wankeda
2025-04-15 9bae33c85d698987a6c9cf8ba8edbe9497b101dc
´úÂë¹ÜÀí/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Tasks/AGVJob/UpdateTaskAGV.cs
@@ -1,5 +1,4 @@
using Newtonsoft.Json;
using WIDESEAWCS_Common.AGVEnum;
using WIDESEAWCS_Common.AGVEnum;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_DTO.TaskInfo;
using WIDESEAWCS_ITaskInfoRepository;
@@ -204,7 +203,6 @@
                                }
                            }
                            //agvtask_HtyRepository.AddTaskHistory(agvTask, OperateType.Finished.ToString());
                            _taskRepository.DeleteData(agvTask);
                            plcClient.Communicator.Write(taskFbInteractive2, 1);
@@ -259,7 +257,7 @@
            }
        }
        public static void UpdateTask(AGV plcClient, ITaskRepository taskRepository, ITaskCZRepository _taskCZRepository)
        public static void UpdateTask(AGV plcClient, ITaskRepository taskRepository, ITaskCZRepository _taskCZRepository, ITaskCZDetailsRepository _detailsRepository)
        {
            // ä½¿ç”¨Interlocked.Exchange保证同一时间只有一个线程可以执行任务更新
            if (Interlocked.Exchange(ref _readUpdateAGVTaskSignalso, 1) == 0)
@@ -365,30 +363,35 @@
                                {
                                    // æå‡æœºè¿›çƒ˜ç®±
                                    // 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 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
                                    {
                                        if (!string.IsNullOrEmpty(czTask.TaskDesc))
                                        {
                                            czTask.TaskDesc = "任务完成两次次";
                                            _taskCZRepository.DeleteData(czTask);
                                        }
                                        else
                                        {
                                            czTask.TaskDesc = "任务完成一次";
                                            _taskCZRepository.UpdateData(czTask);
                                        }
                                        // åˆ é™¤details数据
                                        _detailsRepository.DeleteData(details);
                                    }
                                }
                            }