using SqlSugar; using WMS.BZModels; using WMS.BZModels.Dto.KLHC.TaskDtos; using WMS.BZModels.Models.KLHC; using WMS.BZSqlSugar; using WMS.Info; namespace WMS.BZServices.KLHC { /// /// 当前任务查询 /// public class TaskInfoService { private readonly Repository _wcstaskinforepository; private readonly Repository _wcstaskoldrepository; private readonly Repository _billBomsetgrprepository; public TaskInfoService(Repository wcstaskinforepository, Repository wcstaskoldrepository, Repository billBomsetgrprepository) { _wcstaskinforepository = wcstaskinforepository; _wcstaskoldrepository = wcstaskoldrepository; _billBomsetgrprepository = billBomsetgrprepository; } public PagedInfo GetPageList(Pagination pagination, WCSTaskinfoQueryDto wCSTaskinfoQueryDto) { var predicate = Expressionable.Create().And(o => o.Status < 99); predicate = predicate.Or(o => o.ManualRemarks.Contains("手动变更状态") && o.EditTime >= DateTime.Now.AddDays(-3)); predicate = predicate.AndIF(!string.IsNullOrEmpty(wCSTaskinfoQueryDto?.ID), m => m.ID.ToString().Contains(wCSTaskinfoQueryDto.ID)); predicate = predicate.AndIF(!string.IsNullOrEmpty(wCSTaskinfoQueryDto?.KeyWord), m => m.ID.ToString().Contains(wCSTaskinfoQueryDto.KeyWord) || m.BarCode.Contains(wCSTaskinfoQueryDto.KeyWord) || m.AddrTo.Contains(wCSTaskinfoQueryDto.KeyWord) || m.AddrFrom.Contains(wCSTaskinfoQueryDto.KeyWord) || m.Floor.ToString() == wCSTaskinfoQueryDto.KeyWord || m.Tunnel.Contains(wCSTaskinfoQueryDto.KeyWord) || m.Device.Contains(wCSTaskinfoQueryDto.KeyWord) || m.MaterialCode.Contains(wCSTaskinfoQueryDto.KeyWord)); predicate = predicate.AndIF(!string.IsNullOrEmpty(wCSTaskinfoQueryDto?.BarCode), m => m.BarCode.Contains(wCSTaskinfoQueryDto.BarCode)); predicate = predicate.AndIF(!string.IsNullOrEmpty(wCSTaskinfoQueryDto?.Grade), m => m.Grade.Contains(wCSTaskinfoQueryDto.Grade)); predicate = predicate.AndIF(!string.IsNullOrEmpty(wCSTaskinfoQueryDto?.MaterialCode), m => m.MaterialCode.Contains(wCSTaskinfoQueryDto.MaterialCode)); predicate = predicate.AndIF(!string.IsNullOrEmpty(wCSTaskinfoQueryDto?.AddrFrom), m => m.AddrFrom.Contains(wCSTaskinfoQueryDto.AddrFrom)); predicate = predicate.AndIF(!string.IsNullOrEmpty(wCSTaskinfoQueryDto?.AddrTo), m => m.AddrTo.Contains(wCSTaskinfoQueryDto.AddrTo)); predicate = predicate.AndIF(!string.IsNullOrEmpty(wCSTaskinfoQueryDto?.AddrNext), m => m.AddrNext.Contains(wCSTaskinfoQueryDto.AddrNext)); predicate = predicate.AndIF(!string.IsNullOrEmpty(wCSTaskinfoQueryDto?.WmsTask), m => m.WmsTask.ToString().Contains(wCSTaskinfoQueryDto.WmsTask)); predicate = predicate.AndIF(!string.IsNullOrEmpty(wCSTaskinfoQueryDto?.AgvTaskID), m => m.AgvTaskID.ToString().Contains(wCSTaskinfoQueryDto.AgvTaskID)); predicate = predicate.AndIF(!string.IsNullOrEmpty(wCSTaskinfoQueryDto?.Type), m => m.Type.Equals(wCSTaskinfoQueryDto.Type)); predicate = predicate.AndIF(!string.IsNullOrEmpty(wCSTaskinfoQueryDto?.Status), m => m.Status.Equals(wCSTaskinfoQueryDto.Status)); predicate = predicate.AndIF(!string.IsNullOrEmpty(wCSTaskinfoQueryDto?.BusType), m => m.BusType.Equals(wCSTaskinfoQueryDto.BusType)); predicate = predicate.AndIF(wCSTaskinfoQueryDto != null && wCSTaskinfoQueryDto.AddTimeFrom.HasValue, m => m.AddTime >= wCSTaskinfoQueryDto.AddTimeFrom); predicate = predicate.AndIF(wCSTaskinfoQueryDto != null && wCSTaskinfoQueryDto.AddTimeTo.HasValue, m => m.AddTime <= wCSTaskinfoQueryDto.AddTimeTo); predicate = predicate.AndIF(wCSTaskinfoQueryDto != null && wCSTaskinfoQueryDto.StartTimeBegin.HasValue, m => m.StartTime >= wCSTaskinfoQueryDto.StartTimeBegin); predicate = predicate.AndIF(wCSTaskinfoQueryDto != null && wCSTaskinfoQueryDto.StartTimeEnd.HasValue, m => m.StartTime <= wCSTaskinfoQueryDto.StartTimeEnd); predicate = predicate.AndIF(wCSTaskinfoQueryDto != null && wCSTaskinfoQueryDto.EndTimeBegin.HasValue, m => m.EndTime >= wCSTaskinfoQueryDto.EndTimeBegin); predicate = predicate.AndIF(wCSTaskinfoQueryDto != null && wCSTaskinfoQueryDto.EndTimeEnd.HasValue, m => m.EndTime <= wCSTaskinfoQueryDto.EndTimeEnd); predicate = predicate.AndIF(!string.IsNullOrEmpty(wCSTaskinfoQueryDto?.Tunnel), m => m.Tunnel.Contains(wCSTaskinfoQueryDto.Tunnel)); predicate = predicate.AndIF(!string.IsNullOrEmpty(wCSTaskinfoQueryDto?.Floor), m => m.Floor.ToString().Contains(wCSTaskinfoQueryDto.Floor)); predicate = predicate.AndIF(!string.IsNullOrEmpty(wCSTaskinfoQueryDto?.Device), m => m.Device.Contains(wCSTaskinfoQueryDto.Device)); predicate = predicate.AndIF(wCSTaskinfoQueryDto != null && wCSTaskinfoQueryDto.OutType.HasValue, m => m.OutType.Equals(wCSTaskinfoQueryDto.OutType)); predicate = predicate.AndIF(!string.IsNullOrEmpty(wCSTaskinfoQueryDto?.WorkBench), m => m.WorkBench.Contains(wCSTaskinfoQueryDto.WorkBench)); predicate = predicate.AndIF(!string.IsNullOrEmpty(wCSTaskinfoQueryDto?.WarehouseCode), m => m.WarehouseCode.Equals(wCSTaskinfoQueryDto.WarehouseCode)); predicate = predicate.AndIF(!string.IsNullOrEmpty(wCSTaskinfoQueryDto?.MatCode), m => m.MatCode.Contains(wCSTaskinfoQueryDto.MatCode)); #region "连表查询" //var taskQueryable = _wcstaskoldrepository.Queryable().Where(predicate.ToExpression()).SplitTable(o => o.Take(3)); //var lists = taskQueryable.LeftJoin(_billBomsetgrprepository.Queryable(), (taskold, bomset) => taskold.PalletType == bomset.ShortCode) // .Select((taskold, bomset) => new WCSTaskinfoDto // { // ID = taskold.ID.ToString(), // BarCode = taskold.BarCode, // Type = taskold.Type, // Status = taskold.Status, // AddrFrom = taskold.AddrFrom, // AddrTo = taskold.AddrTo, // AddrNext = taskold.AddrNext, // Tunnel = taskold.Tunnel, // Floor = taskold.Floor, // Device = taskold.Device, // LastInteractionPoint = taskold.LastInteractionPoint, // SrmStation = taskold.SrmStation, // WorkBench = taskold.WorkBench, // WarehouseCode = taskold.WarehouseCode, // WmsTask = taskold.WmsTask, // TaskGroupKey = taskold.TaskGroupKey, // WorkOrder = taskold.WorkOrder, // PalletType = taskold.PalletType, // ProdLine = taskold.ProdLine, // FullQty = taskold.FullQty, // Height = taskold.Height, // Weight = taskold.Weight, // Length = taskold.Length, // AddTime = taskold.AddTime, // AddWho = taskold.AddWho, // StartTime = taskold.StartTime, // EditWho = taskold.EditWho, // EditTime = taskold.EditTime, // EndTime = taskold.EndTime, // MatCode = taskold.MatCode, // InvBarCode = taskold.InvBarCode, // IsFast = taskold.IsFast, // Grade = taskold.Grade, // IsSurplus = taskold.IsSurplus, // IsRework = taskold.IsRework, // Uploaded = taskold.Uploaded, // AgvTaskID = taskold.AgvTaskID, // Priority = taskold.Priority, // ManualRemarks = taskold.ManualRemarks, // OutType = taskold.OutType, // MaterialCode = taskold.MaterialCode, // BusType = taskold.BusType, // GoodsType = taskold.GoodsType, // Line = taskold.Line, // Col = taskold.Col, // Layer = taskold.Layer, // Depth = taskold.Depth, // SetGrpCode= bomset.Code // }).MergeTable().ToPage(pagination); #endregion "连表查询" var list = _wcstaskoldrepository.Queryable().With(SqlWith.NoLock).Where(predicate.ToExpression()).SplitTable(o => o.Take(3)) .ToPage(pagination); return list; } public void UpdateTaskState(List ids, string userId, int state) { if (!ids.Any()) { throw new ArgumentException("没有选择任务!"); } var list = _wcstaskinforepository.Queryable().With(SqlWith.NoLock).Where(o => ids.Contains(o.ID.ToString())).ToList(); if (!list.Any()) { throw new ArgumentException("没有找到该任务!"); } foreach (var id in list) { _wcstaskinforepository.UseTranAction(() => { _wcstaskinforepository.AsUpdateable().With("WITH(ROWLOCK,UPDLOCK)").SetColumns(p => new WCS_TaskInfo() { Status = state, EditTime = DateTime.Now, ManualRemarks = "手动变更状态" }).Where(p => p.ID == id.ID).ExecuteCommand(); _wcstaskoldrepository.AsUpdateable().With("WITH(ROWLOCK,UPDLOCK)").SetColumns(p => new WCS_TaskOld() { Status = state, EditTime = DateTime.Now, ManualRemarks = "手动变更状态" }).Where(p => p.ID == id.ID).SplitTable(p => p.Take(3)).ExecuteCommand(); }); } } public List ReRgvTask(List ids, string userId, string mark) { if (!ids.Any()) { throw new ArgumentException("没有选择任务!"); } var list = _wcstaskinforepository.Queryable().With(SqlWith.NoLock).Where(o => ids.Contains(o.ID) && o.BusType == "码垛入库" && o.Type == 1).ToList(); if (!list.Any()) { throw new ArgumentException("没有找到入库任务、码垛入库业务和RGV执行的状态的数据!"); } foreach (var item in list) { _wcstaskinforepository.UseTranAction(() => { _wcstaskinforepository.AsUpdateable().With("WITH(ROWLOCK,UPDLOCK)").SetColumns(p => new WCS_TaskInfo() { Status = (int)FJTaskStatus.ConveyorExecution, EditTime = DateTime.Now, ManualRemarks = item.ManualRemarks + mark }).Where(p => p.ID == item.ID).ExecuteCommand(); _wcstaskoldrepository.AsUpdateable().With("WITH(ROWLOCK,UPDLOCK)").SetColumns(p => new WCS_TaskOld() { Status = (int)FJTaskStatus.ConveyorExecution, EditTime = DateTime.Now, ManualRemarks = item.ManualRemarks + mark }).Where(p => p.ID == item.ID).SplitTable(p => p.Take(3)).ExecuteCommand(); }); } var excepts = ids.Except(list.Select(o => o.ID).ToList()).ToList(); return excepts; } } }