huangxiaoqiang
2025-06-03 73a077d76b715aee6b9f384b087a6792a84989d8
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_StoragIntegrationServices/AGV/AGVService.cs
@@ -27,8 +27,6 @@
        private readonly ILocationInfoRepository _locationRepository;
        private readonly IDt_TaskRepository BaseDal;
        private readonly IDt_TaskService _taskService;
        private readonly IStockInfoRepository _stockInfoRepository;
        private readonly ISys_ConfigService _configService;
        private readonly IDt_StationManagerRepository _stationManagerRepository;
        private readonly LogFactory LogFactory = new LogFactory();
        public SocketClientService _Socket { get; set; }
@@ -36,12 +34,10 @@
        private readonly IDt_DeviceInfoRepository _deviceInfoRepository;
        private readonly IDt_HandAutomaticRepository _handAutomaticRepository;
        public AGVService(ILocationInfoRepository locationRepository, IDt_TaskRepository taskRepository, IStockInfoRepository stockInfoRepository, ISys_ConfigService configService, IDt_StationManagerRepository stationManagerRepository, IDt_DeviceInfoRepository deviceInfoRepository, IMapper mapper, SocketClientService socketClientService, IDt_TaskService taskService, IDt_HandAutomaticRepository handAutomaticRepository)
        public AGVService(ILocationInfoRepository locationRepository, IDt_TaskRepository taskRepository, IDt_StationManagerRepository stationManagerRepository, IDt_DeviceInfoRepository deviceInfoRepository, IMapper mapper, SocketClientService socketClientService, IDt_TaskService taskService, IDt_HandAutomaticRepository handAutomaticRepository)
        {
            _locationRepository = locationRepository;
            BaseDal = taskRepository;
            _stockInfoRepository = stockInfoRepository;
            _configService = configService;
            _stationManagerRepository = stationManagerRepository;
            _deviceInfoRepository = deviceInfoRepository;
            _mapper = mapper;
@@ -62,10 +58,10 @@
            WebResponseContent content = new WebResponseContent();
            try
            {
                var HandAutomatic = _handAutomaticRepository.QueryFirst(x => true && x.HandAutomatic == "Automatic");
                if (HandAutomatic == null)
                var location = _locationRepository.QueryData(x => x.LocationStatus==(int)LocationEnum.Free).ToList();
                if (location.Count == 0)
                {
                    return content.Error("当前不是自动模式不可下发任务");
                    return content.Error("库内无可用库位");
                }
                Dt_StationManager Instation = _stationManagerRepository.QueryFirst(x => x.stationName == aGVDTO.SourceAddress && x.stationType == 1);
                List<Dt_StationManager> Outstation = _stationManagerRepository.QueryData(x => x.stationType == 2).ToList();
@@ -132,12 +128,12 @@
            WebResponseContent content = new WebResponseContent();
            try
            {
                var HandAutomatic = _handAutomaticRepository.QueryFirst(x => true && x.HandAutomatic == "Automatic");
                if (HandAutomatic == null)
                {
                    _Socket.DeviceAutoStatusReport("1");
                    return content.OK();
                }
                //var HandAutomatic = _handAutomaticRepository.QueryFirst(x => true && x.HandAutomatic == "Automatic");
                //if (HandAutomatic == null)
                //{
                //    _Socket.DeviceAutoStatusReport("1");
                //    return content.OK();
                //}
                Dt_DeviceInfo device = _deviceInfoRepository.QueryFirst(x => x.DeviceName == Status.AGVName);
                if (device != null)
                {
@@ -239,27 +235,8 @@
            WebResponseContent content = new WebResponseContent();
            try
            {
                Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == aGVDTO.TaskNum);
                Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == Convert.ToInt32(aGVDTO.TaskNum));
                if (task != null)
                {
                    if (task.Roadway == "PDA")
                    {
                        LogFactory.GetLog("AGV动作状态变更PDA任务").InfoFormat(true, $"请求参数:{JsonConvert.SerializeObject(aGVDTO)}", "");
                        if (aGVDTO.Status == "Start")
                        {
                            _taskService.TaskStatus(task);
                            return content.OK();
                        }
                        else if (aGVDTO.Status == "Unload")
                        {
                            return _taskService.TaskComplete(task.TaskNum);
                        }
                        else
                        {
                            return content.OK();
                        }
                    }
                    else
                    {
                        switch (task.TaskType)
                        {
@@ -268,8 +245,17 @@
                                var station = _stationManagerRepository.QueryFirst(x => x.stationName == task.SourceAddress);
                                if (aGVDTO.Status == "Start")
                                {
                                if (task.Roadway == "PDA")
                                {
                                    _taskService.TaskStatus(task);
                                    return content.OK();
                                }
                                else
                                {
                                    _Socket.JobStartOrEnd(aGVDTO.Status.Substring(0, 1), "0000" + station.HostName, task.TargetAddress, "I", task.PalletCode);
                                    task.TaskState = (int)TaskInStatusEnum.AGV_InExecuting;
                                }
                                }
                                else if (aGVDTO.Status == "Loadel")
                                {
@@ -277,9 +263,16 @@
                                }
                                else
                                {
                                if (task.Roadway == "PDA")
                                {
                                    _Socket.PalletActionReportPDA("0000" + station.HostName, task.TargetAddress, "I", task.PalletCode);
                                }
                                else
                                {
                                    _Socket.PalletActionReport(aGVDTO.Status.Substring(0, 1), "0000" + station.HostName, task.TargetAddress, "I", task.PalletCode);
                                    Thread.Sleep(2000);
                                    _Socket.PalletActionReport("0000" + station.HostName, task.TargetAddress, "I", task.PalletCode);
                                }
                                    task.TaskState = (int)TaskInStatusEnum.AGV_InFinish;
                                    _taskService.CompleteInboundTask(task);
                                }
@@ -289,8 +282,16 @@
                                var stationOut = _stationManagerRepository.QueryFirst(x => x.stationName == task.TargetAddress);
                                if (aGVDTO.Status == "Start")
                                {
                                if (task.Roadway == "PDA")
                                {
                                    _taskService.TaskStatus(task);
                                    return content.OK();
                                }
                                else
                                {
                                    _Socket.JobStartOrEnd(aGVDTO.Status.Substring(0, 1), task.SourceAddress, "0000" + stationOut.HostName, "O", task.PalletCode);
                                    task.TaskState = (int)TaskOutStatusEnum.AGV_OutExecuting;
                                }
                                }
                                else if (aGVDTO.Status == "Loadel")
                                {
@@ -298,9 +299,16 @@
                                }
                                else
                                {
                                if (task.Roadway == "PDA")
                                {
                                    _Socket.PalletActionReportPDA(task.SourceAddress, "0000" + stationOut.HostName, "O", task.PalletCode);
                                }
                                else
                                {
                                    _Socket.PalletActionReport(aGVDTO.Status.Substring(0, 1), task.SourceAddress, "0000" + stationOut.HostName, "O", task.PalletCode);
                                    Thread.Sleep(2000);
                                    _Socket.PalletActionReport(task.SourceAddress, "0000" + stationOut.HostName, "O", task.PalletCode);
                                }
                                    task.TaskState = (int)TaskOutStatusEnum.AGV_OutFinish;
                                    _taskService.CompleteOutboundTask(task);
                                }
@@ -308,8 +316,16 @@
                            case (int)TaskRelocationTypeEnum.Relocation:
                                if (aGVDTO.Status == "Start")
                                {
                                if (task.Roadway == "PDA")
                                {
                                    _taskService.TaskStatus(task);
                                    return content.OK();
                                }
                                else
                                {
                                    _Socket.JobStartOrEnd(aGVDTO.Status.Substring(0, 1), task.SourceAddress, task.TargetAddress, "R", task.PalletCode);
                                    task.TaskState = (int)TaskRelocationStatusEnum.AGV_RelocationExecuting;
                                }
                                }
                                else if (aGVDTO.Status == "Loadel")
                                {
@@ -317,9 +333,16 @@
                                }
                                else
                                {
                                if (task.Roadway == "PDA")
                                {
                                    _Socket.PalletActionReportPDA(task.SourceAddress, task.TargetAddress, "R", task.PalletCode);
                                }
                                else
                                {
                                    _Socket.PalletActionReport(aGVDTO.Status.Substring(0, 1), task.SourceAddress, task.TargetAddress, "R", task.PalletCode);
                                    Thread.Sleep(2000);
                                    _Socket.PalletActionReport(task.SourceAddress, task.TargetAddress, "R", task.PalletCode);
                                }
                                    task.TaskState = (int)TaskRelocationStatusEnum.AGV_RelocationFinish;
                                    _taskService.CompleteRelocationboundTask(task);
                                }
@@ -329,8 +352,16 @@
                                var stationout = _stationManagerRepository.QueryFirst(x => x.stationName == task.TargetAddress);
                                if (aGVDTO.Status == "Start")
                                {
                                if (task.Roadway == "PDA")
                                {
                                    _taskService.TaskStatus(task);
                                    return content.OK();
                                }
                                else
                                {
                                    _Socket.JobStartOrEnd(aGVDTO.Status.Substring(0, 1), "0000" + stationIn.HostName, "0000" + stationout.HostName, "S", task.PalletCode);
                                    task.TaskState = (int)TaskOutStatusEnum.AGV_OutExecuting;
                                }
                                }
                                else if (aGVDTO.Status == "Loadel")
                                {
@@ -338,11 +369,104 @@
                                }
                                else
                                {
                                if (task.Roadway == "PDA")
                                {
                                    _Socket.PalletActionReportPDA("0000" + stationIn.HostName, "0000" + stationout.HostName, "S", task.PalletCode);
                                }
                                else
                                {
                                    _Socket.PalletActionReport(aGVDTO.Status.Substring(0, 1), "0000" + stationIn.HostName, "0000" + stationout.HostName, "S", task.PalletCode);
                                    Thread.Sleep(2000);
                                    _Socket.PalletActionReport("0000" + stationIn.HostName, "0000" + stationout.HostName, "S", task.PalletCode);
                                }
                                    task.TaskState = (int)TaskOutStatusEnum.AGV_OutFinish;
                                    _taskService.TaskMoveHty(task);
                            }
                            break;
                        case (int)TaskFireAlarmTypeEnum.FireAlarmOut:
                            if (aGVDTO.Status == "Start")
                            {
                                _taskService.AddStcokHty(task.PalletCode, task.SourceAddress);
                                task.TaskState = (int)TaskFireAlarmStatusEnum.AGV_FireAlarmExecuting;
                                BaseDal.Update(task);
                            }
                            else if (aGVDTO.Status == "Loadel")
                            {
                            }
                            else
                            {
                                var stationFireAlarm = _stationManagerRepository.QueryFirst(x => x.stationName == task.TargetAddress);
                                if (task.Roadway == "PDA")
                                {
                                    _Socket.PalletActionReportFrie(task.SourceAddress, "0000" + stationFireAlarm.HostName, "F", task.PalletCode); ;
                                }
                                task.TaskState = (int)TaskFireAlarmStatusEnum.AGV_FireAlarmFinish;
                                _taskService.TaskMoveHty(task);
                            }
                            break;
                        case (int)TaskOutboundTypeEnum.OutQuality:
                            //抽检
                            var stationC = _stationManagerRepository.QueryFirst(x => x.stationName == task.TargetAddress);
                            if (aGVDTO.Status == "Start")
                            {
                                if (task.Roadway == "PDA")
                                {
                                    _taskService.TaskStatus(task);
                                    return content.OK();
                                }
                                else
                                {
                                    _Socket.JobStartOrEnd(aGVDTO.Status.Substring(0, 1), task.SourceAddress, "0000" + stationC.HostName, "C", task.PalletCode);
                                    task.TaskState = (int)TaskOutStatusEnum.AGV_OutExecuting;
                                }
                            }
                            else if (aGVDTO.Status == "Loadel")
                            {
                                if (task.Roadway == "PDA")
                                {
                                    return content.OK();
                                }
                                _Socket.PalletActionReport(aGVDTO.Status.Substring(0, 1), task.SourceAddress, "0000" + stationC.HostName, "C", task.PalletCode);
                            }
                            else
                            {
                                if (task.Roadway == "PDA")
                                {
                                    _taskService.TaskComplete(task.TaskNum);
                                    _Socket.PalletActionReportPDA(task.SourceAddress, "0000" + stationC.HostName, "O", task.PalletCode);
                                }
                                else
                                {
                                    _Socket.PalletActionReport(aGVDTO.Status.Substring(0, 1), task.SourceAddress, "0000" + stationC.HostName, "C", task.PalletCode);
                                    Thread.Sleep(2000);
                                    _Socket.PalletActionReport(task.SourceAddress, "0000" + stationC.HostName, "C", task.PalletCode);
                                    task.TaskState = (int)TaskOutStatusEnum.AGV_OutFinish;
                                    _taskService.CompleteOutboundTask(task);
                                }
                            }
                            break;
                        case (int)TaskInboundTypeEnum.InQuality:
                            //抽检
                            if (aGVDTO.Status == "Start")
                            {
                                if (task.Roadway == "PDA")
                                {
                                    _taskService.TaskStatus(task);
                                    return content.OK();
                                }
                            }
                            else if (aGVDTO.Status == "Loadel")
                            {
                                return content.OK();
                            }
                            else
                            {
                                if (task.Roadway == "PDA")
                                {
                                    _taskService.TaskComplete(task.TaskNum);
                                }
                                }
                                break;
                            default: break;
@@ -350,7 +474,6 @@
                        BaseDal.Update(task);
                        LogFactory.GetLog("AGV动作状态变更").InfoFormat(true, $"请求参数:{JsonConvert.SerializeObject(aGVDTO)}", "");
                        return content.OK();
                    }
                }
                else
                {
@@ -369,20 +492,49 @@
            WebResponseContent content = new WebResponseContent();
            try
            {
                var task = BaseDal.QueryFirst(x => x.TaskNum == aGVDTO.TaskNum);
                var task = BaseDal.QueryFirst(x => x.TaskNum ==Convert.ToInt32( aGVDTO.TaskNum));
                if (task != null)
                {
                    string HostType = string.Empty;
                    if (task.TaskType == (int)TaskInboundTypeEnum.Inbound)
                    {
                        HostType = "I";
                    }
                    else if (task.TaskType == (int)TaskOutboundTypeEnum.Outbound)
                    {
                        HostType = "O";
                    }
                    else if (task.TaskType == (int)TaskOutboundTypeEnum.OutQuality)
                    {
                        HostType = "C";
                    }
                    else if (task.TaskType == (int)TaskRelocationTypeEnum.Relocation)
                    {
                        HostType = "R";
                    }
                    else if (task.TaskType == (int)TaskStationTypeEnum.StationToStation)
                    {
                        HostType = "S";
                    }
                    switch (aGVDTO.Message)
                    {
                        case "RepeatInbound":
                        //空出库
                        case "0000400":
                            _Socket.EmptyOutBound(task.SourceAddress, "0000" + StationParse(task.TargetAddress), task.PalletCode);
                            _taskService.AddStcokHty(task.PalletCode, task.SourceAddress);
                            _taskService.TaskMoveHty(task);
                            _Socket.AddErrorMessage("2101", "AGV", "");
                            break;
                        case "EmptyOutbound":
                        //重入库
                        case "0000200":
                            _Socket.RecreateGetLocation("0000" + StationParse(task.SourceAddress), task.TargetAddress, HostType, task.PalletCode);
                            _Socket.AddErrorMessage("2100", "AGV", "");
                            break;
                        default: break;
                    }
                }
                LogFactory.GetLog("AGV异常信息").InfoFormat(true, $"请求参数:{JsonConvert.SerializeObject(aGVDTO)}", "");
                return content.OK();
            }
            catch (Exception ex)
@@ -390,6 +542,19 @@
                return content.Error(ex.Message);
            }
        }
        public string StationParse(string station)
        {
            var Station = SqlSugarHelper.DbWMS.Queryable<Dt_StationManager>().Where(x => x.stationName == station).First();
            if (Station != null)
            {
                return Station.HostName;
            }
            else
            {
                return "";
            }
        }
        #endregion å¤–部接口方法
    }
}