forked from anjoy8/Blog.Core
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTasksLogServices.cs
More file actions
137 lines (129 loc) · 6.74 KB
/
TasksLogServices.cs
File metadata and controls
137 lines (129 loc) · 6.74 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
using System.Linq.Expressions;
using System;
using System.Threading.Tasks;
using Blog.Core.IServices;
using Blog.Core.Model.Models;
using Blog.Core.Services.BASE;
using Blog.Core.Common.Extensions;
using SqlSugar;
using Blog.Core.Model;
using System.Collections.Generic;
using System.Linq;
namespace Blog.Core.Services
{
public partial class TasksLogServices : BaseServices<TasksLog>, ITasksLogServices
{
public async Task<PageModel<TasksLog>> GetTaskLogs(long jobId, int page, int intPageSize, DateTime? runTime, DateTime? endTime)
{
RefAsync<int> totalCount = 0;
Expression<Func<TasksLog, bool>> whereExpression = log => true;
if (jobId > 0) whereExpression = whereExpression.And(log => log.JobId == jobId);
var data = await this.Db.Queryable<TasksLog>()
.LeftJoin<TasksQz>((log, qz) => log.JobId == qz.Id)
.OrderByDescending((log) => log.RunTime)
.WhereIF(jobId > 0, (log) => log.JobId == jobId)
.WhereIF(runTime != null, (log) => log.RunTime >= runTime.Value)
.WhereIF(endTime != null, (log) => log.RunTime <= endTime.Value)
.Select((log, qz) => new TasksLog
{
RunPars = log.RunPars,
RunResult = log.RunResult,
RunTime = log.RunTime,
EndTime = log.EndTime,
ErrMessage = log.ErrMessage,
ErrStackTrace = log.ErrStackTrace,
TotalTime = log.TotalTime,
Name = qz.Name,
JobGroup = qz.JobGroup
})
.ToPageListAsync(page, intPageSize, totalCount);
return new PageModel<TasksLog>(page, totalCount, intPageSize, data);
}
public async Task<object> GetTaskOverview(long jobId, DateTime? runTime, DateTime? endTime, string type)
{
//按年
if ("year".Equals(type))
{
var days = endTime.Value.Year - runTime.Value.Year;
var dayArray = new List<DateTime>();
while (days >= 0)
{
dayArray.Add(new DateTime(runTime.Value.Year + days, 1, 1));
days--;
}
var queryableLeft = this.Db.Reportable(dayArray).ToQueryable<DateTime>();
var queryableRight = this.Db.Queryable<TasksLog>().Where((x) => x.RunTime.Year >= runTime.Value.Year && x.RunTime.Year <= endTime.Value.Year); ; ; //声名表
var list = this.Db.Queryable(queryableLeft, queryableRight, JoinType.Left,
(x1, x2) => x1.ColumnName.Year == x2.RunTime.Year)
.GroupBy((x1, x2) => x1.ColumnName)
.Select((x1, x2) => new
{
执行次数 = SqlFunc.AggregateSum(SqlFunc.IIF(x2.Id > 0, 1, 0)),
date = x1.ColumnName.Year.ToString() + "年"
}).ToList().OrderBy(t => t.date);
return list;
}
else if ("month".Equals(type))
{
//按月
var queryableLeft = this.Db.Reportable(ReportableDateType.MonthsInLast1years).ToQueryable<DateTime>(); //生成月份 //ReportableDateType.MonthsInLast1yea 表式近一年月份 并且queryable之后还能在where过滤
var queryableRight = this.Db.Queryable<TasksLog>().Where((x) => x.RunTime.Year == runTime.Value.Year); //声名表
//月份和表JOIN
var list = queryableLeft
.LeftJoin(queryableRight, (x1, x2) => x2.RunTime.ToString("MM月") == x1.ColumnName.ToString("MM月"))
.GroupBy((x1, x2) => x1.ColumnName)
.Select((x1, x2) => new
{
//null的数据要为0所以不能用count
执行次数 = SqlFunc.AggregateSum(SqlFunc.IIF(x2.Id > 0, 1, 0)),
date = x1.ColumnName.ToString("MM月")
}
).ToList().OrderBy(t => t.date);
await Task.CompletedTask;
return list;
}
else if ("day".Equals(type))
{
//按日
var time = runTime.Value;
var days = DateTime.DaysInMonth(time.Year, time.Month);
var dayArray = Enumerable.Range(1, days).Select(it => Convert.ToDateTime(time.ToString("yyyy-MM-" + it))).ToList();//转成时间数组
var queryableLeft = this.Db.Reportable(dayArray).ToQueryable<DateTime>();
var star = Convert.ToDateTime(runTime.Value.ToString("yyyy-MM-01 00:00:00"));
var end = Convert.ToDateTime(runTime.Value.ToString($"yyyy-MM-{days} 23:59:59"));
var queryableRight = this.Db.Queryable<TasksLog>().Where((x) => x.RunTime >= star && x.RunTime <= end); ; ; //声名表
var list = this.Db.Queryable(queryableLeft, queryableRight, JoinType.Left,
(x1, x2) => x1.ColumnName.Date == x2.RunTime.Date)
.GroupBy((x1, x2) => x1.ColumnName)
.Select((x1, x2) => new
{
执行次数 = SqlFunc.AggregateSum(SqlFunc.IIF(x2.Id > 0, 1, 0)),
date = x1.ColumnName.Day
}).ToList().OrderBy(t => t.date);
await Task.CompletedTask;
return list;
}
else if ("hour".Equals(type))
{
//按小时
var time = runTime.Value;
var days = 24;
var dayArray = Enumerable.Range(0, days).Select(it => Convert.ToDateTime(time.ToString($"yyyy-MM-dd {it.ToString().PadLeft(2, '0')}:00:00"))).ToList();//转成时间数组
var queryableLeft = this.Db.Reportable(dayArray).ToQueryable<DateTime>();
var queryableRight = this.Db.Queryable<TasksLog>().Where((x) => x.RunTime >= runTime.Value.Date && x.RunTime <= runTime.Value.Date.AddDays(1).AddMilliseconds(-1)); //声名表
var list = this.Db.Queryable(queryableLeft, queryableRight, JoinType.Left,
(x1, x2) => x1.ColumnName.Hour == x2.RunTime.Hour)
.GroupBy((x1, x2) => x1.ColumnName)
.Select((x1, x2) => new
{
执行次数 = SqlFunc.AggregateSum(SqlFunc.IIF(x2.Id > 0, 1, 0)),
date = x1.ColumnName.Hour
}).ToList().OrderBy(t => t.date);
await Task.CompletedTask;
return list;
}
await Task.CompletedTask;
return null;
}
}
}