From 75463592b40199fbafb6930060ef679a05b5b714 Mon Sep 17 00:00:00 2001 From: sunpengfei <i@angelzzz.com> Date: 星期四, 07 八月 2025 16:26:14 +0800 Subject: [PATCH] feat:任务开发 --- FlexJobApi.Core/Models/Main/Dictionaries/Queries/GetDictionaryDataSelectQuery.cs | 10 FlexJobApi.Core/Models/Main/Tasks/Commands/SaveTaskInfoCommand.cs | 107 ++++++ FlexJobApi.Core/Utils/JwtUtils/CurrentLogier.cs | 5 FlexJobApi.Core/Models/Common/DictionaryDataQueryModel.cs | 24 + FlexJobApi.User.Application/Auths/Commands/PasswordLoginCommandHandler.cs | 4 FlexJobApi.Core/Entities/Tasks/TaskInfo.cs | 17 FlexJobApi.Core/Models/Main/Tasks/Queries/GetTaskInfosQuery.cs | 78 ++++ FlexJobApi.Application/Dictionaries/Queries/DictionaryDatasQueryHandler.cs | 19 FlexJobApi.Application/Tasks/Queries/TaskInfoQueryHandler.cs | 37 ++ FlexJobApi.Application/FlexJobApi.Application.xml | 54 +++ FlexJobApi.Core/Models/Main/Tasks/Queries/GetTaskInfoQuery.cs | 126 +++++++ FlexJobApi.Core/Models/Main/Tasks/Queryables/TaskInfoQueryable.cs | 34 ++ FlexJobApi.Core/Enums/Tasks/EnumTaskStatus.cs | 23 + FlexJobApi.Core/FlexJobApi.Core.xml | 346 ++++++++++++++++++++ FlexJobApi.Application/Tasks/Commands/TaskInfoCommandHandler.cs | 76 ++++ FlexJobApi.Core/Enums/Common/EnumResourceController.cs | 6 FlexJobApi.Core/Utils/JwtUtils/JwtUtils.cs | 2 FlexJobApi.Application/Dictionaries/Commands/DictionaryDataCommandHandler.cs | 19 FlexJobApi.Core/Enums/Tasks/EnumTaskReleaseStatus.cs | 23 + FlexJobApi.Core/FlexJobApi.Core.csproj | 4 20 files changed, 1,001 insertions(+), 13 deletions(-) diff --git a/FlexJobApi.Application/Dictionaries/Commands/DictionaryDataCommandHandler.cs b/FlexJobApi.Application/Dictionaries/Commands/DictionaryDataCommandHandler.cs index ac2f0cf..6e121f5 100644 --- a/FlexJobApi.Application/Dictionaries/Commands/DictionaryDataCommandHandler.cs +++ b/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); } } } diff --git a/FlexJobApi.Application/Dictionaries/Queries/DictionaryDatasQueryHandler.cs b/FlexJobApi.Application/Dictionaries/Queries/DictionaryDatasQueryHandler.cs index 6655481..ce569c1 100644 --- a/FlexJobApi.Application/Dictionaries/Queries/DictionaryDatasQueryHandler.cs +++ b/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); diff --git a/FlexJobApi.Application/FlexJobApi.Application.xml b/FlexJobApi.Application/FlexJobApi.Application.xml index 89b8cb5..e8cce9e 100644 --- a/FlexJobApi.Application/FlexJobApi.Application.xml +++ b/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> diff --git a/FlexJobApi.Application/Tasks/Commands/TaskInfoCommandHandler.cs b/FlexJobApi.Application/Tasks/Commands/TaskInfoCommandHandler.cs new file mode 100644 index 0000000..3b9c630 --- /dev/null +++ b/FlexJobApi.Application/Tasks/Commands/TaskInfoCommandHandler.cs @@ -0,0 +1,76 @@ +锘縰sing 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); + } + } +} diff --git a/FlexJobApi.Application/Tasks/Queries/TaskInfoQueryHandler.cs b/FlexJobApi.Application/Tasks/Queries/TaskInfoQueryHandler.cs new file mode 100644 index 0000000..adc9d1b --- /dev/null +++ b/FlexJobApi.Application/Tasks/Queries/TaskInfoQueryHandler.cs @@ -0,0 +1,37 @@ +锘縰sing 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); + } + } +} diff --git a/FlexJobApi.Core/Entities/Tasks/TaskInfo.cs b/FlexJobApi.Core/Entities/Tasks/TaskInfo.cs index bcff36b..e92201f 100644 --- a/FlexJobApi.Core/Entities/Tasks/TaskInfo.cs +++ b/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 diff --git a/FlexJobApi.Core/Enums/Common/EnumResourceController.cs b/FlexJobApi.Core/Enums/Common/EnumResourceController.cs index 10d548a..22e6696 100644 --- a/FlexJobApi.Core/Enums/Common/EnumResourceController.cs +++ b/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)] diff --git a/FlexJobApi.Core/Enums/Tasks/EnumTaskReleaseStatus.cs b/FlexJobApi.Core/Enums/Tasks/EnumTaskReleaseStatus.cs new file mode 100644 index 0000000..8aad11c --- /dev/null +++ b/FlexJobApi.Core/Enums/Tasks/EnumTaskReleaseStatus.cs @@ -0,0 +1,23 @@ +锘縰sing 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 + } +} diff --git a/FlexJobApi.Core/Enums/Tasks/EnumTaskStatus.cs b/FlexJobApi.Core/Enums/Tasks/EnumTaskStatus.cs new file mode 100644 index 0000000..87aa978 --- /dev/null +++ b/FlexJobApi.Core/Enums/Tasks/EnumTaskStatus.cs @@ -0,0 +1,23 @@ +锘縰sing 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 + } +} diff --git a/FlexJobApi.Core/FlexJobApi.Core.csproj b/FlexJobApi.Core/FlexJobApi.Core.csproj index 8977b6e..8dee6b3 100644 --- a/FlexJobApi.Core/FlexJobApi.Core.csproj +++ b/FlexJobApi.Core/FlexJobApi.Core.csproj @@ -34,8 +34,4 @@ </None> </ItemGroup> - <ItemGroup> - <Folder Include="Models\Main\TaskInfos\" /> - </ItemGroup> - </Project> diff --git a/FlexJobApi.Core/FlexJobApi.Core.xml b/FlexJobApi.Core/FlexJobApi.Core.xml index e6920f5..666c230 100644 --- a/FlexJobApi.Core/FlexJobApi.Core.xml +++ b/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> 绫诲埆缂栧彿锛圛d/缂栧彿浜岄�変竴锛� + </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> 楠岃瘉绠¢亾锛屼篃灏辨槸楠岃瘉鏍稿績浠g爜 diff --git a/FlexJobApi.Core/Models/Common/DictionaryDataQueryModel.cs b/FlexJobApi.Core/Models/Common/DictionaryDataQueryModel.cs new file mode 100644 index 0000000..4b216f6 --- /dev/null +++ b/FlexJobApi.Core/Models/Common/DictionaryDataQueryModel.cs @@ -0,0 +1,24 @@ +锘縰sing 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; } + } +} diff --git a/FlexJobApi.Core/Models/Main/Dictionaries/Queries/GetDictionaryDataSelectQuery.cs b/FlexJobApi.Core/Models/Main/Dictionaries/Queries/GetDictionaryDataSelectQuery.cs index 202b6da..c970cb4 100644 --- a/FlexJobApi.Core/Models/Main/Dictionaries/Queries/GetDictionaryDataSelectQuery.cs +++ b/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 diff --git a/FlexJobApi.Core/Models/Main/Tasks/Commands/SaveTaskInfoCommand.cs b/FlexJobApi.Core/Models/Main/Tasks/Commands/SaveTaskInfoCommand.cs new file mode 100644 index 0000000..4f6c983 --- /dev/null +++ b/FlexJobApi.Core/Models/Main/Tasks/Commands/SaveTaskInfoCommand.cs @@ -0,0 +1,107 @@ +锘縰sing 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; } + } +} diff --git a/FlexJobApi.Core/Models/Main/Tasks/Queries/GetTaskInfoQuery.cs b/FlexJobApi.Core/Models/Main/Tasks/Queries/GetTaskInfoQuery.cs new file mode 100644 index 0000000..1481353 --- /dev/null +++ b/FlexJobApi.Core/Models/Main/Tasks/Queries/GetTaskInfoQuery.cs @@ -0,0 +1,126 @@ +锘縰sing 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; } + } +} diff --git a/FlexJobApi.Core/Models/Main/Tasks/Queries/GetTaskInfosQuery.cs b/FlexJobApi.Core/Models/Main/Tasks/Queries/GetTaskInfosQuery.cs new file mode 100644 index 0000000..1a490d5 --- /dev/null +++ b/FlexJobApi.Core/Models/Main/Tasks/Queries/GetTaskInfosQuery.cs @@ -0,0 +1,78 @@ +锘縰sing 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; } + } +} diff --git a/FlexJobApi.Core/Models/Main/Tasks/Queryables/TaskInfoQueryable.cs b/FlexJobApi.Core/Models/Main/Tasks/Queryables/TaskInfoQueryable.cs new file mode 100644 index 0000000..0275097 --- /dev/null +++ b/FlexJobApi.Core/Models/Main/Tasks/Queryables/TaskInfoQueryable.cs @@ -0,0 +1,34 @@ +锘縰sing 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); + } + } +} diff --git a/FlexJobApi.Core/Utils/JwtUtils/CurrentLogier.cs b/FlexJobApi.Core/Utils/JwtUtils/CurrentLogier.cs index 019533f..8320023 100644 --- a/FlexJobApi.Core/Utils/JwtUtils/CurrentLogier.cs +++ b/FlexJobApi.Core/Utils/JwtUtils/CurrentLogier.cs @@ -57,5 +57,10 @@ /// 瀹㈡埛绔被鍨� /// </summary> public EnumClientType ClientType { get; set; } + + /// <summary> + /// 浼佷笟Id + /// </summary> + public Guid? EnterpriseId { get; set; } } } diff --git a/FlexJobApi.Core/Utils/JwtUtils/JwtUtils.cs b/FlexJobApi.Core/Utils/JwtUtils/JwtUtils.cs index 5f1f8ad..9a2f200 100644 --- a/FlexJobApi.Core/Utils/JwtUtils/JwtUtils.cs +++ b/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; diff --git a/FlexJobApi.User.Application/Auths/Commands/PasswordLoginCommandHandler.cs b/FlexJobApi.User.Application/Auths/Commands/PasswordLoginCommandHandler.cs index 4e26bd1..66a3942 100644 --- a/FlexJobApi.User.Application/Auths/Commands/PasswordLoginCommandHandler.cs +++ b/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); -- Gitblit v1.9.1