| | |
| | | /// </summary> |
| | | /// <param name="mst"></param> |
| | | /// <returns></returns> |
| | | internal static bool CreateInTask(WMSTask mst) |
| | | internal static async Task<bool> CreateInTask(WMSTask mst) |
| | | { |
| | | try |
| | | { |
| | | if (mst.S_B_STATE.Trim() != "等待") return true; |
| | | if (string.IsNullOrEmpty(mst.S_START_LOC)) return false; |
| | | //if (string.IsNullOrEmpty(mst.S_START_LOC)) return false; |
| | | |
| | | var reservoirs = Settings.ReservoirAreas?.ToList(); |
| | | if (reservoirs == null || !reservoirs.Any()) |
| | |
| | | case "合托回库": |
| | | return HandleMergeReturn(mst, reservoirs); |
| | | case "分拣回库": |
| | | return HandleMergeReturn(mst, reservoirs); |
| | | return await SortingReturn(mst, reservoirs); |
| | | case "解绑回库": |
| | | return await UnbindReturn(mst, reservoirs); |
| | | case "空托回库": |
| | | return await EmptyPalletReturn(mst, reservoirs); |
| | | case "空托出库": |
| | | return EmptyPalletOutbound(mst); |
| | | case "料箱出库": |
| | | return HandleBoxOutbound(mst, reservoirs); |
| | | case "发货暂存": |
| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 合托回库 || 分拣回库 |
| | | /// 合托回库 |
| | | /// </summary> |
| | | /// <param name="mst"></param> |
| | | /// <param name="reservoirs"></param> |
| | |
| | | } |
| | | } |
| | | return true; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 分拣回库 |
| | | /// </summary> |
| | | /// <param name="mst"></param> |
| | | /// <param name="reservoirs"></param> |
| | | /// <returns></returns> |
| | | private static async Task<bool> SortingReturn(WMSTask mst, List<ReservoirArea> reservoirs) |
| | | { |
| | | var trayLst = ContainerHelper.GetCntr(mst.S_CNTR_CODE); |
| | | if (trayLst != null && trayLst.S_TYPE.Equals("托盘")) |
| | | { |
| | | //托盘分拣回库 |
| | | var area = reservoirs.Where(s => s.areaName == "入库接驳位").FirstOrDefault(); |
| | | if (area == null) |
| | | { |
| | | LogHelper.Info("Settings出现错误未查询到入库接驳位!", "杭氧"); |
| | | return false; |
| | | } |
| | | //(2.1)先查询入库接驳位是否为空,如果为空直接生成到入库的任务 |
| | | var anyLoc = LocationHelper.GetLocAreaList(area.areaCode); |
| | | if (anyLoc.Any()) |
| | | { |
| | | //生成到接驳位的任务 |
| | | var res = TaskProcess.HYCreateTransport(mst.S_START_LOC, anyLoc.FirstOrDefault().S_CODE, "托盘分拣回库", mst.S_CNTR_CODE, mst.S_CODE); |
| | | if (!res) |
| | | { |
| | | LogHelper.Info("托盘分拣回库任务创建失败!", "杭氧"); |
| | | return false; |
| | | } |
| | | WMSHelper.UpdateStatus(mst, 1); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | //料箱回库 |
| | | var inbound = new Inbound() |
| | | { |
| | | areaCode = "LXLKQ" |
| | | }; |
| | | var wh = new Warehouse(inbound); |
| | | var stored = await wh.StoreItemAsync(); |
| | | if (stored == null) |
| | | { |
| | | LogHelper.Info($"未查询到{inbound.areaCode}可用货位!", "杭氧"); |
| | | return false; |
| | | } |
| | | |
| | | var res = TaskProcess.HYCreateTransport(mst.S_START_LOC, stored.loationCode, "料箱分拣回库" , mst.S_CNTR_CODE, mst.S_CODE); |
| | | if (!res) |
| | | { |
| | | LogHelper.Info("料箱分拣回库任务创建失败!", "杭氧"); |
| | | return false; |
| | | } |
| | | WMSHelper.UpdateStatus(mst, 1); |
| | | } |
| | | return true; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 解绑回库 |
| | | /// </summary> |
| | | /// <param name="mst"></param> |
| | | /// <param name="reservoirs"></param> |
| | | /// <returns></returns> |
| | | private static async Task<bool> UnbindReturn(WMSTask mst, List<ReservoirArea> reservoirs) |
| | | { |
| | | var trayLst = ContainerHelper.GetCntr(mst.S_CNTR_CODE); |
| | | if (trayLst != null && trayLst.S_TYPE.Equals("托盘")) |
| | | { |
| | | //托盘分拣回库 |
| | | var area = reservoirs.Where(s => s.areaName == "入库接驳位").FirstOrDefault(); |
| | | if (area == null) |
| | | { |
| | | LogHelper.Info("Settings出现错误未查询到入库接驳位!", "杭氧"); |
| | | return false; |
| | | } |
| | | //(2.1)先查询入库接驳位是否为空,如果为空直接生成到入库的任务 |
| | | var anyLoc = LocationHelper.GetLocAreaList(area.areaCode); |
| | | if (anyLoc.Any()) |
| | | { |
| | | //生成到接驳位的任务 |
| | | var res = TaskProcess.HYCreateTransport(mst.S_START_LOC, anyLoc.FirstOrDefault().S_CODE, "托盘解绑回库", mst.S_CNTR_CODE, mst.S_CODE); |
| | | if (!res) |
| | | { |
| | | LogHelper.Info("托盘解绑回库任务创建失败!", "杭氧"); |
| | | return false; |
| | | } |
| | | WMSHelper.UpdateStatus(mst, 1); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | //料箱回库 |
| | | var inbound = new Inbound() |
| | | { |
| | | areaCode = "LXLKQ" |
| | | }; |
| | | var wh = new Warehouse(inbound); |
| | | var stored = await wh.StoreItemAsync(); |
| | | if (stored == null) |
| | | { |
| | | LogHelper.Info($"未查询到{inbound.areaCode}可用货位!", "杭氧"); |
| | | return false; |
| | | } |
| | | |
| | | var res = TaskProcess.HYCreateTransport(mst.S_START_LOC, stored.loationCode, "料箱解绑回库", mst.S_CNTR_CODE, mst.S_CODE); |
| | | if (!res) |
| | | { |
| | | LogHelper.Info("料箱解绑回库任务创建失败!", "杭氧"); |
| | | return false; |
| | | } |
| | | WMSHelper.UpdateStatus(mst, 1); |
| | | } |
| | | return true; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 空托回库 |
| | | /// </summary> |
| | | /// <param name="mst"></param> |
| | | /// <param name="reservoirs"></param> |
| | | /// <returns></returns> |
| | | private static async Task<bool> EmptyPalletReturn(WMSTask mst, List<ReservoirArea> reservoirs) |
| | | { |
| | | var trayLst = ContainerHelper.GetCntr(mst.S_CNTR_CODE); |
| | | if (trayLst != null && trayLst.S_TYPE.Equals("托盘")) |
| | | { |
| | | //托盘空托回库 |
| | | var area = reservoirs.Where(s => s.areaName == "入库接驳位").FirstOrDefault(); |
| | | if (area == null) |
| | | { |
| | | LogHelper.Info("Settings出现错误未查询到入库接驳位!", "杭氧"); |
| | | return false; |
| | | } |
| | | //(2.1)先查询入库接驳位是否为空,如果为空直接生成到入库的任务 |
| | | var anyLoc = LocationHelper.GetLocAreaList(area.areaCode); |
| | | if (anyLoc.Any()) |
| | | { |
| | | //生成到接驳位的任务 |
| | | var res = TaskProcess.HYCreateTransport(mst.S_START_LOC, anyLoc.FirstOrDefault().S_CODE, "托盘空托回库", mst.S_CNTR_CODE, mst.S_CODE); |
| | | if (!res) |
| | | { |
| | | LogHelper.Info("托盘空托回库任务创建失败!", "杭氧"); |
| | | return false; |
| | | } |
| | | WMSHelper.UpdateStatus(mst, 1); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | //料箱空托回库 |
| | | var inbound = new Inbound() |
| | | { |
| | | areaCode = "LXLKQ" |
| | | }; |
| | | var wh = new Warehouse(inbound); |
| | | var stored = await wh.StoreItemAsync(); |
| | | if (stored == null) |
| | | { |
| | | LogHelper.Info($"未查询到{inbound.areaCode}可用货位!", "杭氧"); |
| | | return false; |
| | | } |
| | | |
| | | var res = TaskProcess.HYCreateTransport(mst.S_START_LOC, stored.loationCode, "料箱空托回库", mst.S_CNTR_CODE, mst.S_CODE); |
| | | if (!res) |
| | | { |
| | | LogHelper.Info("料箱空托回库任务创建失败!", "杭氧"); |
| | | return false; |
| | | } |
| | | WMSHelper.UpdateStatus(mst, 1); |
| | | } |
| | | return true; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 空托出库 |
| | | /// </summary> |
| | | /// <param name="mst"></param> |
| | | /// <param name="reservoirs"></param> |
| | | /// <returns></returns> |
| | | private static bool EmptyPalletOutbound(WMSTask mst) |
| | | { |
| | | var result = true; |
| | | var scheduler = new EmptyPalletOutboundScheduler(mst.S_START_AREA); |
| | | |
| | | var outbound = new Outbound |
| | | { |
| | | endArea = mst.S_END_AREA, |
| | | endBit = mst.S_END_LOC, |
| | | requiredCount = 1, |
| | | taskType = "空托出库" |
| | | }; |
| | | // 请求出库 |
| | | var tasks = scheduler.GenerateEmptyPalletTasks(outbound); |
| | | |
| | | foreach (var item in tasks) |
| | | { |
| | | // 创建出库任务 |
| | | var res = TaskProcess.HYCreateTransport(item.S_START_LOC, item.S_END_LOC, item.S_TYPE, item.S_CNTR_CODE, mst.S_CODE); |
| | | mst.S_START_LOC = item.S_START_LOC; |
| | | mst.S_CNTR_CODE = item.S_CNTR_CODE; |
| | | //修改空托出库起点和托盘码 |
| | | UpdateTask(mst,1); |
| | | if (!res) |
| | | { |
| | | LogHelper.Info($"根据配盘单生成出库任务创建出库任务失败!!"); |
| | | return false; |
| | | } |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | if (locList.Any()) |
| | | { |
| | | var startLoc = WMSHelper.GetCntrLoc(mst.S_CNTR_CODE); |
| | | // 创建出库任务 |
| | | var res = TaskProcess.HYCreateTransport(startLoc.S_LOC_CODE, locList.FirstOrDefault().S_CODE, mst.S_TYPE, mst.S_CNTR_CODE, mst.S_CODE); |
| | | if (!res) |
| | | if (startLoc != null) |
| | | { |
| | | LogHelper.Info($"根据配盘单生成出库任务创建出库任务失败!!"); |
| | | return false; |
| | | // 创建出库任务 |
| | | var res = TaskProcess.HYCreateTransport(startLoc.S_LOC_CODE, locList.FirstOrDefault().S_CODE, mst.S_TYPE, mst.S_CNTR_CODE, mst.S_CODE); |
| | | if (!res) |
| | | { |
| | | LogHelper.Info($"根据配盘单生成出库任务创建出库任务失败!!"); |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | return true; |
| | |
| | | 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 |