1
dengjunjie
2026-03-10 aa75f3cbdcfce80d7ebd3c4f2bcfeea850949209
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskMethods.cs
@@ -59,7 +59,8 @@
                            break;
                        default:
                            task.TaskState = ReturnTaskStatus(gALAXIS.taskStatus, deviceTypeEnum);
                            BaseDal.UpdateData(task);
                            if (gALAXIS.taskStatus == 10) TaskFeedback(task, 1);
                            else BaseDal.UpdateData(task);
                            break;
                    }
                }
@@ -71,10 +72,10 @@
                    if (task == null) throw new Exception($"未找到任务,任务编号【{hIKROBOT.robotTaskCode}】");
                    switch (hIKROBOT.extra.values.method)
                    {
                        case "start":
                        case "end":
                            TaskCompleted(task, deviceTypeEnum);
                            break;
                        case "end":
                        case "outbin":
                            TaskFromCompleted(task, deviceTypeEnum);
                            break;
                        default:
@@ -92,29 +93,43 @@
                    if (task == null) throw new Exception($"未找到任务,任务编号【{Rgv.content.taskID}】");
                    if (Rgv.messageType == 72)//小车顶起货物
                    {
                        TaskFromCompleted(task, deviceTypeEnum);
                        //给质检门写入启动信号
                        var device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "F1") as OtherDevice ?? throw new Exception("未找到1楼质检门设备信息");
                        device.SetValue(QualityInspectionCommandEnum.StartqualityInspection, true, task.SourceAddress);
                        if (task.TaskType == (int)TaskTypeEnum.CPInbound && task.TaskState == (int)TaskStatusEnum.Execut)
                        {
                            task.TaskState = (int)TaskStatusEnum.WaiCheckShape;
                            BaseDal.UpdateData(task);//给质检门写入启动信号
                            var device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "F1") as OtherDevice ?? throw new Exception("未找到1楼质检门设备信息");
                            device.SetValue(QualityInspectionCommandEnum.StartqualityInspection, true, task.SourceAddress);
                        }
                        else
                        {
                            TaskFromCompleted(task, deviceTypeEnum);
                        }
                    }
                    else if (Rgv.messageType == 10)
                    {
                        if (task.TaskState == (int)TaskStatusEnum.TakeFinish && Rgv.content.status == 4)
                        if (Rgv.content.status == 4)
                        {
                            task.TaskState = (int)TaskStatusEnum.CheckShapeing;
                            BaseDal.UpdateData(task);
                        }
                        else if (task.TaskState == (int)TaskStatusEnum.Puting && Rgv.content.status == 4)
                        {
                            TaskCompleted(task, deviceTypeEnum);
                            if (task.TaskType == (int)TaskTypeEnum.CPInbound && task.TaskState == (int)TaskStatusEnum.TakeFinish)
                            {
                                task.TaskState = (int)TaskStatusEnum.CheckShapeing;
                                BaseDal.UpdateData(task);
                            }
                            else if (task.TaskType == (int)TaskTypeEnum.CPInbound && task.TaskState == (int)TaskStatusEnum.Puting)
                            {
                                TaskCompleted(task, deviceTypeEnum);
                            }
                            else if (task.TaskType == (int)TaskTypeEnum.CPOutbound || task.TaskType == (int)TaskTypeEnum.CPMoveInventory)//出库、移库完成
                            {
                                TaskCompleted(task, deviceTypeEnum);
                            }
                        }
                    }
                }
                return content.OK();
                content.OK();
            }
            catch (Exception ex)
            {
                return content.Error(ex.Message);
                content.Error(ex.Message);
            }
            finally
            {
@@ -143,6 +158,7 @@
                    _trackloginfoService.AddTrackLog(logObject, content, $"下发{deviceName}任务", "", "");
                }
            }
            return content;
        }
        #endregion
@@ -200,10 +216,11 @@
            try
            {
                dt_Task.TaskState = TaskStatusEnum.TakeFinish.ObjToInt();
                Db.Ado.BeginTran();
                TaskFeedback(dt_Task, 4);
                //Db.Ado.BeginTran();
                UpdateLocationStatus(dt_Task.SourceAddress, dt_Task.PalletCode, deviceTypeEnum, LocationStatusEnum.Free);
                BaseDal.UpdateData(dt_Task);
                Db.Ado.CommitTran();
                //BaseDal.UpdateData(dt_Task);
                //Db.Ado.CommitTran();
                return WebResponseContent.Instance.OK();
            }
            catch (Exception ex)
