| | |
| | | string Traycode = mst.S_CNTR_CODE; |
| | | var isFu = "0"; |
| | | |
| | | var cntr = ContainerHelper.GetCntr(Traycode); |
| | | |
| | | if (cntr!=null) |
| | | try |
| | | { |
| | | if (cntr.N_DETAIL_COUNT>0) |
| | | var cntr = ContainerHelper.GetCntr(Traycode); |
| | | |
| | | if (cntr != null) |
| | | { |
| | | isFu = "1"; |
| | | if (cntr.N_DETAIL_COUNT > 0) |
| | | { |
| | | isFu = "1"; |
| | | } |
| | | } |
| | | } |
| | | var workFlow = TaskHelper.selectWorkFlowByType(mst.N_TYPE.ToString(), mst.TOOLSTYPE); |
| | | var workFlow = TaskHelper.selectWorkFlowByType(mst.N_TYPE.ToString(), mst.TOOLSTYPE); |
| | | |
| | | |
| | | |
| | | if (workFlow != null) |
| | | { |
| | | if (workFlow.INOROUT.Contains("入库")) |
| | | |
| | | if (workFlow != null) |
| | | { |
| | | Type = "1"; |
| | | if (workFlow.INOROUT.Contains("入库")) |
| | | { |
| | | Type = "1"; |
| | | } |
| | | |
| | | if (workFlow.INOROUT.Contains("出库")) |
| | | { |
| | | Type = "2"; |
| | | var count = TaskHelper.GetConnectionTask(mst.S_END_LOC); |
| | | if (count >= 2) |
| | | { |
| | | return false; |
| | | } |
| | | |
| | | |
| | | } |
| | | } |
| | | |
| | | if (workFlow.INOROUT.Contains("出库")) |
| | | if (mst.S_CNTR_CODE.Contains("KJZ")) |
| | | { |
| | | Type = "2"; |
| | | var count = TaskHelper.GetConnectionTask(mst.S_END_LOC); |
| | | if (count>=2) |
| | | TrayType = "KJZ"; |
| | | } |
| | | |
| | | var interact = new |
| | | { |
| | | requestPk = mst.S_CODE,//任务号 |
| | | contNo = Traycode,//托盘号 |
| | | contType = TrayType,//托盘类型 |
| | | trkType = Type,//任务类型 |
| | | trkPrty = mst.N_PRIORITY,//任务优先级 |
| | | frmPos = mst.S_START_LOC,//起始位置 |
| | | toPos = mst.S_END_LOC,//目的地 |
| | | isFull = isFu,//空托 满托 |
| | | groupNo = Item?.S_ITEM_NAME,//搬送组号 |
| | | clientCode = "WMS",//操作人 |
| | | operationTime = DateTime.Now.ToString()//操作时间 |
| | | }; |
| | | LogHelper.Info("Wcs立库下发任务 地址信息:" + baseUrl + "receive", "立库下发任务"); |
| | | LogHelper.Info("Wcs立库下发任务 参数信息:" + JsonConvert.SerializeObject(interact), "立库下发任务"); |
| | | var result = apiHelper.Post(baseUrl + "receive", JsonConvert.SerializeObject(interact)); |
| | | LogHelper.Info("Wcs立库下发任务 返回信息:" + JsonConvert.SerializeObject(result), "立库下发任务"); |
| | | if (!string.IsNullOrEmpty(result)) |
| | | { |
| | | var res = JsonConvert.DeserializeObject<WcsTaskReturn>(result); |
| | | if (res.code == "0") |
| | | { |
| | | TaskHelper.UpdateStatus(mst, "已推送"); |
| | | return true; |
| | | } |
| | | else |
| | | { |
| | | return false; |
| | | } |
| | | |
| | | |
| | | } |
| | | } |
| | | |
| | | if (mst.S_CNTR_CODE.Contains("KJZ")) |
| | | { |
| | | TrayType = "KJZ"; |
| | | } |
| | | |
| | | var interact = new |
| | | { |
| | | requestPk = mst.S_CODE,//任务号 |
| | | contNo = Traycode,//托盘号 |
| | | contType = TrayType,//托盘类型 |
| | | trkType = Type,//任务类型 |
| | | trkPrty = mst.N_PRIORITY,//任务优先级 |
| | | frmPos = mst.S_START_LOC,//起始位置 |
| | | toPos = mst.S_END_LOC,//目的地 |
| | | isFull = isFu,//空托 满托 |
| | | groupNo = Item?.S_ITEM_NAME,//搬送组号 |
| | | clientCode = "WMS",//操作人 |
| | | operationTime = DateTime.Now.ToString()//操作时间 |
| | | }; |
| | | LogHelper.Info("Wcs立库下发任务 地址信息:" + baseUrl + "receive", "立库下发任务"); |
| | | LogHelper.Info("Wcs立库下发任务 参数信息:" + JsonConvert.SerializeObject(interact), "立库下发任务"); |
| | | var result = apiHelper.Post(baseUrl + "receive", JsonConvert.SerializeObject(interact)); |
| | | LogHelper.Info("Wcs立库下发任务 返回信息:" + JsonConvert.SerializeObject(result), "立库下发任务"); |
| | | if (!string.IsNullOrEmpty(result)) |
| | | { |
| | | var res = JsonConvert.DeserializeObject<WcsTaskReturn>(result); |
| | | if (res.code == "0") |
| | | { |
| | | TaskHelper.UpdateStatus(mst, "已推送"); |
| | | return true; |
| | | } |
| | | else |
| | | { |
| | | LogHelper.Info("Wcs立库下发任务 返回信息为空", "立库下发任务"); |
| | | return false; |
| | | } |
| | | } |
| | | else |
| | | catch (Exception) |
| | | { |
| | | LogHelper.Info("Wcs立库下发任务 返回信息为空", "立库下发任务"); |
| | | return false; |
| | | |
| | | throw; |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | try |
| | | { |
| | | |
| | | var taskNo = ""; |
| | | |
| | | if (string.IsNullOrEmpty(model.requestPk)) |
| | |
| | | throw new Exception("未查询到对应的任务"); |
| | | } |
| | | |
| | | if (transportTask.S_B_STATE == "完成" || transportTask.S_B_STATE == "取消") |
| | | { |
| | | throw new Exception($"{transportTask}任务已{transportTask.S_B_STATE},不允许操作"); |
| | | } |
| | | |
| | | |
| | | |
| | | TaskHelper.WcsAddActionRecord(model.requestPk, model.noticeType, "WCS"); |
| | | |
| | | switch (model.noticeType) |
| | |
| | | RfidChek.S_RESULT = "RFID校验失败"; |
| | | if (WcsCancellTask(transportTask)) |
| | | { |
| | | ContainerHelper.delCntr(transportTask.S_CNTR_CODE); |
| | | ContainerHelper.delCntrItem(transportTask.S_CNTR_CODE); |
| | | |
| | | TaskHelper.Fail(transportTask); |
| | | TaskProcess.OperateStatus(transportTask, 7); |
| | | |
| | | |
| | | var agvTask = TaskHelper.GetTaskByWorkNo(transportTask.S_OP_CODE, "agv"); |
| | | |
| | | if (agvTask == null) |
| | | { |
| | | LogHelper.Info($"RFID校验失败,没找到对应{transportTask.S_OP_CODE}的agv任务", "Wcs任务执行通知"); |
| | | throw new Exception($"RFID校验失败,没找到对应{transportTask.S_OP_CODE }的agv任务"); |
| | | throw new Exception($"RFID校验失败,没找到对应{transportTask.S_OP_CODE}的agv任务"); |
| | | } |
| | | var workFlow = TaskHelper.selectWorkFlowByType(agvTask.N_TYPE.ToString(), agvTask.TOOLSTYPE); |
| | | |
| | | if (workFlow == null) |
| | | { |
| | | LogHelper.Info($"RFID校验失败,没找到对应作业流程", "Wcs任务执行通知"); |
| | | throw new Exception($"RFID校验失败,没找到对应作业流程"); |
| | | } |
| | | |
| | | if (workFlow == null) |
| | | { |
| | | LogHelper.Info($"RFID校验失败,没找到对应作业流程", "Wcs任务执行通知"); |
| | | throw new Exception($"RFID校验失败,没找到对应作业流程"); |
| | | } |
| | | //查找终点 |
| | | var endList = LocationHelper.GetAllLocList1(workFlow.ERRORAREA); |
| | | |
| | | //var end = LocationHelper.FindBalanceEndcolByLocList(endList, workFlow.ERRORAREA,workFlow.ROADWAY); |
| | | var end = LocationHelper.FindEndcolByLoc(endList, workFlow.ERRORAREA); |
| | | var end = LocationHelper.FindEndcolByLoc(endList, workFlow.ERRORAREA); |
| | | LogHelper.Info($"RFID校验失败下发异常终点信息" + JsonConvert.SerializeObject(end), "Wcs任务执行通知"); |
| | | |
| | | |
| | |
| | | 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, it.S_START_AREA_NAME, it.S_END_AREA_NAME }).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(); |
| | | |
| | | var agvTask1 = TaskHelper.GetTaskByWorkNo(transportTask.S_OP_CODE, "agv"); |
| | | TaskHelper.opMesTask(agvTask1, 3); |
| | | ContainerHelper.delCntr(transportTask.S_CNTR_CODE); |
| | | ContainerHelper.delCntrItem(transportTask.S_CNTR_CODE); |
| | | } |
| | | else { |
| | | LogHelper.Info($"RFID校验失败,通知Wcs取消任务失败", "Wcs任务执行通知"); |
| | | throw new Exception($"RFID校验失败,通知Wcs取消任务失败"); |
| | | } |
| | | } |
| | | newDb.BeginTran(); |
| | |
| | | break; |
| | | //取货完成 |
| | | case "5": |
| | | if (transportTask.S_TYPE.Contains("出库")) { |
| | | LocationHelper.UnBindingLoc(transportTask.S_START_LOC, transportTask.S_CNTR_CODE.Split(',').ToList()); |
| | | } |
| | | TaskHelper.UpdateStatus(transportTask, "取货完成"); |
| | | LocationHelper.UnBindingLoc(transportTask.S_START_LOC, transportTask.S_CNTR_CODE.Split(',').ToList()); |
| | | break; |
| | | |
| | | //7取消 |
| | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | newDb.RollbackTran(); |
| | | |
| | | |
| | | LogHelper.Info("Wcs任务执行通知异常" + ex.Message, "Wcs任务执行通知"); |
| | | result.msg = "Wcs任务执行通知异常"; |
| | | result.code = "1"; |
| | | result.requestPk = model.requestPk; |
| | | LogHelper.Info("Wcs任务执行通知异常" + ex.Message, "Wcs任务执行通知"); |
| | | newDb.RollbackTran(); |
| | | return result; |
| | | } |
| | | return result; |
| | |
| | | string bit = ""; |
| | | var Meshod = ""; |
| | | var newDb = new SqlHelper<object>().GetInstance(); |
| | | var tac = newDb.Queryable<WcsSafety>().Where(a => a.TaskNo == mst.S_CODE && a.Sign == state).ToList(); |
| | | if (tac.Count() > 0) |
| | | { |
| | | LogHelper.Info("查询到安全请求信号记录表已经存在数据,此次信号不下达给立库", "agv执行通知"); |
| | | return true; |
| | | } |
| | | switch (state) |
| | | { |
| | | case 1101: |
| | | Type = "1"; |
| | | bit = mst.S_START_LOC; |
| | | Meshod = "AgvRequest"; |
| | | break; |
| | | case 1102: |
| | | Type = "1"; |
| | | bit = mst.S_START_LOC; |
| | | Meshod = "Complete"; |
| | | break; |
| | | case 1103: |
| | | Type = "2"; |
| | | bit = mst.S_END_LOC; |
| | | Meshod = "AgvRequest"; |
| | | break; |
| | | case 1104: |
| | | Type = "2"; |
| | | bit = mst.S_END_LOC; |
| | | Meshod = "Complete"; |
| | | break; |
| | | case 7: |
| | | Type = "5"; |
| | | if (mst.S_TYPE.Contains("出库")) |
| | | { |
| | | bit = mst.S_START_LOC; |
| | | } |
| | | else { |
| | | bit = mst.S_END_LOC; |
| | | } |
| | | |
| | | Meshod = "AgvRequestCancel"; |
| | | break; |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | var interact = new |
| | | try |
| | | { |
| | | requestPk = mst.S_CODE,//任务号 |
| | | trkType = Type,//任务类型 |
| | | method = Meshod,//API名称 |
| | | stnNo = bit,//目的地站台号 |
| | | carNo = forkliftNo,// 车号 |
| | | clientCode = "WMS",//操作人 |
| | | operationTime = DateTime.Now.ToString()//操作时间 |
| | | }; |
| | | LogHelper.Info("agv执行通知 地址信息:" + baseUrl + "agvCallback", "agv执行通知"); |
| | | LogHelper.Info("agv执行通知 参数信息:" + JsonConvert.SerializeObject(interact), "agv执行通知"); |
| | | var result = apiHelper.Post(baseUrl + "agvCallback", JsonConvert.SerializeObject(interact)); |
| | | LogHelper.Info("agv执行通知 返回信息:" + JsonConvert.SerializeObject(result), "agv执行通知"); |
| | | if (!string.IsNullOrEmpty(result)) |
| | | { |
| | | var res = JsonConvert.DeserializeObject<WcsTaskCallBack>(result); |
| | | if (res.code == "0") |
| | | var tac = newDb.Queryable<WcsSafety>().Where(a => a.TaskNo == mst.S_CODE && a.Sign == state).ToList(); |
| | | if (tac.Count() > 0) |
| | | { |
| | | WcsSafety Sign = new WcsSafety(); |
| | | Sign.TaskNo = mst.S_CODE; |
| | | Sign.Sign = state; |
| | | newDb.BeginTran(); |
| | | var B = newDb.Insertable(Sign).ExecuteCommand(); |
| | | if (B == 0) |
| | | { |
| | | newDb.RollbackTran(); |
| | | } |
| | | newDb.CommitTran(); |
| | | LogHelper.Info("agv执行通知成功:", "agv执行通知"); |
| | | LogHelper.Info("查询到安全请求信号记录表已经存在数据,此次信号不下达给立库", "agv执行通知"); |
| | | return true; |
| | | } |
| | | switch (state) |
| | | { |
| | | case 1101: |
| | | Type = "1"; |
| | | bit = mst.S_START_LOC; |
| | | Meshod = "AgvRequest"; |
| | | break; |
| | | case 1102: |
| | | Type = "1"; |
| | | bit = mst.S_START_LOC; |
| | | Meshod = "Complete"; |
| | | break; |
| | | case 1103: |
| | | Type = "2"; |
| | | bit = mst.S_END_LOC; |
| | | Meshod = "AgvRequest"; |
| | | break; |
| | | case 1104: |
| | | Type = "2"; |
| | | bit = mst.S_END_LOC; |
| | | Meshod = "Complete"; |
| | | break; |
| | | case 7: |
| | | Type = "5"; |
| | | if (mst.S_TYPE.Contains("出库")) |
| | | { |
| | | bit = mst.S_START_LOC; |
| | | } |
| | | else |
| | | { |
| | | bit = mst.S_END_LOC; |
| | | } |
| | | |
| | | //退库取消发agv起点 |
| | | if (LocationHelper.GetErroArea(mst.S_END_AREA)) |
| | | { |
| | | bit = mst.S_START_LOC; |
| | | } |
| | | |
| | | |
| | | Meshod = "AgvRequestCancel"; |
| | | break; |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | var interact = new |
| | | { |
| | | requestPk = mst.S_CODE,//任务号 |
| | | trkType = Type,//任务类型 |
| | | method = Meshod,//API名称 |
| | | stnNo = bit,//目的地站台号 |
| | | carNo = forkliftNo,// 车号 |
| | | clientCode = "WMS",//操作人 |
| | | operationTime = DateTime.Now.ToString()//操作时间 |
| | | }; |
| | | LogHelper.Info("agv执行通知 地址信息:" + baseUrl + "agvCallback", "agv执行通知"); |
| | | LogHelper.Info("agv执行通知 参数信息:" + JsonConvert.SerializeObject(interact), "agv执行通知"); |
| | | var result = apiHelper.Post(baseUrl + "agvCallback", JsonConvert.SerializeObject(interact)); |
| | | LogHelper.Info("agv执行通知 返回信息:" + JsonConvert.SerializeObject(result), "agv执行通知"); |
| | | if (!string.IsNullOrEmpty(result)) |
| | | { |
| | | var res = JsonConvert.DeserializeObject<WcsTaskCallBack>(result); |
| | | if (res.code == "0") |
| | | { |
| | | WcsSafety Sign = new WcsSafety(); |
| | | Sign.TaskNo = mst.S_CODE; |
| | | Sign.Sign = state; |
| | | newDb.BeginTran(); |
| | | var B = newDb.Insertable(Sign).ExecuteCommand(); |
| | | if (B == 0) |
| | | { |
| | | newDb.RollbackTran(); |
| | | } |
| | | newDb.CommitTran(); |
| | | LogHelper.Info("agv执行通知成功:", "agv执行通知"); |
| | | return true; |
| | | } |
| | | else |
| | | { |
| | | return false; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | LogHelper.Info("agv执行通知成功 返回信息为空", "agv执行通知"); |
| | | return false; |
| | | } |
| | | } |
| | | else |
| | | catch (Exception) |
| | | { |
| | | LogHelper.Info("agv执行通知成功 返回信息为空", "agv执行通知"); |
| | | return false; |
| | | |
| | | throw; |
| | | } |
| | | |
| | | |
| | | |
| | | } |
| | | |
| | |
| | | LogHelper.Info($"任务号{task.S_CODE},取消任务成功,起点{task.S_START_LOC}设为异常", "放货有货"); |
| | | TaskHelper.Fail(task); |
| | | TaskProcess.OperateStatus(task, 7); |
| | | LocationHelper.updateLocLock(task.S_START_LOC, 4, "异常锁"); |
| | | LocationHelper.updateLocLock(task.S_START_LOC, 3, "其他锁"); |
| | | var agvTask = TaskHelper.GetTaskByWorkNo(task.S_OP_CODE, "agv"); |
| | | if (agvTask != null) |
| | | { |
| | | if (agvTask.S_B_STATE!="未执行") |
| | | { |
| | | NDCApi.CancelOrder(agvTask.S_CODE.Trim()); |
| | | } |
| | | TaskHelper.Fail(agvTask); |
| | | NDCApi.CancelOrder(agvTask.S_CODE.Trim()); |
| | | TaskProcess.CacheBitCancelUpdate(agvTask); |
| | | } |
| | | } |
| | |
| | | if (end != null) |
| | | { |
| | | newDb.BeginTran(); |
| | | endLoc.N_LOCK_STATE = 4; |
| | | endLoc.S_LOCK_STATE = "异常锁"; |
| | | endLoc.N_LOCK_STATE = 3; |
| | | 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(); |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | result.msg = "Wcs放货有货/取货无货处理成功"; |
| | | result.code = "0"; |
| | | result.requestPk = model.requestPk; |
| | | return result; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | |
| | | public static WcsWarningReurn agvResponse(agvResponseParme model) { |
| | | var result = new WcsWarningReurn(); |
| | | var newDb = new SqlHelper<object>().GetInstance(); |
| | | |
| | | try |
| | | { |
| | | newDb.BeginTran(); |
| | |
| | | return result; |
| | | } |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | |
| | | public string code { get; set; } |
| | | public string msg { get; set; } |
| | | public bool success { get; set; } |
| | | public DataItem lastTime { get; set; } |
| | | public DateTime lastTime { get; set; } |
| | | } |
| | | |
| | | /// <summary> |