1
dengjunjie
2026-03-05 af7d711002c16d219eba4b823a3cdae38a2ccfad
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskMethods.cs
@@ -14,6 +14,8 @@
using WIDESEAWCS_Core.Enums;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_DTO;
using WIDESEAWCS_DTO.AGV.HIKROBOT;
using WIDESEAWCS_DTO.RGV.FOURBOT;
using WIDESEAWCS_DTO.WMS;
using WIDESEAWCS_Model.Models;
@@ -35,6 +37,8 @@
            WebResponseContent content = new WebResponseContent();
            GALAXISUpdateTaskStatus gALAXIS = new();
            FOURBOTTaskStatusNotify Rgv = new();//四向车任务状态通知
            HIKROBOTTaskProcessReport hIKROBOT = new();//海康机器人
            try
            {
                if (deviceTypeEnum == DeviceTypeEnum.GALAXIS)
@@ -59,13 +63,45 @@
                }
                else if (deviceTypeEnum == DeviceTypeEnum.HIKROBOT)
                {
                    hIKROBOT=TaskDTO.Serialize().DeserializeObject<HIKROBOTTaskProcessReport>();
                    if (hIKROBOT==null) throw new Exception("参数转换失败!");
                    var task = BaseDal.QueryFirst(x => x.WMSTaskNum == hIKROBOT.robotTaskCode);
                    if (task == null) throw new Exception($"未找到任务,任务编号【{hIKROBOT.robotTaskCode}】");
                    switch (hIKROBOT.extra.values.method)
                    {
                        case "start":
                            TaskCompleted(task, deviceTypeEnum);
                            break;
                        case "end":
                            TaskFromCompleted(task, deviceTypeEnum);
                            break;
                        default:
                            task.TaskState = ReturnTaskStatus(gALAXIS.taskStatus, deviceTypeEnum);
                            BaseDal.UpdateData(task);
                            break;
                    }
                }
                else
                else //四向车
                {
                    Rgv = TaskDTO.Serialize().DeserializeObject<FOURBOTTaskStatusNotify>();
                    if (Rgv==null) throw new Exception("参数转换失败!");
                    var task = BaseDal.QueryFirst(x => x.WMSTaskNum == Rgv.taskID.ToString());
                    if (task==null) throw new Exception($"未找到任务,任务编号【{Rgv.taskID}】");
                    switch (Rgv.status)
                    {
                        case 2:
                            TaskCompleted(task, deviceTypeEnum);
                            break;
                        case 4:
                            TaskFromCompleted(task, deviceTypeEnum);
                            break;
                        default:
                            task.TaskState = ReturnTaskStatus(gALAXIS.taskStatus, deviceTypeEnum);
                            break;
                    }
                }
                //return WebResponseContent.Instance.OK();
               return content.OK();
            }
            catch (Exception ex)
@@ -74,7 +110,30 @@
            }
            finally
            {
                _trackloginfoService.AddTrackLog(gALAXIS, content, "下发凯乐士AGV任务", "", "");
                // åœ¨ finally ä¸­åˆ¤æ–­å“ªä¸ªå¯¹è±¡è¢«èµ‹å€¼äº†
                object logObject = null;
                string deviceName = "";
                if (gALAXIS != null && gALAXIS.taskId != null)
                {
                    logObject = gALAXIS;
                    deviceName = "凯乐士AGV";
                }
                else if (hIKROBOT != null && hIKROBOT.robotTaskCode != null)
                {
                    logObject = hIKROBOT;
                    deviceName = "海康机器人";
                }
                else if (Rgv != null && Rgv.taskID != 0)
                {
                    logObject = Rgv;
                    deviceName = "四向车";
                }
                if (logObject != null)
                {
                    _trackloginfoService.AddTrackLog(logObject, content, $"下发{deviceName}任务", "", "");
                }
            }
        }
        #endregion
