using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using wms.sqlsugar.model.sx; using WMS.BZModels; using WMS.Info; using WMS.BZSqlSugar; using NPOI.SS.Formula.Functions; using WMS.BZModels.Dto.SX.TaskDtos; namespace WMS.BZServices.SX { public class TaskInfoService { private readonly Repository _wcstaskinforepository; private readonly Repository _wcstaskoldrepository; public TaskInfoService(Repository wcstaskinforepository, Repository wcstaskoldrepository) { _wcstaskinforepository = wcstaskinforepository; _wcstaskoldrepository = wcstaskoldrepository; } public PagedInfo GetPageList(Pagination pagination, WCSTaskinfoQueryDto wCSTaskinfoQueryDto) { var predicate = Expressionable.Create(); 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?.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.EedTime >= wCSTaskinfoQueryDto.EndTimeBegin); predicate = predicate.AndIF(wCSTaskinfoQueryDto != null && wCSTaskinfoQueryDto.EndTimeEnd.HasValue, m => m.EedTime <= 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(wCSTaskinfoQueryDto != null && !string.IsNullOrEmpty(wCSTaskinfoQueryDto?.PalletizingId), m => m.PalletizingId.ToString().Contains(wCSTaskinfoQueryDto.PalletizingId)); predicate = predicate.AndIF(wCSTaskinfoQueryDto != null && wCSTaskinfoQueryDto.IsPalletizing.HasValue && wCSTaskinfoQueryDto.IsPalletizing > 0, m => SqlFunc.Subqueryable().Where(s => s.Id == m.PalletizingId && s.PalletizState == 0).Any()); var list = _wcstaskinforepository.Queryable().With(SqlWith.NoLock).Where(predicate.ToExpression()) .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.UpdateSetColumnsTrue(p => new WCSTaskInfo() //{ // Status = state, // EditTime = DateTime.Now, // ManualRemarks = "手动变更状态" //}, p => p.ID == id.ID); _wcstaskinforepository.AsUpdateable().With("WITH(ROWLOCK,UPDLOCK)").SetColumns(p => new WCSTaskInfo() { 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(2)).ExecuteCommand(); } } } }