| | |
| | | } |
| | | |
| | | //接驳位两个agv任务,a任务取货完成 推送b任务 |
| | | var agvTask = LocationHelper.GetConnectionTask(wmsWork.CONNECTION,"agv"); |
| | | var agvTask = LocationHelper.GetConnectionTask(wmsWork.CONNECTION,"agv", mst.T_CREATE); |
| | | |
| | | LogHelper.Info($"推送任务{mst.S_CODE},当前接驳位{wmsWork.CONNECTION},第一个agv任务信息"+JsonConvert.SerializeObject(agvTask), "NDC"); |
| | | //if (agvTask==null) |
| | |
| | | return result; |
| | | } |
| | | |
| | | if (string.IsNullOrEmpty(model.task_no)) |
| | | { |
| | | result.errMsg = "task_no为null"; |
| | | result.errCode = 1; |
| | | result.success = false; |
| | | return result; |
| | | } |
| | | |
| | | |
| | | try |
| | | { |
| | | var task = TaskHelper.GetTaskByWorkNo(model.task_no, "agv"); |
| | | |
| | | var wcsTask = TaskHelper.GetTaskByWorkNo(model.task_no, "wcs"); |
| | | |
| | | if (task != null) |
| | | var work = TaskHelper.GetWmsWork(model.task_no); |
| | | |
| | | if (work==null) |
| | | { |
| | | LogHelper.Info($"cancelTask1取消agv任务{task.S_CODE}:", "取消"); |
| | | if (task.S_B_STATE.Trim() == "未执行") |
| | | result.errCode = 1; |
| | | result.errMsg = $"{model.task_no}作业不存在,不允许取消"; |
| | | result.success = false; |
| | | return result; |
| | | } |
| | | |
| | | //作业没有接驳位,一段任务取消 |
| | | if (string.IsNullOrEmpty(work.CONNECTION)) { |
| | | if (task != null) |
| | | { |
| | | //未执行直接修改状态为取消 |
| | | TaskHelper.opMesTask(task, 3); |
| | | TaskHelper.Fail(task); |
| | | TaskProcess.CacheBitCancelUpdate(task); |
| | | |
| | | if (task.S_TYPE.Contains("入库") || task.S_TYPE.Contains("回库")) |
| | | if (task.S_TYPE.Contains("出库")) |
| | | { |
| | | ContainerHelper.delCntr(task.S_CNTR_CODE); |
| | | ContainerHelper.delCntrItem(task.S_CNTR_CODE); |
| | | |
| | | |
| | | } |
| | | result.errCode = 0; |
| | | result.errMsg = "取消成功"; |
| | | result.success = true; |
| | | } |
| | | else if (task.S_B_STATE.Trim() != "取消" && task.S_B_STATE.Trim() != "失败" && task.S_B_STATE.Trim() != "完成") |
| | | { |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | var qhflag = db.Queryable<WmsTaskAction>().Where(a => a.S_TASK_CODE == task.S_CODE && a.S_ACTION == "4").First(); |
| | | else { |
| | | if (task.S_B_STATE.Trim() == "未执行") |
| | | { |
| | | //未执行直接修改状态为取消 |
| | | TaskHelper.opMesTask(task, 3); |
| | | TaskHelper.Fail(task); |
| | | TaskProcess.CacheBitCancelUpdate(task); |
| | | |
| | | ContainerHelper.delCntr(task.S_CNTR_CODE); |
| | | ContainerHelper.delCntrItem(task.S_CNTR_CODE); |
| | | |
| | | result.errCode = 0; |
| | | result.errMsg = "取消成功"; |
| | | result.success = true; |
| | | } |
| | | else if (task.S_B_STATE.Trim() != "取消" && task.S_B_STATE.Trim() != "失败" && task.S_B_STATE.Trim() != "完成") |
| | | { |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | var qhflag = db.Queryable<WmsTaskAction>().Where(a => a.S_TASK_CODE == task.S_CODE && a.S_ACTION == "4").First(); |
| | | |
| | | if (qhflag != null) |
| | | { |
| | | LogHelper.Info($"该任务{task.S_CODE}已经取货完成", "取消"); |
| | | result.errCode = 1; |
| | | result.errMsg = "任务已经取货完成,不允许取消"; |
| | | result.success = false; |
| | | return result; |
| | | if (qhflag != null) |
| | | { |
| | | LogHelper.Info($"该任务{task.S_CODE}已经取货完成", "取消"); |
| | | result.errCode = 1; |
| | | result.errMsg = "任务已经取货完成,不允许取消"; |
| | | result.success = false; |
| | | return result; |
| | | } |
| | | ContainerHelper.delCntr(task.S_CNTR_CODE); |
| | | ContainerHelper.delCntrItem(task.S_CNTR_CODE); |
| | | ContainerHelper.delCntrLoc(task.S_CNTR_CODE); |
| | | |
| | | |
| | | TaskHelper.opMesTask(task, 3); |
| | | //已推送但是没有完成或者取消,通知hosttoagv |
| | | TaskHelper.Fail(task); |
| | | |
| | | NDCApi.CancelOrder(task.S_CODE.Trim()); |
| | | TaskProcess.CacheBitCancelUpdate(task); |
| | | |
| | | result.errCode = 0; |
| | | result.errMsg = "取消成功"; |
| | | result.success = true; |
| | | } |
| | | else |
| | | { |
| | | result.errCode = 1; |
| | | result.errMsg = "任务已经结束"; |
| | | result.success = false; |
| | | } |
| | | } |
| | | if (task.S_TYPE.Contains("入库") || task.S_TYPE.Contains("回库")) |
| | | { |
| | | ContainerHelper.delCntr(task.S_CNTR_CODE); |
| | | ContainerHelper.delCntrItem(task.S_CNTR_CODE); |
| | | ContainerHelper.delCntrLoc(task.S_CNTR_CODE); |
| | | } |
| | | |
| | | TaskHelper.opMesTask(task, 3); |
| | | //已推送但是没有完成或者取消,通知hosttoagv |
| | | TaskHelper.Fail(task); |
| | | |
| | | NDCApi.CancelOrder(task.S_CODE.Trim()); |
| | | TaskProcess.CacheBitCancelUpdate(task); |
| | | |
| | | result.errCode = 0; |
| | | result.errMsg = "取消成功"; |
| | | result.success = true; |
| | | LogHelper.Info($"cancelTask1取消agv任务{task.S_CODE}:", "取消"); |
| | | } |
| | | else |
| | | { |
| | | result.errCode = 1; |
| | | result.errMsg = "任务已经结束"; |
| | | result.errMsg = $"{model.task_no},Agv任务不存在"; |
| | | result.success = false; |
| | | } |
| | | } |
| | | else |
| | | }else |
| | | { |
| | | result.errCode = 1; |
| | | result.errMsg = $"{model.task_no}任务不存在"; |
| | | result.success = false; |
| | | } |
| | | //二段任务取消 |
| | | |
| | | if (wcsTask != null) |
| | | { |
| | | LogHelper.Info($"cancelTask1取消Wcs任务{wcsTask.S_CODE}", "取消"); |
| | | if (wcsTask.S_B_STATE.Trim() == "未执行") |
| | | if (task.S_TYPE.Contains("出库")) |
| | | { |
| | | //未执行直接修改状态为取消 |
| | | if (wcsTask.S_TYPE.Contains("入库") || wcsTask.S_TYPE.Contains("回库")) |
| | | if (wcsTask != null) |
| | | { |
| | | ContainerHelper.delCntr(wcsTask.S_CNTR_CODE); |
| | | ContainerHelper.delCntrItem(wcsTask.S_CNTR_CODE); |
| | | LogHelper.Info($"cancelTask1取消Wcs任务{wcsTask.S_CODE}", "取消"); |
| | | if (wcsTask.S_B_STATE.Trim() == "未执行" && task.S_B_STATE.Trim() == "未执行") |
| | | { |
| | | //未执行直接修改状态为取消 |
| | | TaskHelper.opMesTask(task, 3); |
| | | TaskHelper.Fail(task); |
| | | TaskProcess.OperateStatus(task,7); |
| | | TaskHelper.Fail(wcsTask); |
| | | TaskProcess.OperateStatus(wcsTask, 7); |
| | | result.errCode = 0; |
| | | result.errMsg = "取消成功"; |
| | | result.success = true; |
| | | return result; |
| | | } |
| | | else |
| | | { |
| | | LogHelper.Info($"该任务{wcsTask.S_CODE}已经推送", "取消"); |
| | | result.errCode = 1; |
| | | result.errMsg = "任务已经推送,不允许取消"; |
| | | result.success = false; |
| | | return result; |
| | | } |
| | | } |
| | | TaskHelper.Fail(wcsTask); |
| | | TaskProcess.OperateStatus(wcsTask, 7); |
| | | result.errCode = 0; |
| | | result.errMsg = "取消成功"; |
| | | result.success = true; |
| | | return result; |
| | | } |
| | | else |
| | | else |
| | | { |
| | | LogHelper.Info($"该任务{wcsTask.S_CODE}已经推送", "取消"); |
| | | if (task.S_B_STATE.Trim() == "未执行") |
| | | { |
| | | //未执行直接修改状态为取消 |
| | | TaskHelper.opMesTask(task, 3); |
| | | TaskHelper.Fail(task); |
| | | TaskProcess.CacheBitCancelUpdate(task); |
| | | |
| | | ContainerHelper.delCntr(task.S_CNTR_CODE); |
| | | ContainerHelper.delCntrItem(task.S_CNTR_CODE); |
| | | |
| | | result.errCode = 0; |
| | | result.errMsg = "取消成功"; |
| | | result.success = true; |
| | | } |
| | | else if (task.S_B_STATE.Trim() != "取消" && task.S_B_STATE.Trim() != "失败" && task.S_B_STATE.Trim() != "完成") |
| | | { |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | var qhflag = db.Queryable<WmsTaskAction>().Where(a => a.S_TASK_CODE == task.S_CODE && a.S_ACTION == "4").First(); |
| | | |
| | | if (qhflag != null) |
| | | { |
| | | LogHelper.Info($"该任务{task.S_CODE}已经取货完成", "取消"); |
| | | result.errCode = 1; |
| | | result.errMsg = "任务已经取货完成,不允许取消"; |
| | | result.success = false; |
| | | return result; |
| | | } |
| | | ContainerHelper.delCntr(task.S_CNTR_CODE); |
| | | ContainerHelper.delCntrItem(task.S_CNTR_CODE); |
| | | ContainerHelper.delCntrLoc(task.S_CNTR_CODE); |
| | | |
| | | |
| | | TaskHelper.opMesTask(task, 3); |
| | | //已推送但是没有完成或者取消,通知hosttoagv |
| | | TaskHelper.Fail(task); |
| | | |
| | | NDCApi.CancelOrder(task.S_CODE.Trim()); |
| | | TaskProcess.CacheBitCancelUpdate(task); |
| | | |
| | | result.errCode = 0; |
| | | result.errMsg = "取消成功"; |
| | | result.success = true; |
| | | } |
| | | else |
| | | { |
| | | result.errCode = 1; |
| | | result.errMsg = "任务已经推送,不允许取消"; |
| | | result.errMsg = "任务已经结束"; |
| | | result.success = false; |
| | | return result; |
| | | |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | |
| | | throw new Exception("缺少参数task_no"); |
| | | } |
| | | |
| | | var work = TaskHelper.GetWmsWork(model.task_no); |
| | | if (work != null) |
| | | { |
| | | throw new Exception($"任务{model.task_no}已经创建作业,请勿重复申请"); |
| | | } |
| | | |
| | | |
| | | //var wmsWork = TaskHelper.GetTaskByCntrCode(model.TOOLS_NO); |
| | | |
| | |
| | | { |
| | | |
| | | //正式代码,调用接口寻找可用接驳位 |
| | | //var connectionList = LocationHelper.GetConnectionList(workFlow.CONNECTION); |
| | | //var usableConnectionList = WcsTask.WcsPositionAvailable(model.task_no, connectionList); |
| | | //if (usableConnectionList != null && usableConnectionList.code == "0") |
| | | //{ |
| | | // var balanceConnectionList = LocationHelper.GetConnectionListByst(usableConnectionList.available); |
| | | // LogHelper.Info($"ZCSendTask入库任务下发寻找可用接驳位" + JsonConvert.SerializeObject(balanceConnectionList), "Mes任务下发"); |
| | | |
| | | // if (workFlow.FLOWCODE == "1" || workFlow.FLOWCODE == "2") |
| | | // { |
| | | // //满托入 |
| | | // balanceLocList = LocationHelper.FindBalanceEndLocList(endList, workFlow.ENDAREA, workFlow.ROADWAY); |
| | | |
| | | // if (TOOLSTYPE == "25" || TOOLSTYPE == "35") { |
| | | // LogHelper.Info($"ZCSendTask入库任务工装是二合一库,需要物料均衡", "Mes任务下发"); |
| | | // balanceLocList = LocationHelper.RoadWayBalance1ByItem(balanceLocList, model.PROD_NO); |
| | | // } |
| | | |
| | | |
| | | |
| | | // } |
| | | // else if (workFlow.FLOWCODE == "3") |
| | | // { |
| | | // //空托入立库区 |
| | | // cntrCount = 0; |
| | | // LogHelper.Info($"ZCSendTask入库任务,寻找立库区空货位", "Mes任务下发"); |
| | | // balanceLocList = LocationHelper.FindBalanceEndLocList(endList, workFlow.ENDAREA, workFlow.ROADWAY); |
| | | // } |
| | | |
| | | // LogHelper.Info($"ZCSendTask入库任务下发寻找终点数量{balanceLocList.Count}", "Mes任务下发"); |
| | | |
| | | // foreach (var item in balanceLocList) |
| | | // { |
| | | // if (item.S_LOCK_STATE == "无" && item.N_CURRENT_NUM == 0) |
| | | // { |
| | | // // LogHelper.Info($"ZCSendTask入库任务下发item信息" + JsonConvert.SerializeObject(item), "Mes任务下发"); |
| | | // foreach (var item1 in balanceConnectionList) |
| | | // { |
| | | // if (item1.CONNEC_ROADWAY == item.N_ROADWAY) |
| | | // { |
| | | // connection = item1.S_CODE; |
| | | // connectionArea = item1.S_AREA_Name; |
| | | // end = item; |
| | | // LogHelper.Info($"ZCSendTask入库任务下发寻找到可用接驳位{connection}", "Mes任务下发"); |
| | | // break; |
| | | // } |
| | | // } |
| | | // if (end!=null) |
| | | // { |
| | | // LogHelper.Info($"ZCSendTask入库任务下发寻找到终点{end.S_CODE}", "Mes任务下发"); |
| | | // break; |
| | | // } |
| | | // } |
| | | // } |
| | | // if (connection == "") |
| | | // { |
| | | // LogHelper.Info($"ZCSendTask入库任务下发没找到接驳位", "Mes任务下发"); |
| | | // throw new Exception($"ZCSendTask入库任务下发没找到接驳位"); |
| | | // } |
| | | //} |
| | | //else |
| | | //{ |
| | | // LogHelper.Info($"ZCSendTask入库任务下发寻找接驳位接口失败", "Mes任务下发"); |
| | | // throw new Exception($"ZCSendTask入库任务下发寻找接驳位接口失败"); |
| | | //} |
| | | |
| | | |
| | | if (workFlow.FLOWCODE == "1" || workFlow.FLOWCODE == "2" || workFlow.FLOWCODE == "5" || workFlow.FLOWCODE == "8" || workFlow.FLOWCODE == "11") |
| | | var connectionList = LocationHelper.GetConnectionList(workFlow.CONNECTION); |
| | | var usableConnectionList = WcsTask.WcsPositionAvailable(model.task_no, connectionList); |
| | | if (usableConnectionList != null && usableConnectionList.code == "0") |
| | | { |
| | | //满托入 |
| | | var balanceConnectionList = LocationHelper.GetConnectionListByst(usableConnectionList.available); |
| | | LogHelper.Info($"ZCSendTask入库任务下发寻找可用接驳位" + JsonConvert.SerializeObject(balanceConnectionList), "Mes任务下发"); |
| | | |
| | | if (TOOLSTYPE == "25" || TOOLSTYPE == "35") |
| | | if (workFlow.FLOWCODE == "1" || workFlow.FLOWCODE == "2" || workFlow.FLOWCODE == "5" || workFlow.FLOWCODE == "8" || workFlow.FLOWCODE == "11") |
| | | { |
| | | LogHelper.Info($"ZCSendTask入库任务工装是二合一库,需要物料均衡", "Mes任务下发"); |
| | | end = LocationHelper.FindBalanceEndcolByLocListItem(endList, workFlow.ENDAREA, workFlow.ROADWAY, workFlow.CONNECTION, model.task_no, model.PROD_NO); |
| | | //满托入 |
| | | if (TOOLSTYPE == "25" || TOOLSTYPE == "35") |
| | | { |
| | | LogHelper.Info($"ZCSendTask入库任务工装是二合一库,需要物料均衡", "Mes任务下发"); |
| | | balanceLocList = LocationHelper.RoadWayBalance1ByItem(balanceLocList, model.PROD_NO); |
| | | } |
| | | else { |
| | | balanceLocList = LocationHelper.FindBalanceEndLocList(endList, workFlow.ENDAREA, workFlow.ROADWAY); |
| | | } |
| | | |
| | | } |
| | | else { |
| | | end = LocationHelper.FindBalanceEndcolByLocList(endList, workFlow.ENDAREA, workFlow.ROADWAY, workFlow.CONNECTION, model.task_no); |
| | | else if (workFlow.FLOWCODE == "3" || workFlow.FLOWCODE == "10") |
| | | { |
| | | //空托入立库区 |
| | | cntrCount = 0; |
| | | LogHelper.Info($"ZCSendTask入库任务,寻找立库区空货位", "Mes任务下发"); |
| | | balanceLocList = LocationHelper.FindBalanceEndLocList(endList, workFlow.ENDAREA, workFlow.ROADWAY); |
| | | } |
| | | |
| | | LogHelper.Info($"ZCSendTask入库任务下发寻找终点数量{balanceLocList.Count}", "Mes任务下发"); |
| | | |
| | | foreach (var item in balanceLocList) |
| | | { |
| | | if (item.S_LOCK_STATE == "无" && item.N_CURRENT_NUM == 0) |
| | | { |
| | | // LogHelper.Info($"ZCSendTask入库任务下发item信息" + JsonConvert.SerializeObject(item), "Mes任务下发"); |
| | | foreach (var item1 in balanceConnectionList) |
| | | { |
| | | if (item1.CONNEC_ROADWAY == item.N_ROADWAY) |
| | | { |
| | | connection = item1.S_CODE; |
| | | connectionArea = item1.S_AREA_Name; |
| | | end = item; |
| | | LogHelper.Info($"ZCSendTask入库任务下发寻找到可用接驳位{connection}", "Mes任务下发"); |
| | | break; |
| | | } |
| | | } |
| | | if (end != null) |
| | | { |
| | | LogHelper.Info($"ZCSendTask入库任务下发寻找到终点{end.S_CODE}", "Mes任务下发"); |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | if (connection == "") |
| | | { |
| | | LogHelper.Info($"ZCSendTask入库任务{model.task_no}下发失败,终点库区{workFlow.ENDAREA},没找到终点巷道或接驳位不可用", "Mes任务下发"); |
| | | throw new Exception($"{model.task_no}下发失败终点库区{workFlow.ENDAREA},没找到终点,巷道或接驳位不可用"); |
| | | } |
| | | } |
| | | else if (workFlow.FLOWCODE == "3" || workFlow.FLOWCODE == "10") |
| | | else |
| | | { |
| | | //空托入立库区 |
| | | cntrCount = 0; |
| | | LogHelper.Info($"ZCSendTask入库任务,寻找立库区空货位", "Mes任务下发"); |
| | | end = LocationHelper.FindBalanceEndcolByLocList(endList, workFlow.ENDAREA, workFlow.ROADWAY, workFlow.CONNECTION, model.task_no); |
| | | } |
| | | |
| | | if (end == null) |
| | | { |
| | | LogHelper.Info($"ZCSendTask入库任务{model.task_no}下发失败,终点库区{workFlow.ENDAREA},没找到终点巷道或接驳位不可用", "Mes任务下发"); |
| | | throw new Exception($"{model.task_no}下发失败终点库区{workFlow.ENDAREA},没找到终点,巷道或接驳位不可用"); |
| | | } |
| | | |
| | | var jb = LocationHelper.GetConnectionByEnd(workFlow.CONNECTION, end.N_ROADWAY); |
| | | |
| | | if (jb==null) |
| | | { |
| | | LogHelper.Info($"ZCSendTask入库任务下发库区{workFlow.CONNECTION},巷道{end.N_ROADWAY},没找到接驳位", "Mes任务下发"); |
| | | throw new Exception($"ZCSendTask入库任务下发库区{workFlow.CONNECTION},巷道{end.N_ROADWAY},没找到接驳位"); |
| | | LogHelper.Info($"ZCSendTask入库任务下发寻找接驳位接口失败", "Mes任务下发"); |
| | | throw new Exception($"ZCSendTask入库任务下发寻找接驳位接口失败"); |
| | | } |
| | | |
| | | |
| | | connection = jb.S_CODE; |
| | | connectionArea = jb.S_AREA_Name; |
| | | //if (workFlow.FLOWCODE == "1" || workFlow.FLOWCODE == "2" || workFlow.FLOWCODE == "5" || workFlow.FLOWCODE == "8" || workFlow.FLOWCODE == "11") |
| | | //{ |
| | | // //满托入 |
| | | |
| | | // if (TOOLSTYPE == "25" || TOOLSTYPE == "35") |
| | | // { |
| | | // LogHelper.Info($"ZCSendTask入库任务工装是二合一库,需要物料均衡", "Mes任务下发"); |
| | | // end = LocationHelper.FindBalanceEndcolByLocListItem(endList, workFlow.ENDAREA, workFlow.ROADWAY, workFlow.CONNECTION, model.task_no, model.PROD_NO); |
| | | |
| | | // } |
| | | // else { |
| | | // end = LocationHelper.FindBalanceEndcolByLocList(endList, workFlow.ENDAREA, workFlow.ROADWAY, workFlow.CONNECTION, model.task_no); |
| | | // } |
| | | |
| | | //} |
| | | //else if (workFlow.FLOWCODE == "3" || workFlow.FLOWCODE == "10") |
| | | //{ |
| | | // //空托入立库区 |
| | | // cntrCount = 0; |
| | | // LogHelper.Info($"ZCSendTask入库任务,寻找立库区空货位", "Mes任务下发"); |
| | | // end = LocationHelper.FindBalanceEndcolByLocList(endList, workFlow.ENDAREA, workFlow.ROADWAY, workFlow.CONNECTION, model.task_no); |
| | | //} |
| | | |
| | | //if (end == null) |
| | | //{ |
| | | // LogHelper.Info($"ZCSendTask入库任务{model.task_no}下发失败,终点库区{workFlow.ENDAREA},没找到终点巷道或接驳位不可用", "Mes任务下发"); |
| | | // throw new Exception($"{model.task_no}下发失败终点库区{workFlow.ENDAREA},没找到终点,巷道或接驳位不可用"); |
| | | //} |
| | | |
| | | //var jb = LocationHelper.GetConnectionByEnd(workFlow.CONNECTION, end.N_ROADWAY); |
| | | |
| | | //if (jb==null) |
| | | //{ |
| | | // LogHelper.Info($"ZCSendTask入库任务下发库区{workFlow.CONNECTION},巷道{end.N_ROADWAY},没找到接驳位", "Mes任务下发"); |
| | | // throw new Exception($"ZCSendTask入库任务下发库区{workFlow.CONNECTION},巷道{end.N_ROADWAY},没找到接驳位"); |
| | | //} |
| | | |
| | | |
| | | //connection = jb.S_CODE; |
| | | //connectionArea = jb.S_AREA_Name; |
| | | |
| | | |
| | | } |