|  |  |  | 
|---|
|  |  |  | 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.Text; | 
|---|
|  |  |  | 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; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | namespace WIDESEA_StoragIntegrationServices | 
|---|
|  |  |  | { | 
|---|
|  |  |  | 
|---|
|  |  |  | 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 (result.MoveType == 5) Console.WriteLine($"分容检测柜火警触发:库位{result.LocationID}"); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | var location = _locationRepository.QueryFirst(x => x.AreaId == result.LocationArea && x.LocationCode == result.LocationID); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (location == null) throw new Exception("未知库位"); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (_taskRepository.QueryFirst(x => x.SourceAddress == result.LocationID && x.Roadway == location.RoadwayNo) != null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | 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(x => x.LocationCode == location.LocationCode && x.LocationInfo.RoadwayNo == location.RoadwayNo); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 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处理失败"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|