102 lines
3.6 KiB
C#
102 lines
3.6 KiB
C#
using YLErp.Modules.SystemModule;
|
|
|
|
namespace YLErp.Modules.EodModule.SettlementModule
|
|
{
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public class EodTaskQueryService : YLBaseService
|
|
{
|
|
public EodTaskQueryService(OptUserInfo userInfo) : base(userInfo)
|
|
{
|
|
|
|
}
|
|
|
|
public IEnumerable<EodTask> GetEodTasksToShow(bool onlyLastRunTask)
|
|
{
|
|
var lastTask = EodTaskRunner.LastTask;
|
|
|
|
//onlyLastRunTask时如果runner没有lastTask则从数据库取第一个
|
|
|
|
if (onlyLastRunTask && lastTask != null)
|
|
{
|
|
return new[] { lastTask };
|
|
}
|
|
|
|
var taskId = lastTask?.id ?? 0;
|
|
|
|
var startDate = DateTime.Today.AddDays(-3);
|
|
|
|
var taskPredicate = PredicateBuilder.Create<EodTask>(t => t.TaskStartTime > startDate && t.id != taskId);
|
|
|
|
List<EodTask> taskList;
|
|
|
|
if (onlyLastRunTask)
|
|
{
|
|
//查找今天最后一次执行的任务
|
|
var firstTask = DbContext.EodTask.Where(taskPredicate).Where(t => t.TaskStartTime > DateTime.Today)
|
|
.OrderByDescending(t => t.TaskStartTime).FirstOrDefault();
|
|
|
|
if (firstTask == null)
|
|
{
|
|
//查找正在等待执行的任务
|
|
firstTask = DbContext.EodTask.Where(taskPredicate).Where(t => t.TaskState < EodTaskState.completed)
|
|
.OrderBy(t => t.StartDate).ThenBy(n => n.id).FirstOrDefault();
|
|
|
|
if (firstTask == null)
|
|
{
|
|
return Enumerable.Empty<EodTask>();
|
|
}
|
|
}
|
|
|
|
taskList = new List<EodTask> { firstTask };
|
|
taskPredicate = taskPredicate.And(n => n.id == firstTask.id);
|
|
}
|
|
else
|
|
{
|
|
taskList = DbContext.EodTask.Where(taskPredicate).OrderByDescending(n => n.TaskStartTime).ToList();
|
|
}
|
|
|
|
var detailQuery = from t in DbContext.EodTask.Where(taskPredicate)
|
|
join d in DbContext.EodTaskDetail on t.id equals d.TaskId
|
|
orderby d.TaskId, d.id descending
|
|
select new EodTaskDetailDto
|
|
{
|
|
TaskId = d.TaskId,
|
|
ValueDate = d.ValueDate,
|
|
ElapsedMilliseconds = d.ElapsedMilliseconds
|
|
};
|
|
|
|
var detailGroup = detailQuery.ToLookup(n => n.TaskId);
|
|
|
|
foreach (var task in taskList)
|
|
{
|
|
if (task.TaskState == EodTaskState.running)
|
|
{
|
|
task.TaskState = EodTaskState.interrupted;
|
|
}
|
|
|
|
var dg = detailGroup.FirstOrDefault(n => n.Key == task.id);
|
|
if (dg != null)
|
|
{
|
|
task.Details = dg.Take(4).ToArray();
|
|
}
|
|
var clientNameStr = "";
|
|
if (!string.IsNullOrEmpty(task.ClientIds))
|
|
{
|
|
var clientNames= ClientDataModelV1.GetAllOpenClient(isContainClosed: true).Where(l=> task.ClientIds.Split(',').ToArray().Contains(l.Value)).Select(l=>l.Text);
|
|
clientNameStr = string.Join(",", clientNames);
|
|
}
|
|
task.ClientNameStr= clientNameStr;
|
|
}
|
|
|
|
if (lastTask != null)
|
|
{
|
|
taskList.Insert(0, lastTask);
|
|
}
|
|
|
|
return taskList;
|
|
}
|
|
}
|
|
}
|