FlexJobApi.Application/Dictionaries/Commands/DictionaryDataCommandHandler.cs
@@ -83,6 +83,12 @@ return request.SetIsDisabled<DictionaryData>(cancellationToken: cancellationToken); } /// <summary> /// 同步人力资源地区字典数据 /// </summary> /// <param name="request"></param> /// <param name="cancellationToken"></param> /// <returns></returns> public async Task<int> Handle(SyncHumanResourcesAreaDictionaryDataCommand request, CancellationToken cancellationToken) { var repHumanResourcesBaseArea = Db.GetRepository<BaseArea, HumanResourcesDbContextLocator>(); @@ -96,12 +102,19 @@ CategoryId = categoryId }); var parentAreas = areas.Where(it => it.ParentId == 0).ToList(); LoopAdd(categoryId, entities, areas, parentAreas); LoopSyncHumanResourcesAreaDictionaryData(categoryId, entities, areas, parentAreas); await rep.Context.BulkInsertAsync(entities); return entities.Count; } public void LoopAdd(Guid categoryId, List<DictionaryData> entities, List<BaseArea> all, List<BaseArea> areas) /// <summary> /// 递归同步人力资源地区字典数据 /// </summary> /// <param name="categoryId"></param> /// <param name="entities"></param> /// <param name="all"></param> /// <param name="areas"></param> private void LoopSyncHumanResourcesAreaDictionaryData(Guid categoryId, List<DictionaryData> entities, List<BaseArea> all, List<BaseArea> areas) { if (areas.IsNotNull()) { @@ -140,7 +153,7 @@ entities.Add(entity); var children = all.Where(it => it.ParentId == area.AreaCode).ToList(); LoopAdd(categoryId, entities, all, children); LoopSyncHumanResourcesAreaDictionaryData(categoryId, entities, all, children); } } } FlexJobApi.Application/Dictionaries/Queries/DictionaryDatasQueryHandler.cs
@@ -80,9 +80,22 @@ { q = q .OrderBy(it => it.Sort).ThenBy(it => it.CreatedTime) .Where(it => it.ParentId == request.ParentId && !it.IsDisabled); .Where(it => !it.IsDisabled); if (!request.All) { q = q.Where(it => it.ParentId == request.ParentId); } if (request.Keywords.IsNotNull()) { q = q.Where(it => it.Code.Contains(request.Keywords) || it.Content.Contains(request.Keywords) || it.Field1.Contains(request.Keywords) || it.Field2.Contains(request.Keywords) || it.Field3.Contains(request.Keywords) || it.Field4.Contains(request.Keywords) || it.Field5.Contains(request.Keywords)); } if (request.CategoryId.HasValue) { q = q.Where(it => it.CategoryId == request.CategoryId); FlexJobApi.Application/FlexJobApi.Application.xml
@@ -56,6 +56,23 @@ <param name="cancellationToken"></param> <returns></returns> </member> <member name="M:FlexJobApi.Application.DictionaryDataCommandHandler.Handle(FlexJobApi.Core.SyncHumanResourcesAreaDictionaryDataCommand,System.Threading.CancellationToken)"> <summary> 同步人力资源地区字典数据 </summary> <param name="request"></param> <param name="cancellationToken"></param> <returns></returns> </member> <member name="M:FlexJobApi.Application.DictionaryDataCommandHandler.LoopSyncHumanResourcesAreaDictionaryData(System.Guid,System.Collections.Generic.List{FlexJobApi.Core.DictionaryData},System.Collections.Generic.List{FlexJobApi.Core.BaseArea},System.Collections.Generic.List{FlexJobApi.Core.BaseArea})"> <summary> 递归同步人力资源地区字典数据 </summary> <param name="categoryId"></param> <param name="entities"></param> <param name="all"></param> <param name="areas"></param> </member> <member name="T:FlexJobApi.Application.DictionaryCategoriesQueryHandler"> <summary> 数据字典类别查询处理器 @@ -108,5 +125,42 @@ <param name="cancellationToken"></param> <returns></returns> </member> <member name="T:FlexJobApi.Application.TaskInfoCommandHandler"> <summary> 任务命令处理器 </summary> </member> <member name="M:FlexJobApi.Application.TaskInfoCommandHandler.#ctor(Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.TaskInfo})"> <summary> 任务命令处理器 </summary> </member> <member name="M:FlexJobApi.Application.TaskInfoCommandHandler.Handle(FlexJobApi.Core.SaveTaskInfoCommand,System.Threading.CancellationToken)"> <summary> 保存任务 </summary> <param name="request"></param> <param name="cancellationToken"></param> <returns></returns> <exception cref="T:System.NotImplementedException"></exception> </member> <member name="T:FlexJobApi.Application.TaskInfoQueryHandler"> <summary> 任务查询处理器 </summary> </member> <member name="M:FlexJobApi.Application.TaskInfoQueryHandler.#ctor(Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.TaskInfo})"> <summary> 任务查询处理器 </summary> </member> <member name="M:FlexJobApi.Application.TaskInfoQueryHandler.Handle(FlexJobApi.Core.GetTaskInfoQuery,System.Threading.CancellationToken)"> <summary> 查询任务详情 </summary> <param name="request"></param> <param name="cancellationToken"></param> <returns></returns> </member> </members> </doc> FlexJobApi.Application/Tasks/Commands/TaskInfoCommandHandler.cs
New file @@ -0,0 +1,76 @@ using FlexJobApi.Core; using Furion.DatabaseAccessor; using Furion.DistributedIDGenerator; using Mapster; using MediatR; using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FlexJobApi.Application { /// <summary> /// 任务命令处理器 /// </summary> public class TaskInfoCommandHandler( IRepository<TaskInfo> rep ) : IRequestHandler<SaveTaskInfoCommand, Guid> { private readonly IRepository<TaskInfo> rep = rep; /// <summary> /// 保存任务 /// </summary> /// <param name="request"></param> /// <param name="cancellationToken"></param> /// <returns></returns> /// <exception cref="NotImplementedException"></exception> [UnitOfWork] public async Task<Guid> Handle(SaveTaskInfoCommand request, CancellationToken cancellationToken) { var logier = JwtUtils.GetCurrentLogier(); return await request.SaveData<TaskInfo, SaveTaskInfoCommand>( q => TaskInfoQueryable.GetQueryable( rep, q => q .Include(it => it.Benefits) .Include(it => it.CredentialLimits), logier), null, (entity) => { if (request.Id == null) { entity.EnterpriseId = logier.EnterpriseId.Value; BuildCode(entity).Wait(); } entity.Benefits = request.Benefits .Select(it => new TaskInfoBenefit { BenefitCode = it }) .ToList(); entity.CredentialLimits = request.CredentialLimits .Select(it => new TaskInfoCredentialLimit { TypeCode = it }) .ToList(); request.Adapt(entity); }, cancellationToken); } private async Task BuildCode(TaskInfo entity) { entity.Code = $"{DateTime.Now:yyyyMMddHHmm}{new Random(IDGen.NextID().GetHashCode()).Next(1000, 9999)}"; var exist = await rep.AsQueryable().AsNoTracking() .AnyAsync(it => it.EnterpriseId == entity.EnterpriseId && it.Code == entity.Code); if (exist) await BuildCode(entity); } } } FlexJobApi.Application/Tasks/Queries/TaskInfoQueryHandler.cs
New file @@ -0,0 +1,37 @@ using FlexJobApi.Core; using Furion.DatabaseAccessor; using Mapster; using MediatR; using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FlexJobApi.Application { /// <summary> /// 任务查询处理器 /// </summary> public class TaskInfoQueryHandler( IRepository<TaskInfo> rep ) : IRequestHandler<GetTaskInfoQuery, GetTaskInfoQueryResult> { private readonly IRepository<TaskInfo> rep = rep; /// <summary> /// 查询任务详情 /// </summary> /// <param name="request"></param> /// <param name="cancellationToken"></param> /// <returns></returns> public Task<GetTaskInfoQueryResult> Handle(GetTaskInfoQuery request, CancellationToken cancellationToken) { return TaskInfoQueryable.GetQueryable(rep, q => q.Where(it => it.Id == request.Id)) .ProjectToType<GetTaskInfoQueryResult>() .FirstOrDefaultAsync(cancellationToken); } } } FlexJobApi.Core/Entities/Tasks/TaskInfo.cs
@@ -32,13 +32,18 @@ public Enterprise Enterprise { get; set; } /// <summary> /// 任务单号 /// </summary> public string Code { get; set; } /// <summary> /// 任务名称 /// </summary> [Required] public string Name { get; set; } /// <summary> /// 计费方式 /// 结算周期 /// </summary> public EnumBillingMethod BillingMethod { get; set; } @@ -112,6 +117,16 @@ /// </summary> public DateTime EndTime { get; set; } /// <summary> /// 任务状态 /// </summary> public EnumTaskStatus Status { get; set; } /// <summary> /// 发布状态 /// </summary> public EnumTaskReleaseStatus ReleaseStatus { get; set; } public void Configure(EntityTypeBuilder<TaskInfo> entityBuilder, DbContext dbContext, Type dbContextLocator) { entityBuilder FlexJobApi.Core/Enums/Common/EnumResourceController.cs
@@ -17,6 +17,12 @@ [ResourceController(Service = EnumResourceService.Main)] Dictionary, /// <summary> /// 任务 /// </summary> [ResourceController(Service = EnumResourceService.Main)] Task, /// <summary> /// 用户认证 /// </summary> [ResourceController(Service = EnumResourceService.User)] FlexJobApi.Core/Enums/Tasks/EnumTaskReleaseStatus.cs
New file @@ -0,0 +1,23 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FlexJobApi.Core { /// <summary> /// 任务发布状态 /// </summary> public enum EnumTaskReleaseStatus { /// <summary> /// 发布中 /// </summary> InProcess = 20, /// <summary> /// 已停止 /// </summary> Stopped = 100 } } FlexJobApi.Core/Enums/Tasks/EnumTaskStatus.cs
New file @@ -0,0 +1,23 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FlexJobApi.Core { /// <summary> /// 任务安排状态 /// </summary> public enum EnumTaskStatus { /// <summary> /// 待安排 /// </summary> Wait = 10, /// <summary> /// 已安排 /// </summary> Complete = 20 } } FlexJobApi.Core/FlexJobApi.Core.csproj
@@ -34,8 +34,4 @@ </None> </ItemGroup> <ItemGroup> <Folder Include="Models\Main\TaskInfos\" /> </ItemGroup> </Project> FlexJobApi.Core/FlexJobApi.Core.xml
@@ -544,6 +544,11 @@ 企业 </summary> </member> <member name="P:FlexJobApi.Core.TaskInfo.Code"> <summary> 任务单号 </summary> </member> <member name="P:FlexJobApi.Core.TaskInfo.Name"> <summary> 任务名称 @@ -551,7 +556,7 @@ </member> <member name="P:FlexJobApi.Core.TaskInfo.BillingMethod"> <summary> 计费方式 结算周期 </summary> </member> <member name="P:FlexJobApi.Core.TaskInfo.ServiceFee"> @@ -622,6 +627,16 @@ <member name="P:FlexJobApi.Core.TaskInfo.EndTime"> <summary> 任务结束时间 </summary> </member> <member name="P:FlexJobApi.Core.TaskInfo.Status"> <summary> 任务状态 </summary> </member> <member name="P:FlexJobApi.Core.TaskInfo.ReleaseStatus"> <summary> 发布状态 </summary> </member> <member name="T:FlexJobApi.Core.TaskInfoBenefit"> @@ -1784,6 +1799,11 @@ 数据字典 </summary> </member> <member name="F:FlexJobApi.Core.EnumResourceController.Task"> <summary> 任务 </summary> </member> <member name="F:FlexJobApi.Core.EnumResourceController.Auth"> <summary> 用户认证 @@ -1922,6 +1942,36 @@ <member name="F:FlexJobApi.Core.EnumSettlementCycle.Day"> <summary> 日结 </summary> </member> <member name="T:FlexJobApi.Core.EnumTaskReleaseStatus"> <summary> 任务发布状态 </summary> </member> <member name="F:FlexJobApi.Core.EnumTaskReleaseStatus.InProcess"> <summary> 发布中 </summary> </member> <member name="F:FlexJobApi.Core.EnumTaskReleaseStatus.Stopped"> <summary> 已停止 </summary> </member> <member name="T:FlexJobApi.Core.EnumTaskStatus"> <summary> 任务安排状态 </summary> </member> <member name="F:FlexJobApi.Core.EnumTaskStatus.Wait"> <summary> 待安排 </summary> </member> <member name="F:FlexJobApi.Core.EnumTaskStatus.Complete"> <summary> 已安排 </summary> </member> <member name="T:FlexJobApi.Core.EnumTaskUserHireStatus"> @@ -2245,6 +2295,21 @@ 编号 </summary> </member> <member name="T:FlexJobApi.Core.Models.Common.DictionaryDataQueryModel"> <summary> 数据字典查询模型 </summary> </member> <member name="P:FlexJobApi.Core.Models.Common.DictionaryDataQueryModel.Code"> <summary> 编号 </summary> </member> <member name="P:FlexJobApi.Core.Models.Common.DictionaryDataQueryModel.Name"> <summary> 名称 </summary> </member> <member name="T:FlexJobApi.Core.DeleteDictionaryCategoryCommand"> <summary> 删除数据字典类别 @@ -2445,6 +2510,16 @@ 上级Id </summary> </member> <member name="P:FlexJobApi.Core.GetDictionaryDataSelectQuery.Keywords"> <summary> 关键字 </summary> </member> <member name="P:FlexJobApi.Core.GetDictionaryDataSelectQuery.All"> <summary> 查询所有 </summary> </member> <member name="P:FlexJobApi.Core.GetDictionaryDataSelectQueryResultOption.Id"> <summary> Id @@ -2503,6 +2578,11 @@ <member name="P:FlexJobApi.Core.GetDictionaryDatasQuery.CategoryCode"> <summary> 类别编号(Id/编号二选一) </summary> </member> <member name="P:FlexJobApi.Core.GetDictionaryDatasQuery.ParentId"> <summary> 上级Id </summary> </member> <member name="P:FlexJobApi.Core.GetDictionaryDatasQuery.Keywords"> @@ -2599,6 +2679,265 @@ <summary> 名称 </summary> </member> <member name="T:FlexJobApi.Core.SaveTaskInfoCommand"> <summary> 保存任务 </summary> </member> <member name="P:FlexJobApi.Core.SaveTaskInfoCommand.Name"> <summary> 任务名称 </summary> </member> <member name="P:FlexJobApi.Core.SaveTaskInfoCommand.BillingMethod"> <summary> 结算周期 </summary> </member> <member name="P:FlexJobApi.Core.SaveTaskInfoCommand.ServiceFee"> <summary> 服务费 </summary> </member> <member name="P:FlexJobApi.Core.SaveTaskInfoCommand.SettlementCycle"> <summary> 结算方式 </summary> </member> <member name="P:FlexJobApi.Core.SaveTaskInfoCommand.Benefits"> <summary> 福利编号 </summary> </member> <member name="P:FlexJobApi.Core.SaveTaskInfoCommand.AgeMinLimit"> <summary> 年龄范围最小 </summary> </member> <member name="P:FlexJobApi.Core.SaveTaskInfoCommand.AgeMaxLimit"> <summary> 年龄范围大 </summary> </member> <member name="P:FlexJobApi.Core.SaveTaskInfoCommand.GenderLimit"> <summary> 性别要求 </summary> </member> <member name="P:FlexJobApi.Core.SaveTaskInfoCommand.CredentialLimits"> <summary> 资格证书类型编号 </summary> </member> <member name="P:FlexJobApi.Core.SaveTaskInfoCommand.ProvinceCode"> <summary> 任务地点所属省份编号 </summary> </member> <member name="P:FlexJobApi.Core.SaveTaskInfoCommand.CityCode"> <summary> 任务地点所属城市编号 </summary> </member> <member name="P:FlexJobApi.Core.SaveTaskInfoCommand.Address"> <summary> 任务地点详细地址 </summary> </member> <member name="P:FlexJobApi.Core.SaveTaskInfoCommand.BeginTime"> <summary> 任务开始时间 </summary> </member> <member name="P:FlexJobApi.Core.SaveTaskInfoCommand.EndTime"> <summary> 任务结束时间 </summary> </member> <member name="T:FlexJobApi.Core.GetTaskInfoQuery"> <summary> 查询任务详情 </summary> </member> <member name="P:FlexJobApi.Core.GetTaskInfoQuery.Id"> <summary> Id </summary> </member> <member name="T:FlexJobApi.Core.GetTaskInfoQueryResult"> <summary> 查询任务详情-结果 </summary> </member> <member name="P:FlexJobApi.Core.GetTaskInfoQueryResult.Id"> <summary> Id </summary> </member> <member name="P:FlexJobApi.Core.GetTaskInfoQueryResult.Name"> <summary> 任务名称 </summary> </member> <member name="P:FlexJobApi.Core.GetTaskInfoQueryResult.BillingMethod"> <summary> 结算周期 </summary> </member> <member name="P:FlexJobApi.Core.GetTaskInfoQueryResult.ServiceFee"> <summary> 服务费 </summary> </member> <member name="P:FlexJobApi.Core.GetTaskInfoQueryResult.SettlementCycle"> <summary> 结算方式 </summary> </member> <member name="P:FlexJobApi.Core.GetTaskInfoQueryResult.Benefits"> <summary> 福利 </summary> </member> <member name="P:FlexJobApi.Core.GetTaskInfoQueryResult.AgeMinLimit"> <summary> 年龄范围最小 </summary> </member> <member name="P:FlexJobApi.Core.GetTaskInfoQueryResult.AgeMaxLimit"> <summary> 年龄范围大 </summary> </member> <member name="P:FlexJobApi.Core.GetTaskInfoQueryResult.GenderLimit"> <summary> 性别要求 </summary> </member> <member name="P:FlexJobApi.Core.GetTaskInfoQueryResult.CredentialLimits"> <summary> 资格证书类型 </summary> </member> <member name="P:FlexJobApi.Core.GetTaskInfoQueryResult.ProvinceCode"> <summary> 任务地点所属省份编号 </summary> </member> <member name="P:FlexJobApi.Core.GetTaskInfoQueryResult.ProvinceName"> <summary> 任务地点所属省份 </summary> </member> <member name="P:FlexJobApi.Core.GetTaskInfoQueryResult.CityCode"> <summary> 任务地点所属城市编号 </summary> </member> <member name="P:FlexJobApi.Core.GetTaskInfoQueryResult.CityName"> <summary> 任务地点所属城市 </summary> </member> <member name="P:FlexJobApi.Core.GetTaskInfoQueryResult.Address"> <summary> 任务地点详细地址 </summary> </member> <member name="P:FlexJobApi.Core.GetTaskInfoQueryResult.BeginTime"> <summary> 任务开始时间 </summary> </member> <member name="P:FlexJobApi.Core.GetTaskInfoQueryResult.EndTime"> <summary> 任务结束时间 </summary> </member> <member name="P:FlexJobApi.Core.GetTaskInfoQueryResult.CreatedTime"> <summary> 创建时间 </summary> </member> <member name="T:FlexJobApi.Core.GetTaskInfosQuery"> <summary> 查询任务分页列表 </summary> </member> <member name="P:FlexJobApi.Core.GetTaskInfosQuery.Keywords"> <summary> 关键字(任务名称) </summary> </member> <member name="P:FlexJobApi.Core.GetTaskInfosQuery.Time"> <summary> 发布时间 </summary> </member> <member name="P:FlexJobApi.Core.GetTaskInfosQuery.Status"> <summary> 任务状态 </summary> </member> <member name="P:FlexJobApi.Core.GetTaskInfosQuery.ReleaseStatus"> <summary> 发布状态 </summary> </member> <member name="T:FlexJobApi.Core.GetTaskInfosQueryResultItem"> <summary> 查询任务分页列表-结果-项 </summary> </member> <member name="P:FlexJobApi.Core.GetTaskInfosQueryResultItem.Name"> <summary> 任务名称 </summary> </member> <member name="P:FlexJobApi.Core.GetTaskInfosQueryResultItem.Code"> <summary> 任务单号 </summary> </member> <member name="P:FlexJobApi.Core.GetTaskInfosQueryResultItem.BillingMethod"> <summary> 结算周期 </summary> </member> <member name="P:FlexJobApi.Core.GetTaskInfosQueryResultItem.ServiceFee"> <summary> 服务费 </summary> </member> <member name="P:FlexJobApi.Core.GetTaskInfosQueryResultItem.SettlementCycle"> <summary> 结算方式 </summary> </member> <member name="P:FlexJobApi.Core.GetTaskInfosQueryResultItem.GenderLimit"> <summary> 性别要求 </summary> </member> <member name="P:FlexJobApi.Core.GetTaskInfosQueryResultItem.UserCount"> <summary> 报名人数 </summary> </member> <member name="T:FlexJobApi.Core.TaskInfoQueryable"> <summary> 任务查询 </summary> </member> <member name="M:FlexJobApi.Core.TaskInfoQueryable.GetQueryable(Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.TaskInfo},System.Func{System.Linq.IQueryable{FlexJobApi.Core.TaskInfo},System.Linq.IQueryable{FlexJobApi.Core.TaskInfo}},FlexJobApi.Core.CurrentLogier)"> <summary> 获取任务查询 </summary> <param name="rep"></param> <param name="query"></param> <param name="logier"></param> <returns></returns> </member> <member name="T:FlexJobApi.Core.PasswordLoginCommand"> <summary> @@ -4966,6 +5305,11 @@ 客户端类型 </summary> </member> <member name="P:FlexJobApi.Core.CurrentLogier.EnterpriseId"> <summary> 企业Id </summary> </member> <member name="M:FlexJobApi.Core.JwtHandler.PipelineAsync(Microsoft.AspNetCore.Authorization.AuthorizationHandlerContext,Microsoft.AspNetCore.Http.DefaultHttpContext)"> <summary> 验证管道,也就是验证核心代码 FlexJobApi.Core/Models/Common/DictionaryDataQueryModel.cs
New file @@ -0,0 +1,24 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FlexJobApi.Core.Models.Common { /// <summary> /// 数据字典查询模型 /// </summary> public class DictionaryDataQueryModel { /// <summary> /// 编号 /// </summary> public string Code { get; set; } /// <summary> /// 名称 /// </summary> public string Name { get; set; } } } FlexJobApi.Core/Models/Main/Dictionaries/Queries/GetDictionaryDataSelectQuery.cs
@@ -27,6 +27,16 @@ /// 上级Id /// </summary> public Guid? ParentId { get; set; } /// <summary> /// 关键字 /// </summary> public string Keywords { get; set; } /// <summary> /// 查询所有 /// </summary> public bool All { get; set; } } public class GetDictionaryDataSelectQueryResultOption FlexJobApi.Core/Models/Main/Tasks/Commands/SaveTaskInfoCommand.cs
New file @@ -0,0 +1,107 @@ using Mapster; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FlexJobApi.Core { /// <summary> /// 保存任务 /// </summary> [Resource([EnumResourceController.Task])] public class SaveTaskInfoCommand : SaveDataCommand { public SaveTaskInfoCommand() { Benefits = []; CredentialLimits = []; } /// <summary> /// 任务名称 /// </summary> [Required] public string Name { get; set; } /// <summary> /// 结算周期 /// </summary> [Required] public EnumBillingMethod BillingMethod { get; set; } /// <summary> /// 服务费 /// </summary> [Required] public decimal ServiceFee { get; set; } /// <summary> /// 结算方式 /// </summary> [Required] public EnumSettlementCycle SettlementCycle { get; set; } /// <summary> /// 福利编号 /// </summary> [AdaptIgnore] public List<string> Benefits { get; set; } /// <summary> /// 年龄范围最小 /// </summary> [Required] public int AgeMinLimit { get; set; } /// <summary> /// 年龄范围大 /// </summary> [Required] public int AgeMaxLimit { get; set; } /// <summary> /// 性别要求 /// </summary> [Required] public EnumUserGender GenderLimit { get; set; } /// <summary> /// 资格证书类型编号 /// </summary> [AdaptIgnore] public List<string> CredentialLimits { get; set; } /// <summary> /// 任务地点所属省份编号 /// </summary> [Required] public string ProvinceCode { get; set; } /// <summary> /// 任务地点所属城市编号 /// </summary> [Required] public string CityCode { get; set; } /// <summary> /// 任务地点详细地址 /// </summary> [Required] public string Address { get; set; } /// <summary> /// 任务开始时间 /// </summary> [Required] public DateTime BeginTime { get; set; } /// <summary> /// 任务结束时间 /// </summary> [Required] public DateTime EndTime { get; set; } } } FlexJobApi.Core/Models/Main/Tasks/Queries/GetTaskInfoQuery.cs
New file @@ -0,0 +1,126 @@ using FlexJobApi.Core.Models.Common; using Mapster; using MediatR; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FlexJobApi.Core { /// <summary> /// 查询任务详情 /// </summary> [Resource([EnumResourceController.Task])] public class GetTaskInfoQuery : IRequest<GetTaskInfoQueryResult> { /// <summary> /// Id /// </summary> public Guid Id { get; set; } } /// <summary> /// 查询任务详情-结果 /// </summary> public class GetTaskInfoQueryResult { public GetTaskInfoQueryResult() { Benefits = []; CredentialLimits = []; } /// <summary> /// Id /// </summary> public Guid Id { get; set; } /// <summary> /// 任务名称 /// </summary> public string Name { get; set; } /// <summary> /// 结算周期 /// </summary> public EnumBillingMethod BillingMethod { get; set; } /// <summary> /// 服务费 /// </summary> public decimal ServiceFee { get; set; } /// <summary> /// 结算方式 /// </summary> public EnumSettlementCycle SettlementCycle { get; set; } /// <summary> /// 福利 /// </summary> public List<DictionaryDataQueryModel> Benefits { get; set; } /// <summary> /// 年龄范围最小 /// </summary> public int AgeMinLimit { get; set; } /// <summary> /// 年龄范围大 /// </summary> public int AgeMaxLimit { get; set; } /// <summary> /// 性别要求 /// </summary> public EnumUserGender GenderLimit { get; set; } /// <summary> /// 资格证书类型 /// </summary> public List<DictionaryDataQueryModel> CredentialLimits { get; set; } /// <summary> /// 任务地点所属省份编号 /// </summary> public string ProvinceCode { get; set; } /// <summary> /// 任务地点所属省份 /// </summary> public string ProvinceName { get; set; } /// <summary> /// 任务地点所属城市编号 /// </summary> public string CityCode { get; set; } /// <summary> /// 任务地点所属城市 /// </summary> public string CityName { get; set; } /// <summary> /// 任务地点详细地址 /// </summary> public string Address { get; set; } /// <summary> /// 任务开始时间 /// </summary> public DateTime BeginTime { get; set; } /// <summary> /// 任务结束时间 /// </summary> public DateTime EndTime { get; set; } /// <summary> /// 创建时间 /// </summary> public DateTimeOffset CreatedTime { get; set; } } } FlexJobApi.Core/Models/Main/Tasks/Queries/GetTaskInfosQuery.cs
New file @@ -0,0 +1,78 @@ using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FlexJobApi.Core { /// <summary> /// 查询任务分页列表 /// </summary> [Resource([EnumResourceController.Task])] public class GetTaskInfosQuery : PagedListQuery<PagedListQueryResult<GetTaskInfosQueryResultItem>, GetTaskInfosQueryResultItem> { /// <summary> /// 关键字(任务名称) /// </summary> public string Keywords { get; set; } /// <summary> /// 发布时间 /// </summary> public DateTime? Time { get; set; } /// <summary> /// 任务状态 /// </summary> public EnumTaskStatus? Status { get; set; } /// <summary> /// 发布状态 /// </summary> public EnumTaskReleaseStatus? ReleaseStatus { get; set; } } /// <summary> /// 查询任务分页列表-结果-项 /// </summary> public class GetTaskInfosQueryResultItem { /// <summary> /// 任务名称 /// </summary> [Required] public string Name { get; set; } /// <summary> /// 任务单号 /// </summary> public string Code { get; set; } /// <summary> /// 结算周期 /// </summary> public EnumBillingMethod BillingMethod { get; set; } /// <summary> /// 服务费 /// </summary> public decimal ServiceFee { get; set; } /// <summary> /// 结算方式 /// </summary> public EnumSettlementCycle SettlementCycle { get; set; } /// <summary> /// 性别要求 /// </summary> public EnumUserGender GenderLimit { get; set; } /// <summary> /// 报名人数 /// </summary> public int UserCount { get; set; } } } FlexJobApi.Core/Models/Main/Tasks/Queryables/TaskInfoQueryable.cs
New file @@ -0,0 +1,34 @@ using Furion.DatabaseAccessor; 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 static class TaskInfoQueryable { /// <summary> /// 获取任务查询 /// </summary> /// <param name="rep"></param> /// <param name="query"></param> /// <param name="logier"></param> /// <returns></returns> public static IQueryable<TaskInfo> GetQueryable(this IRepository<TaskInfo> rep, Func<IQueryable<TaskInfo>, IQueryable<TaskInfo>> query, CurrentLogier logier = null) { logier = logier ?? JwtUtils.GetCurrentLogier(); IQueryable<TaskInfo> q = rep.AsQueryable().AsNoTracking() .OrderBy(it => it.BeginTime); if (query != null) q = query(q); return q .Where(it => it.EnterpriseId == logier.EnterpriseId); } } } FlexJobApi.Core/Utils/JwtUtils/CurrentLogier.cs
@@ -57,5 +57,10 @@ /// 客户端类型 /// </summary> public EnumClientType ClientType { get; set; } /// <summary> /// 企业Id /// </summary> public Guid? EnterpriseId { get; set; } } } FlexJobApi.Core/Utils/JwtUtils/JwtUtils.cs
@@ -37,6 +37,7 @@ { "Level",logier.Level }, { "Type",logier.Type }, { "ClientType",logier.ClientType }, { "EnterpriseId",logier.EnterpriseId }, }); // 获取刷新 token logier.RefreshToken = JWTEncryption.GenerateRefreshToken(logier.AccessToken, 60 * 24); @@ -64,6 +65,7 @@ logier.PhoneNumber = App.User.FindFirstValue("PhoneNumber"); logier.Type = App.User.FindFirstValue("Type").ToEnum<EnumUserType>("请填写用户类型").Value; logier.ClientType = App.User.FindFirstValue("ClientType").ToEnum<EnumClientType>("请填写客户端类型").Value; logier.EnterpriseId = App.User.FindFirstValue("EnterpriseId").ToGuid(); return logier; } return null; FlexJobApi.User.Application/Auths/Commands/PasswordLoginCommandHandler.cs
@@ -35,6 +35,7 @@ it.Id, it.Avatar, it.Level, it.EnterpriseId, it.UserAuth.Name, it.UserAuth.UserName, it.UserAuth.PhoneNumber, @@ -54,7 +55,8 @@ PhoneNumber = userInfo.PhoneNumber, Level = userInfo.Level, Type = request.Type, ClientType = request.ClientType ClientType = request.ClientType, EnterpriseId = userInfo.EnterpriseId, }; JwtUtils.GenerateToken(logier);