| | |
| | | using HH.WCS.ZhongCeJinTan.util; |
| | | using HH.WCS.ZhongCeJinTan.wms; |
| | | using Newtonsoft.Json; |
| | | using Org.BouncyCastle.Asn1.Ocsp; |
| | | using S7.Net.Types; |
| | | using System; |
| | | using System.Collections.Generic; |
| | |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using System.Web.Services.Description; |
| | | using Top.Api; |
| | | using static HH.WCS.ZhongCeJinTan.api.ApiModel; |
| | | using static HH.WCS.ZhongCeJinTan.wms.WcsModel; |
| | | |
| | |
| | | if (workFlow.INOROUT.Contains("出库")) |
| | | { |
| | | Type = "2"; |
| | | var count = TaskHelper.GetConnectionTask(mst.S_END_LOC); |
| | | if (count>=2) |
| | | { |
| | | return false; |
| | | } |
| | | |
| | | |
| | | } |
| | | } |
| | | |
| | |
| | | { |
| | | result.msg = "Wcs下发任务成功"; |
| | | result.code = "0"; |
| | | result.requestPk = model.requestPk; |
| | | } |
| | | else { |
| | | result.msg = "Wcs下发任务失败"; |
| | | result.code = "1"; |
| | | result.requestPk = model.requestPk; |
| | | } |
| | | return result; |
| | | |
| | |
| | | catch (Exception ex) |
| | | { |
| | | newDb.RollbackTran(); |
| | | result.msg = ex.Message; |
| | | result.msg = "Wcs下发任务异常"; |
| | | result.code = "1"; |
| | | result.requestPk = model.requestPk; |
| | | LogHelper.Info("Wcs下发任务异常" + ex.Message, "Wcs下发任务"); |
| | | return result; |
| | | } |
| | |
| | | } |
| | | |
| | | |
| | | ///// <summary> |
| | | /// Wcs任务执行通知 |
| | | /// </summary> |
| | | internal static WcsWarningReurn WcsOperateTask(WcsOperateTaskParme model) { |
| | | |
| | | |
| | | |
| | | ///// <summary> |
| | | /// Wcs任务执行通知 |
| | | /// </summary> |
| | | internal static WcsWarningReurn WcsOperateTask(WcsOperateTaskParme model) { |
| | | var result = new WcsWarningReurn(); |
| | | var newDb = new SqlHelper<object>().GetInstance(); |
| | | |
| | |
| | | { |
| | | taskNo = model.requestPk; |
| | | } |
| | | var transportTask = newDb.Queryable<WMSTask>().Where(e => e.S_CODE == taskNo)?.First(); |
| | | var transportTask = newDb.Queryable<WMSTask>().Where(e => e.S_CODE == taskNo && e.S_SCHEDULE_TYPE.Contains("wcs"))?.First(); |
| | | |
| | | if (transportTask == null) |
| | | { |
| | |
| | | //查找终点 |
| | | var endList = LocationHelper.GetAllLocList1(workFlow.ERRORAREA); |
| | | |
| | | var end = LocationHelper.FindBalanceEndcolByLocList(endList, workFlow.ERRORAREA,workFlow.ROADWAY); |
| | | //var end = LocationHelper.FindBalanceEndcolByLocList(endList, workFlow.ERRORAREA,workFlow.ROADWAY); |
| | | var end = LocationHelper.FindEndcolByLoc(endList, workFlow.ERRORAREA); |
| | | LogHelper.Info($"RFID校验失败下发异常终点信息" + JsonConvert.SerializeObject(end), "Wcs任务执行通知"); |
| | | |
| | | |
| | |
| | | LogHelper.Info($"RFID校验失败下发任务失败,终点库区{workFlow.ERRORAREA},没找到终点", "Wcs任务执行通知"); |
| | | throw new Exception($"RFID校验失败终点库区{workFlow.ERRORAREA},没找到终点"); |
| | | } |
| | | LocationHelper.LockLoc(end.S_CODE, "入库锁", 1); |
| | | agvTask.S_START_LOC = agvTask.S_END_LOC; |
| | | agvTask.S_START_AREA = agvTask.S_END_AREA; |
| | | agvTask.S_START_AREA_NAME = agvTask.S_END_AREA_NAME; |
| | | agvTask.S_END_LOC = end.S_CODE; |
| | | agvTask.S_END_AREA = end.S_AREA_CODE; |
| | | agvTask.S_END_AREA_NAME = end.S_AREA_Name; |
| | | agvTask.S_TYPE = workFlow.FLOWNAME; |
| | | |
| | | newDb.BeginTran(); |
| | | var I = newDb.Updateable(agvTask).UpdateColumns(it => new { it.S_START_LOC, it.S_START_AREA,it.S_END_LOC,it.S_END_AREA,it.S_TYPE,it.S_B_STATE }).ExecuteCommand(); |
| | | var I = newDb.Updateable(agvTask).UpdateColumns(it => new { it.S_START_LOC, it.S_START_AREA,it.S_END_LOC,it.S_END_AREA,it.S_TYPE,it.S_B_STATE, it.S_START_AREA_NAME, it.S_END_AREA_NAME }).ExecuteCommand(); |
| | | if (I == 0) |
| | | { |
| | | throw new Exception("修改任务表失败"); |
| | | } |
| | | newDb.CommitTran(); |
| | | //改参数通知小车 |
| | | |
| | | } |
| | | } |
| | | |
| | | newDb.BeginTran(); |
| | | var R = newDb.Insertable(RfidChek).ExecuteCommand(); |
| | | if (R == 0) |
| | |
| | | throw new Exception("添加RFID校验表失败"); |
| | | } |
| | | newDb.CommitTran(); |
| | | |
| | | } |
| | | break; |
| | | //9取货无货 |
| | | case "9": |
| | | LogHelper.Info($"任务号{transportTask.S_CODE},取货无货,取消任务", "Wcs任务执行通知"); |
| | | if (WcsCancellTask(transportTask)) { |
| | | LogHelper.Info($"任务号{transportTask.S_CODE},取消任务成功,起点{transportTask.S_START_LOC}设为异常", "Wcs任务执行通知"); |
| | | TaskHelper.Fail(transportTask); |
| | | TaskProcess.OperateStatus(transportTask, 7); |
| | | LocationHelper.updateLocLock(transportTask.S_START_LOC, 4, "异常锁"); |
| | | var agvTask = TaskHelper.GetTaskByWorkNo(transportTask.S_OP_CODE, "agv"); |
| | | if (agvTask!=null) |
| | | //取货完成 |
| | | case "5": |
| | | TaskHelper.UpdateStatus(transportTask, "取货完成"); |
| | | LocationHelper.UnBindingLoc(transportTask.S_START_LOC, transportTask.S_CNTR_CODE.Split(',').ToList()); |
| | | break; |
| | | |
| | | //7取消 |
| | | case "7": |
| | | if (transportTask.S_B_STATE=="完成") |
| | | { |
| | | throw new Exception($"{transportTask}任务已完成,不允许取消"); |
| | | } |
| | | |
| | | LogHelper.Info($"任务号{transportTask.S_CODE},取消任务成功", "Wcs任务执行通知"); |
| | | TaskHelper.Fail(transportTask); |
| | | TaskProcess.OperateStatus(transportTask, 7); |
| | | |
| | | if (transportTask.S_TYPE.Contains("出库")) |
| | | { |
| | | var agvTask1 = TaskHelper.GetTaskByWorkNo(transportTask.S_OP_CODE, "agv"); |
| | | if (agvTask1 != null) |
| | | { |
| | | TaskHelper.Fail(agvTask); |
| | | NDCApi.CancelOrder(agvTask.S_CODE.Trim()); |
| | | TaskProcess.CacheBitCancelUpdate(agvTask); |
| | | TaskHelper.Fail(agvTask1); |
| | | NDCApi.CancelOrder(agvTask1.S_CODE.Trim()); |
| | | TaskProcess.CacheBitCancelUpdate(agvTask1); |
| | | } |
| | | } |
| | | else { |
| | | ContainerHelper.delCntr(transportTask.S_CNTR_CODE); |
| | | ContainerHelper.delCntrItem(transportTask.S_CNTR_CODE); |
| | | } |
| | | |
| | | break; |
| | | default: |
| | | break; |
| | |
| | | |
| | | result.msg = "通知成功"; |
| | | result.code = "0"; |
| | | result.requestPk = model.requestPk; |
| | | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | newDb.RollbackTran(); |
| | | result.msg = ex.Message; |
| | | result.msg = "Wcs任务执行通知异常"; |
| | | result.code = "1"; |
| | | result.requestPk = model.requestPk; |
| | | LogHelper.Info("Wcs任务执行通知异常" + ex.Message, "Wcs任务执行通知"); |
| | | return result; |
| | | } |
| | |
| | | newDb.CommitTran(); |
| | | result.code = "0"; |
| | | result.msg = "成功"; |
| | | result.requestPk = model.requestPk; |
| | | LogHelper.Info("Wcs报警上报返回"+ JsonConvert.SerializeObject(result), "报警上报"); |
| | | return result; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | newDb.RollbackTran(); |
| | | result.msg = ex.Message; |
| | | result.msg = "Wcs报警信息异常"; |
| | | result.code = "1"; |
| | | result.requestPk = model.requestPk; |
| | | LogHelper.Info("Wcs报警信息异常" + ex.Message, "报警上报"); |
| | | return result; |
| | | } |
| | |
| | | |
| | | result.code = "0"; |
| | | result.msg = "成功"; |
| | | result.requestPk = model.requestPk; |
| | | LogHelper.Info("Wcs巷道可用上报返回" + JsonConvert.SerializeObject(result), "巷道可用上报"); |
| | | return result; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | newDb.RollbackTran(); |
| | | result.msg = ex.Message; |
| | | result.msg = "Wcs巷道可用上报异常"; |
| | | result.code = "1"; |
| | | result.requestPk = model.requestPk; |
| | | LogHelper.Info("Wcs巷道可用上报异常" + ex.Message, "巷道可用上报"); |
| | | return result; |
| | | } |
| | |
| | | break; |
| | | case 7: |
| | | Type = "5"; |
| | | bit = mst.S_END_LOC; |
| | | if (mst.S_TYPE.Contains("出库")) |
| | | { |
| | | bit = mst.S_START_LOC; |
| | | } |
| | | else { |
| | | bit = mst.S_END_LOC; |
| | | } |
| | | |
| | | Meshod = "AgvRequestCancel"; |
| | | break; |
| | | } |
| | |
| | | throw new Exception($"未查询到任务号{model.taskNo}的任务"); |
| | | } |
| | | |
| | | if (task.S_B_STATE.Contains("完成")|| task.S_B_STATE.Contains("取消") || task.S_B_STATE.Contains("失败")) |
| | | if (task.S_TYPE.Contains("出库")) |
| | | { |
| | | //取货无货 |
| | | LogHelper.Info($"任务号{task.S_CODE},取货无货,取消任务", "放货有货"); |
| | | if (WcsCancellTask(task)) |
| | | { |
| | | LogHelper.Info($"任务号{task.S_CODE},取消任务成功,起点{task.S_START_LOC}设为异常", "放货有货"); |
| | | TaskHelper.Fail(task); |
| | | TaskProcess.OperateStatus(task, 7); |
| | | LocationHelper.updateLocLock(task.S_START_LOC, 4, "异常锁"); |
| | | var agvTask = TaskHelper.GetTaskByWorkNo(task.S_OP_CODE, "agv"); |
| | | if (agvTask != null) |
| | | { |
| | | TaskHelper.Fail(agvTask); |
| | | NDCApi.CancelOrder(agvTask.S_CODE.Trim()); |
| | | TaskProcess.CacheBitCancelUpdate(agvTask); |
| | | } |
| | | } |
| | | |
| | | } |
| | | else { |
| | | //卸货有货 |
| | | if (task.S_B_STATE.Contains("完成") || task.S_B_STATE.Contains("取消") || task.S_B_STATE.Contains("失败")) |
| | | { |
| | | throw new Exception($"任务号{model.taskNo},任务状态:{task.S_B_STATE},不能改道"); |
| | | } |
| | | |
| | | var endLoc = LocationHelper.GetLocOne(task.S_END_LOC); |
| | | var endLoc = LocationHelper.GetLocOne(task.S_END_LOC); |
| | | |
| | | var end = newDb.Queryable<Location>().Where(a => a.S_AREA_CODE == endLoc.S_AREA_CODE && a.N_ROW == endLoc.N_ROW && a.N_COL > endLoc.N_COL && a.S_LOCK_STATE == "无" && a.N_CURRENT_NUM == 0 && a.C_ENABLE=="Y").OrderBy(b=>b.N_COL).First(); |
| | | var end = newDb.Queryable<Location>().Where(a => a.S_AREA_CODE == endLoc.S_AREA_CODE && a.N_ROW == endLoc.N_ROW && a.N_COL > endLoc.N_COL && a.S_LOCK_STATE == "无" && a.N_CURRENT_NUM == 0 && a.C_ENABLE == "Y").OrderBy(b => b.N_COL).First(); |
| | | |
| | | LogHelper.Info($"Wcs放货有货寻找新终点信息" + JsonConvert.SerializeObject(end), "放货有货"); |
| | | LogHelper.Info($"Wcs放货有货寻找新终点信息" + JsonConvert.SerializeObject(end), "放货有货"); |
| | | |
| | | if (end!=null) |
| | | { |
| | | newDb.BeginTran(); |
| | | endLoc.N_LOCK_STATE = 4; |
| | | endLoc.S_LOCK_STATE = "异常锁"; |
| | | newDb.Updateable(endLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE }).ExecuteCommand(); |
| | | task.S_END_LOC = end.S_CODE; |
| | | newDb.Updateable(task).UpdateColumns(it => new { it.S_END_LOC }).ExecuteCommand(); |
| | | newDb.CommitTran(); |
| | | LocationHelper.LockLoc(end.S_CODE, "入库锁", 1); |
| | | result.msg = end.S_CODE; |
| | | result.code = "0"; |
| | | if (end != null) |
| | | { |
| | | newDb.BeginTran(); |
| | | endLoc.N_LOCK_STATE = 4; |
| | | endLoc.S_LOCK_STATE = "异常锁"; |
| | | newDb.Updateable(endLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE }).ExecuteCommand(); |
| | | task.S_END_LOC = end.S_CODE; |
| | | newDb.Updateable(task).UpdateColumns(it => new { it.S_END_LOC }).ExecuteCommand(); |
| | | newDb.CommitTran(); |
| | | LocationHelper.LockLoc(end.S_CODE, "入库锁", 1); |
| | | result.msg = end.S_CODE; |
| | | result.code = "0"; |
| | | result.requestPk = model.requestPk; |
| | | } |
| | | else |
| | | { |
| | | throw new Exception($"未查询到库区{endLoc.S_AREA_CODE}有符合的货位"); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | throw new Exception($"未查询到库区{endLoc.S_AREA_CODE}有符合的货位"); |
| | | } |
| | | |
| | | |
| | | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | newDb.RollbackTran(); |
| | | result.msg = ex.Message; |
| | | result.msg = "Wcs放货有货异常"; |
| | | result.code = "1"; |
| | | result.requestPk = model.requestPk; |
| | | LogHelper.Info("Wcs放货有货异常" + ex.Message, "放货有货"); |
| | | return result; |
| | | } |
| | |
| | | newDb.CommitTran(); |
| | | result.code = "0"; |
| | | result.msg = "成功"; |
| | | result.requestPk = model.requestPk; |
| | | LogHelper.Info("Wcs通知确认返回" + JsonConvert.SerializeObject(result), "通知确认"); |
| | | return result; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | newDb.RollbackTran(); |
| | | result.msg = ex.Message; |
| | | result.msg = "Wcs通知确认异常"; |
| | | result.code = "1"; |
| | | result.requestPk = model.requestPk; |
| | | LogHelper.Info("Wcs通知确认异常" + ex.Message, "通知确认"); |
| | | return result; |
| | | } |
| | |
| | | public string status { get; set; } |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// mes汇报任务返回 |
| | | /// </summary> |
| | | public class MesTaskReturn |
| | | { |
| | | public string code { get; set; } |
| | | public string msg { get; set; } |
| | | public bool success { get; set; } |
| | | public DataItem lastTime { get; set; } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// Mes接口返回 |
| | | /// </summary> |