wanshenmean
2025-04-15 21cd52c5592aad3687be74599a932012d9dd77a4
´úÂë¹ÜÀí/NEWCode/WIDESEAWCS_Server/WIDESEAWCS_Tasks/AGVJob/UpdateTaskAGV.cs
@@ -1,10 +1,12 @@
using WIDESEAWCS_Common.AGVEnum;
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;
namespace WIDESEAWCS_Tasks.AGVJob
namespace WIDESEAWCS_Tasks
{
    public class UpdateTaskAGV
    {
@@ -176,6 +178,32 @@
                                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 +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)
@@ -322,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);
@@ -384,5 +455,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; }
    }
}