添加项目文件。
This commit is contained in:
125
WaterCloud.Service/SystemSecurity/FilterIPService.cs
Normal file
125
WaterCloud.Service/SystemSecurity/FilterIPService.cs
Normal file
@@ -0,0 +1,125 @@
|
||||
/*******************************************************************************
|
||||
* Copyright © 2020 WaterCloud.Framework 版权所有
|
||||
* Author: WaterCloud
|
||||
* Description: WaterCloud快速开发平台
|
||||
* Website:
|
||||
*********************************************************************************/
|
||||
|
||||
using SqlSugar;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using WaterCloud.Domain.SystemSecurity;
|
||||
|
||||
namespace WaterCloud.Service.SystemSecurity
|
||||
{
|
||||
public class FilterIPService : BaseService<FilterIPEntity>, IDenpendency
|
||||
{
|
||||
public FilterIPService(ISqlSugarClient context) : base(context)
|
||||
{
|
||||
}
|
||||
|
||||
public async Task<List<FilterIPEntity>> GetList(string keyword)
|
||||
{
|
||||
var list = repository.IQueryable();
|
||||
if (!string.IsNullOrEmpty(keyword))
|
||||
{
|
||||
list = list.Where(a => a.F_StartIP.Contains(keyword) || a.F_EndIP.Contains(keyword));
|
||||
}
|
||||
return await list.Where(a => a.F_DeleteMark == false).OrderBy(a => a.F_Id).ToListAsync();
|
||||
}
|
||||
|
||||
public async Task<List<FilterIPEntity>> GetLookList(string keyword)
|
||||
{
|
||||
var query = repository.IQueryable().Where(a => a.F_DeleteMark == false);
|
||||
if (!string.IsNullOrEmpty(keyword))
|
||||
{
|
||||
//此处需修改
|
||||
query = query.Where(a => a.F_StartIP.Contains(keyword) || a.F_EndIP.Contains(keyword));
|
||||
}
|
||||
query = GetDataPrivilege("a", "", query);
|
||||
return await query.OrderBy(a => a.F_Id).ToListAsync();
|
||||
}
|
||||
|
||||
public async Task<FilterIPEntity> GetLookForm(string keyValue)
|
||||
{
|
||||
var data = await repository.FindEntity(keyValue);
|
||||
return GetFieldsFilterData(data);
|
||||
}
|
||||
|
||||
public async Task<FilterIPEntity> GetForm(string keyValue)
|
||||
{
|
||||
var data = await repository.FindEntity(keyValue);
|
||||
return data;
|
||||
}
|
||||
|
||||
public async Task DeleteForm(string keyValue)
|
||||
{
|
||||
var ids = keyValue.Split(",");
|
||||
await repository.Delete(a => ids.Contains(a.F_Id));
|
||||
}
|
||||
|
||||
public async Task<bool> CheckIP(string ip)
|
||||
{
|
||||
return await Task.Run(() =>
|
||||
{
|
||||
var list = repository.IQueryable().Where(a => a.F_EnabledMark == true && a.F_DeleteMark == false && a.F_Type == false && a.F_EndTime > DateTime.Now).ToList();
|
||||
long ipAddress = IP2Long(ip);
|
||||
foreach (var item in list)
|
||||
{
|
||||
if (string.IsNullOrEmpty(item.F_EndIP))
|
||||
{
|
||||
long start = IP2Long(item.F_StartIP);
|
||||
bool inRange = ipAddress == start;
|
||||
if (inRange)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
long start = IP2Long(item.F_StartIP);
|
||||
long end = IP2Long(item.F_EndIP);
|
||||
bool inRange = (ipAddress >= start && ipAddress <= end);
|
||||
if (inRange)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
public static long IP2Long(string ip)
|
||||
{
|
||||
string[] ipBytes;
|
||||
double num = 0;
|
||||
if (!string.IsNullOrEmpty(ip))
|
||||
{
|
||||
ipBytes = ip.Split('.');
|
||||
for (int i = ipBytes.Length - 1; i >= 0; i--)
|
||||
{
|
||||
num += ((int.Parse(ipBytes[i]) % 256) * Math.Pow(256, (3 - i)));
|
||||
}
|
||||
}
|
||||
return (long)num;
|
||||
}
|
||||
|
||||
public async Task SubmitForm(FilterIPEntity filterIPEntity, string keyValue)
|
||||
{
|
||||
filterIPEntity.F_Type = false;
|
||||
if (!string.IsNullOrEmpty(keyValue))
|
||||
{
|
||||
filterIPEntity.Modify(keyValue);
|
||||
await repository.Update(filterIPEntity);
|
||||
}
|
||||
else
|
||||
{
|
||||
filterIPEntity.Create();
|
||||
await repository.Insert(filterIPEntity);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
245
WaterCloud.Service/SystemSecurity/LogService.cs
Normal file
245
WaterCloud.Service/SystemSecurity/LogService.cs
Normal file
@@ -0,0 +1,245 @@
|
||||
/*******************************************************************************
|
||||
* Copyright © 2020 WaterCloud.Framework 版权所有
|
||||
* Author: WaterCloud
|
||||
* Description: WaterCloud快速开发平台
|
||||
* Website:
|
||||
*********************************************************************************/
|
||||
|
||||
using SqlSugar;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using WaterCloud.Code;
|
||||
using WaterCloud.DataBase;
|
||||
using WaterCloud.Domain.SystemManage;
|
||||
using WaterCloud.Domain.SystemOrganize;
|
||||
using WaterCloud.Domain.SystemSecurity;
|
||||
using WaterCloud.Service.SystemManage;
|
||||
|
||||
namespace WaterCloud.Service.SystemSecurity
|
||||
{
|
||||
public class LogService : BaseService<LogEntity>, IDenpendency
|
||||
{
|
||||
public ModuleService moduleservice { get; set; }
|
||||
//获取类名
|
||||
|
||||
public LogService(ISqlSugarClient context) : base(context)
|
||||
{
|
||||
}
|
||||
|
||||
public async Task<List<LogEntity>> GetList(Pagination pagination, int timetype, string keyword = "")
|
||||
{
|
||||
//获取数据权限
|
||||
var result = new List<LogEntity>();
|
||||
DateTime startTime = DateTime.Now.ToString("yyyy-MM-dd").ToDate();
|
||||
DateTime endTime = DateTime.Now.ToString("yyyy-MM-dd").ToDate().AddDays(1);
|
||||
switch (timetype)
|
||||
{
|
||||
case 1:
|
||||
break;
|
||||
|
||||
case 2:
|
||||
startTime = startTime.AddDays(-7);
|
||||
break;
|
||||
|
||||
case 3:
|
||||
startTime = startTime.AddMonths(-1);
|
||||
break;
|
||||
|
||||
case 4:
|
||||
startTime = startTime.AddMonths(-3);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
var query = repository.IQueryable();
|
||||
if (!string.IsNullOrEmpty(keyword))
|
||||
{
|
||||
query = query.Where(a => a.F_Account.Contains(keyword) || a.F_Description.Contains(keyword) || a.F_ModuleName.Contains(keyword));
|
||||
}
|
||||
|
||||
query = query.Where(a => a.F_Date >= startTime && a.F_Date <= endTime);
|
||||
|
||||
return GetFieldsFilterData(await query.ToPageListAsync(pagination));
|
||||
}
|
||||
|
||||
public async Task<List<LogEntity>> GetList()
|
||||
{
|
||||
return await repository.IQueryable().ToListAsync();
|
||||
}
|
||||
|
||||
public async Task RemoveLog(string keepTime)
|
||||
{
|
||||
DateTime operateTime = DateTime.Now;
|
||||
if (keepTime == "7") //保留近一周
|
||||
{
|
||||
operateTime = DateTime.Now.AddDays(-7);
|
||||
}
|
||||
else if (keepTime == "1") //保留近一个月
|
||||
{
|
||||
operateTime = DateTime.Now.AddMonths(-1);
|
||||
}
|
||||
else if (keepTime == "3") //保留近三个月
|
||||
{
|
||||
operateTime = DateTime.Now.AddMonths(-3);
|
||||
}
|
||||
var expression = ExtLinq.True<LogEntity>();
|
||||
expression = expression.AndAlso(a => a.F_Date <= operateTime);
|
||||
await repository.Delete(expression);
|
||||
}
|
||||
|
||||
public async Task WriteDbLog(LogEntity logEntity, OperatorModel user = null)
|
||||
{
|
||||
logEntity.F_Id = Utils.GuId();
|
||||
logEntity.F_Date = DateTime.Now;
|
||||
currentuser = OperatorProvider.Provider.GetCurrent();
|
||||
if (user == null || string.IsNullOrEmpty(user.UserId))
|
||||
{
|
||||
user = currentuser;
|
||||
}
|
||||
var dbNumber = GlobalContext.SystemConfig.MainDbNumber;
|
||||
if (user != null)
|
||||
{
|
||||
dbNumber = user.DbNumber;
|
||||
}
|
||||
repository.ChangeEntityDb(GlobalContext.SystemConfig.MainDbNumber);
|
||||
var systemSet = await repository.Db.Queryable<SystemSetEntity>().Where(a => a.F_DbNumber == GlobalContext.SystemConfig.MainDbNumber).FirstAsync();
|
||||
repository.ChangeEntityDb(dbNumber);
|
||||
try
|
||||
{
|
||||
if (user == null || string.IsNullOrEmpty(user.UserId))
|
||||
{
|
||||
logEntity.F_IPAddress = WebHelper.Ip;
|
||||
if (GlobalContext.SystemConfig.LocalLAN != false)
|
||||
{
|
||||
logEntity.F_IPAddressName = "本地局域网";
|
||||
}
|
||||
else
|
||||
{
|
||||
logEntity.F_IPAddressName = WebHelper.GetIpLocation(logEntity.F_IPAddress);
|
||||
}
|
||||
logEntity.F_CompanyId = systemSet.F_Id;
|
||||
}
|
||||
else
|
||||
{
|
||||
logEntity.F_IPAddress = user.LoginIPAddress;
|
||||
logEntity.F_IPAddressName = user.LoginIPAddressName;
|
||||
logEntity.F_CompanyId = user.CompanyId;
|
||||
}
|
||||
logEntity.Create();
|
||||
if (!string.IsNullOrEmpty(logEntity.F_KeyValue))
|
||||
{
|
||||
//批量删除时,循环拆分F_KeyValue,以免截断二进制错误
|
||||
//方便以后根据F_KeyValue查询;
|
||||
var keylist = logEntity.F_KeyValue.Split(",").ToList();
|
||||
var loglist = new List<LogEntity>();
|
||||
foreach (var key in keylist)
|
||||
{
|
||||
var log = new LogEntity();
|
||||
log = logEntity.ToJson().ToObject<LogEntity>();
|
||||
log.F_KeyValue = key;
|
||||
log.F_Id = Utils.GuId();
|
||||
loglist.Add(log);
|
||||
}
|
||||
await repository.Insert(loglist);
|
||||
}
|
||||
else
|
||||
{
|
||||
await repository.Insert(logEntity);
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
logEntity.F_IPAddress = WebHelper.Ip;
|
||||
if (GlobalContext.SystemConfig.LocalLAN != false)
|
||||
{
|
||||
logEntity.F_IPAddressName = "本地局域网";
|
||||
}
|
||||
else
|
||||
{
|
||||
logEntity.F_IPAddressName = WebHelper.GetIpLocation(logEntity.F_IPAddress);
|
||||
}
|
||||
logEntity.F_CompanyId = systemSet.F_Id;
|
||||
logEntity.Create();
|
||||
await repository.Insert(logEntity);
|
||||
}
|
||||
}
|
||||
|
||||
private async Task<LogEntity> CreateLog(string className, DbLogType type)
|
||||
{
|
||||
try
|
||||
{
|
||||
var moduleitem = (await moduleservice.GetList()).Where(a => a.F_IsExpand == false && a.F_EnCode == className.Substring(0, className.Length - 10)).FirstOrDefault();
|
||||
if (moduleitem == null)
|
||||
{
|
||||
throw new Exception();
|
||||
}
|
||||
var module = (await moduleservice.GetList()).Where(a => a.F_Id == moduleitem.F_ParentId).First();
|
||||
return new LogEntity(await CreateModule(module), moduleitem == null ? "" : moduleitem.F_FullName, type.ToString());
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
return new LogEntity(className, "", type.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
private async Task<string> CreateModule(ModuleEntity module, string str = "")
|
||||
{
|
||||
if (module == null)
|
||||
{
|
||||
return str;
|
||||
}
|
||||
str = module.F_FullName + "-" + str;
|
||||
if (module.F_ParentId == "0")
|
||||
{
|
||||
return str;
|
||||
}
|
||||
else
|
||||
{
|
||||
var temp = (await moduleservice.GetList()).Where(a => a.F_Id == module.F_ParentId).First();
|
||||
return await CreateModule(temp, str);
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<LogEntity> CreateLog(string message, string className, string keyValue = "", DbLogType? logType = null, bool isError = false)
|
||||
{
|
||||
LogEntity logEntity;
|
||||
if (logType != null)
|
||||
{
|
||||
logEntity = await CreateLog(className, (DbLogType)logType);
|
||||
logEntity.F_Description += logType.ToDescription();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (string.IsNullOrEmpty(keyValue))
|
||||
{
|
||||
logEntity = await CreateLog(className, DbLogType.Create);
|
||||
logEntity.F_Description += DbLogType.Create.ToDescription();
|
||||
}
|
||||
else
|
||||
{
|
||||
logEntity = await CreateLog(className, DbLogType.Update);
|
||||
logEntity.F_Description += DbLogType.Update.ToDescription();
|
||||
}
|
||||
}
|
||||
logEntity.F_KeyValue = keyValue;
|
||||
if (isError)
|
||||
{
|
||||
logEntity.F_Result = false;
|
||||
logEntity.F_Description += "操作失败," + message;
|
||||
}
|
||||
else
|
||||
{
|
||||
logEntity.F_Description += message;
|
||||
}
|
||||
if (currentuser != null && currentuser.UserId != null)
|
||||
{
|
||||
logEntity.F_Account = currentuser.UserCode;
|
||||
logEntity.F_NickName = currentuser.UserName;
|
||||
}
|
||||
return logEntity;
|
||||
}
|
||||
}
|
||||
}
|
||||
381
WaterCloud.Service/SystemSecurity/OpenJobsService.cs
Normal file
381
WaterCloud.Service/SystemSecurity/OpenJobsService.cs
Normal file
@@ -0,0 +1,381 @@
|
||||
/*******************************************************************************
|
||||
* Copyright © 2020 WaterCloud.Framework 版权所有
|
||||
* Author: WaterCloud
|
||||
* Description: WaterCloud快速开发平台
|
||||
* Website:
|
||||
*********************************************************************************/
|
||||
|
||||
using Quartz;
|
||||
using Quartz.Impl.Triggers;
|
||||
using Quartz.Spi;
|
||||
using SqlSugar;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net.Http;
|
||||
using System.Reflection;
|
||||
using System.Threading.Tasks;
|
||||
using WaterCloud.Code;
|
||||
using WaterCloud.DataBase;
|
||||
using WaterCloud.Domain.SystemSecurity;
|
||||
using WaterCloud.Service.AutoJob;
|
||||
|
||||
namespace WaterCloud.Service.SystemSecurity
|
||||
{
|
||||
public class OpenJobsService : IDenpendency
|
||||
{
|
||||
private RepositoryBase<OpenJobEntity> repository;
|
||||
private IScheduler _scheduler;
|
||||
private HttpWebClient _httpClient;
|
||||
|
||||
public OpenJobsService(ISqlSugarClient context, ISchedulerFactory schedulerFactory, IJobFactory iocJobfactory, IHttpClientFactory httpClient)
|
||||
{
|
||||
repository = new RepositoryBase<OpenJobEntity>(context);
|
||||
_scheduler = schedulerFactory.GetScheduler().GetAwaiter().GetResult();
|
||||
_scheduler.JobFactory = iocJobfactory;
|
||||
_httpClient = new HttpWebClient(httpClient);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 加载列表
|
||||
/// </summary>
|
||||
public async Task<List<OpenJobEntity>> GetLookList(Pagination pagination, string keyword = "")
|
||||
{
|
||||
var DbNumber = OperatorProvider.Provider.GetCurrent().DbNumber;
|
||||
var query = repository.IQueryable().Where(a => a.F_DbNumber == DbNumber);
|
||||
if (!string.IsNullOrEmpty(keyword))
|
||||
{
|
||||
query = query.Where(a => a.F_JobName.Contains(keyword) || a.F_Description.Contains(keyword));
|
||||
}
|
||||
query = query.Where(a => a.F_DeleteMark == false);
|
||||
return await query.ToPageListAsync(pagination);
|
||||
}
|
||||
|
||||
public async Task<List<OpenJobLogEntity>> GetLogList(string keyValue)
|
||||
{
|
||||
return await repository.Db.Queryable<OpenJobLogEntity>().Where(a => a.F_JobId == keyValue).OrderBy(a => a.F_CreatorTime, OrderByType.Desc).ToListAsync();
|
||||
}
|
||||
|
||||
public async Task<List<OpenJobEntity>> GetList(string keyword = "")
|
||||
{
|
||||
var DbNumber = OperatorProvider.Provider.GetCurrent().DbNumber;
|
||||
var query = repository.IQueryable().Where(a => a.F_DbNumber == DbNumber);
|
||||
if (!string.IsNullOrEmpty(keyword))
|
||||
{
|
||||
query = query.Where(a => a.F_JobName.Contains(keyword));
|
||||
}
|
||||
return await query.Where(a => a.F_DeleteMark == false).ToListAsync();
|
||||
}
|
||||
|
||||
public async Task<List<OpenJobEntity>> GetAllList(string keyword = "")
|
||||
{
|
||||
var query = repository.IQueryable();
|
||||
if (!string.IsNullOrEmpty(keyword))
|
||||
{
|
||||
query = query.Where(a => a.F_JobName.Contains(keyword));
|
||||
}
|
||||
return await query.Where(a => a.F_DeleteMark == false).ToListAsync();
|
||||
}
|
||||
|
||||
public async Task<OpenJobEntity> GetForm(string keyValue)
|
||||
{
|
||||
var data = await repository.FindEntity(keyValue);
|
||||
return data;
|
||||
}
|
||||
|
||||
public async Task SubmitForm(OpenJobEntity entity, string keyValue)
|
||||
{
|
||||
bool IsTrue = CronExpression.IsValidExpression(entity.F_CronExpress);
|
||||
if (IsTrue == false)
|
||||
{
|
||||
throw new Exception("定时任务的Cron表达式不正确!");
|
||||
}
|
||||
repository.Db.Ado.BeginTran();
|
||||
if (!string.IsNullOrEmpty(keyValue))
|
||||
{
|
||||
entity.Modify(keyValue);
|
||||
await repository.Update(entity);
|
||||
}
|
||||
else
|
||||
{
|
||||
entity.Create();
|
||||
entity.F_DbNumber = OperatorProvider.Provider.GetCurrent().DbNumber;
|
||||
await repository.Insert(entity);
|
||||
}
|
||||
//启动任务
|
||||
if (entity.F_DoItNow == true)
|
||||
{
|
||||
await ChangeJobStatus(entity.F_Id, 1);
|
||||
}
|
||||
repository.Db.Ado.CommitTran();
|
||||
//执行任务
|
||||
if (entity.F_DoItNow == true)
|
||||
{
|
||||
await DoNow(entity.F_Id, false);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 清除任务计划
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public async Task ClearScheduleJob()
|
||||
{
|
||||
try
|
||||
{
|
||||
await _scheduler.Clear();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogHelper.WriteWithTime(ex);
|
||||
}
|
||||
}
|
||||
|
||||
public async Task DeleteForm(string keyValue)
|
||||
{
|
||||
var job = await repository.FindEntity(keyValue);
|
||||
TriggerKey triggerKey = new TriggerKey(job.F_JobName, job.F_JobGroup);
|
||||
await _scheduler.PauseTrigger(triggerKey);
|
||||
await _scheduler.UnscheduleJob(triggerKey);
|
||||
await _scheduler.DeleteJob(new JobKey(job.F_JobName, job.F_JobGroup));
|
||||
await repository.Delete(a => a.F_Id == keyValue);
|
||||
}
|
||||
|
||||
#region 定时任务运行相关操作
|
||||
|
||||
/// <summary>
|
||||
/// 返回系统的job接口
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public List<KeyValue> QueryLocalHandlers()
|
||||
{
|
||||
var types = AppDomain.CurrentDomain.GetAssemblies()
|
||||
.SelectMany(a => a.GetTypes().Where(a => a.GetInterfaces()
|
||||
.Contains(typeof(IJobTask))))
|
||||
.ToArray();
|
||||
var list = new List<KeyValue>();
|
||||
foreach (var item in types)
|
||||
{
|
||||
list.Add(new KeyValue
|
||||
{
|
||||
Key = item.FullName,
|
||||
Description = item.GetCustomAttribute<ServiceDescriptionAttribute>(false)!.ClassDescription
|
||||
});
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
public async Task ChangeJobStatus(string keyValue, int status)
|
||||
{
|
||||
var job = await repository.FindEntity(a => a.F_Id == keyValue);
|
||||
if (job == null)
|
||||
{
|
||||
throw new Exception("任务不存在");
|
||||
}
|
||||
if (status == 0) //停止
|
||||
{
|
||||
TriggerKey triggerKey = new TriggerKey(job.F_JobName, job.F_JobGroup);
|
||||
// 停止触发器
|
||||
await _scheduler.PauseTrigger(triggerKey);
|
||||
// 移除触发器
|
||||
await _scheduler.UnscheduleJob(triggerKey);
|
||||
// 删除任务
|
||||
await _scheduler.DeleteJob(new JobKey(job.F_JobName, job.F_JobGroup));
|
||||
job.F_EnabledMark = false;
|
||||
job.F_EndRunTime = DateTime.Now;
|
||||
}
|
||||
else //启动
|
||||
{
|
||||
DateTimeOffset starRunTime = DateBuilder.NextGivenSecondDate(job.F_StarRunTime, 1);
|
||||
DateTimeOffset endRunTime = DateBuilder.NextGivenSecondDate(DateTime.MaxValue.AddDays(-1), 1);
|
||||
|
||||
ITrigger trigger = TriggerBuilder.Create()
|
||||
.StartAt(starRunTime)
|
||||
.EndAt(endRunTime)
|
||||
.WithIdentity(job.F_JobName, job.F_JobGroup)
|
||||
.WithCronSchedule(job.F_CronExpress)
|
||||
.Build();
|
||||
((CronTriggerImpl)trigger).MisfireInstruction = MisfireInstruction.CronTrigger.DoNothing;
|
||||
// 判断数据库中有没有记录过,有的话,quartz会自动从数据库中提取信息创建 schedule
|
||||
if (!await _scheduler.CheckExists(new JobKey(job.F_JobName, job.F_JobGroup)))
|
||||
{
|
||||
IJobDetail jobdetail = JobBuilder.Create<JobExecute>().WithIdentity(job.F_JobName, job.F_JobGroup).Build();
|
||||
jobdetail.JobDataMap.Add("F_Id", job.F_Id);
|
||||
|
||||
await _scheduler.ScheduleJob(jobdetail, trigger);
|
||||
}
|
||||
|
||||
job.F_EnabledMark = true;
|
||||
job.F_StarRunTime = DateTime.Now;
|
||||
}
|
||||
job.Modify(job.F_Id);
|
||||
await repository.Update(job);
|
||||
}
|
||||
|
||||
public async Task DoNow(string keyValue, bool returnEx = true)
|
||||
{
|
||||
try
|
||||
{
|
||||
// 获取数据库中的任务
|
||||
var dbJobEntity = await GetForm(keyValue);
|
||||
if (dbJobEntity != null)
|
||||
{
|
||||
DateTime now = DateTime.Now;
|
||||
|
||||
#region 执行任务
|
||||
|
||||
OpenJobLogEntity log = new OpenJobLogEntity();
|
||||
log.F_Id = Utils.GuId();
|
||||
log.F_JobId = keyValue;
|
||||
log.F_JobName = dbJobEntity.F_JobName;
|
||||
log.F_CreatorTime = now;
|
||||
AlwaysResult result = new AlwaysResult();
|
||||
if (dbJobEntity.F_JobType == 0)
|
||||
{
|
||||
//反射执行就行
|
||||
var path = AppDomain.CurrentDomain.RelativeSearchPath ?? AppDomain.CurrentDomain.BaseDirectory;
|
||||
//反射取指定前后缀的dll
|
||||
var referencedAssemblies = Directory.GetFiles(path, "WaterCloud.*.dll").Select(Assembly.LoadFrom).ToArray();
|
||||
var types = referencedAssemblies
|
||||
.SelectMany(a => a.GetTypes().Where(t => t.GetInterfaces()
|
||||
.Contains(typeof(IJobTask)))).ToArray();
|
||||
string filename = dbJobEntity.F_FileName;
|
||||
var implementType = types.Where(x => x.IsClass && x.FullName == filename).FirstOrDefault();
|
||||
var obj = System.Activator.CreateInstance(implementType, repository.Tenant); // 创建实例(带参数)
|
||||
MethodInfo method = implementType.GetMethod("Start", new Type[] { }); // 获取方法信息
|
||||
object[] parameters = null;
|
||||
result = ((Task<AlwaysResult>)method.Invoke(obj, parameters)).GetAwaiter().GetResult(); // 调用方法,参数为空
|
||||
if (result.state.ToString() == ResultType.success.ToString())
|
||||
{
|
||||
log.F_EnabledMark = true;
|
||||
log.F_Description = "执行成功," + result.message.ToString();
|
||||
}
|
||||
else
|
||||
{
|
||||
log.F_EnabledMark = false;
|
||||
log.F_Description = "执行失败," + result.message.ToString();
|
||||
}
|
||||
}
|
||||
else if (dbJobEntity.F_JobType == 5)
|
||||
{
|
||||
try
|
||||
{
|
||||
repository.ChangeEntityDb(dbJobEntity.F_JobDBProvider).Ado.BeginTran();
|
||||
if (!string.IsNullOrEmpty(dbJobEntity.F_JobSqlParm))
|
||||
{
|
||||
var dic = dbJobEntity.F_JobSqlParm.ToObject<Dictionary<string, object>>();
|
||||
List<SugarParameter> list = new List<SugarParameter>();
|
||||
foreach (var item in dic)
|
||||
{
|
||||
list.Add(new SugarParameter(item.Key, item.Value));
|
||||
}
|
||||
var dbResult = await repository.Db.Ado.SqlQueryAsync<dynamic>(dbJobEntity.F_JobSql, list);
|
||||
log.F_EnabledMark = true;
|
||||
log.F_Description = "执行成功," + dbResult.ToJson();
|
||||
}
|
||||
else
|
||||
{
|
||||
var dbResult = await repository.Db.Ado.SqlQueryAsync<dynamic>(dbJobEntity.F_JobSql);
|
||||
log.F_EnabledMark = true;
|
||||
log.F_Description = "执行成功," + dbResult.ToJson();
|
||||
}
|
||||
repository.Db.Ado.CommitTran();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
log.F_EnabledMark = false;
|
||||
log.F_Description = "执行失败," + ex.Message;
|
||||
repository.Db.Ado.RollbackTran();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
HttpMethod method = HttpMethod.Get;
|
||||
switch (dbJobEntity.F_JobType)
|
||||
{
|
||||
case 1:
|
||||
method = HttpMethod.Get;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
method = HttpMethod.Post;
|
||||
break;
|
||||
|
||||
case 3:
|
||||
method = HttpMethod.Put;
|
||||
break;
|
||||
|
||||
case 4:
|
||||
method = HttpMethod.Delete;
|
||||
break;
|
||||
}
|
||||
var dic = dbJobEntity.F_RequestHeaders.ToObject<Dictionary<string, string>>();
|
||||
if (dic == null)
|
||||
{
|
||||
dic = new Dictionary<string, string>();
|
||||
}
|
||||
//请求头添加租户号
|
||||
dic.Add("dbNumber", dbJobEntity.F_DbNumber);
|
||||
try
|
||||
{
|
||||
var temp = await _httpClient.ExecuteAsync(dbJobEntity.F_RequestUrl, method, dbJobEntity.F_RequestString, dic);
|
||||
log.F_EnabledMark = true;
|
||||
log.F_Description = $"执行成功。{temp}";
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
log.F_EnabledMark = false;
|
||||
log.F_Description = "执行失败," + ex.Message.ToString();
|
||||
}
|
||||
}
|
||||
|
||||
#endregion 执行任务
|
||||
|
||||
repository.ChangeEntityDb(GlobalContext.SystemConfig.MainDbNumber);
|
||||
|
||||
repository.Db.Ado.BeginTran();
|
||||
//记录执行日志
|
||||
if (log.F_EnabledMark == true)
|
||||
{
|
||||
await repository.Update(a => a.F_Id == keyValue, a => new OpenJobEntity
|
||||
{
|
||||
F_LastRunMark = true,
|
||||
F_LastRunTime = now
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
await repository.Update(a => a.F_Id == keyValue, a => new OpenJobEntity
|
||||
{
|
||||
F_LastRunMark = false,
|
||||
F_LastRunTime = now,
|
||||
F_LastRunErrTime = now,
|
||||
F_LastRunErrMsg = log.F_Description
|
||||
});
|
||||
}
|
||||
if (dbJobEntity.F_IsLog == "是")
|
||||
{
|
||||
await repository.Db.Insertable(log).ExecuteCommandAsync();
|
||||
}
|
||||
repository.Db.Ado.CommitTran();
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogHelper.WriteWithTime(ex);
|
||||
if (returnEx)
|
||||
{
|
||||
throw new Exception(ex.Message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public async Task DeleteLogForm(string keyValue)
|
||||
{
|
||||
await repository.Db.Deleteable<OpenJobLogEntity>(a => a.F_JobId == keyValue).ExecuteCommandAsync();
|
||||
}
|
||||
|
||||
#endregion 定时任务运行相关操作
|
||||
}
|
||||
}
|
||||
76
WaterCloud.Service/SystemSecurity/ServerStateService.cs
Normal file
76
WaterCloud.Service/SystemSecurity/ServerStateService.cs
Normal file
@@ -0,0 +1,76 @@
|
||||
//-----------------------------------------------------------------------
|
||||
// <copyright file=" ServerState.cs" company="JR">
|
||||
// * Copyright (C) WaterCloud.Framework All Rights Reserved
|
||||
// * version : 1.0
|
||||
// * author : WaterCloud.Framework
|
||||
// * FileName: ServerState.cs
|
||||
// * history : Created by T4 04/13/2020 11:54:48
|
||||
// </copyright>
|
||||
//-----------------------------------------------------------------------
|
||||
using SqlSugar;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using WaterCloud.Code;
|
||||
using WaterCloud.Domain.SystemSecurity;
|
||||
|
||||
namespace WaterCloud.Service.SystemSecurity
|
||||
{
|
||||
public class ServerStateService : BaseService<ServerStateEntity>, IDenpendency
|
||||
{
|
||||
public ServerStateService(ISqlSugarClient context) : base(context)
|
||||
{
|
||||
}
|
||||
|
||||
public async Task<List<ServerStateEntity>> GetList(int timetype)
|
||||
{
|
||||
var expression = ExtLinq.True<ServerStateEntity>();
|
||||
DateTime startTime = DateTime.Now.ToString("yyyy-MM-dd").ToDate();
|
||||
DateTime endTime = DateTime.Now.ToString("yyyy-MM-dd").ToDate().AddDays(1);
|
||||
switch (timetype)
|
||||
{
|
||||
case 1:
|
||||
break;
|
||||
|
||||
case 2:
|
||||
startTime = startTime.AddDays(-7);
|
||||
break;
|
||||
|
||||
case 3:
|
||||
startTime = startTime.AddMonths(-1);
|
||||
break;
|
||||
|
||||
case 4:
|
||||
startTime = startTime.AddMonths(-3);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
expression = expression.AndAlso(a => a.F_Date >= startTime && a.F_Date <= endTime);
|
||||
return await repository.IQueryable(expression).ToListAsync();
|
||||
}
|
||||
|
||||
public async Task SubmitForm(ServerStateEntity entity)
|
||||
{
|
||||
var old = repository.IQueryable().First(a => a.F_WebSite == entity.F_WebSite && a.F_Date == DateTime.Now.Date);
|
||||
if (old != null)
|
||||
{
|
||||
entity.F_Id = old.F_Id;
|
||||
entity.F_Date = old.F_Date;
|
||||
entity.F_Cout = old.F_Cout + 1;
|
||||
entity.F_ARM = Math.Round(((old.F_ARM).ToDouble() * old.F_Cout + entity.F_ARM.ToDouble()) / entity.F_Cout, 2).ToString();
|
||||
entity.F_CPU = Math.Round(((old.F_CPU).ToDouble() * old.F_Cout + entity.F_CPU.ToDouble()) / entity.F_Cout, 2).ToString();
|
||||
entity.F_IIS = Math.Round(((old.F_IIS).ToDouble() * old.F_Cout + entity.F_IIS.ToDouble()) / entity.F_Cout, 0).ToString();
|
||||
await repository.Update(entity);
|
||||
}
|
||||
else
|
||||
{
|
||||
entity.F_Id = Utils.GuId();
|
||||
entity.F_Cout = 1;
|
||||
entity.F_Date = DateTime.Now.Date;
|
||||
await repository.Insert(entity);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user