| | |
| | | |
| | | #endregion |
| | | |
| | | #region WCS调用接口 |
| | | |
| | | /// <summary> |
| | | /// WCS调用设备信号反馈 |
| | | /// </summary> |
| | | /// <param name="model">请求参数</param> |
| | | /// <returns></returns> |
| | | public static async Task<WcsResult> notifyDeviceSignal(List<WcsModel> model) |
| | | { |
| | | WcsResult result = new WcsResult() { code = 1, }; |
| | | try |
| | | { |
| | | foreach (var item in model) |
| | | { |
| | | if (string.IsNullOrEmpty(item.cntrNo)) |
| | | { |
| | | result.msg = "托盘号为空!"; |
| | | return result; |
| | | } |
| | | var list = WMSHelper.GetWmsTaskList("等待", item.cntrNo); |
| | | if (list == null) |
| | | { |
| | | list = WMSHelper.GetWmsTaskList("执行", item.cntrNo); |
| | | if (list != null && list.S_TYPE.Contains("回库")) |
| | | { |
| | | list.S_END_AREA = "TPLKQ"; |
| | | } |
| | | } |
| | | if (list == null) |
| | | { |
| | | result.msg = "未查询到在等待中的作业!"; |
| | | return result; |
| | | } |
| | | |
| | | var inbound = new Inbound() |
| | | { |
| | | areaCode = list.S_END_AREA |
| | | }; |
| | | var wh = new Warehouse(inbound); |
| | | var stored = await wh.StoreItemAsync(); |
| | | if (stored == null) |
| | | { |
| | | result.msg = "立库区未查询到可用货位!"; |
| | | return result; |
| | | } |
| | | |
| | | var startLoc = ContainerHelper.GetCntrLoc(list.S_CNTR_CODE); |
| | | if (startLoc == null) |
| | | { |
| | | result.msg = $"未查询到托盘{list.S_CNTR_CODE}所在的货位!"; |
| | | return result; |
| | | } |
| | | var res = TaskProcess.HYCreateTransport(startLoc.S_LOC_CODE, stored.loationCode, list.S_B_STATE == "等待" ? "料箱入库" : "托盘入库", list.S_CNTR_CODE, list.S_CODE); |
| | | if (!res) |
| | | { |
| | | result.msg = "入库任务创建失败!"; |
| | | return result; |
| | | } |
| | | WMSHelper.UpdateTaskStatus(list.S_CODE, 1); |
| | | ContainerHelper.UpdateCntrAbouts(list.S_CNTR_CODE, ""); |
| | | } |
| | | result.code = 0; |
| | | return result; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | result.code = 2; |
| | | result.msg = ex.Message; |
| | | var st = new System.Diagnostics.StackTrace(ex, true); |
| | | var frame = st.GetFrame(0); // 获取第一个堆栈帧 |
| | | if (frame != null) |
| | | { |
| | | LogHelper.Error($"notifyDeviceSignal设备信号反馈出现错误!!", ex); |
| | | LogHelper.Error($"文件名: {frame.GetFileName()}", ex); |
| | | LogHelper.Error($"行号: {frame.GetFileLineNumber()}", ex); |
| | | LogHelper.Error($"列号: {frame.GetFileColumnNumber()}", ex); |
| | | } |
| | | return result; |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// WCS调用任务状态反馈 |
| | | /// </summary> |
| | | /// <param name="model">请求参数</param> |
| | | /// <returns></returns> |
| | | public static async Task<WcsResult> notifyTaskStatus(WcsTaskModel model) |
| | | { |
| | | WcsResult result = new WcsResult() { code = 1, }; |
| | | try |
| | | { |
| | | if (model == null) |
| | | { |
| | | result.msg = "请求参数为空"; |
| | | return result; |
| | | } |
| | | |
| | | var task = WCSHelper.GetTask(model.taskNo); |
| | | if (task == null) |
| | | { |
| | | result.msg = "未查询到任务号"; |
| | | return result; |
| | | } |
| | | |
| | | // 状态与操作的映射字典 |
| | | var stateActions = new Dictionary<int, Action> |
| | | { |
| | | [1] = () => WCSHelper.Begin(task), |
| | | [2] = () => HandleTaskCompletion(task), |
| | | [3] = () => WCSHelper.UpdateStatus(task, "开始取货"), |
| | | [4] = () => HandlePickCompletion(task), |
| | | [5] = () => WCSHelper.UpdateStatus(task, "开始卸货"), |
| | | [6] = () => HandleUnloadCompletion(task), |
| | | [7] = () => HandleTaskFailure(task), |
| | | [8] = () => HandleTaskCompletion(task) |
| | | }; |
| | | result.code = 0; |
| | | return result; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | result.code = 2; |
| | | result.msg = ex.Message; |
| | | var st = new System.Diagnostics.StackTrace(ex, true); |
| | | var frame = st.GetFrame(0); // 获取第一个堆栈帧 |
| | | if (frame != null) |
| | | { |
| | | LogHelper.Error($"notifyTaskStatus任务状态反馈出现错误!!", ex); |
| | | LogHelper.Error($"文件名: {frame.GetFileName()}", ex); |
| | | LogHelper.Error($"行号: {frame.GetFileLineNumber()}", ex); |
| | | LogHelper.Error($"列号: {frame.GetFileColumnNumber()}", ex); |
| | | } |
| | | return result; |
| | | } |
| | | } |
| | | |
| | | // 处理任务完成逻辑 |
| | | private static void HandleTaskCompletion(WCSTask task) |
| | | { |
| | | WCSHelper.End(task); |
| | | |
| | | // 根据任务类型处理不同的完成逻辑 |
| | | if (Settings.CompleteTasks.taskType.Contains(task.S_TYPE)) |
| | | { |
| | | WMSHelper.UpdateWmsTask(task, 2); |
| | | WMSHelper.UpdateDistributionCntrState(2, 3, task.S_CNTR_CODE); |
| | | } |
| | | |
| | | if (new List<string> { "料箱入库", "托盘入库" }.Contains(task.S_TYPE)) |
| | | { |
| | | ContainerHelper.UpdateCntrItem(task.S_CNTR_CODE); |
| | | } |
| | | |
| | | // 处理区域变更 |
| | | HandleAreaChange(task); |
| | | } |
| | | |
| | | // 处理取货完成逻辑 |
| | | private static void HandlePickCompletion(WCSTask task) |
| | | { |
| | | WCSHelper.UpdateStatus(task, "取货完成"); |
| | | TaskProcess.OperateStatus(task, 4); |
| | | } |
| | | |
| | | // 处理卸货完成逻辑 |
| | | private static void HandleUnloadCompletion(WCSTask task) |
| | | { |
| | | WCSHelper.UpdateStatus(task, "卸货完成"); |
| | | TaskProcess.OperateStatus(task, 6); |
| | | } |
| | | |
| | | // 处理任务失败逻辑 |
| | | private static void HandleTaskFailure(WCSTask task) |
| | | { |
| | | TaskProcess.OperateStatus(task, 7); |
| | | WCSHelper.Fail(task); |
| | | } |
| | | |
| | | // 处理区域变更逻辑 |
| | | private static void HandleAreaChange(WCSTask task) |
| | | { |
| | | var areas = new List<string> { "TPLKQ", "LXLKQ" }; |
| | | var area = new List<string> { "配盘出库", "配盘缓存" }; |
| | | |
| | | if (areas.Contains(task.S_START_AREA) && !area.Contains(task.S_TYPE)) |
| | | { |
| | | WMSHelper.DeleteChange(task); |
| | | } |
| | | |
| | | if (areas.Contains(task.S_END_AREA)) |
| | | { |
| | | WMSHelper.AddChange(task); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// WCS调用申请终点 |
| | | /// </summary> |
| | | /// <param name="model">请求参数</param> |
| | | /// <returns></returns> |
| | | public static async Task<WcsResult> applyDest(WcsTaskEnd model) |
| | | { |
| | | WcsResult result = new WcsResult() { code = 1, }; |
| | | try |
| | | { |
| | | if (model == null) |
| | | { |
| | | result.msg = "请求参数为空"; |
| | | return result; |
| | | } |
| | | |
| | | var task = WCSHelper.GetTask(model.taskNo); |
| | | if (task == null) |
| | | { |
| | | result.msg = "未查询到任务号"; |
| | | return result; |
| | | } |
| | | |
| | | result.code = 0; |
| | | result.data.Add(new DataModel { taskNo = task.S_CODE, cntrCode = task.S_CNTR_CODE, end = task.S_END_LOC }); |
| | | return result; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | result.code = 2; |
| | | result.msg = ex.Message; |
| | | var st = new System.Diagnostics.StackTrace(ex, true); |
| | | var frame = st.GetFrame(0); // 获取第一个堆栈帧 |
| | | if (frame != null) |
| | | { |
| | | LogHelper.Error($"applyDest申请终点出现错误!!", ex); |
| | | LogHelper.Error($"文件名: {frame.GetFileName()}", ex); |
| | | LogHelper.Error($"行号: {frame.GetFileLineNumber()}", ex); |
| | | LogHelper.Error($"列号: {frame.GetFileColumnNumber()}", ex); |
| | | } |
| | | return result; |
| | | } |
| | | } |
| | | #endregion |
| | | |
| | | |
| | | |
| | | |
| | |
| | | |
| | | LogHelper.Error("CreateInTask获取作业创建入库任务出现错误!" + errorDetails, ex); |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | /// <summary> |
| | | /// 循环入库缓存区查询合托工位和入库接驳位是否有空货位(创建任务) |
| | |
| | | return false; |
| | | } |
| | | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// WCS调用设备信号反馈 |
| | | /// </summary> |
| | | /// <param name="model">请求参数</param> |
| | | /// <returns></returns> |
| | | public static async Task<Result> notifyDeviceSignal(List<Wcsmodel> model) |
| | | { |
| | | Result result = new Result() { success = false, }; |
| | | try |
| | | { |
| | | foreach (var item in model) |
| | | { |
| | | if (string.IsNullOrEmpty(item.cntrNo)) |
| | | { |
| | | result.errMsg = "托盘号为空!"; |
| | | return result; |
| | | } |
| | | var list = WMSHelper.GetWmsTaskList("等待", item.cntrNo); |
| | | if (list == null) |
| | | { |
| | | list = WMSHelper.GetWmsTaskList("执行", item.cntrNo); |
| | | if (list != null && list.S_TYPE.Contains("回库")) |
| | | { |
| | | list.S_END_AREA = "TPLKQ"; |
| | | } |
| | | } |
| | | if (list == null) |
| | | { |
| | | result.errMsg = "未查询到在等待中的作业!"; |
| | | return result; |
| | | } |
| | | |
| | | var inbound = new Inbound() |
| | | { |
| | | areaCode = list.S_END_AREA |
| | | }; |
| | | var wh = new Warehouse(inbound); |
| | | var stored = await wh.StoreItemAsync(); |
| | | if (stored == null) |
| | | { |
| | | result.errMsg = "立库区未查询到可用货位!"; |
| | | return result; |
| | | } |
| | | |
| | | var startLoc = ContainerHelper.GetCntrLoc(list.S_CNTR_CODE); |
| | | if (startLoc == null) |
| | | { |
| | | result.errMsg = $"未查询到托盘{list.S_CNTR_CODE}所在的货位!"; |
| | | return result; |
| | | } |
| | | var res = TaskProcess.HYCreateTransport(startLoc.S_LOC_CODE, stored.loationCode, list.S_B_STATE == "等待" ? "料箱入库" : "托盘入库", list.S_CNTR_CODE, list.S_CODE); |
| | | if (!res) |
| | | { |
| | | result.errMsg = "入库任务创建失败!"; |
| | | return result; |
| | | } |
| | | WMSHelper.UpdateTaskStatus(list.S_CODE, 1); |
| | | ContainerHelper.UpdateCntrAbouts(list.S_CNTR_CODE, ""); |
| | | } |
| | | |
| | | |
| | | result.success = true; |
| | | return result; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | result.success = false; |
| | | result.errMsg = ex.Message; |
| | | var st = new System.Diagnostics.StackTrace(ex, true); |
| | | var frame = st.GetFrame(0); // 获取第一个堆栈帧 |
| | | if (frame != null) |
| | | { |
| | | LogHelper.Error($"notifyDeviceSignalWCS调用设备信号反馈出现错误!!", ex); |
| | | LogHelper.Error($"文件名: {frame.GetFileName()}", ex); |
| | | LogHelper.Error($"行号: {frame.GetFileLineNumber()}", ex); |
| | | LogHelper.Error($"列号: {frame.GetFileColumnNumber()}", ex); |
| | | } |
| | | return result; |
| | | } |
| | | } |
| | | |
| | | /// <summary> |