1
dengjunjie
2026-04-01 4a574cd38860e7260f9349f9770c87d27dfdeeaf
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/Task/HKTaskExtend.cs
@@ -4,6 +4,8 @@
using System.Reflection.Metadata;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Common;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_DTO;
@@ -24,7 +26,7 @@
        {
            foreach (var item in tasks)
            {
                var content = SendHIKROBOTTask(item);
                var content = _taskService.SendHIKROBOTTask(item);
            }
        }
        #endregion
@@ -34,66 +36,120 @@
        {
            foreach (var item in tasks)
            {
                var content = SendHIKROBOTTask(item);
                var content = _taskService.SendHIKROBOTTask(item);
            }
        }
        #endregion
        #region ä¸‹å‘海康AGV任务
        public WebResponseContent SendHIKROBOTTask(Dt_Task task)
        #region ä¸‹å‘海康1-6楼的AGV任务
        public void SendAGVTask(List<Dt_Task> tasks)
        {
            foreach (var item in tasks)
            {
                if (item.TaskState == (int)TaskTypeEnum.Q3CK)
                {
                    // è°ƒç”¨æŽ¥å£èŽ·å–å°è½¦ä¿¡æ¯
                    var result = _agvcartInfoService.CheckTheCar();
                    // åˆ¤æ–­æ˜¯å¦æœ‰ AA æˆ– FF
                    bool hasAAOrFF = false;
                    if (item.TaskState == (int)TaskTypeEnum.Q3CK)
                    {
                        if (result != null && result.Status)
                        {
                            var dataList = result.Data as List<HIKROBOTQueryData>;
                            if (dataList != null && dataList.Any())
                            {
                                // æ£€æŸ¥è¿”回的 mapCode åˆ—表中是否有 AA
                                hasAAOrFF = dataList.Any(d => d.mapCode == "AA");
                                if (hasAAOrFF)
                                {
                                    var content = _taskService.SendHIKROBOTTask(item);
                                    item.TaskState = (int)TaskStatusEnum.Execut;
                                }
                                else//这里我就要呼叫空车来
                                {
                                    //添加空车运输任务
                                    AddAGVCartInfo(item);
                                    item.TaskState = (int)TaskStatusEnum.WaitingHkAGVMovePosition;
                                }
                            }
                        }
                    }
                    else
                    {
                        if (result != null && result.Status)
                        {
                            if (hasAAOrFF)
                            {
                                var content = _taskService.SendHIKROBOTTask(item);
                                item.TaskState = (int)TaskStatusEnum.Execut;
                            }
                            else//这里我就要呼叫空车来
                            {
                                //添加空车运输任务
                                AddAGVCartInfo(item);
                                item.TaskState = (int)TaskStatusEnum.WaitingHkAGVMovePosition;
                            }
                        }
                    }
                }
            }
            _taskService.UpdateData(tasks);
        }
        #endregion
        #region å¤„理海康agv搬运任务
        public WebResponseContent AddAGVCartInfo(Dt_Task task)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                Dt_ApiInfo? apiInfo = _apiInfoService.Repository.QueryFirst(x => x.ApiCode == nameof(HIKROBOTTaskSubmit)) ?? throw new Exception("未找到海康AGV任务下发接口配置信息!请检查接口配置");
                #region ä»»åŠ¡ä¿¡æ¯è½¬æ¢
                HIKROBOTTaskSubmit hIKROBOTTaskSubmit = new HIKROBOTTaskSubmit()
                {
                    taskType = "",
                    initPriority = task.Grade,
                    targetRoute = new List<TargetRouteDto>
                    {
                        new TargetRouteDto
                        {
                            type= "SITE",
                            code=task.CurrentAddress,
                            operation="COLLECT",//取货
                        },
                        new TargetRouteDto
                        {
                            type= "SITE",
                            code=task.NextAddress,
                            operation="DELIVERY",//送货
                        }
                    }
                };
                #endregion
                string response = HttpHelper.Post(apiInfo.ApiAddress, hIKROBOTTaskSubmit.Serialize());
                var hIKROBOTReturn = response.DeserializeObject<HIKROBOTReturn>();
                if (hIKROBOTReturn.code == "SUCCESS")
                {
                    var data = hIKROBOTReturn.data.ToString().DeserializeObject<HIKROBOTReturnData>();
                    content.OK(data: data);
                    //task.Remark = data.robotTaskCode;
                }
                else
                {
                    throw new Exception(hIKROBOTReturn.message);
                }
                //_taskService.UpdateData(task);
                task.TaskNum = _taskService.GetTaskNum(nameof(SequenceEnum.SeqTaskNum));
                task.WMSTaskNum = null;
                task.TaskType = (int)TaskTypeEnum.Move;//换层任务
                task.TaskState = (int)TaskStatusEnum.CallingHKtransportation;
                var result = _taskService.SendHIKROBOTTask(task);
                _taskService.AddData(task);
            }
            catch (Exception ex)
            {
                content.Error(ex.Message);
            }
            finally
            {
                content.Error($"创建失败:{ex.Message}");
            }
            return content;
        }
        #endregion
        #region å¤„理agv待空车搬运任务
        public void SendHKWaitTask()
        {
            try
            {
                List<Dt_Task> reslut = _taskService.Repository.QueryData(x => x.TaskType == (int)TaskTypeEnum.Move);
                if (reslut.Count<0)
                {
                    foreach (var item in reslut)
                    {
                        var content = _taskService.SendHIKROBOTTask(item);
                    }
                    reslut.ForEach(x =>
                    {
                        x.TaskState =(int)TaskStatusEnum.Execut;
                    });
                }
                _taskService.UpdateData(reslut);
            }
            catch (Exception ex)
            {
                WriteError(nameof(TaskJob), ex.Message, ex);
            }
        }
        #endregion
    }
}