@@ -225,45 +242,17 @@
        {
            try
            {
                WMSInOutBoundCompleteFeedback boundCompleteFeedback = new WMSInOutBoundCompleteFeedback();
                WMSReturn agvContent = null;
                dt_Task.TaskState = TaskStatusEnum.Finish.ObjToInt();
                Dt_ApiInfo? apiInfo = _apiInfoService.Repository.QueryFirst(x => x.ApiCode == nameof(WMSInOutBoundCompleteFeedback));
                if (apiInfo == null) dt_Task.ExceptionMessage = "未找到出入库完成反馈WMS接口配置信息!请检查接口配置";
                else
                {
                    boundCompleteFeedback.taskCode = dt_Task.WMSTaskNum;
                    boundCompleteFeedback.containerCode = dt_Task.PalletCode;
                    boundCompleteFeedback.fromStationCode = dt_Task.SourceAddress;
                    boundCompleteFeedback.toLocationCode = dt_Task.TargetAddress;
                    switch (deviceTypeEnum)
                    {
                        case DeviceTypeEnum.GALAXIS:
                            boundCompleteFeedback.businessType = 1;
                            break;
                        case DeviceTypeEnum.YuanLiJuHe:
                            boundCompleteFeedback.businessType = 2;
                            break;
                    }
                    boundCompleteFeedback.completeType = 1;
                    string response = HttpHelper.Post(apiInfo.ApiAddress, boundCompleteFeedback.Serialize());
                    agvContent = response.DeserializeObject<WMSReturn>();
                    if (agvContent.code != 0) dt_Task.ExceptionMessage = agvContent.msg;
                }
                Db.Ado.BeginTran();
                TaskFeedback(dt_Task, 2);
                //Db.Ado.BeginTran();
                UpdateLocationStatus(dt_Task.TargetAddress, dt_Task.PalletCode, deviceTypeEnum, LocationStatusEnum.InStock);
                if (agvContent != null && agvContent.code == 0)
                    BaseDal.DeleteAndMoveIntoHty(dt_Task, OperateTypeEnum.自动完成);
                else
                    BaseDal.UpdateData(dt_Task);
                Db.Ado.CommitTran();
                //Db.Ado.CommitTran();
                return WebResponseContent.Instance.OK();
            }
            catch (Exception ex)
            {
                Db.Ado.RollbackTran();
                //Db.Ado.RollbackTran();
                throw new Exception(ex.Message);
            }
        }
@@ -346,5 +335,45 @@
            }
        }
        #endregion
        #region ä¸ŠæŠ¥WMS
        public WebResponseContent TaskFeedback(Dt_Task dt_Task, int Status)
        {
            WebResponseContent content = new WebResponseContent();
            WMSInOutBoundCompleteFeedback boundCompleteFeedback = new WMSInOutBoundCompleteFeedback();
            WMSReturn agvContent = null;
            try
            {
                Dt_ApiInfo? apiInfo = _apiInfoService.Repository.QueryFirst(x => x.ApiCode == nameof(WMSInOutBoundCompleteFeedback));
                if (apiInfo == null) dt_Task.ExceptionMessage = "未找到出入库完成反馈WMS接口配置信息!请检查接口配置";
                else
                {
                    boundCompleteFeedback.taskCode = dt_Task.WMSTaskNum;
                    boundCompleteFeedback.containerCode = dt_Task.PalletCode;
                    boundCompleteFeedback.fromStationCode = dt_Task.SourceAddress;
                    boundCompleteFeedback.toLocationCode = dt_Task.TargetAddress;
                    boundCompleteFeedback.status = Status;
                    boundCompleteFeedback.custStatus = "";
                    string response = HttpHelper.Post(apiInfo.ApiAddress, boundCompleteFeedback.Serialize());
                    agvContent = response.DeserializeObject<WMSReturn>();
                    content.Data = agvContent;
                    if (agvContent.code != 0) dt_Task.ExceptionMessage = agvContent.msg;
                }
            }
            catch (Exception ex)
            {
                dt_Task.ExceptionMessage = ex.Message;
            }
            finally
            {
                _trackloginfoService.AddTrackLog(boundCompleteFeedback, content, "出入库任务状态反馈WMS", "", "");
                if (agvContent != null && agvContent.code == 0 && Status == 2)
                    BaseDal.DeleteAndMoveIntoHty(dt_Task, OperateTypeEnum.自动完成);
                else
                    BaseDal.UpdateData(dt_Task);
            }
            return WebResponseContent.Instance.OK();
        }
        #endregion
    }
}