using Newtonsoft.Json; using SharpCompress.Compressors.Xz; using System.Reflection.Emit; using WIDESEA_Common; using WIDESEA_Common.LevelChange; using WIDESEA_Core; using WIDESEA_Core.Const; using WIDESEA_Core.Enums; using WIDESEA_Core.Helper; using WIDESEA_DTO.WMS; using WIDESEA_Model.Models; using WIDESEA_Model.Models.GZ_ZC.DistributeWheels; using WIDESEA_StorageBasicRepository; using WIDESEA_StorageBasicService; namespace WIDESEA_StoragIntegrationServices { public partial class ToAPPService { /// /// 保存车轴数据 /// /// /// public WebResponseContent SaveCZInfo(SaveModel saveModel) { WebResponseContent content = new WebResponseContent(); try { //如当前存在未开始入库的车轮或制动盘数据,则禁止保存新数据 以防数据混乱 var waitInbound = _CZInfo_MesRepository.QueryFirst(x => x.CurrentStatue == "0"); if (waitInbound != null) throw new Exception("当前存在未开始入库的车轴数据,请先上架启动后再保存信息!"); //车轴条码 string czCode = saveModel.MainData["cztm"].ToString(); if (string.IsNullOrEmpty(czCode)) throw new Exception($"车轴条码不能为空"); //车轴号 string czh = saveModel.MainData["czh"].ToString(); if (string.IsNullOrEmpty(czh)) throw new Exception($"车轴号不能为空"); //var clinfo = _InWheels_MesRepository.QueryFirst(x => x.Wheels_code == czCode); //if (clinfo != null) throw new Exception("车轮录入信息已存在"); //序列号 //string madeUnit = saveModel.MainData["xlh"].ToString(); //轮对条码 string ldtm = saveModel.MainData["ldtm"].ToString(); //车型 string Cartype = saveModel.MainData["chexing"].ToString(); if (string.IsNullOrEmpty(Cartype)) throw new Exception("选配失败:车轴车型参数为空"); //车轴型号 string czxh = saveModel.MainData["czxh"].ToString(); //车轮型号 string clxh = saveModel.MainData["clxh"].ToString(); //动拖属性 string mttype = saveModel.MainData["mttype"].ToString(); //左轮座直径A1 string zlzA1 = saveModel.MainData["zlzA1"].ToString(); //左轮座直径A1 string zlzA2 = saveModel.MainData["zlzA2"].ToString(); //左轮座直径A1 string zlzA3 = saveModel.MainData["zlzA3"].ToString(); //左轮座直径A string zlzA = saveModel.MainData["zlza"].ToString(); //左轮座直径B1 string zlzB1 = saveModel.MainData["zlzB1"].ToString(); //左轮座直径B1 string zlzB2 = saveModel.MainData["zlzB2"].ToString(); //左轮座直径B1 string zlzB3 = saveModel.MainData["zlzB3"].ToString(); //左轮座直径B string zlzB = saveModel.MainData["zlzb"].ToString(); //左轮座直径C1 string zlzC1 = saveModel.MainData["zlzC1"].ToString(); //左轮座直径C1 string zlzC2 = saveModel.MainData["zlzC2"].ToString(); //左轮座直径C1 string zlzC3 = saveModel.MainData["zlzC3"].ToString(); //左轮座直径C string zlzC = saveModel.MainData["zlzc"].ToString(); //右轮座直径A1 string ylzA1 = saveModel.MainData["ylzA1"].ToString(); //右轮座直径A1 string ylzA2 = saveModel.MainData["ylzA2"].ToString(); //右轮座直径A1 string ylzA3 = saveModel.MainData["ylzA3"].ToString(); //右轮座直径A string ylzA = saveModel.MainData["ylza"].ToString(); //右轮座直径B1 string ylzB1 = saveModel.MainData["ylzB1"].ToString(); //右轮座直径B1 string ylzB2 = saveModel.MainData["ylzB2"].ToString(); //右轮座直径B1 string ylzB3 = saveModel.MainData["ylzB3"].ToString(); //右轮座直径B string ylzB = saveModel.MainData["ylzb"].ToString(); //右轮座直径C1 string ylzC1 = saveModel.MainData["ylzC1"].ToString(); //右轮座直径C1 string ylzC2 = saveModel.MainData["ylzC2"].ToString(); //右轮座直径C1 string ylzC3 = saveModel.MainData["ylzC3"].ToString(); //右轮座直径C string ylzC = saveModel.MainData["ylzc"].ToString(); //左轮座直径 string zlzzj = saveModel.MainData["zlzzj"].ToString(); //右轮座直径 string ylzzj = saveModel.MainData["ylzzj"].ToString(); //新旧 string newOrOld = saveModel.MainData["NOdirection"].ToString(); if (string.IsNullOrEmpty(newOrOld)) throw new Exception("未选择新旧类型,请选择!"); //车轮位置 string wheelsPosition = saveModel.MainData["wheelsPosition"].ToString(); if (string.IsNullOrEmpty(wheelsPosition)) throw new Exception("未选择车轮位置,请选择!"); //左轮等级 string leftLevel = saveModel.MainData["zlzdj"].ToString(); if (string.IsNullOrEmpty(leftLevel)) throw new Exception("选配失败:车轴左轮座等级参数为空"); //右轮等级 string rightLevel = saveModel.MainData["ylzdj"].ToString(); if (string.IsNullOrEmpty(rightLevel)) throw new Exception("选配失败:车轴右轮座等级参数为空"); //维修任务 string wxrw = saveModel.MainData["wxrw"].ToString(); if (string.IsNullOrEmpty(wxrw)) throw new Exception("选配失败:维修任务参数为空"); string level = string.Empty; //string rightlevel = string.Empty; if ("all".Equals(wheelsPosition)) { level = LevelChangeHelper.LevelChangeType(leftLevel); if (string.IsNullOrEmpty(level)) throw new Exception("等级转换失败,请检查接口等级参数"); } else if ("left".Equals(wheelsPosition)) { level = LevelChangeHelper.LevelChangeType(leftLevel); if (string.IsNullOrEmpty(level)) throw new Exception("等级转换失败,请检查接口等级参数"); //level = leftLevel; } else if ("right".Equals(wheelsPosition)) { level = LevelChangeHelper.LevelChangeType(rightLevel); if (string.IsNullOrEmpty(level)) throw new Exception("等级转换失败,请检查接口等级参数"); //level = rightLevel; } string rw = CheckTaskChangeHelper.CheckTaskChange(wxrw); if (string.IsNullOrEmpty(rw)) throw new Exception("维修任务转换失败,请检查维修任务参数"); if (rw != newOrOld) throw new Exception("选配失败:选配新旧轮与维修任务解析不一致"); Dt_SelectionStandards selectionStandards = _SelectionStandardsRepository.QueryFirst(x => x.CarType.Contains(Cartype) && x.mttype == mttype && x.neworold == newOrOld && level.Contains(x.gkdj)); if (selectionStandards == null) throw new Exception($"此车型{Cartype}的选配标准异常,请核对选配标准信息!"); Dt_CZInfo_mes CZInfo_Mes = new Dt_CZInfo_mes { CZTM = czCode, CHEXING = Cartype, CreateDate = DateTime.Now, Creater = "admin", CurrentStatue = "1", CZH = czh, CZXH = czxh, LDTM = ldtm, MTTYPE = mttype, ZLZA1 = zlzA1, ZLZA2 = zlzA2, ZLZA3 = zlzA3, ZLZA = zlzA, ZLZB1 = zlzB1, ZLZB2 = zlzB2, ZLZB3 = zlzB3, ZLZB = zlzB, ZLZC1 = zlzC1, ZLZC2 = zlzC2, ZLZC3 = zlzC3, ZLZC = zlzC, YLZA1 = ylzA1, YLZA2 = ylzA2, YLZA3 = ylzA3, YLZA = ylzA, YLZB1 = ylzB1, YLZB2 = ylzB2, YLZB3 = ylzB3, YLZB = ylzB, YLZC1 = ylzC1, YLZC2 = ylzC2, YLZC3 = ylzC3, YLZC = ylzC, ZLZZJ = zlzzj, YLZZJ = ylzzj, ZLZDJ = leftLevel, YLZDJ = rightLevel, WXRW = wxrw }; //左出库车轮 Dt_WheelsStock leftContainer = null; //右出库车轮 Dt_WheelsStock rightContainer = null; //同温时间 var hourpara = _configService.GetByConfigKey(CateGoryConst.CONFIG_SYS_Parameters, SysConfigConst.TempHour); int hour = hourpara.ConfigValue.ObjToInt(); //找出所有符合条件的库存车轮 var WheelsList = _WheelsStockRepository.QueryData(x => x.Wheels_CurrentStatue == 1 && x.Wheels_mttype == CZInfo_Mes.MTTYPE && x.Wheels_ldxh == clxh && x.Wheels_NewOrOld == newOrOld && x.CreateDate.AddHours(hour) <= DateTime.Now); //x.Wheels_CarType == CZInfo_Mes.CHEXING && x.Wheels_ldtm == CZInfo_Mes.LDTM && selectionStandards.CarType.Contains(x.Wheels_CarType) if (null != WheelsList && WheelsList.Count > 0) { if ("all".Equals(wheelsPosition) || string.IsNullOrEmpty(wheelsPosition)) { if (null == leftContainer) { leftContainer = _WheelsStockService.GetSelectionWheelsStock(WheelsList, selectionStandards, CZInfo_Mes, "left", newOrOld); if (null != leftContainer) WheelsList.Remove(leftContainer); } if (null == rightContainer) { rightContainer = _WheelsStockService.GetSelectionWheelsStock(WheelsList, selectionStandards, CZInfo_Mes, "right", newOrOld); if (null != rightContainer) WheelsList.Remove(rightContainer); } //if (null == leftContainer || null == rightContainer) } else if ("left".Equals(wheelsPosition)) { leftContainer = _WheelsStockService.GetSelectionWheelsStock(WheelsList, selectionStandards, CZInfo_Mes, "left", newOrOld); //if (null == leftContainer) } else if ("right".Equals(wheelsPosition)) { rightContainer = _WheelsStockService.GetSelectionWheelsStock(WheelsList, selectionStandards, CZInfo_Mes, "right", newOrOld); //if (null == rightContainer) } } if ("all".Equals(wheelsPosition)) { if (null == leftContainer || null == rightContainer) return content.Error("未找到两侧可匹配的出库车轮,车型:" + Cartype); } if (null != leftContainer || null != rightContainer) { List listTask = new List(); List locationInfos = new List(); List wheelsStocks = new List(); List listTaskDTO = new List(); if (null != leftContainer) { Dt_Task leftTask = CreateOutTask(leftContainer, czCode); leftContainer.Wheels_CurrentStatue = 2; DtLocationInfo lefolocation = _locationRepository.QueryFirst(x => x.LocationCode == leftContainer.Wheels_Location); lefolocation.LocationStatus = (int)LocationEnum.InStockDisable; //int taskNum = _taskRepository.GetTaskNo().Result; //Dt_Task leftTask = new Dt_Task //{ // CreateDate = DateTime.Now, // Creater = "admin", // CurrentAddress = leftContainer.Wheels_Location, // Dispatchertime = DateTime.Now, // Grade = 1, // IsCheck = true, // NextAddress = "2010", // PalletCode = leftContainer.Wheels_code, // Roadway = "SC1", // SourceAddress = leftContainer.Wheels_Location, // TargetAddress = "2021", // TaskNum = taskNum, // TaskState = (int)TaskOutStatusEnum.OutNew, // TaskType = (int)TaskOutboundTypeEnum.OutWheels //}; WMSTaskDTO leftTaskDTO = new WMSTaskDTO { IsCheck = true, Grade = 1, RoadWay = "SC1", PalletCode = leftContainer.Wheels_Num, SourceAddress = leftContainer.Wheels_Location, TargetAddress = "2021", TaskNum = leftTask.TaskNum.Value, TaskState = (int)TaskOutStatusEnum.OutNew, TaskType = (int)TaskOutboundTypeEnum.OutWheels, CarType = leftContainer.Wheels_CarType, WheelsNewOrOld = leftContainer.Wheels_NewOrOld, wheels_gkcc = leftContainer.Wheels_gkcc, wheels_mttype = leftContainer.Wheels_mttype, WheelsLX = leftContainer.Wheels_ldxh }; listTask.Add(leftTask); listTaskDTO.Add(leftTaskDTO); wheelsStocks.Add(leftContainer); locationInfos.Add(lefolocation); } if (null != rightContainer) { Dt_Task rightTask = CreateOutTask(rightContainer, czCode); rightContainer.Wheels_CurrentStatue = 2; DtLocationInfo rightlocation = _locationRepository.QueryFirst(x => x.LocationCode == rightContainer.Wheels_Location); rightlocation.LocationStatus = (int)LocationEnum.InStockDisable; //int rightTaskNum = _taskRepository.GetTaskNo().Result; //Dt_Task rightTask = new Dt_Task //{ // CreateDate = DateTime.Now, // Creater = "admin", // CurrentAddress = rightContainer.Wheels_Location, // Dispatchertime = DateTime.Now, // Grade = 1, // IsCheck = true, // NextAddress = "2010", // PalletCode = rightContainer.Wheels_code, // Roadway = "SC1", // SourceAddress = rightContainer.Wheels_Location, // TargetAddress = "2021", // TaskNum = rightTaskNum, // TaskState = (int)TaskOutStatusEnum.OutNew, // TaskType = (int)TaskOutboundTypeEnum.OutWheels, //}; WMSTaskDTO rihgtTaskDTO = new WMSTaskDTO { IsCheck = true, Grade = 1, RoadWay = "SC1", PalletCode = rightContainer.Wheels_Num, SourceAddress = rightContainer.Wheels_Location, TargetAddress = "2021", TaskNum = rightTask.TaskNum.Value, TaskState = (int)TaskOutStatusEnum.OutNew, TaskType = (int)TaskOutboundTypeEnum.OutWheels, CarType = rightContainer.Wheels_CarType, WheelsNewOrOld = rightContainer.Wheels_NewOrOld, wheels_gkcc = rightContainer.Wheels_gkcc, wheels_mttype = rightContainer.Wheels_mttype, WheelsLX = rightContainer.Wheels_ldxh }; listTask.Add(rightTask); listTaskDTO.Add(rihgtTaskDTO); wheelsStocks.Add(rightContainer); locationInfos.Add(rightlocation); } _unitOfWorkManage.BeginTran(); //开启事务 _CZInfo_MesRepository.AddData(CZInfo_Mes); //添加车轴信息 _WheelsStockRepository.UpdateData(wheelsStocks); //更新库存数据 _locationRepository.UpdateData(locationInfos); //更新库位数据 _taskRepository.AddData(listTask); //添加任务数据 if(leftContainer != null) { _AxleshelfService.AddAxleshe(leftContainer, CZInfo_Mes,clxh, wheelsPosition, newOrOld); //添加车轴上架记录 } if (rightContainer != null) { _AxleshelfService.AddAxleshe(rightContainer, CZInfo_Mes,clxh,wheelsPosition,newOrOld); //添加车轴上架记录 } //下发出库任务给WCS 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.ReceiveTask)?.ConfigValue; if (ReceiveByWMSTask == null || ipAddress == null) { throw new Exception("WMS IP 未配置"); } var wmsIpAddrss = ipAddress + ReceiveByWMSTask; var respon = HttpHelper.Post(wmsIpAddrss, JsonConvert.SerializeObject(listTaskDTO)); //http://localhost:9291/api/Task/ReceiveTask, if (respon != null) { WebResponseContent respone = JsonConvert.DeserializeObject(respon.ToString()); if (respone.Status) { _unitOfWorkManage.CommitTran(); //提交事务 content.OK($"车轮出库任务下发给WCS成功."); } else { _unitOfWorkManage.RollbackTran(); //回滚事务 content.Error($"车轮出库任务下发给WCS失败,原因 => {content.Message}"); } } else { _unitOfWorkManage.RollbackTran(); //回滚事务 throw new Exception("WCS处理失败"); } _unitOfWorkManage.CommitTran(); //提交事务 content.OK($"车轮出库任务下发给WCS成功."); return content; } else { _unitOfWorkManage.RollbackTran(); //回滚事务 return content.Error("未找到可匹配的出库车轮,车型:" + Cartype); } } catch (Exception ex) { _unitOfWorkManage.RollbackTran(); return content.Error($"上架失败:{ex.Message}"); } } private Dt_Task CreateOutTask(Dt_WheelsStock wheelsStock, string CZTM) { CheckInfo checkInfo = new CheckInfo() { CarType = wheelsStock.Wheels_CarType, MTType = wheelsStock.Wheels_mttype, CheckType = wheelsStock.Wheels_Type == "1" ? "1" : "2", HubLevel = wheelsStock.Wheels_level.Contains("等级") ? wheelsStock.Wheels_level.Replace("等级", "") : "0", CLTM = wheelsStock.Wheels_Num, IsCheck = true, Standards = wheelsStock.Wheels_NewOrOld }; Dt_Task task = new Dt_Task() { IsCheck = true, CreateDate = DateTime.Now, CarType = wheelsStock.Wheels_CarType, wheels_gkcc = wheelsStock.Wheels_gkcc, Grade = 1, CurrentAddress = wheelsStock.Wheels_Location, SourceAddress = wheelsStock.Wheels_Location, Creater = "System", Dispatchertime = DateTime.Now, PalletCode = wheelsStock.Wheels_Num, Roadway = "SC1", TaskNum = _taskRepository.GetTaskNo().Result, NextAddress = "2010", TargetAddress = "2021", TaskState = (int)TaskOutStatusEnum.OutNew, TaskType = (int)TaskOutboundTypeEnum.OutWheels, task_CZInfo = CZTM, task_bak1 = JsonConvert.SerializeObject(checkInfo), WheelsLX = wheelsStock.Wheels_ldxh, wheels_mttype = wheelsStock.Wheels_mttype, WheelsNewOrOld = wheelsStock.Wheels_NewOrOld }; return task; } } }