从山证v2.3.0拷贝
This commit is contained in:
@@ -0,0 +1,101 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user