FlexJobApi.CommonServer.Application/FlexJobApi.CommonServer.Application.csproj
@@ -16,6 +16,7 @@ </ItemGroup> <ItemGroup> <Folder Include="Schedules\Commands\" /> <Folder Include="Schedules\Queries\" /> </ItemGroup> FlexJobApi.CommonServer.Application/FlexJobApi.CommonServer.Application.xml
@@ -141,24 +141,6 @@ <param name="models"></param> <param name="all"></param> </member> <member name="T:FlexJobApi.CommonServer.Application.ScheduleJobDetailCommandHandler"> <summary> 任务调度-作业 </summary> </member> <member name="M:FlexJobApi.CommonServer.Application.ScheduleJobDetailCommandHandler.#ctor(Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.Resource},FlexJobApi.Core.ResourceHttpUtils,Furion.Schedule.ISchedulerFactory)"> <summary> 任务调度-作业 </summary> </member> <member name="M:FlexJobApi.CommonServer.Application.ScheduleJobDetailCommandHandler.Handle(FlexJobApi.Core.SaveScheduleJobDetailCommand,System.Threading.CancellationToken)"> <summary> 保存任务调度-作业 </summary> <param name="request"></param> <param name="cancellationToken"></param> <returns></returns> </member> <member name="T:FlexJobApi.UserServer.Application.GetResourceFieldsQueryHandler"> <summary> 获取资源字段 FlexJobApi.CommonServer.Application/Schedules/Commands/ScheduleJobDetailCommandHandler.cs
File was deleted FlexJobApi.Core/Enums/Common/EnumErrorCodeType.cs
@@ -28,7 +28,7 @@ /// <summary> /// 该{0}已存在,请确认后再试 /// </summary> [ErrorCodeItemMetadata("{0}不存在")] [ErrorCodeItemMetadata("该{0}已存在,请确认后再试")] s405 = 405, /// <summary> /// 存在重复数据:{0},请确认后再试 FlexJobApi.Core/FlexJobApi.Core.csproj
@@ -38,6 +38,7 @@ </ItemGroup> <ItemGroup> <Folder Include="Models\CommonServer\Schedules\Commands\" /> <Folder Include="Models\CommonServer\Schedules\Queries\" /> <Folder Include="Models\FlexJobServer\TaskUsers\Repositories\" /> </ItemGroup> FlexJobApi.Core/FlexJobApi.Core.xml
@@ -3203,6 +3203,26 @@ 编号 </summary> </member> <member name="T:FlexJobApi.Core.CalcTaskSatusByDateJob"> <summary> 定时按日期计算任务发布状态 </summary> </member> <member name="M:FlexJobApi.Core.CalcTaskSatusByDateJob.#ctor(Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.TaskInfo})"> <summary> 定时按日期计算任务发布状态 </summary> </member> <member name="T:FlexJobApi.Core.CalcUserAgeByIdCardJob"> <summary> 定时根据身份证计算用户年龄 </summary> </member> <member name="M:FlexJobApi.Core.CalcUserAgeByIdCardJob.#ctor(Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.User})"> <summary> 定时根据身份证计算用户年龄 </summary> </member> <member name="T:FlexJobApi.Core.DeleteDictionaryCategoryCommand"> <summary> 删除数据字典类别 @@ -3803,26 +3823,6 @@ 响应类型全名 </summary> </member> <member name="T:FlexJobApi.Core.SaveScheduleJobDetailCommand"> <summary> 保存任务调度-作业 </summary> </member> <member name="P:FlexJobApi.Core.SaveScheduleJobDetailCommand.ResourceId"> <summary> 资源Id </summary> </member> <member name="P:FlexJobApi.Core.SaveScheduleJobDetailCommand.Body"> <summary> 请求数据 </summary> </member> <member name="P:FlexJobApi.Core.SaveScheduleJobDetailCommand.Cron"> <summary> Cron表达式 </summary> </member> <member name="T:FlexJobApi.Core.CheckReceiveTaskCommand"> <summary> 任务验收 @@ -4354,11 +4354,6 @@ <member name="P:FlexJobApi.Core.GetCheckReceiveTaskUserSubmitsQueryResultItem.CheckReceiveTime"> <summary> 验收时间 </summary> </member> <member name="T:FlexJobApi.Core.AutoTaskStatusByDateCommand"> <summary> 按日期修订任务状态 </summary> </member> <member name="T:FlexJobApi.Core.DeleteTaskInfoCommand"> FlexJobApi.Core/Jobs/CalcTaskSatusByDateJob.cs
New file @@ -0,0 +1,38 @@ using Furion.DatabaseAccessor; using Furion.Schedule; using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace FlexJobApi.Core { /// <summary> /// 定时按日期计算任务发布状态 /// </summary> public class CalcTaskSatusByDateJob( IRepository<TaskInfo> rep ) : IJob { private readonly IRepository<TaskInfo> rep = rep; public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken) { var now = DateTime.Now; var entities = await rep.AsQueryable() .Where(it => it.EndTime < now && it.ReleaseStatus != EnumTaskReleaseStatus.Stopped) .ToListAsync(); if (entities.IsNotNull()) { foreach (var entity in entities) { entity.ReleaseStatus = EnumTaskReleaseStatus.Stopped; } await rep.UpdateAsync(entities); } } } } FlexJobApi.Core/Jobs/CalcUserAgeByIdCardJob.cs
New file @@ -0,0 +1,34 @@ using Furion.DatabaseAccessor; using Furion.Schedule; using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace FlexJobApi.Core { /// <summary> /// 定时根据身份证计算用户年龄 /// </summary> public class CalcUserAgeByIdCardJob( IRepository<User> rep ) : IJob { private readonly IRepository<User> rep = rep; public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken) { var enities = await rep.AsQueryable() .Where(it => it.Type == EnumUserType.Personal && it.Identity != null && it.Identity != "") .ToListAsync(stoppingToken); foreach (var entity in enities) { var age = entity.Identity.GetAge(); entity.Age = age; } } } } FlexJobApi.Core/Models/CommonServer/Schedules/Commands/SaveScheduleJobDetailCommand.cs
File was deleted FlexJobApi.Core/Models/FlexJobServer/Tasks/Commands/AutoTaskStatusByDateCommand.cs
File was deleted FlexJobApi.Core/Models/UserServer/Users/Queries/GetUserInfoRolesQuery.cs
@@ -13,6 +13,11 @@ [Resource([EnumResourceController.User])] public class GetUserInfoRolesQuery : IRequest<List<GetUserInfoRolesQueryResultItem>> { public GetUserInfoRolesQuery() { ClientType = EnumClientType.PcWeb; } /// <summary> /// 用户Id /// </summary> FlexJobApi.Core/Utils/ScheduleUtils/DbJobPersistence.cs
@@ -37,21 +37,9 @@ /// 作业调度服务启动时 /// </summary> /// <returns></returns> public async Task<IEnumerable<SchedulerBuilder>> PreloadAsync(CancellationToken stoppingToken) // Furion 4.9.1.59 之前为 public IEnumerable<SchedulerBuilder> Preload() public Task<IEnumerable<SchedulerBuilder>> PreloadAsync(CancellationToken stoppingToken) { var schedulers = new List<SchedulerBuilder>(); var jobDetails = await repScheduleJobDetail.AsQueryable().AsNoTracking().ToListAsync(); var jobTriggers = await repScheduleJobTrigger.AsQueryable().AsNoTracking().ToListAsync(); foreach (var jobDetail in jobDetails) { var triggers = jobTriggers.Where(it => it.JobId == jobDetail.JobId) .Select(it => TriggerBuilder.From(it.ToJson())) .ToArray(); var jobBuilder = JobBuilder.From(jobDetail.ToJson()); var scheduler = SchedulerBuilder.Create(jobBuilder, triggers); schedulers.Add(scheduler); } return schedulers; return Task.FromResult(App.EffectiveTypes.ScanToBuilders().AsEnumerable()); } public Task<SchedulerBuilder> OnLoadingAsync(SchedulerBuilder builder, CancellationToken stoppingToken) FlexJobApi.Core/Utils/ScheduleUtils/ResourceHttpJob.cs
File was deleted FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml
@@ -705,6 +705,14 @@ <param name="cancellationToken"></param> <returns></returns> </member> <member name="M:FlexJobApi.UserServer.Application.UserInfos.Commands.UserInfoCommandHandler.Handle(FlexJobApi.Core.SetUserInfoRolesCommand,System.Threading.CancellationToken)"> <summary> 设置用户信息角色 </summary> <param name="request"></param> <param name="cancellationToken"></param> <returns></returns> </member> <member name="T:FlexJobApi.UserServer.Application.GetOperationUserInfosQueryHandler"> <summary> 获取运营端用户分页列表 FlexJobApi.UserServer.Application/Users/Commands/UserInfoCommandHandler.cs
@@ -1,5 +1,6 @@ using FlexJobApi.Core; using Furion.DatabaseAccessor; using Furion.FriendlyException; using MediatR; using Microsoft.EntityFrameworkCore; using System; @@ -15,8 +16,9 @@ /// </summary> public class UserInfoCommandHandler( IRepository<User> rep ) : IRequestHandler<SetUserInfoStatusCommand, int> ) : IRequestHandler<SetUserInfoStatusCommand, int>, IRequestHandler<SetUserInfoRolesCommand, int> { private readonly IRepository<User> rep = rep; @@ -37,5 +39,28 @@ } return entities.Count; } /// <summary> /// 设置用户信息角色 /// </summary> /// <param name="request"></param> /// <param name="cancellationToken"></param> /// <returns></returns> public async Task<int> Handle(SetUserInfoRolesCommand request, CancellationToken cancellationToken) { var entity = await rep.AsQueryable() .Include(it => it.UserRoles) .Where(it => it.Id == request.UserInfoId) .FirstOrDefaultAsync(cancellationToken); if (entity == null) throw Oops.Oh(EnumErrorCodeType.s404, "该用户"); entity.UserRoles = request.RoleIds .Select(it => new UserRole { RoleId = it }) .ToList(); await rep.UpdateAsync(entity); return entity.UserRoles.Count; } } } FlexJobApi.Web.Entry/Startup.cs
@@ -55,7 +55,9 @@ { options.BuildSqlType = SqlTypes.SqlServer; options.JobDetail.LogEnabled = true; options.AddPersistence<DbJobPersistence>(); //options.AddPersistence<DbJobPersistence>(); options.AddJob<CalcTaskSatusByDateJob>(Triggers.Hourly()); options.AddJob<CalcUserAgeByIdCardJob>(Triggers.Daily()); }); services.AddSpecificationDocuments(options =>