|  |  | 
 |  |  | using Newtonsoft.Json; | 
 |  |  | using AngleSharp.Dom; | 
 |  |  | using log4net.Core; | 
 |  |  | using Masuit.Tools; | 
 |  |  | using Newtonsoft.Json; | 
 |  |  | using System; | 
 |  |  | using System.Collections.Generic; | 
 |  |  | using System.Linq; | 
 |  |  | 
 |  |  | using System.Threading.Tasks; | 
 |  |  | using WIDESEA_Common; | 
 |  |  | using WIDESEA_Core; | 
 |  |  | using WIDESEA_Core.Const; | 
 |  |  | using WIDESEA_Core.Enums; | 
 |  |  | using WIDESEA_Core.Helper; | 
 |  |  | using WIDESEA_DTO; | 
 |  |  | using WIDESEA_DTO.WMS; | 
 |  |  | using WIDESEA_Model.Models; | 
 |  |  | 
 |  |  |             WebResponseContent content = new WebResponseContent(); | 
 |  |  |             try | 
 |  |  |             { | 
 |  |  |                 if (string.IsNullOrEmpty(json.ToString())) throw new Exception("上传参数为空"); | 
 |  |  |                 if (string.IsNullOrEmpty(json.ToString())) throw new Exception("请求参数为空"); | 
 |  |  |  | 
 |  |  |                 var result = JsonConvert.DeserializeObject<RequestReMove>(json.ToString()); | 
 |  |  |  | 
 |  |  | 
 |  |  |  | 
 |  |  |                 if (location == null) throw new Exception("未知库位"); | 
 |  |  |  | 
 |  |  |                 if (result.MoveType == 5) | 
 |  |  |                 if (_taskRepository.QueryFirst(x => x.SourceAddress == result.LocationID && x.Roadway == location.RoadwayNo) != null) | 
 |  |  |                 { | 
 |  |  |                     Console.WriteLine($"分容检测柜火警触发:库位{result.LocationID}"); | 
 |  |  |  | 
 |  |  |                     //查找消防站台 | 
 |  |  |                     var station = _stationManagerRepository.QueryFirst(t => t.Roadway == location.RoadwayNo | 
 |  |  |                          && t.stationType == (int)StationManager.FireStation | 
 |  |  |                          /*&& t. == "Enable"*/); | 
 |  |  |                     if (station == null) | 
 |  |  |                     { | 
 |  |  |                         throw new Exception("消防站台未配置!"); | 
 |  |  |                     } | 
 |  |  |                     //查找库存信息 | 
 |  |  |                     var barcodeData = _stockInfoRepository.QueryFirst(t => t.LocationCode == location.LocationCode); | 
 |  |  |                     //托盘码 | 
 |  |  |                     string barcode = string.Empty; | 
 |  |  |                     if (barcodeData != null) | 
 |  |  |                     { | 
 |  |  |                         barcode = barcodeData.PalletCode; | 
 |  |  |                     } | 
 |  |  |                     else | 
 |  |  |                     { | 
 |  |  |                         //无库存信息,生成随机托盘码 | 
 |  |  |                         barcode = "M" + DateTime.Now.ToString("MMddHHmmss") + "-" + new Random().Next(100, 1000); | 
 |  |  |                     } | 
 |  |  |                     int taskNum = _taskRepository.GetTaskNo().Result; | 
 |  |  |                     Dt_Task task = new Dt_Task | 
 |  |  |                     { | 
 |  |  |                         CreateDate = DateTime.Now, | 
 |  |  |                         Creater = "HK", | 
 |  |  |                         CurrentAddress = result.LocationID, | 
 |  |  |                         Grade = 1, | 
 |  |  |                         Dispatchertime = DateTime.Now, | 
 |  |  |                         PalletCode = result.PalletBarcode, | 
 |  |  |                         Roadway = location.RoadwayNo, | 
 |  |  |                         SourceAddress = result.LocationID, | 
 |  |  |                         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, | 
 |  |  |                     }; | 
 |  |  |                     throw new Exception("当前库位已存在任务"); | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 switch (result.MoveType) | 
 |  |  |                 { | 
 |  |  |                     case 1: | 
 |  |  |                         CreateMoveTask(location); | 
 |  |  |                         break; | 
 |  |  |                     case 5: | 
 |  |  |                         CreateFireTask(location); | 
 |  |  |                         break; | 
 |  |  |                     default: | 
 |  |  |                         throw new Exception("无效的移库申请类型"); | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 #region 火警出库 | 
 |  |  |                 //if (result.MoveType == 5) | 
 |  |  |                 //{ | 
 |  |  |                 //    Console.WriteLine($"分容检测柜火警触发:库位{result.LocationID}"); | 
 |  |  |  | 
 |  |  |                 //    //查找消防站台 | 
 |  |  |                 //    var station = _stationManagerRepository.QueryFirst(t => t.Roadway == location.RoadwayNo | 
 |  |  |                 //         && t.stationType == (int)StationManager.FireStation | 
 |  |  |                 //         /*&& t. == "Enable"*/); | 
 |  |  |                 //    if (station == null) | 
 |  |  |                 //    { | 
 |  |  |                 //        throw new Exception("消防站台未配置!"); | 
 |  |  |                 //    } | 
 |  |  |                 //    //查找库存信息 | 
 |  |  |                 //    var barcodeData = _stockInfoRepository.QueryFirst(t => t.LocationCode == location.LocationCode); | 
 |  |  |                 //    //托盘码 | 
 |  |  |                 //    string barcode = string.Empty; | 
 |  |  |                 //    if (barcodeData != null) | 
 |  |  |                 //    { | 
 |  |  |                 //        barcode = barcodeData.PalletCode; | 
 |  |  |                 //    } | 
 |  |  |                 //    else | 
 |  |  |                 //    { | 
 |  |  |                 //        //无库存信息,生成随机托盘码 | 
 |  |  |                 //        barcode = "M" + DateTime.Now.ToString("MMddHHmmss") + "-" + new Random().Next(100, 1000); | 
 |  |  |                 //    } | 
 |  |  |                 //    int taskNum = _taskRepository.GetTaskNo().Result; | 
 |  |  |                 //    Dt_Task task = new Dt_Task | 
 |  |  |                 //    { | 
 |  |  |                 //        CreateDate = DateTime.Now, | 
 |  |  |                 //        Creater = "HK", | 
 |  |  |                 //        CurrentAddress = result.LocationID, | 
 |  |  |                 //        Grade = 1, | 
 |  |  |                 //        Dispatchertime = DateTime.Now, | 
 |  |  |                 //        PalletCode = barcode, | 
 |  |  |                 //        Roadway = location.RoadwayNo, | 
 |  |  |                 //        SourceAddress = result.LocationID, | 
 |  |  |                 //        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, | 
 |  |  |                 //    }; | 
 |  |  |                 //}  | 
 |  |  |                 #endregion | 
 |  |  |  | 
 |  |  |                 LogFactory.GetLog("分容移库申请").Info(true, $"\r\r--------------------------------------"); | 
 |  |  |                 LogFactory.GetLog("分容移库申请").Info(true, result); | 
 |  |  |                 LogFactory.GetLog("分容移库申请").Info(true, result.ToJsonString()); | 
 |  |  |                 return content.OK(); | 
 |  |  |             } | 
 |  |  |             catch (Exception ex) | 
 |  |  |             { | 
 |  |  |                 LogFactory.GetLog("分容移库申请").Info(true, $"\r\r--------------------------------------"); | 
 |  |  |                 LogFactory.GetLog("分容移库申请").Info(true, ex.Message); | 
 |  |  |                 return content.Error(ex.Message); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         private void CreateMoveTask(DtLocationInfo location) | 
 |  |  |         { | 
 |  |  |             Console.WriteLine($"分容申请移库:库位{location.LocationCode}"); | 
 |  |  |  | 
 |  |  |             //查找可用库位 | 
 |  |  |             DtLocationInfo CanRelocation = _locationRepository.QueryFirst(x => x.LocationStatus == (int)LocationEnum.Free && x.RoadwayNo == location.RoadwayNo && x.EnalbeStatus == 1 && x.LocationType == 2 && x.Remark == "1"); | 
 |  |  |  | 
 |  |  |             if (CanRelocation == null) throw new Exception("申请移库失败:无可用库位"); | 
 |  |  |  | 
 |  |  |             //查找库存信息 | 
 |  |  |             var stockInfo = _stockInfoRepository.QueryFirst(t => t.LocationCode == location.LocationCode); | 
 |  |  |  | 
 |  |  |             if (stockInfo == null) throw new Exception("申请移库失败:无库存记录"); | 
 |  |  |  | 
 |  |  |             //修改移库目标库位状态 | 
 |  |  |             CanRelocation.LocationStatus = (int)LocationEnum.FreeDisable; | 
 |  |  |  | 
 |  |  |             int taskNum = _taskRepository.GetTaskNo().Result; | 
 |  |  |             Dt_Task task = new Dt_Task | 
 |  |  |             { | 
 |  |  |                 CreateDate = DateTime.Now, | 
 |  |  |                 Creater = "HK", | 
 |  |  |                 CurrentAddress = location.LocationCode, | 
 |  |  |                 Grade = 1, | 
 |  |  |                 Dispatchertime = DateTime.Now, | 
 |  |  |                 PalletCode = stockInfo.PalletCode, | 
 |  |  |                 Roadway = location.RoadwayNo, | 
 |  |  |                 SourceAddress = location.LocationCode, | 
 |  |  |                 TaskState = (int)TaskStatus.Created, | 
 |  |  |                 TaskType = (int)TaskRelocationTypeEnum.Relocation, | 
 |  |  |                 TargetAddress = CanRelocation.LocationCode, | 
 |  |  |                 NextAddress = CanRelocation.LocationCode, | 
 |  |  |                 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 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));   //http://localhost:9291/api/Task/ReceiveTask, | 
 |  |  |             if (respon != null) | 
 |  |  |             { | 
 |  |  |                 WebResponseContent respone = JsonConvert.DeserializeObject<WebResponseContent>(respon.ToString()); | 
 |  |  |                 if (respone.Status) | 
 |  |  |                 { | 
 |  |  |                     //添加WMS任务 并修改库位状态 | 
 |  |  |                     var taskId = _taskRepository.AddData(task); | 
 |  |  |                     _locationRepository.UpdateData(CanRelocation); | 
 |  |  |                 } | 
 |  |  |                 else | 
 |  |  |                 { | 
 |  |  |                     throw new Exception("WCS处理失败:" + respone.Message); | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |             else | 
 |  |  |             { | 
 |  |  |                 throw new Exception("WCS处理失败"); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |         private void CreateFireTask(DtLocationInfo location) | 
 |  |  |         { | 
 |  |  |             Console.WriteLine($"分容检测柜火警触发:库位{location.LocationCode}"); | 
 |  |  |  | 
 |  |  |             //查找消防站台 | 
 |  |  |             var station = _stationManagerRepository.QueryFirst(t => t.Roadway == location.RoadwayNo | 
 |  |  |                  && t.stationType == (int)StationManager.FireStation | 
 |  |  |                  /*&& t. == "Enable"*/); | 
 |  |  |             if (station == null) | 
 |  |  |             { | 
 |  |  |                 throw new Exception("消防站台未配置!"); | 
 |  |  |             } | 
 |  |  |             //查找库存信息 | 
 |  |  |             var barcodeData = _stockInfoRepository.QueryFirst(t => t.LocationCode == location.LocationCode); | 
 |  |  |             //托盘码 | 
 |  |  |             string barcode = string.Empty; | 
 |  |  |             if (barcodeData != null) | 
 |  |  |             { | 
 |  |  |                 barcode = barcodeData.PalletCode; | 
 |  |  |             } | 
 |  |  |             else | 
 |  |  |             { | 
 |  |  |                 //无库存信息,生成随机托盘码 | 
 |  |  |                 barcode = "M" + DateTime.Now.ToString("MMddHHmmss") + "-" + new Random().Next(100, 1000); | 
 |  |  |             } | 
 |  |  |             int taskNum = _taskRepository.GetTaskNo().Result; | 
 |  |  |             Dt_Task task = new Dt_Task | 
 |  |  |             { | 
 |  |  |                 CreateDate = DateTime.Now, | 
 |  |  |                 Creater = "HK", | 
 |  |  |                 CurrentAddress = location.LocationCode, | 
 |  |  |                 Grade = 1, | 
 |  |  |                 Dispatchertime = DateTime.Now, | 
 |  |  |                 PalletCode = barcode, | 
 |  |  |                 Roadway = location.RoadwayNo, | 
 |  |  |                 SourceAddress = location.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));   //http://localhost:9291/api/Task/ReceiveTask, | 
 |  |  |             if (respon != null) | 
 |  |  |             { | 
 |  |  |                 WebResponseContent respone = JsonConvert.DeserializeObject<WebResponseContent>(respon.ToString()); | 
 |  |  |                 if (respone.Status) | 
 |  |  |                 { | 
 |  |  |                     var taskId = _taskRepository.AddData(task); | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 else | 
 |  |  |                 { | 
 |  |  |                     throw new Exception("WCS处理失败:" + respone.Message); | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |             else | 
 |  |  |             { | 
 |  |  |                 throw new Exception("WCS处理失败"); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  | } |