| | |
| | | using HH.WCS.Hexafluo; |
| | | using HH.WCS.Hexafluo.device; |
| | | using HH.WCS.Hexafluo.dispatch; |
| | | using HH.WCS.Hexafluo.process; |
| | | using HH.WCS.Hexafluo.util; |
| | | using HH.WCS.Hexafluo.wms; |
| | | using HH.WCS.SJML.Comm; |
| | |
| | | } |
| | | var chi = new SqlHelper<object>().GetInstance(); |
| | | var newDb = chi.CopyNew(); |
| | | List<string> AreaLo = new List<string>() { "TCXB", "TTXB", "NCXB", "DSXB", "TMXB", "TQXB", "TQJT" }; |
| | | WMSTask PritTask = null; |
| | | //查询是否是相关库区 |
| | | if (executeStatePara.transportTask.S_TYPE == "出库" && AreaLo.Contains(executeStatePara.transportTask.S_END_LAREA)) |
| | | { |
| | | LogHelper.TaskDetail(logPara, "更新任务优先级-任务号:" + executeStatePara.transportTask.S_TASK_NO + " 终点库区是否等于DSXB 本任务:" + executeStatePara.transportTask.S_END_LAREA); |
| | | //查询配制表 |
| | | var transportTask = newDb.Queryable<ConfigJsonEntitys>().Where(e => e.Autoindex == executeStatePara.transportTask.S_END_LAREA + "-送满取空")?.First(); |
| | | if (transportTask != null) |
| | | { |
| | | var ListString = JsonConvert.DeserializeObject<List<ConfigValueList>>(transportTask.TypeJson); |
| | | if (ListString != null && ListString.Count > 0) |
| | | { |
| | | var Strin = ListString.Find(e => e.LocationCode1 == executeStatePara.transportTask.S_END_LOC); |
| | | LogHelper.TaskDetail(logPara, "更新任务优先级-任务号:" + executeStatePara.transportTask.S_TASK_NO + "是否匹配到了队友的货位信息" + JsonConvert.SerializeObject(Strin)); |
| | | if (Strin != null) |
| | | { |
| | | //查询旁边的货位是否有已推送但是没执行的任务 |
| | | var SfgLo = newDb.Queryable<WMSTask>().Where(e => e.S_START_LOC == Strin.LocationCode2 && e.S_NOTE.Equals("agv任务") && (e.S_B_STATE == "已推送" || e.S_B_STATE == "执行中"))?.First(); |
| | | LogHelper.TaskDetail(logPara, "更新任务优先级-任务号:" + executeStatePara.transportTask.S_TASK_NO + "匹配到的货位 是否存在 是agv任务 并且任务上已推送" + JsonConvert.SerializeObject(SfgLo)); |
| | | if (SfgLo != null)//有这个任务 |
| | | { |
| | | var Agvstr = NDCHelper.ChangeParamPri(SfgLo.S_TASK_NO, 60); |
| | | LogHelper.TaskDetail(logPara, "更新任务优先级-任务号:" + SfgLo.S_TASK_NO + "优先级为:" + 60 + " 是否成功 :" + Agvstr); |
| | | PritTask = SfgLo; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | try |
| | | { |
| | | LogHelper.TaskDetail(logPara, "更新任务状态 事务开始:" + executeStatePara.transportTask.S_TASK_NO); |
| | |
| | | { |
| | | throw new Exception("更新任务状态失败"); |
| | | } |
| | | if (PritTask != null) |
| | | { |
| | | // var ddd = executeStatePara.transportTaskSrc.Select(e => e.S_ID).ToList(); |
| | | var ggj = newDb.Updateable<WMSTask>().SetColumns(it => new WMSTask() { N_PRIORITY = 40 }).Where(e => e.S_ID == PritTask.S_ID).ExecuteCommand(); |
| | | LogHelper.TaskDetail(logPara, "更新任务优先级-任务号:" + PritTask.S_TASK_NO + "优先级为:" + 40 + " 是否成功 改wms任务 影响行数:" + ggj); |
| | | } |
| | | |
| | | newDb.CommitTran(); |
| | | LogHelper.TaskDetail(logPara, "更新任务状态 事务结束:" + executeStatePara.transportTask.S_TASK_NO); |
| | | return OperateResult.Succeed(); |
| | |
| | | var newDb = chi.CopyNew(); |
| | | Location location2 = null; |
| | | List<ConfigValueList> ListValues = new List<ConfigValueList>(); |
| | | if (executeStatePara.startIsCurrentTask.S_NOTE == "智能空桶满托") |
| | | { |
| | | //查询配置表信息 |
| | | var transport = newDb.Queryable<ConfigJsonEntitys>().Where(e => e.Autoindex == "智能空桶缓存")?.First(); |
| | | if (transport != null) |
| | | { |
| | | ListValues = JsonConvert.DeserializeObject<List<ConfigValueList>>(transport.TypeJson); |
| | | if (ListValues.Count() > 0) |
| | | { |
| | | //查询出对应的空托缓存位 |
| | | var ggf = ListValues.Find(e => e.LocationCode1 == executeStatePara.transportTask.S_START_LOC); |
| | | if (ggf != null) |
| | | { |
| | | location2 = newDb.Queryable<Location>().Where(e => e.S_LOC_CODE == ggf.LocationCode2)?.First(); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | //if (executeStatePara.startIsCurrentTask.S_NOTE == "智能空桶满托") |
| | | //{ |
| | | // //查询配置表信息 |
| | | // var transport = newDb.Queryable<ConfigJsonEntitys>().Where(e => e.Autoindex == "智能空桶缓存")?.First(); |
| | | // if (transport != null) |
| | | // { |
| | | // ListValues = JsonConvert.DeserializeObject<List<ConfigValueList>>(transport.TypeJson); |
| | | // if (ListValues.Count() > 0) |
| | | // { |
| | | // //查询出对应的空托缓存位 |
| | | // var ggf = ListValues.Find(e => e.LocationCode1 == executeStatePara.transportTask.S_START_LOC); |
| | | // if (ggf != null) |
| | | // { |
| | | // location2 = newDb.Queryable<Location>().Where(e => e.S_LOC_CODE == ggf.LocationCode2)?.First(); |
| | | // } |
| | | // } |
| | | // } |
| | | //} |
| | | try |
| | | { |
| | | LogHelper.TaskDetail(logPara, "更新任务状态 事务开始:" + executeStatePara.transportTask.S_TASK_NO); |
| | |
| | | //} |
| | | //LogHelper.TaskDetail(logPara, "更新任务终点货位" + executeStatePara.transportTask.S_START_LOC + "的状态锁为无!"); |
| | | } |
| | | if (executeStatePara.transportTask.S_TYPE.Equals("入库") && executeStatePara.startIsCurrentTask.S_NOTE == "智能空桶满托") |
| | | { |
| | | if (location2 != null && (location2.N_CURRENT_NUM - 1 >= 0)) |
| | | { |
| | | I = newDb.Updateable<Location>().SetColumns(it => new Location() |
| | | { |
| | | T_MODIFY = DateTime.Now, |
| | | N_CURRENT_NUM = it.N_CURRENT_NUM - 1, |
| | | T_EMPTY_TIME = DateTime.Now |
| | | }).Where(x => x.S_LOC_CODE == location2.S_LOC_CODE).ExecuteCommand(); |
| | | if (I == 0) |
| | | { |
| | | throw new Exception("更新终点当前容量-1失败"); |
| | | } |
| | | } |
| | | } |
| | | //if (executeStatePara.transportTask.S_TYPE.Equals("入库") && executeStatePara.startIsCurrentTask.S_NOTE == "智能空桶满托") |
| | | //{ |
| | | // if (location2 != null && (location2.N_CURRENT_NUM - 1 >= 0)) |
| | | // { |
| | | // I = newDb.Updateable<Location>().SetColumns(it => new Location() |
| | | // { |
| | | // T_MODIFY = DateTime.Now, |
| | | // N_CURRENT_NUM = it.N_CURRENT_NUM - 1, |
| | | // T_EMPTY_TIME = DateTime.Now |
| | | // }).Where(x => x.S_LOC_CODE == location2.S_LOC_CODE).ExecuteCommand(); |
| | | // if (I == 0) |
| | | // { |
| | | // throw new Exception("更新终点当前容量-1失败"); |
| | | // } |
| | | // } |
| | | //} |
| | | if (executeStatePara.transportTask.S_TYPE.Equals("出库")) |
| | | { |
| | | //删除托盘产品关联 |
| | |
| | | } |
| | | var chi = new SqlHelper<object>().GetInstance(); |
| | | var newDb = chi.CopyNew(); |
| | | |
| | | List<string> AreaLo = new List<string>() { "TCXB", "TTXB", "NCXB", "DSXB", "TMXB", "TQXB", "TQJT" }; |
| | | WMSTask PritTask = null; |
| | | //查询是否是相关库区 |
| | | if (executeStatePara.transportTask.S_TYPE == "出库" && AreaLo.Contains(executeStatePara.transportTask.S_END_LAREA)) |
| | | { |
| | | LogHelper.TaskDetail(logPara, $"更新任务优先级-任务号:{executeStatePara.transportTask.S_TASK_NO} 终点库区是否包含{JsonConvert.SerializeObject(AreaLo)} 本任务:" + executeStatePara.transportTask.S_END_LAREA); |
| | | //查询配置文件 |
| | | var transportTask = STAttribute.GetValueTwo(executeStatePara.transportTask.S_END_LAREA + "-送满取空"); |
| | | if (transportTask != null) |
| | | { |
| | | var ListString = JsonConvert.DeserializeObject<List<ConfigValueListTwo>>(transportTask); |
| | | if (ListString != null && ListString.Count > 0) |
| | | { |
| | | var Strin = ListString.Find(e => e.LocationCode1 == executeStatePara.transportTask.S_END_LOC); |
| | | LogHelper.TaskDetail(logPara, "更新任务优先级-任务号:" + executeStatePara.transportTask.S_TASK_NO + "是否匹配到了队友的货位信息" + JsonConvert.SerializeObject(Strin)); |
| | | if (Strin != null) |
| | | { |
| | | //查询旁边的货位是否有已推送但是没执行的任务 |
| | | // List<string> TaskState2 = new List<string> { "未执行", "已推送", "执行中" }; |
| | | var SfgLo = newDb.Queryable<WMSTask>().Where(e => Strin.LocationCode2.Contains(e.S_START_LOC) && e.S_NOTE.Equals("agv任务") && (e.S_B_STATE == "未执行" || e.S_B_STATE == "已推送" || e.S_B_STATE == "执行中")).ToList(); |
| | | LogHelper.TaskDetail(logPara, "更新任务优先级-任务号:" + executeStatePara.transportTask.S_TASK_NO + "匹配到的货位 是否存在 是agv任务 并且任务状态为 未执行/已推送/执行中 的任务有:" + JsonConvert.SerializeObject(SfgLo)); |
| | | if (SfgLo.Count() > 0)//有这个任务 |
| | | { |
| | | //看这个任务是否是有处于配置空托第一位的货位 |
| | | var OneLoc = Strin.LocationCode2.FirstOrDefault(); |
| | | LogHelper.TaskDetail(logPara, "更新任务优先级 配置中第一个货位为:" + OneLoc); |
| | | var OneTask = SfgLo.Find(e => e.S_START_LOC == OneLoc); |
| | | if (OneTask != null) |
| | | { |
| | | if (OneTask.S_B_STATE == "未执行")//推送任务 |
| | | { |
| | | OneTask.N_PRIORITY = 60; |
| | | TaskProcess.SendTask(OneTask); |
| | | } |
| | | else |
| | | { |
| | | var Agvstr = NDCHelper.ChangeParamPri(OneTask.S_TASK_NO, 60); |
| | | LogHelper.TaskDetail(logPara, "更新任务优先级-任务号:" + OneTask.S_TASK_NO + "优先级为:" + 60 + " 是否成功 :" + Agvstr); |
| | | } |
| | | PritTask = OneTask; |
| | | } |
| | | else |
| | | { |
| | | SfgLo = SfgLo.OrderBy(e => e.T_CREATE).ToList(); |
| | | var OneTaskR = SfgLo.FirstOrDefault(); |
| | | if (OneTaskR.S_B_STATE == "未执行")//推送任务 |
| | | { |
| | | OneTaskR.N_PRIORITY = 60; |
| | | TaskProcess.SendTask(OneTaskR); |
| | | } |
| | | else |
| | | { |
| | | var Agvstr = NDCHelper.ChangeParamPri(OneTaskR.S_TASK_NO, 60); |
| | | LogHelper.TaskDetail(logPara, "更新任务优先级-任务号:" + OneTaskR.S_TASK_NO + "优先级为:" + 60 + " 是否成功 :" + Agvstr); |
| | | } |
| | | PritTask = OneTaskR; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | try |
| | | { |
| | | LogHelper.TaskDetail(logPara, "更新任务状态 事务开始:" + executeStatePara.transportTask.S_TASK_NO); |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | if (PritTask != null) |
| | | { |
| | | // var ddd = executeStatePara.transportTaskSrc.Select(e => e.S_ID).ToList(); |
| | | var ggj = newDb.Updateable<WMSTask>().SetColumns(it => new WMSTask() { N_PRIORITY = 60 }).Where(e => e.S_ID == PritTask.S_ID).ExecuteCommand(); |
| | | LogHelper.TaskDetail(logPara, "更新任务优先级-任务号:" + PritTask.S_TASK_NO + "优先级为:" + 60 + " 是否成功 改wms任务 影响行数:" + ggj); |
| | | } |
| | | newDb.CommitTran(); |
| | | LogHelper.TaskDetail(logPara, "更新任务状态 事务结束:" + executeStatePara.transportTask.S_TASK_NO); |
| | | return OperateResult.Succeed(); |
| | |
| | | var newDb = chi.CopyNew(); |
| | | foreach (var task in TaskList) |
| | | { |
| | | LogHelper.Info("处理自管任务", " 出库 开始------任务:" + task.S_TASK_NO); |
| | | LogHelper.DanInfo("处理自管任务", " 出库 开始------任务:" + task.S_TASK_NO); |
| | | try |
| | | { |
| | | bool ggf = true; |
| | |
| | | string lkBit = task.S_START_LOC; |
| | | |
| | | var locationBit = LocationHelper.LocationCode(lkBit); |
| | | var tTaskNum = newDb.Queryable<OutAreaTaskAnyJbEntitys>().Where(e => e.S_AreaCode == task.S_START_LAREA && e.S_IsUse == "Y")?.First(); |
| | | //获取托盘号 如果起点管控的话 |
| | | var endArea = newDb.Queryable<TN_AreaEntitys>().Where(e => e.S_AREA_CODE == task.S_END_LAREA)?.First(); |
| | | if (endArea != null && endArea.S_CONTROL_QTY == "Y") |
| | |
| | | var locaBit = newDb.Queryable<LocCntrRel>().Where(e => e.S_CNTR_CODE == task.S_CNTRS).First(); |
| | | if (locaBit == null) |
| | | { |
| | | LogHelper.Info("处理自管任务", "未找到托盘货位绑定:其中 S_CNTRS=" + task.S_CNTRS); |
| | | LogHelper.DanInfo("处理自管任务", "未找到托盘货位绑定:其中 S_CNTRS=" + task.S_CNTRS); |
| | | throw new Exception("未找到托盘货位绑定:其中 S_CNTRS=" + task.S_CNTRS); |
| | | } |
| | | } |
| | |
| | | var ToBit = LocationHelper.LocationCodeJbw(task.S_START_LOC); |
| | | if (ToBit == null) |
| | | { |
| | | LogHelper.Info("处理自管任务", "未找到巷道号:其中 S_START_LOC=" + task.S_START_LOC); |
| | | LogHelper.DanInfo("处理自管任务", "未找到巷道号:其中 S_START_LOC=" + task.S_START_LOC); |
| | | throw new Exception("未找到巷道号:其中 S_START_LOC=" + task.S_START_LOC); |
| | | } |
| | | if (locationBit == null) |
| | |
| | | //通过任务类型找接驳位 |
| | | var _bit = ""; |
| | | string input = task.S_Jb_Bit; |
| | | string[] result = input.Split(','); |
| | | List<string> result = input.Split(',').ToList(); |
| | | if (tTaskNum != null && Itemgh != null) |
| | | { |
| | | //查询起点库区对应巷道总任务量 |
| | | var TaskLis = newDb.Queryable<WMSTask>().Where(e => e.S_START_LAREA == task.S_START_LAREA && e.S_Main_task == "主任务" && e.S_B_STATE == "未执行" && (e.S_Jb_Bit.Contains(result.FirstOrDefault()) || e.S_Jb_Bit.Contains(result.LastOrDefault()))).ToList(); |
| | | if (TaskLis.Count > 0) |
| | | { |
| | | //筛选出库的全部满托任务 |
| | | var TaskTray = TaskLis.Select(e => e.S_CNTRS).ToList(); |
| | | LogHelper.DanInfo("处理自管任务", "筛选出库的全部满托任务" + JsonConvert.SerializeObject(TaskTray)); |
| | | //查托盘空满 |
| | | var TaskItemghList = newDb.Queryable<CntrItemRel>().Where(e => TaskTray.Contains(e.S_CNTR_CODE)).ToList(); |
| | | if (TaskItemghList.Count() > 0) |
| | | { |
| | | //获取满托的托盘集合 |
| | | var MtTray = TaskItemghList.Select(e => e.S_CNTR_CODE).ToList(); |
| | | LogHelper.DanInfo("处理自管任务", "筛选出库的全部满托任务" + JsonConvert.SerializeObject(MtTray)); |
| | | TaskLis = TaskLis.FindAll(e => MtTray.Contains(e.S_CNTRS)).ToList(); |
| | | } |
| | | } |
| | | if (TaskLis.Count() > 0) |
| | | { |
| | | LogHelper.DanInfo("处理自管任务", $"起点库区{task.S_START_LAREA} 所处的巷道的 未执行的任务量为:{TaskLis.Count()}"); |
| | | LogHelper.DanInfo("处理自管任务", $"最大任务数为{tTaskNum.N_TaskQuantity}"); |
| | | if (TaskLis.Count() < tTaskNum.N_TaskQuantity) |
| | | { |
| | | if (result.Count > 1) |
| | | { |
| | | LogHelper.DanInfo("处理自管任务", $"排除前接驳位有{JsonConvert.SerializeObject(result)}"); |
| | | result.RemoveRange(1, result.Count - 1); |
| | | LogHelper.DanInfo("处理自管任务", $"排除后接驳位有{JsonConvert.SerializeObject(result)}"); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | Location connectBit = new Location(); |
| | | foreach (var item in result) |
| | | { |
| | |
| | | |
| | | if (lstLocation.Count() == 0) |
| | | { |
| | | LogHelper.Info("处理自管任务", "移库任务:: 货位表没有可用货位"); |
| | | LogHelper.DanInfo("处理自管任务", "移库任务:: 货位表没有可用货位"); |
| | | throw new Exception("没有可用货位"); |
| | | } |
| | | //如果外侧有阻挡,就将外侧的货位的CN_S_TASK_NO 获取到 |
| | |
| | | |
| | | if (emptyLocation.Count() == 0) |
| | | { |
| | | LogHelper.Info("处理自管任务", "移库任务:: 货位表没有该巷道中的可用空货位 CN_S_AREA_CODE=" + locationBit.S_AREA_CODE); |
| | | LogHelper.DanInfo("处理自管任务", "移库任务:: 货位表没有该巷道中的可用空货位 CN_S_AREA_CODE=" + locationBit.S_AREA_CODE); |
| | | throw new Exception("没有可用货位"); |
| | | } |
| | | |
| | |
| | | loca.And(it => it.S_LOCK_STATE == "出库锁"); |
| | | List<Location> locationOutLock = newDb.Queryable<Location>().Where(loca.ToExpression()).ToList(); |
| | | |
| | | LogHelper.Info("处理自管任务", "locationOutLock数据:" + JsonConvert.SerializeObject(locationOutLock)); |
| | | LogHelper.DanInfo("处理自管任务", "locationOutLock数据:" + JsonConvert.SerializeObject(locationOutLock)); |
| | | |
| | | foreach (Location lEntity in locationOutLock) |
| | | { |
| | | emptyLocation.RemoveAll(o => o.N_ROW == lEntity.N_ROW && o.N_COL == lEntity.N_COL && o.N_LAYER == lEntity.N_LAYER); |
| | | } |
| | | LogHelper.Info("处理自管任务", "去除预出库锁定后的emptyLocation数据:" + JsonConvert.SerializeObject(emptyLocation)); |
| | | LogHelper.DanInfo("处理自管任务", "去除预出库锁定后的emptyLocation数据:" + JsonConvert.SerializeObject(emptyLocation)); |
| | | //去除预入库锁定的排列层 |
| | | |
| | | var locaIn = Expressionable.Create<Location>(); |
| | |
| | | locaIn.And(it => it.S_AREA_CODE == obstructBit.S_AREA_CODE); |
| | | locaIn.And(it => it.S_LOCK_STATE == "入库锁"); |
| | | List<Location> locationInLock = newDb.Queryable<Location>().Where(locaIn.ToExpression()).ToList(); |
| | | LogHelper.Info("处理自管任务", "locationInLock数据:" + JsonConvert.SerializeObject(locationInLock)); |
| | | LogHelper.DanInfo("处理自管任务", "locationInLock数据:" + JsonConvert.SerializeObject(locationInLock)); |
| | | |
| | | foreach (Location lEntity in locationInLock) |
| | | { |
| | | emptyLocation.RemoveAll(o => o.N_ROW == lEntity.N_ROW && o.N_COL == lEntity.N_COL && o.N_LAYER == lEntity.N_LAYER); |
| | | } |
| | | LogHelper.Info("处理自管任务", "去除预入库锁定后的emptyLocation数据:" + JsonConvert.SerializeObject(emptyLocation)); |
| | | LogHelper.DanInfo("处理自管任务", "去除预入库锁定后的emptyLocation数据:" + JsonConvert.SerializeObject(emptyLocation)); |
| | | //去除被外侧货物阻挡的货位 |
| | | |
| | | var locaWc = Expressionable.Create<Location>(); |
| | |
| | | locaWc.And(it => it.N_SIDE == 1); |
| | | lca.And(it => it.N_CURRENT_NUM > 0); |
| | | List<Location> lstLocationHasItem = newDb.Queryable<Location>().Where(locaWc.ToExpression()).ToList(); |
| | | LogHelper.Info("处理自管任务", "lstLocationHasItem数据:" + JsonConvert.SerializeObject(lstLocationHasItem)); |
| | | LogHelper.DanInfo("处理自管任务", "lstLocationHasItem数据:" + JsonConvert.SerializeObject(lstLocationHasItem)); |
| | | List<Location> lstLocationHasItemOrder = new List<Location>(); |
| | | |
| | | foreach (Location itemC in lstLocationHasItem) |
| | | { |
| | | emptyLocation.RemoveAll(o => o.N_ROW == itemC.N_ROW && o.N_COL == itemC.N_COL && o.N_LAYER == itemC.N_LAYER && o.N_SIDE > itemC.N_SIDE); |
| | | } |
| | | LogHelper.Info("处理自管任务", "去除阻挡后的emptyLocation数据:" + JsonConvert.SerializeObject(emptyLocation)); |
| | | LogHelper.DanInfo("处理自管任务", "去除阻挡后的emptyLocation数据:" + JsonConvert.SerializeObject(emptyLocation)); |
| | | if (emptyLocation.Count() > 0) |
| | | { |
| | | var emptyLocation_inside = emptyLocation.FindAll(f => f.N_SIDE == 2); |
| | |
| | | } |
| | | else |
| | | { |
| | | LogHelper.Info("处理自管任务", "移库任务:: 货位表没有该巷道中的可用空货位 S_AREA_CODE=" + locationBit.S_AREA_CODE); |
| | | LogHelper.DanInfo("处理自管任务", "移库任务:: 货位表没有该巷道中的可用空货位 S_AREA_CODE=" + locationBit.S_AREA_CODE); |
| | | throw new Exception("没有可用货位"); |
| | | } |
| | | // |
| | |
| | | taskEntity1.S_Main_task = "子任务"; |
| | | taskEntity1.S_TOOLS_TPYE = task.S_TOOLS_TPYE; |
| | | |
| | | LogHelper.Info("处理自管任务", "11---" + JsonConvert.SerializeObject(taskEntity1)); |
| | | LogHelper.DanInfo("处理自管任务", "11---" + JsonConvert.SerializeObject(taskEntity1)); |
| | | string taskNo2 = task.S_TASK_NO + "_2"; |
| | | //创建第二个任务 |
| | | WMSTask taskEntity2 = new WMSTask() |
| | |
| | | S_Main_task = "子任务", |
| | | S_TOOLS_TPYE = task.S_TOOLS_TPYE |
| | | }; |
| | | LogHelper.Info("处理自管任务", "12---" + JsonConvert.SerializeObject(taskEntity2)); |
| | | LogHelper.DanInfo("处理自管任务", "12---" + JsonConvert.SerializeObject(taskEntity2)); |
| | | #region 任务下达 |
| | | |
| | | #region 如果有阻挡需要移库则产生移库任务 |
| | |
| | | throw new Exception("锁定终点货位并发异常:" + taskEntityYk.S_END_LOC); |
| | | } |
| | | |
| | | LogHelper.Info("处理自管任务", "货位绑定任务号-- 货位码:" + taskEntityYk.S_END_LOC + "--锁定终点货位 任务号为:" + taskNoYk); |
| | | LogHelper.DanInfo("处理自管任务", "货位绑定任务号-- 货位码:" + taskEntityYk.S_END_LOC + "--锁定终点货位 任务号为:" + taskNoYk); |
| | | A = newDb.Updateable<Location>().SetColumns(it => new Location |
| | | { |
| | | S_LOCK_STATE = "出库锁", |
| | |
| | | newDb.RollbackTran(); |
| | | throw new Exception("锁定起点货位并发异常:" + taskEntityYk.S_START_LOC); |
| | | } |
| | | LogHelper.Info("处理自管任务", "货位绑定任务号-- 货位码:" + taskEntityYk.S_START_LOC + "--锁定终点货位 任务号为:" + taskNoYk); |
| | | LogHelper.Info("处理自管任务", "移库任务下发给WCS 参数为" + JsonConvert.SerializeObject(taskEntityYk)); |
| | | LogHelper.DanInfo("处理自管任务", "货位绑定任务号-- 货位码:" + taskEntityYk.S_START_LOC + "--锁定终点货位 任务号为:" + taskNoYk); |
| | | LogHelper.DanInfo("处理自管任务", "移库任务下发给WCS 参数为" + JsonConvert.SerializeObject(taskEntityYk)); |
| | | |
| | | //下发任务给WCS--立库 |
| | | var tr = BLLCreator.CreateSingleton<WcsTask>().WcsTaskEntity(taskEntityYk); |
| | | LogHelper.Info("处理自管任务", "移库任务调用WCS接口执行任务 执行结果:" + JsonConvert.SerializeObject(tr)); |
| | | LogHelper.DanInfo("处理自管任务", "移库任务调用WCS接口执行任务 执行结果:" + JsonConvert.SerializeObject(tr)); |
| | | if (!tr.Success) |
| | | { |
| | | WCSBOOL = tr.Success; |
| | |
| | | S_LOCK_STATE = "入库锁", |
| | | T_MODIFY = DateTime.Now |
| | | }).Where(x => x.S_LOC_CODE == taskEntity1.S_END_LOC && x.S_LOCK_STATE == "无").ExecuteCommand(); |
| | | LogHelper.Info("处理自管任务", "货位绑定任务号-- 货位码:" + taskEntity1.S_END_LOC + "--锁定货位为预入库 任务号为:" + taskNo1 + JsonConvert.SerializeObject(B)); |
| | | LogHelper.DanInfo("处理自管任务", "货位绑定任务号-- 货位码:" + taskEntity1.S_END_LOC + "--锁定货位为预入库 任务号为:" + taskNo1 + JsonConvert.SerializeObject(B)); |
| | | if (B == 0) |
| | | { |
| | | newDb.RollbackTran(); |
| | |
| | | } |
| | | #endregion |
| | | #region 发送Wcs任务 |
| | | LogHelper.Info("处理自管任务", "下发给WCS 参数为" + JsonConvert.SerializeObject(taskEntity1)); |
| | | LogHelper.Info("处理自管任务", "调用WCS接口"); |
| | | LogHelper.DanInfo("处理自管任务", "下发给WCS 参数为" + JsonConvert.SerializeObject(taskEntity1)); |
| | | LogHelper.DanInfo("处理自管任务", "调用WCS接口"); |
| | | var re = BLLCreator.CreateSingleton<WcsTask>().WcsTaskEntity(taskEntity1, Itemgh); |
| | | //如果任务成功下达 则主任务不需要在循环了 |
| | | if (!re.Success) |
| | |
| | | { |
| | | WCSBOOL = re.Success; |
| | | } |
| | | LogHelper.Info("处理自管任务", "调用WCS接口执行任务 执行结果:" + JsonConvert.SerializeObject(re)); |
| | | LogHelper.DanInfo("处理自管任务", "调用WCS接口执行任务 执行结果:" + JsonConvert.SerializeObject(re)); |
| | | #endregion |
| | | #region 添加第二个子任务 |
| | | B = newDb.Insertable(taskEntity2).ExecuteCommand(); |
| | |
| | | #endregion |
| | | #region agv任务 |
| | | //下达任务给Agv |
| | | //LogHelper.Info("处理自管任务", "调用agv接口"); |
| | | //LogHelper.DanInfo("处理自管任务", "调用agv接口"); |
| | | //var Are = TaskProcess.SendTask(taskEntity2); |
| | | //if (!Are) |
| | | //{ |
| | |
| | | ors.Add(OperateResult.Error(ex.Message)); |
| | | } |
| | | } |
| | | LogHelper.Info("处理自管任务", JsonConvert.SerializeObject(ors)); |
| | | LogHelper.DanInfo("处理自管任务", JsonConvert.SerializeObject(ors)); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | LogHelper.Info("处理自管任务", " Error:" + ex.Message + ex.StackTrace); |
| | | LogHelper.DanInfo("处理自管任务", " Error:" + ex.Message + ex.StackTrace); |
| | | } |
| | | } |
| | | |
| | |
| | | return OperateResult.Succeed(); |
| | | // } |
| | | } |
| | | // return OperateResult.Succeed(); |
| | | // return OperateResult.Succeed(); |
| | | } |
| | | else |
| | | { |
| | |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | private bool ContainsAnyChar(string input, List<string> charList) |
| | | { |
| | | bool gf = false; |
| | | foreach (var item in charList) |
| | | { |
| | | if (input.Contains(input)) |
| | | { |
| | | gf = true; |
| | | break; |
| | | } |
| | | } |
| | | return gf; |
| | | } |
| | | |
| | | } |
| | | } |
| | |
| | | "TcpClient": { |
| | | "ip": "", |
| | | "port": 8801 |
| | | } |
| | | }, |
| | | "TTXB-送满取空": [ |
| | | { |
| | | "LocationCode1": "LC12A01TCM1", |
| | | "LocationCode2": [ "LC12A01TCK", "LC12A02TCK", "LC12A03TCK", "LC12A04TCK", "LC12A05TCK", "LC12A06TCK", "LC12A07TCK", "LC12A08TCK", "LC12A09TCK", "LC12A10TCK", "LC12A11TCK", "LC12A12TCK", "LC12A13TCK", "LC12A14TCK", "LC12A15TCK", "LC12A16TCK", "LC12A17TCK", "LC12A18TCK", "LC12A19TCK", "LC12A20TCK", "LC12A21TCK", "LC12A22TCK" ] |
| | | }, |
| | | { |
| | | "LocationCode1": "LC12A01TCM2", |
| | | "LocationCode2": [ "LC12A01TCK", "LC12A02TCK", "LC12A03TCK", "LC12A04TCK", "LC12A05TCK", "LC12A06TCK", "LC12A07TCK", "LC12A08TCK", "LC12A09TCK", "LC12A10TCK", "LC12A11TCK", "LC12A12TCK", "LC12A13TCK", "LC12A14TCK", "LC12A15TCK", "LC12A16TCK", "LC12A17TCK", "LC12A18TCK", "LC12A19TCK", "LC12A20TCK", "LC12A21TCK", "LC12A22TCK" ] |
| | | }, |
| | | { |
| | | "LocationCode1": "LC12A01TCM3", |
| | | "LocationCode2": [ "LC12A01TCK", "LC12A02TCK", "LC12A03TCK", "LC12A04TCK", "LC12A05TCK", "LC12A06TCK", "LC12A07TCK", "LC12A08TCK", "LC12A09TCK", "LC12A10TCK", "LC12A11TCK", "LC12A12TCK", "LC12A13TCK", "LC12A14TCK", "LC12A15TCK", "LC12A16TCK", "LC12A17TCK", "LC12A18TCK", "LC12A19TCK", "LC12A20TCK", "LC12A21TCK", "LC12A22TCK" ] |
| | | } |
| | | ] |
| | | } |
| | |
| | | public string S_Note { get; set; } |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// 出库任务量临界表 |
| | | /// </summary> |
| | | [ST("出库任务量临界表")] |
| | | public class OutAreaTaskAnyJbEntitys : BaseModel |
| | | { |
| | | /// <summary> |
| | | /// 出库的库区 |
| | | /// </summary> |
| | | public string S_AreaCode { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 任务数量 |
| | | /// </summary> |
| | | public int N_TaskQuantity { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 开关 |
| | | /// </summary> |
| | | public string S_IsUse { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 备注 |
| | | /// </summary> |
| | | public string S_Note { get; set; } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 功能开关表 |
| | | /// </summary> |
| | |
| | | /// </summary> |
| | | public string LocationCode2 { get; set; } |
| | | } |
| | | public class ConfigValueListTwo |
| | | { |
| | | /// <summary> |
| | | /// 满货位 |
| | | /// </summary> |
| | | public string LocationCode1 { get; set; } |
| | | /// <summary> |
| | | /// 空货位 |
| | | /// </summary> |
| | | public List<string> LocationCode2 { get; set; } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 大屏库区任务数统计 |
| | |
| | | public string AreaCode { get; set; } |
| | | public string TrayState { get; set; } |
| | | } |
| | | |
| | | public class AgvCodeTs |
| | | { |
| | | public List<string> LocationCode { get; set; } |
| | | public List<string> EndAreaCode { get; set; } |
| | | } |
| | | } |
| | |
| | | using HH.WCS.Hexafluo.util; |
| | | using HH.WCS.Hexafluo.wms; |
| | | using SqlSugar; |
| | | using System.Collections.Generic; |
| | | |
| | | namespace HH.WCS.ZCQTJ.Entitys |
| | | { |
| | |
| | | public string Agvstate_s { get; set; } |
| | | #endregion |
| | | } |
| | | |
| | | |
| | | public class AgvWcsCarryMsg |
| | | { |
| | | /// <summary> |
| | | /// Agv车体信息 |
| | | /// </summary> |
| | | public List<AgvCarryMsg> AgvMsgList { get; set; } |
| | | /// <summary> |
| | | /// Wcs设备信息 |
| | | /// </summary> |
| | | public List<WcsCarryMsg> WcsMsgList { get; set; } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 给站台的Agv信息 |
| | | /// </summary> |
| | | public class AgvCarryMsg |
| | | { |
| | | /// <summary> |
| | | /// 车号 |
| | | /// </summary> |
| | | public string forkliftNo { get; set; } |
| | | |
| | | /// <summary> |
| | | /// agv状态 |
| | | /// </summary> |
| | | public string Agvstate_s { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 电池电量 |
| | | /// </summary> |
| | | public string Battery_Soc { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 托盘码 |
| | | /// </summary> |
| | | public string TrayCode { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 车辆XY坐标(cm) |
| | | /// </summary> |
| | | public string Pos_XY { get; set; } |
| | | } |
| | | |
| | | public class WcsCarryMsg |
| | | { |
| | | /// <summary> |
| | | /// 设备编号 |
| | | /// </summary> |
| | | public string dvcNo { get; set; } |
| | | |
| | | /// <summary> |
| | | /// X坐标 |
| | | /// </summary> |
| | | public string posX { get; set; } |
| | | |
| | | /// <summary> |
| | | /// Y坐标 |
| | | /// </summary> |
| | | public string posY { get; set; } |
| | | |
| | | /// <summary> |
| | | /// Y坐标 |
| | | /// </summary> |
| | | public string posZ { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 运行状态 |
| | | /// </summary> |
| | | public string dvcState { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 载货托盘 |
| | | /// </summary> |
| | | public string dvcCont { get; set; } |
| | | } |
| | | } |
| | |
| | | { |
| | | throw new Exception("未查询到该任务"); |
| | | } |
| | | |
| | | if (transportTask.S_TYPE == "入库" && !string.IsNullOrEmpty(transportTask.mark)) |
| | | { |
| | | if (State.clientType == "1") |
| | |
| | | } |
| | | else if (transportTask.S_TYPE == "入库") |
| | | { |
| | | |
| | | if (State.clientType == "1") |
| | | { |
| | | NDCHelper.ChangeParam(State.requestPk, 1103, 18); |
| | |
| | | } |
| | | else if (transportTask.S_TYPE == "出库") |
| | | { |
| | | if (State.clientType == "1") |
| | | var tac = newDb.Queryable<TN_TcpCont>().Where(a => a.LocationCode == transportTask.S_END_LOC)?.First(); |
| | | if (tac?.CtiaMode == "立库") |
| | | { |
| | | NDCHelper.ChangeParam(State.requestPk, 1101, 18); |
| | | if (State.clientType == "1") |
| | | { |
| | | NDCHelper.ChangeParam(State.requestPk, 1103, 18); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | if (State.clientType == "1") |
| | | { |
| | | NDCHelper.ChangeParam(State.requestPk, 1101, 18); |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | } |
| | | } |
| | | #endregion |
| | | |
| | | #region Agv载货信息接口 |
| | | /// <summary> |
| | | /// Agv载货信息接口 |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | [HttpGet] |
| | | [Route("ZcAgvVanAge")] |
| | | public OperateResult ZcAgvVanAge() |
| | | { |
| | | try |
| | | { |
| | | var chi = new SqlHelper<object>().GetInstance(); |
| | | var newDb = chi.CopyNew(); |
| | | //查询所有正在执行的agv任务 并且有车号 |
| | | List<string> AgvTaskState = new List<string> { "未执行", "已推送", "执行中", "完成", "取消" }; |
| | | var AgvtransportTask = newDb.Queryable<WMSTask>().Where(e => e.S_NOTE == "agv任务" && !AgvTaskState.Contains(e.S_B_STATE)).ToList(); |
| | | var agv = newDb.Queryable<S_AGV_CONDITIONEntitys>().ToList(); |
| | | //根据车号排序 |
| | | agv = agv.OrderBy(e => int.Parse(e.forkliftNo)).ToList(); |
| | | AgvWcsCarryMsg agvWcsCar = new AgvWcsCarryMsg(); |
| | | List<AgvCarryMsg> AgvMsgL = new List<AgvCarryMsg>(); |
| | | foreach (var item in agv) |
| | | { |
| | | var Model = new AgvCarryMsg(); |
| | | Model.forkliftNo = item.forkliftNo; |
| | | Model.Agvstate_s = item.Agvstate_s; |
| | | Model.Battery_Soc = item.Battery_Soc; |
| | | Model.Pos_XY = $"{item.Pos_X},{item.Pos_Y}"; |
| | | var agvTask = AgvtransportTask.Find(e => e.S_EQ_NO == item.forkliftNo); |
| | | if (agvTask != null) |
| | | { |
| | | Model.TrayCode = agvTask.S_CNTRS; |
| | | } |
| | | AgvMsgL.Add(Model); |
| | | } |
| | | var Wcs = BLLCreator.Create<WcsTask>().WcsdataBoard(); |
| | | agvWcsCar.AgvMsgList = AgvMsgL; |
| | | agvWcsCar.WcsMsgList = Wcs; |
| | | |
| | | return OperateResult.Succeed("", JsonConvert.SerializeObject(agvWcsCar)); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | |
| | | return OperateResult.Error(ex.Message); |
| | | } |
| | | |
| | | } |
| | | #endregion |
| | | #region MES修改智能空桶对应空托缓存点容量 |
| | | /// <summary> |
| | | /// MES修改智能空桶对应空托缓存点容量 |
| | | /// </summary> |
| | | /// <param name="LocationCode">满托入库点位</param> |
| | | /// <returns></returns> |
| | | [HttpGet] |
| | | [Route("ZcMesUpdateLoNum")] |
| | | public OperateResult ZcMesUpdateLoNum(string LocationCode) |
| | | { |
| | | LogHelper.Info("MES", $"MES修改智能空桶对应空托缓存点容量 入参:{LocationCode}"); |
| | | var chi = new SqlHelper<object>().GetInstance(); |
| | | var newDb = chi.CopyNew(); |
| | | try |
| | | { |
| | | Location location2 = null; |
| | | List<ConfigValueList> ListValues = new List<ConfigValueList>(); |
| | | var transport = newDb.Queryable<ConfigJsonEntitys>().Where(e => e.Autoindex == "智能空桶缓存")?.First(); |
| | | if (transport != null) |
| | | { |
| | | ListValues = JsonConvert.DeserializeObject<List<ConfigValueList>>(transport.TypeJson); |
| | | if (ListValues.Count() > 0) |
| | | { |
| | | //查询出对应的空托缓存位 |
| | | var ggf = ListValues.Find(e => e.LocationCode1 == LocationCode); |
| | | if (ggf != null) |
| | | { |
| | | location2 = newDb.Queryable<Location>().Where(e => e.S_LOC_CODE == ggf.LocationCode2)?.First(); |
| | | if (location2 != null && (location2.N_CURRENT_NUM - 1 >= 0)) |
| | | { |
| | | try |
| | | { |
| | | newDb.BeginTran(); |
| | | var I = newDb.Updateable<Location>().SetColumns(it => new Location() |
| | | { |
| | | T_MODIFY = DateTime.Now, |
| | | N_CURRENT_NUM = it.N_CURRENT_NUM - 1, |
| | | T_EMPTY_TIME = DateTime.Now |
| | | }).Where(x => x.S_LOC_CODE == location2.S_LOC_CODE).ExecuteCommand(); |
| | | if (I == 0) |
| | | { |
| | | throw new Exception("更新终点当前容量-1失败"); |
| | | } |
| | | LogHelper.Info("MES", $"MES修改智能空桶对应空托缓存点容量 修改成功 修改的货位为{location2.S_LOC_CODE}"); |
| | | newDb.CommitTran(); |
| | | return OperateResult.Succeed(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | newDb.RollbackTran(); |
| | | LogHelper.Info("MES", $"MES修改智能空桶对应空托缓存点容量 {ex.Message}"); |
| | | return OperateResult.Error(ex.Message); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | LogHelper.Info("MES", $"MES修改智能空桶对应空托缓存点容量 {location2.N_CURRENT_NUM} 减去1后不在大于/等于0 故而不允许减少"); |
| | | return OperateResult.Succeed(); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | throw new Exception("未查询到 智能空桶缓存 相关配置信息"); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | LogHelper.Info("MES", $"MES修改智能空桶对应空托缓存点容量 报错:{ex.Message}"); |
| | | return OperateResult.Error(ex.Message); |
| | | } |
| | | } |
| | | |
| | | #endregion |
| | | #endregion |
| | | [HttpGet] |
| | | [Route("asss")] |
| | | public OperateResult asss(int T) |
| | | public OperateResult asss() |
| | | { |
| | | var transportTask = STAttribute.GetValueTwo("TTXB-送满取空"); |
| | | var ListString = JsonConvert.DeserializeObject<List<ConfigValueListTwo>>(transportTask); |
| | | return OperateResult.Succeed(JsonConvert.SerializeObject(ListString)); |
| | | // List<OperateResult> nn = new List<OperateResult>(); |
| | | //var ca = BLLCreator.Create<IdGuid>().TaskNo("CK"); |
| | | //LogHelper.Info("任务下发", "MES下发任务参数:"); |
| | |
| | | using HH.WCS.Hexafluo.process; |
| | | using HH.WCS.Hexafluo.util; |
| | | using HH.WCS.Hexafluo.wms; |
| | | using HH.WCS.SJML.Entitys; |
| | | using HH.WCS.SJML.util; |
| | | using HH.WCS.ZCQTJ.Entitys; |
| | | using Newtonsoft.Json; |
| | |
| | | //获取所有未执行的任务 |
| | | lock (locko9) |
| | | { |
| | | var Lo = SqlSugarHelper.Db.Queryable<TaskLockEntitys>().Where(a => a.DeviceName == "AGV")?.First(); |
| | | var chi = new SqlHelper<object>().GetInstance(); |
| | | var newDb = chi.CopyNew(); |
| | | var Lo = newDb.Queryable<TaskLockEntitys>().Where(a => a.DeviceName == "AGV")?.First(); |
| | | DateTime date = DateTime.Now; |
| | | if (Lo != null && Lo.IsEnable == "Y") |
| | | { |
| | | List<string> state = new List<string> { "未执行", "待推送" }; |
| | | var list = TaskHelper.GetTaskListByState(state); |
| | | |
| | | //查询是否有送满取空的 空入任务 有的话需要等待20分钟 |
| | | var transportTask = newDb.Queryable<ConfigJsonEntitys>().Where(e => e.Autoindex == "送满取空对应的空托点位")?.First(); |
| | | if (transportTask != null) |
| | | { |
| | | var ListString = JsonConvert.DeserializeObject<List<string>>(transportTask.TypeJson); |
| | | if (ListString.Count() > 0) |
| | | { |
| | | //剔除时间没到20分钟的空托入库--特制 |
| | | var TiemTask = list.FindAll(e => ListString.Contains(e.S_START_LOC) && e.S_TYPE == "入库").ToList(); |
| | | if (TiemTask.Count() > 0) |
| | | { |
| | | foreach (var item in TiemTask) |
| | | { |
| | | if (item.T_CREATE.AddMinutes(20) > date)//没超时20分钟 |
| | | { |
| | | //排除 |
| | | list.Remove(item); |
| | | LogHelper.Info("NDC", $"没超时20分钟 排除的任务有:{JsonConvert.SerializeObject(item)}"); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | var RkTask = list.FindAll(e => e.S_TYPE == "入库").ToList(); |
| | | // var CkTask = list.FindAll(e => e.S_TYPE == "出库").ToList(); |
| | | if (RkTask.Count > 0) |
| | |
| | | TaskProcess.SendTask(item); |
| | | } |
| | | } |
| | | var CkTaskList = SqlSugarHelper.Db.Queryable<WMSTask>().Where(a => state.Contains(a.S_B_STATE.Trim()) |
| | | var CkTaskList = newDb.Queryable<WMSTask>().Where(a => state.Contains(a.S_B_STATE.Trim()) |
| | | && a.S_NOTE == "agv任务" && a.S_TYPE == "出库" && a.S_START_LAREA != "TMCKJBW").ToList(); |
| | | if (CkTaskList.Count > 0) |
| | | { |
| | |
| | | //else |
| | | //{ |
| | | List<string> States = new List<string>() { "已推送", "执行中", "开始取货" }; |
| | | var taskList = SqlSugarHelper.Db.Queryable<WMSTask>().Where(e => e.S_START_LOC == item.S_START_LOC |
| | | var taskList = newDb.Queryable<WMSTask>().Where(e => e.S_START_LOC == item.S_START_LOC |
| | | && States.Contains(e.S_B_STATE.Trim()) && e.S_NOTE == "agv任务").ToList(); |
| | | LogHelper.Info("NDC", $"出库正在判断是否可以下发的 agv任务 起点库区不是LC11M的agv任务(判断是否有相同起点的别的agv任务):{JsonConvert.SerializeObject(taskList)}"); |
| | | if (taskList.Count > 0) |
| | |
| | | // } |
| | | } |
| | | } |
| | | var CkTaskList1 = SqlSugarHelper.Db.Queryable<WMSTask>().Where(a => state.Contains(a.S_B_STATE.Trim()) |
| | | var CkTaskList1 = newDb.Queryable<WMSTask>().Where(a => state.Contains(a.S_B_STATE.Trim()) |
| | | && a.S_NOTE == "agv任务" && a.S_TYPE == "出库" && a.S_START_LAREA == "TMCKJBW").OrderBy(e => e.T_CREATE).ToList(); |
| | | |
| | | if (CkTaskList1.Count() > 0) |
| | |
| | | { |
| | | LogHelper.Info("NDC", $"出库正在判断是否可以下发的 agv任务号:{item.S_TASK_NO}"); |
| | | //查询主任务的起点库区 |
| | | var ZhuTask = SqlSugarHelper.Db.Queryable<WMSTask>().Where(e => e.S_SRC_NO == item.S_SRC_NO).ToList(); |
| | | var ZhuTask = newDb.Queryable<WMSTask>().Where(e => e.S_SRC_NO == item.S_SRC_NO).ToList(); |
| | | LogHelper.Info("NDC", $"出库正在判断是否可以下发的 agv任务 所对应的所有相关任务:{JsonConvert.SerializeObject(ZhuTask)}"); |
| | | var hh = ZhuTask.FindAll(e => e.S_START_LAREA == "LC11M").ToList(); |
| | | if (hh.Any()) |
| | |
| | | using HH.WCS.Hexafluo; |
| | | using HH.WCS.Hexafluo.util; |
| | | using HH.WCS.Hexafluo.wms; |
| | | using HH.WCS.SJML.Bll; |
| | | using HH.WCS.SJML.Comm; |
| | | using HH.WCS.SJML.Dto; |
| | | using HH.WCS.ZCQTJ.Entitys; |
| | | using Newtonsoft.Json; |
| | |
| | | return returnEntity; |
| | | } |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// WCS设备信息查询 |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | public List<WcsCarryMsg> WcsdataBoard() |
| | | { |
| | | List<WcsCarryMsg> WcsCarry = new List<WcsCarryMsg>(); |
| | | try |
| | | { |
| | | var interact = new |
| | | { |
| | | requestPk = BLLCreator.Create<IdWorker>().nextId("CX"), |
| | | reqTime = DateTime.Now |
| | | }; |
| | | LogHelper.Info("立库", "查询立库设备信息 参数为:" + JsonConvert.SerializeObject(interact)); |
| | | var result = apiHelper.Post(baseUrl + "/wcs-admin/api/dataBoard", JsonConvert.SerializeObject(interact)); |
| | | LogHelper.Info("立库", "给立库下达安全请求 立库返回参数为:" + result); |
| | | if (string.IsNullOrEmpty(result)) |
| | | { |
| | | return WcsCarry; |
| | | } |
| | | var data = JsonConvert.DeserializeObject<List<WcsCarryMsg>>(result); |
| | | return data; |
| | | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | LogHelper.Info("立库", "查询立库设备信息 报错:" + ex.Message); |
| | | return WcsCarry; |
| | | } |
| | | } |
| | | public OperateResult WcsCallbackAnyc(string JsonValue) |
| | | { |
| | | try |
| | | { |
| | | |
| | | var result = apiHelper.Post(baseUrl + "/wcs-admin/api/agvCallback", JsonValue); |
| | | LogHelper.Info("立库", "给立库下达安全请求 立库返回参数为:" + result); |
| | | if (string.IsNullOrEmpty(result)) |
| | |
| | | } |
| | | } |
| | | } |
| | | else if (tac.CtiaMode == "立库") |
| | | { |
| | | task.S_TYPE = "入库"; |
| | | BLLCreator.CreateSingleton<WcsTask>().WcsCallback(task, state, forkliftNo); |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | |
| | | } |
| | | } |
| | | if (tac.CtiaMode == "VMI") |
| | | else if (tac.CtiaMode == "VMI") |
| | | { |
| | | var Alone = newDb.Queryable<SqlCountEntitys>().Where(e => e.ConfigId == tac.host)?.First(); |
| | | if (Alone == null) |
| | |
| | | } |
| | | LogHelper.Info("完工回报", "写安全信号交互表 IMES_AGV_BAST_ENTRY_TRANSF_DONE 字段为 0成功"); |
| | | } |
| | | } |
| | | else if (tac.CtiaMode == "立库") |
| | | { |
| | | task.S_TYPE = "入库"; |
| | | var tra = BLLCreator.Create<WcsTask>().WcsCallback(task, state, forkliftNo); |
| | | } |
| | | } |
| | | } |
| | |
| | | /// <param name="mst"></param> |
| | | internal static bool SendTask(WMSTask mst) |
| | | { |
| | | |
| | | var chi = new SqlHelper<object>().GetInstance(); |
| | | var newDb = chi.CopyNew(); |
| | | try |
| | | { |
| | | |
| | | var result = false; |
| | | var start = 0; var end = 0; |
| | | var taskType = mst.S_TYPE.Trim(); |
| | | var taskState = mst.S_B_STATE.Trim(); |
| | | if (taskState == "未执行" || taskState == "待推送") |
| | | { |
| | | var dic = new Dictionary<string, string>(); |
| | | var dic1 = new Dictionary<string, string>(); |
| | | LogHelper.Info("NDC", $"agv任务号:{mst.S_TASK_NO}"); |
| | | LogHelper.Info("NDC", $"agv任务起点:{mst.S_START_LOC}"); |
| | | start = LocationHelper.GetAgvSiteZc(mst.S_START_LOC); |
| | | var transportTask = newDb.Queryable<ConfigJsonEntitys>().Where(e => e.Autoindex == "特殊流程站点")?.First(); |
| | | if (transportTask != null) |
| | | { |
| | | var ListString = JsonConvert.DeserializeObject<AgvCodeTs>(transportTask.TypeJson); |
| | | if (ListString != null && ListString.LocationCode != null && ListString.EndAreaCode != null && ListString.LocationCode.Contains(mst.S_START_LOC) && ListString.EndAreaCode.Contains(mst.S_END_LAREA)) |
| | | { |
| | | start = LocationHelper.GetAgvSiteZc2(mst.S_START_LOC); |
| | | } |
| | | } |
| | | LogHelper.Info("NDC", $"agv 查询的站点(起点):{start}"); |
| | | LogHelper.Info("NDC", $"agv任务终点:{mst.S_END_LOC}"); |
| | | end = LocationHelper.GetAgvSiteZc(mst.S_END_LOC); |
| | |
| | | Console.WriteLine($"SendTask {mst.S_TASK_NO}"); |
| | | Console.WriteLine("start=" + start); |
| | | Console.WriteLine("end= " + end); |
| | | var dic = new Dictionary<string, string>(); |
| | | var dic1 = new Dictionary<string, string>(); |
| | | dic.Add("Pri", mst.N_PRIORITY.ToString());//优先级 |
| | | dic.Add("No", mst.S_TASK_NO.Trim()); |
| | | dic1.Add("From", start.ToString());//起点 |
| | |
| | | } |
| | | else |
| | | { |
| | | var tac = SqlSugarHelper.Db.Queryable<TN_TcpCont>().Where(a => a.LocationCode == mst.S_END_LOC)?.First(); |
| | | var tac = newDb.Queryable<TN_TcpCont>().Where(a => a.LocationCode == mst.S_END_LOC)?.First(); |
| | | |
| | | if (tac != null && tac.C_IS_RFID == "Y") |
| | | { |
| | |
| | | var loggerNames = new List<string>() { "HosttoagvTask", "HosttoagvCar", "NDC", "MES", "绑定解绑", "重量计算", "物料品质修改", "入库", |
| | | "入库算法", "出库", "出库算法", "处理自管任务", "更换终点", "更换起点", "执行的SQL", "ERP传参", "完工回报", |
| | | "任务下发", "给立库下达任务", "立库", "立库任务下达", "发送给MES", "回滚任务服务", "INFO", |
| | | "Wcs报警信息", "巷道用禁用", "接驳位用禁用", "转运", "钉钉通知", "下发无托盘入库立库任务","调整优先级","确定入库托盘信息","计算AGV时间","出库到接驳位","入库改道","ts切换路线" }; |
| | | "Wcs报警信息", "巷道用禁用", "接驳位用禁用", "转运", "钉钉通知", "下发无托盘入库立库任务","调整优先级","确定入库托盘信息","计算AGV时间","出库到接驳位","入库改道","ts切换路线","获取json文件" }; |
| | | LogManager.Configuration = DefaultConfig(loggerNames); |
| | | } |
| | | public static ILogger CreateLogger(string name) |
| | |
| | | } |
| | | |
| | | } |
| | | public static string GetValueTwo(string name) |
| | | { |
| | | try |
| | | { |
| | | var jsonFile = System.AppDomain.CurrentDomain.BaseDirectory + "Config\\Config.json"; |
| | | using (System.IO.StreamReader file = System.IO.File.OpenText(jsonFile)) |
| | | { |
| | | using (JsonTextReader reader = new JsonTextReader(file)) |
| | | { |
| | | JObject o = (JObject)JToken.ReadFrom(reader); |
| | | var value = o[name].ToString(); |
| | | return value.Replace("\r\n", ""); |
| | | } |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | LogHelper.DanInfo("获取json文件", "值timeSpan失败!原因:" + ex.Message); |
| | | return ""; |
| | | } |
| | | |
| | | } |
| | | |
| | | } |
| | | |
| | |
| | | var location = GetLocZc(loc.Trim()); |
| | | return location.N_AGV_CODE; |
| | | } |
| | | internal static int GetAgvSiteZc2(string loc) |
| | | { |
| | | var location = GetLocZc(loc.Trim()); |
| | | return location.N_AGV_CODE_T; |
| | | } |
| | | |
| | | |
| | | internal static int ZcGetAgvSite(string loc) |
| | |
| | | |
| | | public string S_AGV_SITE { get; set; } |
| | | /// <summary> |
| | | /// 需要注意 |
| | | /// 需要注意 agv站点1 |
| | | /// </summary> |
| | | //[SugarColumn(IsIgnore = true)] |
| | | public int N_AGV_CODE { get; set; } |
| | | |
| | | |
| | | /// <summary> |
| | | /// agv站点2 |
| | | /// </summary> |
| | | public int N_AGV_CODE_T { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 出库时间 |
| | | /// </summary> |