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 { public partial class MCSService { /// /// 请求移库 /// /// /// public WebResponseContent RequestChangeLocation(object json) { WebResponseContent content = new WebResponseContent(); try { if (string.IsNullOrEmpty(json.ToString())) throw new Exception("请求参数为空"); var result = JsonConvert.DeserializeObject(json.ToString()); 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.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(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(respon.ToString()); if (respone.Status) { var taskId = _taskRepository.AddData(task); } else { throw new Exception("WCS处理失败:" + respone.Message); } } else { throw new Exception("WCS处理失败"); } } } }