From 27076e2f1c080e6d8a86a7bd2120d9f2839b13e7 Mon Sep 17 00:00:00 2001 From: zhengyiming <540361168@qq.com> Date: 星期五, 08 八月 2025 17:12:31 +0800 Subject: [PATCH] Merge branch 'master' of http://120.26.58.240:8888/r/ApiFlexJob --- FlexJobApi.Core/Utils/WxmpUtils/WxmpUtils.cs | 49 +++++++ FlexJobApi.Core/Utils/WxmpUtils/WxmpOptions.cs | 40 +++++ FlexJobApi.FlexJobServer.Application/FlexJobApi.FlexJobServer.Application.xml | 8 + FlexJobApi.Core/Models/FlexJobServer/Dictionaries/Commands/DeleteDictionaryCategoryCommand.cs | 2 FlexJobApi.FlexJobServer.Application/Tasks/Commands/TaskInfoCommandHandler.cs | 23 +++ FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs | 4 FlexJobApi.Core/Models/UserServer/Roles/Commands/DeleteRoleCommand.cs | 2 FlexJobApi.Core/Models/UserServer/Auths/Commands/SmsLoginCommand.cs | 2 FlexJobApi.Core/Utils/DbUtils/DeleteDataCommand.cs | 5 FlexJobApi.Core/Utils/WxmpUtils/WxmpSnsJscode2sessionCallback.cs | 17 ++ FlexJobApi.Web.Entry/appsettings.json | 16 ++ FlexJobApi.Core/Enums/Common/EnumErrorCodeType.cs | 5 FlexJobApi.Core/FlexJobApiCoreStartup.cs | 1 FlexJobApi.Core/Utils/SmsUtils/SmsUtils.cs | 4 FlexJobApi.Core/Models/UserServer/Auths/Commands/WxmpLoginCommand.cs | 11 + FlexJobApi.Core/FlexJobApi.Core.xml | 65 ++++++++ FlexJobApi.Core/Models/FlexJobServer/Tasks/Commands/DeleteTaskInfoCommand.cs | 17 ++ FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetTaskInfosQuery.cs | 4 FlexJobApi.Core/Models/UserServer/Auths/Commands/BindPhoneNumberCommand.cs | 26 +++ FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml | 18 ++ FlexJobApi.Core/Models/UserServer/Menus/Commands/DeleteMenuCommand.cs | 2 FlexJobApi.UserServer.Application/Auths/Commands/LoginCommandHandler.cs | 77 ++++++++++ 22 files changed, 373 insertions(+), 25 deletions(-) diff --git a/FlexJobApi.Core/Enums/Common/EnumErrorCodeType.cs b/FlexJobApi.Core/Enums/Common/EnumErrorCodeType.cs index 31eede6..9fb8daf 100644 --- a/FlexJobApi.Core/Enums/Common/EnumErrorCodeType.cs +++ b/FlexJobApi.Core/Enums/Common/EnumErrorCodeType.cs @@ -16,6 +16,11 @@ [ErrorCodeItemMetadata("{0}")] s400 = 400, /// <summary> + /// 褰撳墠鐧诲綍鐢ㄦ埛宸插け鏁� + /// </summary> + [ErrorCodeItemMetadata("褰撳墠鐧诲綍鐢ㄦ埛宸插け鏁�")] + s401 = 401, + /// <summary> /// {0}涓嶅瓨鍦� /// </summary> [ErrorCodeItemMetadata("{0}涓嶅瓨鍦�")] diff --git a/FlexJobApi.Core/FlexJobApi.Core.xml b/FlexJobApi.Core/FlexJobApi.Core.xml index 66b892c..fe5904b 100644 --- a/FlexJobApi.Core/FlexJobApi.Core.xml +++ b/FlexJobApi.Core/FlexJobApi.Core.xml @@ -1749,6 +1749,11 @@ 鍙傛暟閿欒 </summary> </member> + <member name="F:FlexJobApi.Core.EnumErrorCodeType.s401"> + <summary> + 褰撳墠鐧诲綍鐢ㄦ埛宸插け鏁� + </summary> + </member> <member name="F:FlexJobApi.Core.EnumErrorCodeType.s404"> <summary> {0}涓嶅瓨鍦� @@ -2985,6 +2990,11 @@ 鍚嶇О </summary> </member> + <member name="T:FlexJobApi.Core.DeleteTaskInfoCommand"> + <summary> + 鍒犻櫎浠诲姟 + </summary> + </member> <member name="T:FlexJobApi.Core.SaveTaskInfoCommand"> <summary> 淇濆瓨浠诲姟 @@ -3350,27 +3360,27 @@ 鎺ㄨ崘鐘舵�� </summary> </member> - <member name="P:FlexJobApi.Core.GetTaskInfosQueryResult.Count"> + <member name="P:FlexJobApi.Core.GetTaskInfosQueryResult.ObjectData"> <summary> 缁熻 </summary> </member> - <member name="P:FlexJobApi.Core.GetTaskInfosQueryResultCount.WaitAssignCount"> + <member name="P:FlexJobApi.Core.GetTaskInfosQueryResultObjectData.WaitAssignCount"> <summary> 寰呭畨鎺掓暟閲� </summary> </member> - <member name="P:FlexJobApi.Core.GetTaskInfosQueryResultCount.CompletedAssignCount"> + <member name="P:FlexJobApi.Core.GetTaskInfosQueryResultObjectData.CompletedAssignCount"> <summary> 宸插畨鎺掓暟閲� </summary> </member> - <member name="P:FlexJobApi.Core.GetTaskInfosQueryResultCount.InProcessReleaseCount"> + <member name="P:FlexJobApi.Core.GetTaskInfosQueryResultObjectData.InProcessReleaseCount"> <summary> 鍙戝竷涓暟閲� </summary> </member> - <member name="P:FlexJobApi.Core.GetTaskInfosQueryResultCount.StoppedReleaseCount"> + <member name="P:FlexJobApi.Core.GetTaskInfosQueryResultObjectData.StoppedReleaseCount"> <summary> 宸插仠姝㈡暟閲� </summary> @@ -3524,6 +3534,21 @@ <param name="logier"></param> <returns></returns> </member> + <member name="T:FlexJobApi.Core.BindPhoneNumberCommand"> + <summary> + 缁戝畾鎵嬫満鍙� + </summary> + </member> + <member name="P:FlexJobApi.Core.BindPhoneNumberCommand.PhoneNumber"> + <summary> + 鎵嬫満鍙风爜 + </summary> + </member> + <member name="P:FlexJobApi.Core.BindPhoneNumberCommand.VerifyCode"> + <summary> + 楠岃瘉鐮� + </summary> + </member> <member name="T:FlexJobApi.Core.PasswordLoginCommand"> <summary> 瀵嗙爜鐧诲綍 @@ -3607,6 +3632,11 @@ <member name="P:FlexJobApi.Core.WxmpLoginCommand.Code"> <summary> 鐢ㄦ埛鐧诲綍鍑瘉 + </summary> + </member> + <member name="P:FlexJobApi.Core.WxmpLoginCommand.Type"> + <summary> + 鐢ㄦ埛绫诲瀷 </summary> </member> <member name="T:FlexJobApi.Core.GetAliyunOSSAcsQuery"> @@ -6257,6 +6287,31 @@ <param name="singularName"></param> <returns></returns> </member> + <member name="T:FlexJobApi.Core.WxmpOptions"> + <summary> + 寰俊灏忕▼搴忛厤缃� + </summary> + </member> + <member name="P:FlexJobApi.Core.WxmpOptionsItem.Code"> + <summary> + 缂栧彿 + </summary> + </member> + <member name="P:FlexJobApi.Core.WxmpOptionsItem.AppId"> + <summary> + 灏忕▼搴廔D + </summary> + </member> + <member name="P:FlexJobApi.Core.WxmpOptionsItem.AppSecret"> + <summary> + 灏忕▼搴忓瘑閽� + </summary> + </member> + <member name="T:FlexJobApi.Core.WxmpUtils"> + <summary> + 寰俊灏忕▼搴忓伐鍏� + </summary> + </member> <member name="T:FlexJobApi.Core.XmlDoc"> <summary> 娉ㄩ噴鏂囨。 diff --git a/FlexJobApi.Core/FlexJobApiCoreStartup.cs b/FlexJobApi.Core/FlexJobApiCoreStartup.cs index dcc3bed..de3bf71 100644 --- a/FlexJobApi.Core/FlexJobApiCoreStartup.cs +++ b/FlexJobApi.Core/FlexJobApiCoreStartup.cs @@ -52,6 +52,7 @@ services.AddHttpRemote(); services.AddSingleton<ResourceHttpUtils>(); services.AddSingleton<AliyunSmsUtils>(); + services.AddSingleton<WxmpUtils>(); services.AddScoped<SmsUtils>(); services.AddMediatR(cfg => cfg.RegisterServicesFromAssemblies(App.Assemblies.ToArray())); diff --git a/FlexJobApi.Core/Models/FlexJobServer/Dictionaries/Commands/DeleteDictionaryCategoryCommand.cs b/FlexJobApi.Core/Models/FlexJobServer/Dictionaries/Commands/DeleteDictionaryCategoryCommand.cs index 2cef291..ea17206 100644 --- a/FlexJobApi.Core/Models/FlexJobServer/Dictionaries/Commands/DeleteDictionaryCategoryCommand.cs +++ b/FlexJobApi.Core/Models/FlexJobServer/Dictionaries/Commands/DeleteDictionaryCategoryCommand.cs @@ -11,7 +11,7 @@ /// 鍒犻櫎鏁版嵁瀛楀吀绫诲埆 /// </summary> [Resource([EnumResourceController.Dictionary])] - public class DeleteDictionaryCategoryCommand : DeleteDataCommand, IRequest<int> + public class DeleteDictionaryCategoryCommand : DeleteDataCommand { } diff --git a/FlexJobApi.Core/Models/FlexJobServer/Tasks/Commands/DeleteTaskInfoCommand.cs b/FlexJobApi.Core/Models/FlexJobServer/Tasks/Commands/DeleteTaskInfoCommand.cs new file mode 100644 index 0000000..defdff9 --- /dev/null +++ b/FlexJobApi.Core/Models/FlexJobServer/Tasks/Commands/DeleteTaskInfoCommand.cs @@ -0,0 +1,17 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FlexJobApi.Core +{ + /// <summary> + /// 鍒犻櫎浠诲姟 + /// </summary> + [Resource([EnumResourceController.Task])] + public class DeleteTaskInfoCommand : DeleteDataCommand + { + + } +} diff --git a/FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetTaskInfosQuery.cs b/FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetTaskInfosQuery.cs index 0c3cea9..61955a8 100644 --- a/FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetTaskInfosQuery.cs +++ b/FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetTaskInfosQuery.cs @@ -79,10 +79,10 @@ /// <summary> /// 缁熻 /// </summary> - public GetTaskInfosQueryResultCount Count { get; set; } + public GetTaskInfosQueryResultObjectData ObjectData { get; set; } } - public class GetTaskInfosQueryResultCount + public class GetTaskInfosQueryResultObjectData { /// <summary> /// 寰呭畨鎺掓暟閲� diff --git a/FlexJobApi.Core/Models/UserServer/Auths/Commands/BindPhoneNumberCommand.cs b/FlexJobApi.Core/Models/UserServer/Auths/Commands/BindPhoneNumberCommand.cs new file mode 100644 index 0000000..edb04bd --- /dev/null +++ b/FlexJobApi.Core/Models/UserServer/Auths/Commands/BindPhoneNumberCommand.cs @@ -0,0 +1,26 @@ +锘縰sing MediatR; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FlexJobApi.Core +{ + /// <summary> + /// 缁戝畾鎵嬫満鍙� + /// </summary> + [Resource([EnumResourceController.Auth])] + public class BindPhoneNumberCommand : IRequest<bool> + { + /// <summary> + /// 鎵嬫満鍙风爜 + /// </summary> + public string PhoneNumber { get; set; } + + /// <summary> + /// 楠岃瘉鐮� + /// </summary> + public string VerifyCode { get; set; } + } +} diff --git a/FlexJobApi.Core/Models/UserServer/Auths/Commands/SmsLoginCommand.cs b/FlexJobApi.Core/Models/UserServer/Auths/Commands/SmsLoginCommand.cs index be2f9b2..f1d6aa7 100644 --- a/FlexJobApi.Core/Models/UserServer/Auths/Commands/SmsLoginCommand.cs +++ b/FlexJobApi.Core/Models/UserServer/Auths/Commands/SmsLoginCommand.cs @@ -17,13 +17,11 @@ /// <summary> /// 鎵嬫満鍙风爜 /// </summary> - [Required] public string PhoneNumber { get; set; } /// <summary> /// 楠岃瘉鐮� /// </summary> - [Required] public string VerifyCode { get; set; } /// <summary> diff --git a/FlexJobApi.Core/Models/UserServer/Auths/Commands/WxmpLoginCommand.cs b/FlexJobApi.Core/Models/UserServer/Auths/Commands/WxmpLoginCommand.cs index 8ce3492..70f9933 100644 --- a/FlexJobApi.Core/Models/UserServer/Auths/Commands/WxmpLoginCommand.cs +++ b/FlexJobApi.Core/Models/UserServer/Auths/Commands/WxmpLoginCommand.cs @@ -1,4 +1,5 @@ -锘縰sing System; +锘縰sing MediatR; +using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; @@ -10,12 +11,18 @@ /// <summary> /// 寰俊灏忕▼搴忕櫥褰� /// </summary> - public class WxmpLoginCommand + [Resource([EnumResourceController.Auth], AllowAnonymous = true)] + public class WxmpLoginCommand : IRequest<LoginCommandCallback> { /// <summary> /// 鐢ㄦ埛鐧诲綍鍑瘉 /// </summary> [Required] public string Code { get; set; } + + /// <summary> + /// 鐢ㄦ埛绫诲瀷 + /// </summary> + public EnumUserType Type { get; set; } } } diff --git a/FlexJobApi.Core/Models/UserServer/Menus/Commands/DeleteMenuCommand.cs b/FlexJobApi.Core/Models/UserServer/Menus/Commands/DeleteMenuCommand.cs index e924512..82d0187 100644 --- a/FlexJobApi.Core/Models/UserServer/Menus/Commands/DeleteMenuCommand.cs +++ b/FlexJobApi.Core/Models/UserServer/Menus/Commands/DeleteMenuCommand.cs @@ -12,7 +12,7 @@ /// 鍒犻櫎鑿滃崟 /// </summary> [Resource([EnumResourceController.Menu])] - public class DeleteMenuCommand : DeleteDataCommand, IRequest<int> + public class DeleteMenuCommand : DeleteDataCommand { } diff --git a/FlexJobApi.Core/Models/UserServer/Roles/Commands/DeleteRoleCommand.cs b/FlexJobApi.Core/Models/UserServer/Roles/Commands/DeleteRoleCommand.cs index 2607022..007fc71 100644 --- a/FlexJobApi.Core/Models/UserServer/Roles/Commands/DeleteRoleCommand.cs +++ b/FlexJobApi.Core/Models/UserServer/Roles/Commands/DeleteRoleCommand.cs @@ -11,7 +11,7 @@ /// 鍒犻櫎瑙掕壊 /// </summary> [Resource([EnumResourceController.Role])] - public class DeleteRoleCommand : DeleteDataCommand, IRequest<int> + public class DeleteRoleCommand : DeleteDataCommand { } diff --git a/FlexJobApi.Core/Utils/DbUtils/DeleteDataCommand.cs b/FlexJobApi.Core/Utils/DbUtils/DeleteDataCommand.cs index a5e8a26..f926e84 100644 --- a/FlexJobApi.Core/Utils/DbUtils/DeleteDataCommand.cs +++ b/FlexJobApi.Core/Utils/DbUtils/DeleteDataCommand.cs @@ -1,4 +1,5 @@ -锘縰sing System; +锘縰sing MediatR; +using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; @@ -10,7 +11,7 @@ /// <summary> /// 鍒犻櫎鍛戒护 /// </summary> - public abstract class DeleteDataCommand + public abstract class DeleteDataCommand : IRequest<int> { protected DeleteDataCommand() { diff --git a/FlexJobApi.Core/Utils/SmsUtils/SmsUtils.cs b/FlexJobApi.Core/Utils/SmsUtils/SmsUtils.cs index fa3b0fa..e280385 100644 --- a/FlexJobApi.Core/Utils/SmsUtils/SmsUtils.cs +++ b/FlexJobApi.Core/Utils/SmsUtils/SmsUtils.cs @@ -18,11 +18,11 @@ /// </summary> public class SmsUtils { - private readonly IRepository<SmsLog> rep; + private readonly IRepository<SmsLog, LogDbContextLocator> rep; private readonly AliyunSmsUtils aliyunSmsUtils; public SmsUtils( - IRepository<SmsLog> rep, + IRepository<SmsLog, LogDbContextLocator> rep, AliyunSmsUtils aliyunSmsUtils) { this.rep = rep; diff --git a/FlexJobApi.Core/Utils/WxmpUtils/WxmpOptions.cs b/FlexJobApi.Core/Utils/WxmpUtils/WxmpOptions.cs new file mode 100644 index 0000000..0e60ecf --- /dev/null +++ b/FlexJobApi.Core/Utils/WxmpUtils/WxmpOptions.cs @@ -0,0 +1,40 @@ +锘縰sing Furion.ConfigurableOptions; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FlexJobApi.Core +{ + /// <summary> + /// 寰俊灏忕▼搴忛厤缃� + /// </summary> + public class WxmpOptions : IConfigurableOptions + { + public WxmpOptions() + { + Items = []; + } + + public List<WxmpOptionsItem> Items { get; set; } + } + + public class WxmpOptionsItem + { + /// <summary> + /// 缂栧彿 + /// </summary> + public string Code { get; set; } + + /// <summary> + /// 灏忕▼搴廔D + /// </summary> + public string AppId { get; set; } + + /// <summary> + /// 灏忕▼搴忓瘑閽� + /// </summary> + public string AppSecret { get; set; } + } +} diff --git a/FlexJobApi.Core/Utils/WxmpUtils/WxmpSnsJscode2sessionCallback.cs b/FlexJobApi.Core/Utils/WxmpUtils/WxmpSnsJscode2sessionCallback.cs new file mode 100644 index 0000000..7080916 --- /dev/null +++ b/FlexJobApi.Core/Utils/WxmpUtils/WxmpSnsJscode2sessionCallback.cs @@ -0,0 +1,17 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FlexJobApi.Core +{ + public class WxmpSnsJscode2sessionCallback + { + public string session_key { get; set; } + public string unionid { get; set; } + public string errmsg { get; set; } + public string openid { get; set; } + public int errcode { get; set; } + } +} diff --git a/FlexJobApi.Core/Utils/WxmpUtils/WxmpUtils.cs b/FlexJobApi.Core/Utils/WxmpUtils/WxmpUtils.cs new file mode 100644 index 0000000..0a200da --- /dev/null +++ b/FlexJobApi.Core/Utils/WxmpUtils/WxmpUtils.cs @@ -0,0 +1,49 @@ +锘縰sing Furion.FriendlyException; +using Furion.HttpRemote; +using Microsoft.Extensions.Options; +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 WxmpUtils + { + private readonly IOptions<WxmpOptions> options; + private readonly IHttpRemoteService httpRemoteService; + + public WxmpUtils( + IOptions<WxmpOptions> options, + IHttpRemoteService httpRemoteService) + { + this.options = options; + this.httpRemoteService = httpRemoteService; + } + + public async Task<WxmpSnsJscode2sessionCallback> SnsJscode2sessionAsync(EnumUserType userType, string code, CancellationToken cancellationToken = default) + { + var option = options.Value.Items.FirstOrDefault(it => it.Code == userType.ToString()); + if (option == null || option.AppId.IsNull() || option.AppSecret.IsNull()) + throw Oops.Oh(EnumErrorCodeType.s400, "鐧诲綍澶辫触锛岀己澶遍厤缃細WxmpOptions"); + if (code.IsNull()) + throw Oops.Oh(EnumErrorCodeType.s400, "璇峰~鍐橶xmpCode"); + var callback = await httpRemoteService.GetAsAsync<WxmpSnsJscode2sessionCallback>("https://api.weixin.qq.com/sns/jscode2session", + builder => builder.WithQueryParameters(new Dictionary<string, string> + { + { "appid", option.AppId }, + { "secret", option.AppSecret }, + { "js_code", code }, + { "grant_type", "authorization_code" } + })); + if (callback == null || callback.errcode != 0) + throw Oops.Oh(EnumErrorCodeType.s510, $"鐧诲綍澶辫触锛歿callback.errmsg}锛岃鑱旂郴绠$悊鍛�"); + return callback; + } + } +} diff --git a/FlexJobApi.FlexJobServer.Application/FlexJobApi.FlexJobServer.Application.xml b/FlexJobApi.FlexJobServer.Application/FlexJobApi.FlexJobServer.Application.xml index 4927d0b..4ca909d 100644 --- a/FlexJobApi.FlexJobServer.Application/FlexJobApi.FlexJobServer.Application.xml +++ b/FlexJobApi.FlexJobServer.Application/FlexJobApi.FlexJobServer.Application.xml @@ -161,6 +161,14 @@ <param name="cancellationToken"></param> <returns></returns> </member> + <member name="M:FlexJobApi.FlexJobServer.Application.TaskInfoCommandHandler.Handle(FlexJobApi.Core.DeleteTaskInfoCommand,System.Threading.CancellationToken)"> + <summary> + 鍒犻櫎浠诲姟 + </summary> + <param name="request"></param> + <param name="cancellationToken"></param> + <returns></returns> + </member> <member name="T:FlexJobApi.FlexJobServer.Application.TaskInfoQueryHandler"> <summary> 浠诲姟鏌ヨ澶勭悊鍣� diff --git a/FlexJobApi.FlexJobServer.Application/Tasks/Commands/TaskInfoCommandHandler.cs b/FlexJobApi.FlexJobServer.Application/Tasks/Commands/TaskInfoCommandHandler.cs index 29b7036..0d67047 100644 --- a/FlexJobApi.FlexJobServer.Application/Tasks/Commands/TaskInfoCommandHandler.cs +++ b/FlexJobApi.FlexJobServer.Application/Tasks/Commands/TaskInfoCommandHandler.cs @@ -21,7 +21,8 @@ ) : IRequestHandler<SaveTaskInfoCommand, Guid>, IRequestHandler<SetTaskInfoReleaseStatusCommand, int>, - IRequestHandler<SetTaskInfoRecommendStatusCommand, int> + IRequestHandler<SetTaskInfoRecommendStatusCommand, int>, + IRequestHandler<DeleteTaskInfoCommand, int> { private readonly IRepository<TaskInfo> rep = rep; @@ -111,6 +112,26 @@ return entities.Count; } + /// <summary> + /// 鍒犻櫎浠诲姟 + /// </summary> + /// <param name="request"></param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + public Task<int> Handle(DeleteTaskInfoCommand request, CancellationToken cancellationToken) + { + return request.DeleteData<TaskInfo>( + q => + { + q = TaskInfoRepository.GetQueryable(rep, false); + if (q.AsNoTracking().Any(it => it.Status == EnumTaskStatus.Complete)) + { + throw Oops.Oh(EnumErrorCodeType.s510, "宸插畨鎺掔殑浠诲姟鏃犳硶鍒犻櫎"); + } + return q; + }, cancellationToken); + } + private async Task BuildCode(TaskInfo entity) { entity.Code = $"{DateTime.Now:yyyyMMddHHmm}{new Random(IDGen.NextID().GetHashCode()).Next(1000, 9999)}"; diff --git a/FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs b/FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs index 418cb1d..717210b 100644 --- a/FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs +++ b/FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs @@ -82,7 +82,7 @@ q = q.Where(it => it.GenderLimit == request.GenderLimit); } - var count = new GetTaskInfosQueryResultCount + var count = new GetTaskInfosQueryResultObjectData { WaitAssignCount = await q.CountAsync(it => it.Status == EnumTaskStatus.Wait), CompletedAssignCount = await q.CountAsync(it => it.Status == EnumTaskStatus.Complete), @@ -141,7 +141,7 @@ SettlementStatus = t.SettlementStatus }; var result = await request.PageModel.GetPagedListAsync<GetTaskInfosQueryResult, GetTaskInfosQueryResultItem>(s, cancellationToken); - result.Count = count; + result.ObjectData = count; return result; } } diff --git a/FlexJobApi.UserServer.Application/Auths/Commands/LoginCommandHandler.cs b/FlexJobApi.UserServer.Application/Auths/Commands/LoginCommandHandler.cs index dad1665..11c64e3 100644 --- a/FlexJobApi.UserServer.Application/Auths/Commands/LoginCommandHandler.cs +++ b/FlexJobApi.UserServer.Application/Auths/Commands/LoginCommandHandler.cs @@ -19,12 +19,16 @@ /// </summary> public class LoginCommandHandler( IRepository<User> rep, - SmsUtils smsUtils) : + SmsUtils smsUtils, + WxmpUtils wxmpUtils) : IRequestHandler<PasswordLoginCommand, LoginCommandCallback>, - IRequestHandler<SmsLoginCommand, LoginCommandCallback> + IRequestHandler<SmsLoginCommand, LoginCommandCallback>, + IRequestHandler<WxmpLoginCommand, LoginCommandCallback>, + IRequestHandler<BindPhoneNumberCommand, bool> { private readonly IRepository<User> rep = rep; private readonly SmsUtils smsUtils = smsUtils; + private readonly WxmpUtils wxmpUtils = wxmpUtils; /// <summary> /// 瀵嗙爜鐧诲綍 @@ -62,6 +66,19 @@ var user = await rep.AsQueryable().AsNoTracking() .Where(it => it.UserName == request.PhoneNumber && it.Type == request.Type) .FirstOrDefaultAsync(cancellationToken); + if (user == null && request.Type == EnumUserType.Personal) + { + user = new User + { + Type = request.Type, + UserName = request.PhoneNumber, + PhoneNumber = request.PhoneNumber, + IsCheckPhoneNumber = true, + Level = 1, + Status = EnumUserStatus.Normal + }; + await rep.InsertAsync(user); + } if (user == null) throw Oops.Oh(EnumUserErrorCodeType.u1000); if (user.Status == EnumUserStatus.Disabled) @@ -70,6 +87,62 @@ } /// <summary> + /// 寰俊灏忕▼搴忕櫥褰� + /// </summary> + /// <param name="request"></param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + public async Task<LoginCommandCallback> Handle(WxmpLoginCommand request, CancellationToken cancellationToken) + { + var snsJscode2session = await wxmpUtils.SnsJscode2sessionAsync(request.Type, request.Code, cancellationToken); + var user = await rep.AsQueryable().AsNoTracking() + .Where(it => it.WxmpOpenId == snsJscode2session.openid && it.Type == request.Type) + .FirstOrDefaultAsync(cancellationToken); + if (user == null && request.Type == EnumUserType.Personal) + { + user = new User + { + Type = request.Type, + UserName = snsJscode2session.openid, + WxmpOpenId = snsJscode2session.openid, + Level = 1, + Status = EnumUserStatus.Normal + }; + await rep.InsertAsync(user); + } + if (user == null) + throw Oops.Oh(EnumUserErrorCodeType.u1000); + if (user.Status == EnumUserStatus.Disabled) + throw Oops.Oh(EnumUserErrorCodeType.u1001); + return GetCurrentLogier(user, EnumClientType.Wxmp); + } + + /// <summary> + /// 缁戝畾鎵嬫満鍙� + /// </summary> + /// <param name="request"></param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + public async Task<bool> Handle(BindPhoneNumberCommand request, CancellationToken cancellationToken) + { + await smsUtils.CheckVerifyCode(new CheckVerifyCodeModel + { + PhoneNumber = request.PhoneNumber, + VerifyCode = request.VerifyCode, + TemplateCode = EnumSmsTemplateCode.LoginOrRegister + }); + var logier = JwtUtils.GetCurrentLogier(); + var user = await rep.AsQueryable() + .FirstOrDefaultAsync(it => it.Id == logier.Id); + if (user == null) + throw Oops.Oh(EnumErrorCodeType.s404, "褰撳墠璐﹀彿涓嶅瓨鍦�"); + user.UserName = request.PhoneNumber; + user.PhoneNumber = request.PhoneNumber; + user.IsCheckPhoneNumber = true; + return true; + } + + /// <summary> /// 鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛 /// </summary> /// <param name="user"></param> diff --git a/FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml b/FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml index e4ba09c..92ae932 100644 --- a/FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml +++ b/FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml @@ -9,7 +9,7 @@ 鐧诲綍鍛戒护澶勭悊鍣� </summary> </member> - <member name="M:FlexJobApi.UserServer.Application.LoginCommandHandler.#ctor(Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.User},FlexJobApi.Core.SmsUtils)"> + <member name="M:FlexJobApi.UserServer.Application.LoginCommandHandler.#ctor(Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.User},FlexJobApi.Core.SmsUtils,FlexJobApi.Core.WxmpUtils)"> <summary> 鐧诲綍鍛戒护澶勭悊鍣� </summary> @@ -30,6 +30,22 @@ <param name="cancellationToken"></param> <returns></returns> </member> + <member name="M:FlexJobApi.UserServer.Application.LoginCommandHandler.Handle(FlexJobApi.Core.WxmpLoginCommand,System.Threading.CancellationToken)"> + <summary> + 寰俊灏忕▼搴忕櫥褰� + </summary> + <param name="request"></param> + <param name="cancellationToken"></param> + <returns></returns> + </member> + <member name="M:FlexJobApi.UserServer.Application.LoginCommandHandler.Handle(FlexJobApi.Core.BindPhoneNumberCommand,System.Threading.CancellationToken)"> + <summary> + 缁戝畾鎵嬫満鍙� + </summary> + <param name="request"></param> + <param name="cancellationToken"></param> + <returns></returns> + </member> <member name="M:FlexJobApi.UserServer.Application.LoginCommandHandler.GetCurrentLogier(FlexJobApi.Core.User,FlexJobApi.Core.EnumClientType)"> <summary> 鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛 diff --git a/FlexJobApi.Web.Entry/appsettings.json b/FlexJobApi.Web.Entry/appsettings.json index 02ec129..f265ac3 100644 --- a/FlexJobApi.Web.Entry/appsettings.json +++ b/FlexJobApi.Web.Entry/appsettings.json @@ -16,6 +16,20 @@ "Access": "Redis", "Configuration": "118.178.252.28:5390,password=Bole123!" }, + "Wxmp": { + "Items": [ + { + "Code": "Personal", + "AppId": "wxb9e0baf4f87aa0de", + "AppSecret": "24abded2cd32b677b1f14ea9ec5767f0" + }, + { + "Code": "Enterprise", + "AppId": "wx3669dd12a0915f7d ", + "AppSecret": "c03a62ad6822f1c925532c34183e7f7f" + } + ] + }, "Aliyun": { "OSS": { "AccessKeyId": "LTAI4GAdJ88mUMMFBHHiyDmS", @@ -31,7 +45,7 @@ } }, "SMS": { - "Enable": false, + "Enable": true, "AccessKeyId": "LTAI5tMS7qz1duiyncCqxB8H", "AccessSecret": "TEHSXK6f6Njg0v0MSFkrjURofdjuKQ", "Version": "2017-05-25", -- Gitblit v1.9.1