| | |
| | | } |
| | | else if (state == 1105) |
| | | { |
| | | //判断接驳位和巷道是否可用 不可用需要改道 |
| | | changeBit(mst); |
| | | var workFlow = TaskHelper.selectWorkFlowByType(mst.N_TYPE.ToString(), mst.TOOLSTYPE); |
| | | |
| | | if (workFlow == null) |
| | | { |
| | | LogHelper.Info($"判断接驳位以及巷道是否可用,BUSI_TYpe:{mst.N_TYPE},没找到对应作业流程", "改道安全交互"); |
| | | return; |
| | | } |
| | | |
| | | var wcsTask = TaskHelper.GetTaskByWorkNo(mst.S_OP_CODE,"wcs"); |
| | | if (wcsTask == null) |
| | | { |
| | | LogHelper.Info($"判断巷道可用失败,没找到对应{mst.S_OP_CODE}的wcs任务", "改道安全交互"); |
| | | return; |
| | | } |
| | | //判断空托缓存、接驳位和巷道是否可用 不可用需要改道 |
| | | changeBit(mst,wcsTask,workFlow); |
| | | } |
| | | else if (state == 1023 || state == 1025) |
| | | { |
| | | //开关关门申请 |
| | | DeviceProcess.Door(mst, forkliftNo, state); |
| | | } |
| | | else if (state == 1013) { |
| | | LogHelper.Info($"等待交互,任务号={mst.S_CODE},卸货交管成功,修改参数", "安全交互"); |
| | | else if (state == 1002) { |
| | | LogHelper.Info($"等待交互,任务号={mst.S_CODE}", "安全交互"); |
| | | |
| | | //等待rfid校验 |
| | | var rfidFlag = TaskHelper.GetRfid(mst.S_CODE); |
| | |
| | | |
| | | private static object locLocker = new object(); |
| | | |
| | | internal static void changeBit(WMSTask task) { |
| | | internal static void changeBit(WMSTask task, WMSTask wcsTask, WorkFlow workFlow) { |
| | | |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | |
| | | try |
| | | { |
| | | var workFlow = TaskHelper.selectWorkFlowByType(task.N_TYPE.ToString(), task.TOOLSTYPE); |
| | | |
| | | if (workFlow == null) |
| | | { |
| | | LogHelper.Info($"判断接驳位以及巷道是否可用,BUSI_TYpe:{task.N_TYPE},没找到对应作业流程", "改道安全交互"); |
| | | throw new Exception($"判断接驳位以及巷道是否可用,BUSI_TYpe:{task.N_TYPE},没找到对应作业流程"); |
| | | } |
| | | |
| | | var wcsTask = db.Queryable<WMSTask>().Where(e => e.S_CODE == task.S_OP_CODE + "_2")?.First(); |
| | | if (wcsTask == null) |
| | | { |
| | | LogHelper.Info($"判断巷道可用失败,没找到对应{task.S_OP_CODE + "_2"}任务", "改道安全交互"); |
| | | throw new Exception($"判断巷道可用失败,没找到对应{task.S_OP_CODE + "_2"}任务"); |
| | | |
| | | } |
| | | |
| | | |
| | | //判断接驳位可用 |
| | | var flag = true; |
| | | |
| | | //空托入库判断空托出缓存表,有对应记录直接改道到缓存表终点 |
| | | if (workFlow.FLOWCODE=="3") { |
| | | var kt = db.Queryable<MesKtTask>().Where(e => e.TOOLS_TPYE==task.TOOLSTYPE && e.Status=="N").OrderBy(a=>a.CreateDate).First(); |
| | | if (kt == null) |
| | | { |
| | | LogHelper.Info($"当前任务{task.S_CODE}没找到空托出缓存记录", "改道安全交互"); |
| | | } |
| | | else { |
| | | |
| | | LogHelper.Info($"当前任务{task.S_CODE}找到空托出缓存记录:"+JsonConvert.SerializeObject(kt), "改道安全交互"); |
| | | |
| | | //查找给定终点 |
| | | var end = LocationHelper.GetLoc(kt.Location_To); |
| | | //LogHelper.Info($"当前任务{task.S_CODE}改道终点信息" + JsonConvert.SerializeObject(end), "改道安全交互"); |
| | | //if (end == null || end.S_LOCK_STATE != "无") |
| | | //{ |
| | | // LogHelper.Info($"当前任务{task.S_CODE}改道终点失败,终点:{kt.Location_To},没找到或有锁", "改道安全交互"); |
| | | //} |
| | | TaskHelper.Fail(wcsTask); |
| | | TaskProcess.OperateStatus(wcsTask, 7); |
| | | LocationHelper.LockLoc(end.S_CODE, "入库锁", 1); |
| | | db.BeginTran(); |
| | | //改一段任务终点 |
| | | task.S_END_LOC = end.S_CODE; |
| | | task.S_END_AREA = end.S_AREA_CODE; |
| | | db.Updateable(task).UpdateColumns(it => new { it.S_END_LOC,it.S_END_AREA}).ExecuteCommand(); |
| | | kt.Status = "Y"; |
| | | db.Updateable(kt).UpdateColumns(it => new { it.Status }).ExecuteCommand(); |
| | | db.CommitTran(); |
| | | var site = LocationHelper.GetAgvSiteZc(end.S_CODE); |
| | | LogHelper.Info($"任务{task.S_CODE}改道成功,改参数2为{site},参数6为1", "改道安全交互"); |
| | | NDCApi.ChangeOrderParam(task.S_CODE, 2, site); |
| | | NDCApi.ChangeOrderParam(task.S_CODE, 6, "1"); |
| | | return; |
| | | } |
| | | } |
| | | |
| | | if (workFlow.FLOWNAME.Contains("入库")) |
| | | { |
| | | var loc1 = LocationHelper.GetLocOne(wcsTask.S_END_LOC); |
| | | //查找可用巷道 |
| | | var rowdwa = db.Queryable<RoadWayEnable>().Where(x => x.areaCode == wcsTask.S_END_AREA && x.status == "0" && x.roadWay == loc1.N_ROADWAY.ToString()).First(); |
| | | if (rowdwa == null) |
| | | { |
| | | LogHelper.Info($"判断巷道可用,当前库区{wcsTask.S_END_AREA}当前巷道{loc1.N_ROADWAY}可用,不需要改道", "改道安全交互"); |
| | | } |
| | | else |
| | | { |
| | | LogHelper.Info($"当前巷道不可用,需要改道", "改道安全交互"); |
| | | var endLoc = LocationHelper.GetLocOne(wcsTask.S_END_LOC); |
| | | |
| | | var endList = LocationHelper.GetAllLocList1(workFlow.ENDAREA); |
| | | var end = LocationHelper.FindBalanceEndcolByLocList(endList, workFlow.ENDAREA, workFlow.ROADWAY); |
| | | LogHelper.Info($"当前巷道不可用,需要改道,新终点信息" + JsonConvert.SerializeObject(end), "改道安全交互"); |
| | | if (end == null) |
| | | { |
| | | LogHelper.Info($"当前巷道不可用,终点库区{workFlow.ENDAREA},没找到终点", "改道安全交互"); |
| | | throw new Exception($"终点库区{workFlow.ENDAREA},没找到终点"); |
| | | } |
| | | LocationHelper.LockLoc(end.S_CODE, "入库锁", 1); |
| | | db.BeginTran(); |
| | | endLoc.N_LOCK_STATE = 0; |
| | | endLoc.S_LOCK_STATE = "无"; |
| | | db.Updateable(endLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE }).ExecuteCommand(); |
| | | wcsTask.S_END_LOC = end.S_CODE; |
| | | db.Updateable(wcsTask).UpdateColumns(it => new { it.S_END_LOC }).ExecuteCommand(); |
| | | db.CommitTran(); |
| | | } |
| | | |
| | | |
| | | |
| | | var connectionList = LocationHelper.GetConnectionList(workFlow.CONNECTION); |
| | | var usableConnectionList = WcsTask.WcsPositionAvailable(task.S_CODE, connectionList); |
| | | if (usableConnectionList != null && usableConnectionList.code == "0") |
| | |
| | | var con = LocationHelper.GetLoc(item); |
| | | if (con.S_CODE.Contains(task.S_END_LOC)) |
| | | { |
| | | |
| | | flag = false; |
| | | LogHelper.Info($"当前任务{task.S_CODE}接驳位{con.S_CODE}可用,不需要改道,直接修改参数6为1", "改道安全交互"); |
| | | NDCApi.ChangeOrderParam(task.S_CODE, 6, "1"); |
| | |
| | | foreach (var item in usableConnectionList.available) |
| | | { |
| | | var con = LocationHelper.GetLoc(item); |
| | | if (con.S_LOCK_STATE == "无" && con.N_CURRENT_NUM < 2) |
| | | if (con.N_CURRENT_NUM < 2) |
| | | { |
| | | connection = con.S_CODE; |
| | | LogHelper.Info($"改道寻找到可用接驳位{connection}", "改道安全交互"); |
| | |
| | | |
| | | var loc = LocationHelper.GetLocOne(connection); |
| | | |
| | | if (workFlow.FLOWNAME.Contains("入库")) |
| | | { |
| | | |
| | | LocationHelper.LockLoc(loc.S_CODE, "入库锁", 1); |
| | | var endLoc = LocationHelper.GetLocOne(task.S_END_LOC); |
| | | endLoc.N_LOCK_STATE = 0; |
| | |
| | | db.Updateable(endLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE }).ExecuteCommand(); |
| | | //改一段任务终点 |
| | | task.S_END_LOC = loc.S_CODE; |
| | | db.Updateable(task).UpdateColumns(it => new { it.S_END_LOC }).ExecuteCommand(); |
| | | task.S_END_AREA = loc.S_AREA_CODE; |
| | | db.Updateable(task).UpdateColumns(it => new { it.S_END_LOC, it.S_END_AREA }).ExecuteCommand(); |
| | | |
| | | |
| | | //改二段任务起点 |
| | | wcsTask.S_START_LOC = loc.S_CODE; |
| | | db.Updateable(wcsTask).UpdateColumns(it => new { it.S_START_LOC }).ExecuteCommand(); |
| | | wcsTask.S_START_AREA = loc.S_AREA_CODE; |
| | | db.Updateable(wcsTask).UpdateColumns(it => new { it.S_START_LOC ,it.S_START_AREA}).ExecuteCommand(); |
| | | db.CommitTran(); |
| | | |
| | | var site = LocationHelper.GetAgvSiteZc(loc.S_CODE); |
| | |
| | | NDCApi.ChangeOrderParam(task.S_CODE, 2, site); |
| | | NDCApi.ChangeOrderParam(task.S_CODE, 6, "1"); |
| | | |
| | | } |
| | | |
| | | //} else if (workFlow.FLOWNAME.Contains("出库")) { |
| | | // var endLoc = LocationHelper.GetLocOne(task.S_START_LOC); |
| | | // endLoc.N_LOCK_STATE = 3; |
| | |
| | | |
| | | try |
| | | { |
| | | var task = TaskHelper.GetTask(model.task_no + "_1"); |
| | | var wcsTask = TaskHelper.GetTask(model.task_no + "_2"); |
| | | var task = TaskHelper.GetTaskByWorkNo(model.task_no, "agv"); |
| | | var wcsTask = TaskHelper.GetTaskByWorkNo(model.task_no,"wcs"); |
| | | if (task != null && wcsTask != null) |
| | | { |
| | | if (task.S_B_STATE.Trim() == "未执行") |
| | |
| | | else |
| | | { |
| | | result.errCode = 1; |
| | | result.errMsg = "任务不存在"; |
| | | result.errMsg = $"{model.task_no}任务不存在"; |
| | | result.success = false; |
| | | } |
| | | } |
| | |
| | | |
| | | //查找起点 |
| | | var start = LocationHelper.GetLoc(model.Location_From); |
| | | LogHelper.Info($"ZCSendTask入库任务下发起点信息"+JsonConvert.SerializeObject(start), "Mes任务下发"); |
| | | LogHelper.Info($"ZCSendTask入库任务下发起点信息" + JsonConvert.SerializeObject(start), "Mes任务下发"); |
| | | |
| | | |
| | | if (start == null || start.S_LOCK_STATE!="无") { |
| | | if (start == null || start.S_LOCK_STATE != "无") { |
| | | LogHelper.Info($"ZCSendTask入库任务下发失败,起点:{model.Location_From},没找到或有锁", "Mes任务下发"); |
| | | throw new Exception($"起点:{model.Location_From},没找到或有锁"); |
| | | } |
| | |
| | | //接驳位 |
| | | var connection = ""; |
| | | |
| | | //接驳位库区名称 |
| | | var connectionArea = ""; |
| | | |
| | | //如果需要下发wcs立库,则需要寻找可用接驳位 |
| | | if (workFlow.SENDWCS=="Y") { |
| | | if (workFlow.SENDWCS == "Y") { |
| | | |
| | | //测试默认取一个接驳位 |
| | | //var connectionList = LocationHelper.GetAllLocList1(workFlow.CONNECTION); |
| | |
| | | var usableConnectionList = WcsTask.WcsPositionAvailable(model.task_no, connectionList); |
| | | if (usableConnectionList != null && usableConnectionList.code == "0") |
| | | { |
| | | foreach (var item in usableConnectionList.available) |
| | | //根据接驳位任务数量获取均衡接驳位集合优先任务数少的接驳位 |
| | | var balanceConnectionList = LocationHelper.GetBalanceConnectionList(usableConnectionList.available); |
| | | foreach (var item in balanceConnectionList) |
| | | { |
| | | var con = LocationHelper.GetLoc(item); |
| | | if (con.S_LOCK_STATE == "无" && con.N_CURRENT_NUM < 2) |
| | | if (item.loc.N_CURRENT_NUM<2) |
| | | { |
| | | connection = con.S_CODE; |
| | | connection = item.loc.S_CODE; |
| | | connectionArea = item.loc.S_AREA_Name; |
| | | LogHelper.Info($"ZCSendTask入库任务下发寻找到可用接驳位{connection}", "Mes任务下发"); |
| | | break; |
| | | } |
| | | } |
| | | } |
| | |
| | | throw new Exception($"ZCSendTask入库任务下发寻找接驳位失败"); |
| | | } |
| | | |
| | | if (connection=="") |
| | | if (connection == "") |
| | | { |
| | | LogHelper.Info($"ZCSendTask入库任务下发寻找接驳位失败", "Mes任务下发"); |
| | | throw new Exception($"ZCSendTask入库任务下发寻找接驳位失败"); |
| | |
| | | } |
| | | |
| | | //查找终点 |
| | | var endList = LocationHelper.GetAllLocList1(workFlow.ENDAREA); |
| | | List<Location> endList ; |
| | | |
| | | Location end = null; |
| | | |
| | | if (!string.IsNullOrEmpty(workFlow.ZONECODE)) |
| | | { |
| | | endList = LocationHelper.GetZoneLoc(workFlow.ZONECODE); |
| | | } |
| | | else { |
| | | endList = LocationHelper.GetAllLocList1(workFlow.ENDAREA); |
| | | } |
| | | |
| | | if (workFlow.FLOWCODE == "1") |
| | | { |
| | | //满托入 |
| | | end = LocationHelper.FindEndcolByLocList(endList, workFlow.ENDAREA, workFlow.ROADWAY); |
| | | end = LocationHelper.FindBalanceEndcolByLocList(endList, workFlow.ENDAREA, workFlow.ROADWAY); |
| | | } |
| | | else if (workFlow.FLOWCODE == "3") |
| | | { |
| | | //空托入 优先入缓存区,没有入立库区 |
| | | var ktHcq = Settings.EmptyPalletBufferArea; |
| | | //var ktHcq = Settings.EmptyPalletBufferArea; |
| | | cntrCount = 0; |
| | | var endList1 = LocationHelper.GetAllLocList1(ktHcq); |
| | | end = LocationHelper.FindEndcolByLoc(endList1, ktHcq); |
| | | LogHelper.Info($"ZCSendTask入库任务寻找空托缓存区终点信息" + JsonConvert.SerializeObject(end), "Mes任务下发"); |
| | | if (end == null) |
| | | { |
| | | //var endList1 = LocationHelper.GetAllLocList1(ktHcq); |
| | | //end = LocationHelper.FindEndcolByLoc(endList1, ktHcq); |
| | | //LogHelper.Info($"ZCSendTask入库任务寻找空托缓存区终点信息" + JsonConvert.SerializeObject(end), "Mes任务下发"); |
| | | //if (end == null) |
| | | //{ |
| | | LogHelper.Info($"ZCSendTask入库任务没找到空托缓存区终点,寻找立库区空货位", "Mes任务下发"); |
| | | end = LocationHelper.FindEndcolByLocList(endList, workFlow.ENDAREA, workFlow.ROADWAY); |
| | | } |
| | | else |
| | | { |
| | | connection = ""; |
| | | } |
| | | end = LocationHelper.FindBalanceEndcolByLocList(endList, workFlow.ENDAREA, workFlow.ROADWAY); |
| | | //} |
| | | //else |
| | | //{ |
| | | // connection = ""; |
| | | //} |
| | | } |
| | | else if (workFlow.FLOWCODE == "2") |
| | | { |
| | |
| | | } |
| | | else |
| | | { |
| | | end = LocationHelper.FindEndcolByLocList(endList, workFlow.ENDAREA, workFlow.ROADWAY); |
| | | end = LocationHelper.FindBalanceEndcolByLocList(endList, workFlow.ENDAREA, workFlow.ROADWAY); |
| | | } |
| | | } |
| | | else if (workFlow.FLOWCODE == "12") |
| | |
| | | } |
| | | |
| | | |
| | | LogHelper.Info($"ZCSendTask任务下发终点信息" + JsonConvert.SerializeObject(end), "Mes任务下发"); |
| | | LogHelper.Info($"ZCSendTask入库任务下发终点信息" + JsonConvert.SerializeObject(end), "Mes任务下发"); |
| | | |
| | | if (end == null) { |
| | | LogHelper.Info($"ZCSendTask任务下发失败,终点库区{workFlow.ENDAREA},没找到终点", "Mes任务下发"); |
| | | LogHelper.Info($"ZCSendTask入库任务下发失败,终点库区{workFlow.ENDAREA},没找到终点", "Mes任务下发"); |
| | | throw new Exception($"终点库区{workFlow.ENDAREA},没找到终点"); |
| | | } |
| | | |
| | | //添加托盘物料关联表 |
| | | if (cntrCount!=0) |
| | | if (cntrCount != 0) |
| | | { |
| | | CntrItemRel rel = new CntrItemRel(); |
| | | rel.S_ITEM_CODE = model.PROD_NO; |
| | |
| | | rel.itemFeature = model.PROD_TECH; |
| | | ContainerHelper.CreateCntrItem(rel); |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | //添加托盘 |
| | |
| | | cntr1.N_DETAIL_COUNT = cntrCount; |
| | | cntr1.S_TYPE = ""; |
| | | |
| | | LogHelper.Info($"添加容器信息"+JsonConvert.SerializeObject(cntr1), "Mes任务下发"); |
| | | LogHelper.Info($"添加容器信息" + JsonConvert.SerializeObject(cntr1), "Mes任务下发"); |
| | | if (ContainerHelper.CreateCntr(cntr1)) |
| | | { |
| | | LogHelper.Info($"添加容器信息成功" , "Mes任务下发"); |
| | | LogHelper.Info($"添加容器信息成功", "Mes任务下发"); |
| | | } |
| | | else { |
| | | LogHelper.Info($"添加容器信息失败" , "Mes任务下发"); |
| | | LogHelper.Info($"添加容器信息失败", "Mes任务下发"); |
| | | } |
| | | |
| | | |
| | |
| | | //优先级 |
| | | N_PRIORITY = model.Priority, |
| | | //工装类型 |
| | | TOOLSTYPE = TOOLSTYPE |
| | | |
| | | TOOLSTYPE = TOOLSTYPE, |
| | | //起点库区名称 |
| | | S_START_AREA_NAME = start.S_AREA_Name, |
| | | //起点库区名称 |
| | | S_END_AREA_NAME = end.S_AREA_Name, |
| | | //起点库区名称 |
| | | CONNECTION_AREA = connectionArea, |
| | | }; |
| | | |
| | | //创建作业 |
| | | if (WMSHelper.CreateWmsWork(operation)) { |
| | | if (WMSHelper.CreateWmsWork(operation)) |
| | | { |
| | | LogHelper.Info($"ZCSendTask入库作业创建成功{operation.S_CODE}", "Mes任务下发"); |
| | | result.errMsg = "入库作业创建成功"; |
| | | result.errCode = 0; |
| | | result.success = true; |
| | | return result; |
| | | } |
| | | else { |
| | | LogHelper.Info($"ZCSendTask入库任务下发创建作业失败", "Mes任务下发"); |
| | | throw new Exception($"ZCSendTask入库任务下发创建作业失败"); |
| | | } |
| | | |
| | | |
| | |
| | | |
| | | //接驳位 |
| | | var connection = ""; |
| | | |
| | | //接驳位库区 |
| | | var connectionArea = ""; |
| | | |
| | | |
| | | //查找给定终点 |
| | | var end = LocationHelper.GetLoc(model.Location_To); |
| | |
| | | else { |
| | | //根据制品编号寻找立库区对应物料托盘 |
| | | start = LocationHelper.FindStartcolByLoclistAndItem(strrtList, model.PROD_NO, workFlow.STARTAREA, workFlow.ROADWAY); |
| | | if (start==null) |
| | | { |
| | | strrtList = LocationHelper.GetAllLocList2(workFlow.STARTAREA); |
| | | var itemFlag = LocationHelper.FindStartcolByLoclistAndItemFlag(strrtList, model.PROD_NO, workFlow.STARTAREA); |
| | | LogHelper.Info($"ZCSendTask满托出库任务没找到起点,校验是否有库存但是设备报警{itemFlag}", "Mes任务下发"); |
| | | if (itemFlag) |
| | | { |
| | | result.errMsg = "满托出库作业有库存但设备报警"; |
| | | result.errCode = 2001; |
| | | result.success = true; |
| | | return result; |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | } |
| | | else if (workFlow.FLOWCODE == "7") { |
| | | //寻找立库区空托 |
| | | start = LocationHelper.FindStartcolByLoclistAndcntr(strrtList, workFlow.STARTAREA); |
| | | if (start == null) |
| | | { |
| | | strrtList = LocationHelper.GetAllLocList2(workFlow.STARTAREA); |
| | | var itemFlag = LocationHelper.FindStartcolByLoclistAndcntrFlag(strrtList, workFlow.STARTAREA); |
| | | LogHelper.Info($"ZCSendTask空托出库任务没找到起点,校验是否有库存但是设备报警{itemFlag}", "Mes任务下发"); |
| | | |
| | | if (itemFlag) |
| | | { |
| | | result.errMsg = "空托出库作业有库存但设备报警"; |
| | | result.errCode = 2001; |
| | | result.success = true; |
| | | return result; |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | LogHelper.Info($"ZCSendTask出库任务下发起点信息" + JsonConvert.SerializeObject(start), "Mes任务下发"); |
| | | |
| | | if (start == null) |
| | | if (workFlow.FLOWCODE == "7" && start == null) |
| | | { |
| | | LogHelper.Info($"ZCSendTask出库任务下发失败,起点库区{workFlow.STARTAREA},没找到起点", "Mes任务下发"); |
| | | throw new Exception($"起点库区{workFlow.STARTAREA},没找到起点"); |
| | | //空托出没找到起点,先缓存到空托表 |
| | | |
| | | MesKtTask req = new MesKtTask() |
| | | { |
| | | Location_From_Area = workFlow.STARTAREA, |
| | | Location_To = end.S_CODE, |
| | | Priority = model.Priority, |
| | | CreateDate = DateTime.Now, |
| | | BUSI_TYPE = model.BUSI_TYPE, |
| | | TOOLS_TPYE = model.TOOLS_TPYE, |
| | | Status = "N" |
| | | }; |
| | | |
| | | if (TaskHelper.CreateMesKtTask(req)) |
| | | { |
| | | LogHelper.Info($"ZCSendTask空托出创建成功", "Mes任务下发"); |
| | | result.errMsg = "空托出库缓存成功"; |
| | | result.errCode = 0; |
| | | result.success = true; |
| | | return result; |
| | | } |
| | | else |
| | | { |
| | | LogHelper.Info($"ZCSendTask空托出缓存失败", "Mes任务下发"); |
| | | throw new Exception($"ZCSendTask空托出缓存失败"); |
| | | } |
| | | |
| | | |
| | | |
| | | } |
| | | else { |
| | | if (start == null) |
| | | { |
| | | LogHelper.Info($"ZCSendTask出库任务下发失败,起点库区{workFlow.STARTAREA},没找到起点", "Mes任务下发"); |
| | | throw new Exception($"起点库区{workFlow.STARTAREA},没找到起点"); |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | //获取托盘码 |
| | | var cntrCode = LocationHelper.GetLocCntrCode(start.S_CODE); |
| | |
| | | |
| | | //正式代码,调用接口寻找可用接驳位 |
| | | var connectionList = LocationHelper.GetConnectionList(workFlow.CONNECTION); |
| | | var usableConnectionList = WcsTask.WcsPositionAvailable(model.task_no, connectionList); |
| | | if (usableConnectionList != null && usableConnectionList.code == "0") |
| | | //var usableConnectionList = WcsTask.WcsPositionAvailable(model.task_no, connectionList); |
| | | //if (usableConnectionList != null && usableConnectionList.code == "0") |
| | | //{ |
| | | // foreach (var item in usableConnectionList.available) |
| | | // { |
| | | // var con = LocationHelper.GetLoc(item); |
| | | // if (con.C_ENABLE == "Y" && con.N_CURRENT_NUM < 2) |
| | | // { |
| | | // connection = con.S_CODE; |
| | | // connectionArea = con.S_AREA_Name; |
| | | // LogHelper.Info($"ZCSendTask出库任务下发寻找到可用接驳位{connection}", "Mes任务下发"); |
| | | // } |
| | | // } |
| | | //} |
| | | //else |
| | | //{ |
| | | // LogHelper.Info($"ZCSendTask出库任务下发寻找接驳位失败", "Mes任务下发"); |
| | | // throw new Exception($"ZCSendTask出库任务下发寻找接驳位失败"); |
| | | //} |
| | | |
| | | //根据接驳位任务数量获取均衡接驳位集合优先任务数少的接驳位 |
| | | var balanceConnectionList = LocationHelper.GetBalanceConnectionList(connectionList); |
| | | foreach (var item in balanceConnectionList) |
| | | { |
| | | foreach (var item in usableConnectionList.available) |
| | | if (item.loc.N_CURRENT_NUM < 2) |
| | | { |
| | | var con = LocationHelper.GetLoc(item); |
| | | if (con.S_LOCK_STATE == "无" && con.N_CURRENT_NUM < 2) |
| | | { |
| | | connection = con.S_CODE; |
| | | LogHelper.Info($"ZCSendTask出库任务下发寻找到可用接驳位{connection}", "Mes任务下发"); |
| | | } |
| | | connection = item.loc.S_CODE; |
| | | connectionArea = item.loc.S_AREA_Name; |
| | | LogHelper.Info($"ZCSendTask出库任务下发寻找到可用接驳位{connection}", "Mes任务下发"); |
| | | break; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | LogHelper.Info($"ZCSendTask出库任务下发寻找接驳位失败", "Mes任务下发"); |
| | | throw new Exception($"ZCSendTask出库任务下发寻找接驳位失败"); |
| | | } |
| | | |
| | | if (connection == "") |
| | | { |
| | | LogHelper.Info($"ZCSendTask入库任务下发寻找接驳位失败", "Mes任务下发"); |
| | | throw new Exception($"ZCSendTask入库任务下发寻找接驳位失败"); |
| | | LogHelper.Info($"ZCSendTask出库任务下发寻找接驳位失败", "Mes任务下发"); |
| | | throw new Exception($"ZCSendTask出库任务下发寻找接驳位失败"); |
| | | } |
| | | } |
| | | |
| | |
| | | //优先级 |
| | | N_PRIORITY = model.Priority, |
| | | //工装类型 |
| | | TOOLSTYPE = TOOLSTYPE |
| | | TOOLSTYPE = TOOLSTYPE, |
| | | //起点库区名称 |
| | | S_START_AREA_NAME = start.S_AREA_Name, |
| | | //起点库区名称 |
| | | S_END_AREA_NAME = end.S_AREA_Name, |
| | | //起点库区名称 |
| | | CONNECTION_AREA = connectionArea |
| | | }; |
| | | |
| | | //创建作业 |
| | |
| | | result.errCode = 0; |
| | | result.success = true; |
| | | return result; |
| | | } |
| | | else { |
| | | LogHelper.Info($"ZCSendTask出库任务下发创建作业失败", "Mes任务下发"); |
| | | throw new Exception($"ZCSendTask出库任务下发创建作业失败"); |
| | | } |
| | | |
| | | } |
| | |
| | | result.success = false; |
| | | return result; |
| | | } |
| | | |
| | | return result; |
| | | |
| | | } |
| | | |
| | | |