@@ -134,7 +193,7 @@
            {
                dt_Task.TaskState = TaskStatusEnum.TakeFinish.ObjToInt();
                Db.Ado.BeginTran();
                UpdateLocationStatus(dt_Task.SourceAddress, deviceTypeEnum, LocationStatusEnum.Free);
                UpdateLocationStatus(dt_Task, deviceTypeEnum, LocationStatusEnum.Free);
                BaseDal.UpdateData(dt_Task);
                Db.Ado.CommitTran();
                return WebResponseContent.Instance.OK();
@@ -186,7 +245,7 @@
                    if (agvContent.code != 0) dt_Task.ExceptionMessage = agvContent.msg;
                }
                Db.Ado.BeginTran();
                UpdateLocationStatus(dt_Task.TargetAddress, deviceTypeEnum, LocationStatusEnum.InStock);
                UpdateLocationStatus(dt_Task, deviceTypeEnum, LocationStatusEnum.InStock);
                if (agvContent != null && agvContent.code == 0)
                    BaseDal.DeleteAndMoveIntoHty(dt_Task, OperateTypeEnum.自动完成);
                else
@@ -210,33 +269,59 @@
        /// <param name="deviceTypeEnum"></param>
        /// <param name="locationStatusEnum"></param>
        /// <returns></returns>
        public WebResponseContent UpdateLocationStatus(string LocationCode, DeviceTypeEnum deviceTypeEnum, LocationStatusEnum locationStatusEnum)
        public WebResponseContent UpdateLocationStatus(Dt_Task takse, DeviceTypeEnum deviceTypeEnum, LocationStatusEnum locationStatusEnum)
        {
            try
            {
                if (deviceTypeEnum == DeviceTypeEnum.GALAXIS)
                {
                    Dt_KLSLocationInfo? dt_KLSLocationInfo = _kLSLocationInfoService.Repository.QueryFirst(x => x.LocationCode == LocationCode);
                    Dt_KLSLocationInfo? dt_KLSLocationInfo = _kLSLocationInfoService.Repository.QueryFirst(x => x.LocationCode == takse.SourceAddress);
                    if (dt_KLSLocationInfo != null)
                    {
                        if (locationStatusEnum== LocationStatusEnum.Free) //如果起点完成就给货位赋值托盘号
                        {
                            dt_KLSLocationInfo.PalletCode = "";
                        }
                        else
                        {
                            dt_KLSLocationInfo.PalletCode = takse.PalletCode;
                        }
                        dt_KLSLocationInfo.LocationStatus = locationStatusEnum.ObjToInt();
                        _kLSLocationInfoService.Repository.UpdateData(dt_KLSLocationInfo);
                    }
                }
                else if (deviceTypeEnum == DeviceTypeEnum.HIKROBOT)
                {
                    Dt_HKLocationInfo? dt_HKLocationInfo = _hKLocationInfoService.Repository.QueryFirst(x => x.LocationCode == LocationCode);
                    Dt_HKLocationInfo? dt_HKLocationInfo = _hKLocationInfoService.Repository.QueryFirst(x => x.LocationCode == takse.SourceAddress);
                    if (dt_HKLocationInfo != null)
                    {
                        if (locationStatusEnum == LocationStatusEnum.Free) //如果起点完成就给货位赋值托盘号
                        {
                            dt_HKLocationInfo.PalletCode = "";
                        }
                        else
                        {
                            dt_HKLocationInfo.PalletCode = takse.PalletCode;
                        }
                        dt_HKLocationInfo.LocationStatus = locationStatusEnum.ObjToInt();
                        _hKLocationInfoService.Repository.UpdateData(dt_HKLocationInfo);
                    }
                }
                else if (deviceTypeEnum == DeviceTypeEnum.YuanLiJuHe)
                {
                    Dt_RGVLocationInfo dt_RGVLocationInfo = _rGVLocationInfoService.Repository.QueryFirst(x => x.LocationCode == LocationCode);
                    Dt_RGVLocationInfo dt_RGVLocationInfo = _rGVLocationInfoService.Repository.QueryFirst(x => x.LocationCode == takse.SourceAddress);
                    //这里将任务的托盘号给货位表中的PalletCode字段。
                    if (dt_RGVLocationInfo != null)
                    {
                        if (locationStatusEnum == LocationStatusEnum.Free) //如果起点完成就给货位赋值托盘号
                        {
                            dt_RGVLocationInfo.PalletCode = "";
                        }
                        else
                        {
                            dt_RGVLocationInfo.PalletCode = takse.PalletCode;
                        }
                        dt_RGVLocationInfo.LocationStatus = locationStatusEnum.ObjToInt();
                        _rGVLocationInfoService.Repository.UpdateData(dt_RGVLocationInfo);
                    }