sunpengfei
2025-08-14 173a8e6a757e8c7c324d5d00cd1ec90d0f13d281
feat:开发
2个文件已添加
4个文件已删除
10个文件已修改
343 ■■■■■ 已修改文件
FlexJobApi.CommonServer.Application/FlexJobApi.CommonServer.Application.csproj 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.CommonServer.Application/FlexJobApi.CommonServer.Application.xml 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.CommonServer.Application/Schedules/Commands/ScheduleJobDetailCommandHandler.cs 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Enums/Common/EnumErrorCodeType.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/FlexJobApi.Core.csproj 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/FlexJobApi.Core.xml 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Jobs/CalcTaskSatusByDateJob.cs 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Jobs/CalcUserAgeByIdCardJob.cs 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Models/CommonServer/Schedules/Commands/SaveScheduleJobDetailCommand.cs 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Models/FlexJobServer/Tasks/Commands/AutoTaskStatusByDateCommand.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Models/UserServer/Users/Queries/GetUserInfoRolesQuery.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Utils/ScheduleUtils/DbJobPersistence.cs 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Utils/ScheduleUtils/ResourceHttpJob.cs 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.UserServer.Application/Users/Commands/UserInfoCommandHandler.cs 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Web.Entry/Startup.cs 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
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 =>