huangxiaoqiang
2025-06-12 9d6f25decd9d01a85fec002ecb59ecb742fe0e70
CodeManagement/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Partial/Dt_TaskService.cs
@@ -1082,110 +1082,130 @@
    #region 火警出库
    public WebResponseContent EmergencyTask(object obj)
    public WebResponseContent EmergencyTask(Object obj)
    {
        WebResponseContent content = new WebResponseContent();
        var emergencyTask = new DTSEmergencyTask();
        try
        {
            Console.WriteLine($"火警参数:{obj.ToString()}");
            emergencyTask = JsonConvert.DeserializeObject<DTSEmergencyTask>(obj.ToString());
            if (emergencyTask == null) throw new Exception("火警参数为空");
            DtLocationInfo locationInfo = _locationRepository.QueryFirst(x => x.Row == emergencyTask.row && x.Column == emergencyTask.column && x.Layer == emergencyTask.layer && x.AreaId == emergencyTask.zone);
            if (locationInfo == null)
            string[] strings = emergencyTask.LocationCode.Split("-");
            string Roadway = strings[0];
            //switch (Roadways[0])
            //{
            //    case "J":
            //        Roadway = "JZSC" + Roadways[1];
            //        break;
            //    case "G":
            //        Roadway = "GWSC" + Roadways[1];
            //        break;
            //    case "C":
            //        Roadway = "CWSC" + Roadways[1];
            //        break;
            //    default: throw new Exception("未识别库位编码");
            //}
            int Row = Convert.ToInt16(strings[1]);
            int Column = Convert.ToInt16(strings[2]);
            int Layer = Convert.ToInt16(strings[3]);
            if (!strings[0].Contains("SC")) throw new Exception("未知库区");
            for (int i = 0; i < 2; i++)
            {
                throw new Exception("未知库位");
            }
            //查找消防站台
            var station = _stationManagerRepository.QueryFirst(t => t.Roadway == locationInfo.RoadwayNo
                 && t.stationType == (int)StationManager.FireStation
                 /*&& t. == "Enable"*/);
            if (station == null)
            {
                throw new Exception("消防站台未配置!");
            }
            //查找库存信息
            var stockInfo = _stockInfoRepository.QueryFirst(x => x.LocationCode == locationInfo.LocationCode && x.LocationInfo.RoadwayNo == locationInfo.RoadwayNo);
            //托盘码
            string barcode = string.Empty;
            if (stockInfo != null)
            {
                barcode = stockInfo.PalletCode;
            }
            else
            {
                //无库存信息,生成随机托盘码
                barcode = "M" + DateTime.Now.ToString("MMddHHmmss") + "-" + new Random().Next(100, 1000);
            }
            Dt_Task fireTask = BaseDal.QueryFirst(x => x.TaskType == 500 && x.SourceAddress == locationInfo.LocationCode && x.Roadway == station.Roadway);
            if (fireTask != null)
            {
                throw new Exception("已添加火警出库任务");
            }
            int taskNum = BaseDal.GetTaskNo().Result;
            Dt_Task task = new Dt_Task
            {
                CreateDate = DateTime.Now,
                Creater = "DTS",
                CurrentAddress = locationInfo.LocationCode,
                Grade = 1,
                Dispatchertime = DateTime.Now,
                PalletCode = barcode,
                Roadway = station.Roadway,
                SourceAddress = locationInfo.LocationCode,
                TaskState = (int)TaskOutStatusEnum.OutNew,
                TaskType = 500,
                TargetAddress = station.stationLocation,
                NextAddress = station.stationChildCode,
                TaskNum = taskNum, //_taskRepository.GetTaskNo().Result,
                TaskId = 0,
            };
            // 尝试添加新任务
            WMSTaskDTO taskDTO = new WMSTaskDTO()
            {
                TaskNum = task.TaskNum.Value,
                Grade = 1,
                PalletCode = task.PalletCode,
                RoadWay = task.Roadway,
                SourceAddress = task.SourceAddress,
                TargetAddress = task.TargetAddress,
                TaskState = task.TaskState.Value,
                Id = 0,
                TaskType = 500,
            };
            var configs = _configService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
            var ipAddress = configs.FirstOrDefault(x => x.ConfigKey == SysConfigConst.WCSIPAddress)?.ConfigValue;
            var ReceiveByWMSTask = configs.FirstOrDefault(x => x.ConfigKey == SysConfigConst.ReceiveByWMSTask)?.ConfigValue;
            if (ReceiveByWMSTask == null || ipAddress == null)
            {
                throw new Exception("WMS IP 未配置");
            }
            var wmsIpAddrss = ipAddress + ReceiveByWMSTask;
            var respon = HttpHelper.Post(wmsIpAddrss, JsonConvert.SerializeObject(taskDTO));
            if (respon != null)
            {
                WebResponseContent respone = JsonConvert.DeserializeObject<WebResponseContent>(respon.ToString());
                if (respone.Status)
                DtLocationInfo locationInfo = _locationRepository.QueryFirst(x => x.Row == Row && x.Column == Column && x.Layer == (i == 0 ? Layer - 1 : Layer) && x.RoadwayNo == Roadway);
                if (locationInfo == null)
                {
                    var taskId = BaseDal.AddData(task);
                    throw new Exception("未知库位");
                }
                //查找消防站台
                var station = _stationManagerRepository.QueryFirst(t => t.Roadway == locationInfo.RoadwayNo && t.stationType == (int)StationManager.FireStation);
                if (station == null)
                {
                    throw new Exception("消防站台未配置!");
                }
                //查找库存信息
                var stockInfo = _stockInfoRepository.QueryFirst(x => x.LocationCode == locationInfo.LocationCode && x.LocationInfo.RoadwayNo == locationInfo.RoadwayNo);
                //托盘码
                string barcode = string.Empty;
                if (stockInfo != null)
                {
                    barcode = stockInfo.PalletCode;
                }
                else
                {
                    throw new Exception("WCS处理失败:" + respone.Message);
                    //无库存信息,生成随机托盘码
                    barcode = "M" + DateTime.Now.ToString("MMddHHmmss") + "-" + new Random().Next(100, 1000);
                }
            }
            else
            {
                throw new Exception("请求处理失败");
                Dt_Task fireTask = BaseDal.QueryFirst(x => x.TaskType == (int)TaskOutboundTypeEnum.OutFireAlarm && x.SourceAddress == locationInfo.LocationCode && x.Roadway == station.Roadway);
                if (fireTask != null)
                {
                    throw new Exception("已添加火警出库任务");
                }
                int taskNum = BaseDal.GetTaskNo().Result;
                Dt_Task task = new Dt_Task
                {
                    CreateDate = DateTime.Now,
                    Creater = "DTS",
                    CurrentAddress = locationInfo.LocationCode,
                    Grade = i == 0 ? 5 : 3,
                    Dispatchertime = DateTime.Now,
                    PalletCode = barcode,
                    Roadway = station.Roadway,
                    SourceAddress = locationInfo.LocationCode,
                    TaskState = (int)TaskOutStatusEnum.OutNew,
                    TaskType = (int)TaskOutboundTypeEnum.OutFireAlarm,
                    TargetAddress = station.stationLocation,
                    NextAddress = station.stationLocation,
                    TaskNum = taskNum, //_taskRepository.GetTaskNo().Result,
                    TaskId = 0,
                };
                // 尝试添加新任务
                WMSTaskDTO taskDTO = new WMSTaskDTO()
                {
                    TaskNum = task.TaskNum.Value,
                    Grade = 1,
                    PalletCode = task.PalletCode,
                    RoadWay = task.Roadway,
                    SourceAddress = task.SourceAddress,
                    TargetAddress = task.TargetAddress,
                    TaskState = task.TaskState.Value,
                    Id = 0,
                    TaskType = task.TaskType,
                };
                var configs = _configService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
                var ipAddress = configs.FirstOrDefault(x => x.ConfigKey == SysConfigConst.WCSIPAddress)?.ConfigValue;
                var ReceiveByWMSFireAlarmTask = configs.FirstOrDefault(x => x.ConfigKey == SysConfigConst.ReceiveByWMSFireAlarmTask)?.ConfigValue;
                if (ReceiveByWMSFireAlarmTask == null || ipAddress == null)
                {
                    throw new Exception("WMS IP 未配置");
                }
                var wmsIpAddrss = ipAddress + ReceiveByWMSFireAlarmTask;
                List<WMSTaskDTO> taskDTOs = new List<WMSTaskDTO>();
                taskDTOs.Add(taskDTO);
                var respon = HttpHelper.Post(wmsIpAddrss, JsonConvert.SerializeObject(taskDTOs));
                if (respon != null)
                {
                    WebResponseContent respone = JsonConvert.DeserializeObject<WebResponseContent>(respon.ToString());
                    if (respone.Status)
                    {
                        var taskId = BaseDal.AddData(task);
                    }
                    else
                    {
                        throw new Exception("WCS处理失败:" + respone.Message);
                    }
                }
                else
                {
                    throw new Exception("请求处理失败");
                }
            }
            LogFactory.GetLog("DTS火警出库").Info(true, $"\r\r--------------------------------------");
            LogFactory.GetLog("DTS火警出库").Info(true, obj.ToJsonString());