1
huangxiaoqiang
2025-05-26 41702c7ce4c88ad70f52d83d153dd4c596ff69d5
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicServices/BasicInfo/Dt_StationManagerService.cs
@@ -1,4 +1,8 @@
锘縰sing WIDESEA_IServices;
锘縰sing Org.BouncyCastle.Bcpg.OpenPgp;
using WIDESEA_Common;
using WIDESEA_DTO.AGV;
using WIDESEA_IServices;
using WIDESEA_StorageSocketServices;
using WIDESEAWCS_BasicInfoRepository;
using WIDESEAWCS_Model.Models;
@@ -7,10 +11,214 @@
    public partial class Dt_StationManagerService : ServiceBase<Dt_StationManager, IDt_StationManagerRepository>, IDt_StationManagerService
    {
        private readonly ISys_ConfigService _sys_ConfigService;
        private readonly IDt_TaskRepository _taskRepository;
        public Dt_StationManagerService(IDt_StationManagerRepository BaseDal, ISys_ConfigService sys_ConfigService) : base(BaseDal)
        string url = AppSettings.Configuration["AGVIP"];
        public Dt_StationManagerService(IDt_StationManagerRepository BaseDal, ISys_ConfigService sys_ConfigService, IDt_TaskRepository taskRepository) : base(BaseDal)
        {
            _sys_ConfigService = sys_ConfigService;
            _taskRepository = taskRepository;
        }
        public WebResponseContent GetStationStatus()
        {
            List<Station> status = new List<Station>();
            StationStatus stationIn = GetStationStatus("B002");
            StationStatus stationOut = GetStationStatus("B001");
            //StationStatus stationIn = new StationStatus()
            //{
            //    WorkstationT="0",
            //    WorkstationO="0"
            //};
            //StationStatus stationOut = new StationStatus()
            //{
            //    WorkstationT = "0",
            //    WorkstationO = "0"
            //};
            List<OutStationStatus> outStationStatus = GetOutStationStatus(stationOut);
            List<InStationStatus> inStationStatus = GetInStationStatus(stationIn);
            if(outStationStatus != null && outStationStatus.Count > 0)
            {
                foreach(OutStationStatus item in outStationStatus)
                {
                    var station = BaseDal.QueryFirst(x => x.stationHasTask == "鎶芥鍑哄簱"&&x.HostName==item.StationName);
                    if(station != null)
                    {
                        status.Add(new Station()
                        {
                            Name = item.StationName,
                            Status = station.stationHasTask,
                            StationType = "鍑哄簱"
                        });
                    }
                    else if (item.IsDistributionTask == "")
                    {
                        status.Add(new Station()
                        {
                            Name=item.StationName,
                            Status=item.StationEnable,
                            StationType = "鍑哄簱"
                        });
                    }
                    else
                    {
                        status.Add(new Station()
                        {
                            Name = item.StationName,
                            Status = item.IsDistributionTask,
                            StationType = "鍑哄簱"
                        });
                    }
                }
            }
            if (outStationStatus != null && outStationStatus.Count > 0)
            {
                foreach (InStationStatus item in inStationStatus)
                {
                    var station = BaseDal.QueryFirst(x => x.stationHasTask == "鎶芥鍑哄簱" && x.HostName == item.StationName);
                    if (station != null)
                    {
                        status.Add(new Station()
                        {
                            Name = item.StationName,
                            Status = station.stationHasTask,
                            StationType="鍏ュ簱"
                        });
                    }
                    else if (item.IsDistributionTask == "")
                    {
                        status.Add(new Station()
                        {
                            Name = item.StationName,
                            Status = item.StationEnable,
                            StationType = "鍏ュ簱"
                        });
                    }
                    else
                    {
                        status.Add(new Station()
                        {
                            Name = item.StationName,
                            Status = item.IsDistributionTask,
                            StationType = "鍏ュ簱"
                        });
                    }
                }
            }
            foreach (var item in status)
            {
                switch (item.Status)
                {
                    case "鍑哄簱":
                        item.Color = "#80dfdf";
                        break;
                    case "鍏ュ簱":
                        item.Color = "#80bcfe";
                            break;
                    case "绌洪棽":
                        item.Color = "#959595";
                        break;
                    case "鏈夋枡":
                        item.Color = "#83b833";
                        break;
                    case "鎶芥鍑哄簱":
                        item.Color = "#f59a23";
                        break;
                    default:
                        break;
                }
            }
            var obj = new StationStatusPair
            {
                Station = status,
            };
            return WebResponseContent.Instance.OK(data:obj);
        }
        public List<OutStationStatus> GetOutStationStatus(StationStatus stationOut)
        {
            List<OutStationStatus> outStationStatus = new List<OutStationStatus>();
            var taskOutStationO = _taskRepository.QueryFirst(x => x.SourceAddress == "B001::1" || x.TargetAddress == "B001::1");
            var taskOutStationT = _taskRepository.QueryFirst(x => x.SourceAddress == "B001::2" || x.TargetAddress == "B001::2");
            outStationStatus.Add(new OutStationStatus()
            {
                StationName = "04",
                StationEnable = stationOut.WorkstationO == "0" ? "绌洪棽" : "鏈夋枡",
                IsDistributionTask = taskOutStationO == null ? "" : taskType(taskOutStationO),
            });
            outStationStatus.Add(new OutStationStatus()
            {
                StationName = "03",
                StationEnable = stationOut.WorkstationT == "0" ? "绌洪棽" : "鏈夋枡",
                IsDistributionTask = taskOutStationT == null ? "" : taskType(taskOutStationT),
            });
            return outStationStatus;
        }
        public List<InStationStatus> GetInStationStatus(StationStatus stationIn)
        {
            List<InStationStatus> inStationStatus = new List<InStationStatus>();
            var taskOutStationO = _taskRepository.QueryFirst(x => x.SourceAddress == "B002::1" || x.TargetAddress == "B002::1");
            var taskOutStationT = _taskRepository.QueryFirst(x => x.SourceAddress == "B002::2" || x.TargetAddress == "B002::2");
            inStationStatus.Add(new InStationStatus()
            {
                StationName = "02",
                StationEnable = stationIn.WorkstationO == "0" ? "绌洪棽" : "鏈夋枡",
                IsDistributionTask = taskOutStationO == null ? "" : taskType(taskOutStationO),
            });
            inStationStatus.Add(new InStationStatus()
            {
                StationName = "01",
                StationEnable = stationIn.WorkstationT == "0" ? "绌洪棽" : "鏈夋枡",
                IsDistributionTask = taskOutStationT == null ? "" : taskType(taskOutStationT),
            });
            return inStationStatus;
        }
        public string taskType(Dt_Task task)
        {
            string TaskType = String.Empty;
            if (task != null)
            {
                switch (task.TaskType)
                {
                    case (int)TaskInboundTypeEnum.Inbound:
                        //鍏ュ簱
                        TaskType = "鍏ュ簱";
                        break;
                    case (int)TaskOutboundTypeEnum.Outbound:
                        //鍑哄簱
                        TaskType = "鍑哄簱";
                        break;
                    case (int)TaskRelocationTypeEnum.Relocation:
                        TaskType = "绉诲簱";
                        break;
                    case (int)TaskStationTypeEnum.StationToStation:
                        TaskType = "绔欏彴鍑哄簱";
                        break;
                    default: break;
                }
            }
            return TaskType;
        }
        public StationStatus GetStationStatus(string stationName)
        {
            string urlnew = url + "/ilns/ctrl/getState";
            var result = HttpsClient.PostAsync(urlnew, JsonConvert.DeserializeObject<Dictionary<string, object>>(new { ctrlName = "B001" }.ToJson())).Result;
            return JsonConvert.DeserializeObject<StationStatus>(result.ToString());
        }
        public class StationStatusPair
        {
            public List<Station> Station { get; set; }
        }
        public class Station
        {
            public string Name { get; set; }
            public string Status { get; set; }
            public string StationType { get; set; }
            public string Color { get; set; }
        }
    }
}