| | |
| | | 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; |
| | | } |
| | | |
| | | } |
| | | } |