| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 遍历分拣单明细创建出库作业 |
| | | /// </summary> |
| | | internal static void CheckSortingTask() |
| | | { |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | //new SortingOrder().N_B_STATE |
| | | //遍历N_B_STATE = 3的分拣单创建作业 |
| | | //或 遍历分拣单明细创建分拣作业,因为一个分拣单里面的明细都是批量生成的 |
| | | var list = WMSHelper.GetWaitingSortingOperationList(); |
| | | LogHelper.Info($"获取配盘数量 {list.Count}"); |
| | | if (list.Count > 0) |
| | | { |
| | | list.ForEach(a => |
| | | { |
| | | var startloc = db.Queryable<Location>().Where(it => it.S_CODE == a.S_LOC_CODE).First(); |
| | | if (startloc != null && startloc.S_LOCK_STATE == "其它锁") |
| | | { |
| | | |
| | | Location endbit = null; |
| | | |
| | | //计算托盘进行出库 |
| | | |
| | | if (endbit != null) |
| | | { |
| | | var optask = new WMSTask |
| | | { |
| | | S_CODE = WMSHelper.GenerateTaskNo(), |
| | | S_START_LOC = a.S_LOC_CODE, |
| | | S_START_AREA = startloc.S_AREA_CODE, |
| | | S_START_WH = startloc.S_WH_CODE, |
| | | S_END_LOC = endbit.S_CODE, |
| | | S_END_AREA = endbit.S_AREA_CODE, |
| | | S_END_WH = endbit.S_WH_CODE, |
| | | S_STATION_LOC = a.S_OUT_TO, |
| | | S_TYPE = "出库", |
| | | N_TYPE = 2, |
| | | N_B_STATE = 0, |
| | | S_CNTR_CODE = a.S_CNTR_CODE, |
| | | S_OP_DEF_NAME = a.S_BS_TYPE |
| | | }; |
| | | var note = Settings.Tasktypes.Where(it => it.StartArea == optask.S_START_AREA && it.EndArea == optask.S_END_AREA).FirstOrDefault(); |
| | | if (note != null) |
| | | { |
| | | optask.S_NOTE = note.TaskType; |
| | | } |
| | | var res = db.Insertable(optask).ExecuteCommand() > 0; |
| | | if (res) |
| | | { |
| | | startloc.N_LOCK_STATE = 2; |
| | | startloc.S_LOCK_STATE = "出库锁"; |
| | | db.Updateable(startloc).UpdateColumns(it => new { it.S_LOCK_STATE, it.N_LOCK_STATE }).ExecuteCommand(); |
| | | LocationHelper.LockLoc(endbit.S_CODE, 1); |
| | | a.N_B_STATE = 2; |
| | | a.S_B_STATE = "作业启动"; |
| | | db.Updateable(a).UpdateColumns(it => new { it.S_B_STATE, it.N_B_STATE }).ExecuteCommand(); |
| | | } |
| | | } |
| | | else LogHelper.Info($"配盘 未找到可用分拣货位"); |
| | | } |
| | | else LogHelper.Info($"配盘 未找到出库口库区编码{a.S_EXIT_AREA_CODE} 对应的配置文件"); |
| | | |
| | | }); |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 作业启动,创建子任务 |
| | | /// </summary> |
| | | internal static void Start() |
| | | { |
| | | LogHelper.Info($"作业启动 创建子任务"); |
| | | //LogHelper.Info($"作业启动 创建子任务"); |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | List<WMSTask> list = WMSHelper.GetWaitingOperationList(); |
| | | LogHelper.Info($"获取任务数据 数量{list.Count}"); |
| | | if (list.Count > 0) |
| | | { |
| | | LogHelper.Info($"获取任务数据 数量{list.Count}"); |
| | | //如果是出库的作业锁定托盘的时候已经明确起点了,如果发货单或分拣单指定了终点, |
| | | //如果没有作业、任务的顺序限制就可以启动,创建子任务了 |
| | | foreach (var a in list) |
| | |
| | | LocationHelper.LockLoc(end.S_CODE, 1); |
| | | var startinfo = db.Queryable<Location>().Where(it => it.S_CODE == a.S_START_LOC).First(); |
| | | var endinfo = db.Queryable<Location>().Where(it => it.S_CODE == end.S_CODE).First(); |
| | | int startLayer = startinfo.N_CURRENT_NUM; |
| | | int endlayer = endinfo.N_CURRENT_NUM + 1; |
| | | if (a.S_OP_DEF_NAME == "接驳位入库" || a.S_OP_DEF_NAME == "瓶盖空托入库" || a.S_OP_DEF_NAME == "瓶坯非急产补满框" || a.S_OP_DEF_NAME == "瓶盖非急产补满框") |
| | | { |
| | | startLayer = 1; |
| | | endlayer = 1; |
| | | } |
| | | var wcsTask = new WCSTask |
| | | { |
| | | S_OP_CODE = a.S_CODE, |
| | |
| | | S_END_AREA = endinfo.S_AREA_CODE, |
| | | S_END_WH = endinfo.S_WH_CODE, |
| | | S_SCHEDULE_TYPE = "NDC", |
| | | S_WORK_MODE = "agv", |
| | | N_CNTR_COUNT = 1, |
| | | S_CNTR_CODE = a.S_CNTR_CODE, |
| | | N_START_LAYER = startinfo.N_CURRENT_NUM, |
| | | N_END_LAYER = endinfo.N_CURRENT_NUM + 1 |
| | | N_END_LAYER = endinfo.N_CURRENT_NUM + 1, |
| | | S_TRAY_TYPE = a.S_TRAY_TYPE, |
| | | S_WORK_NO = a.S_WORK_NO, |
| | | S_ITEM_CODE = a.S_ITEM_CODE, |
| | | S_NOTE = a.S_NOTE |
| | | }; |
| | | if (WCSHelper.CreateTask(wcsTask)) |
| | | { |
| | |
| | | S_END_AREA = endinfo.S_AREA_CODE, |
| | | S_END_WH = endinfo.S_WH_CODE, |
| | | S_SCHEDULE_TYPE = "NDC", |
| | | S_WORK_MODE = "agv", |
| | | N_CNTR_COUNT = 1, |
| | | S_CNTR_CODE = a.S_CNTR_CODE, |
| | | N_START_LAYER = startinfo.N_CURRENT_NUM, |
| | | N_END_LAYER = endinfo.N_CURRENT_NUM + 1 |
| | | N_END_LAYER = endinfo.N_CURRENT_NUM + 1, |
| | | S_TRAY_TYPE = a.S_TRAY_TYPE, |
| | | S_WORK_NO = a.S_WORK_NO, |
| | | S_ITEM_CODE = a.S_ITEM_CODE, |
| | | S_NOTE = a.S_NOTE |
| | | }; |
| | | |
| | | |
| | | if (WCSHelper.CreateTask(wcsTask)) |
| | | { |