using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using HH.WCS.Mobox3.DSZSH.Consts; using HH.WCS.Mobox3.DSZSH.Helpers; using HH.WCS.Mobox3.DSZSH.Helpers.Model; using HH.WCS.Mobox3.DSZSH.Models; namespace HH.WCS.Mobox3.DSZSH.ServiceCore { /// /// 定时轮询任务:抽检业务核心 /// public class CheckCore { /// /// 轮询查看抽检单是否有执行中的项目 /// public void CheckOrderState() { var db = DbHelper.GetDbClient(); try { var orderList = db.Queryable() .Where(c => c.N_B_STATE == 0) .OrderBy(c => c.T_CREATE).ToList(); using (var tran = db.Ado.UseTran()) { foreach (var order in orderList) { var startLocList = db.Queryable ((l, c, d) => l.S_CODE == c.S_LOC_CODE && c.S_CNTR_CODE == d.S_CNTR_CODE) .Where((l, c, d) => d.S_CG_ID == order.S_CG_ID && d.S_BATCH_NO == order.S_BATCH_NO) .Select((l, c) => new { Location = l, Container = c }) .Take(order.N_QTY).ToList(); // 获取指定数量的货位数,随机抽取故无需排序 if (startLocList.Count < order.N_QTY) { LogHelper.Info($"轮询 | 当前可抽检的物料数量 {startLocList.Count} 无法满足抽检单数量 {order.N_QTY} 要求"); return; } var endLocList = db.Queryable() .Where(l => l.S_AREA_CODE == order.S_END_AREA) .Where(ExprHelper.LocIsFree) .Where(ExprHelper.LocIsEmpty) .Take(order.N_QTY).ToList(); // 获取指定数量的货位数 if (endLocList.Count < order.N_QTY) { LogHelper.Info($"轮询 | 终点区域可用货位 {startLocList.Count} 无法满足抽检单数量 {order.N_QTY} 要求"); return; } // TODO 参考出库,如果要求任务顺序也要新创建表存储,有需求再更新 for (var i = 0; i < order.N_QTY; i++) { if (!TaskHelper.LogCreateTask(startLocList[i].Location.S_CODE, startLocList[i].Container.S_CNTR_CODE, endLocList[i].S_CODE, TaskName.抽检)) { tran.RollbackTran(); } } order.N_B_STATE = 1; db.Updateable(endLocList).UpdateColumns(c => c.N_B_STATE); tran.CommitTran(); } } } catch (Exception ex) { LogHelper.InfoEx(ex); } } } }