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;
}
}
}