From 53ee0a68605433db362abae3ed1af03fd23a7832 Mon Sep 17 00:00:00 2001 From: sunpengfei <i@angelzzz.com> Date: 星期五, 08 八月 2025 15:57:33 +0800 Subject: [PATCH] pref:优化 --- FlexJobApi.Core/Utils/SmsUtils/CheckVerifyCodeModel.cs | 16 FlexJobApi.Core/Utils/AliyunUtils/AliyunOptions.cs | 29 + FlexJobApi.Core/Models/UserServer/Auths/Commands/PasswordLoginCommand.cs | 4 FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs | 4 FlexJobApi.Core/Models/UserServer/Auths/Commands/SmsLoginCommand.cs | 7 FlexJobApi.Web.Entry/appsettings.json | 45 ++ FlexJobApi.Core/Enums/Common/EnumErrorCodeType.cs | 7 FlexJobApi.Core/Enums/Common/EnumSmsTemplateCode.cs | 95 +++++ /dev/null | 71 ---- FlexJobApi.Core/FlexJobApiCoreStartup.cs | 2 FlexJobApi.Core/Utils/SmsUtils/AliyunSmsUtils.cs | 130 +++---- FlexJobApi.Core/Utils/SmsUtils/SmsUtils.cs | 59 +++ FlexJobApi.Core/Models/UserServer/Auths/Commands/SendLoginOrRegisterVerifyCodeCommand.cs | 24 + FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetTaskInfoQuery.cs | 4 FlexJobApi.Core/Utils/SmsUtils/SendVerifyCodeModel.cs | 11 FlexJobApi.Core/FlexJobApi.Core.xml | 228 +++++++++++-- FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetTaskInfosQuery.cs | 5 FlexJobApi.UserServer.Application/Auths/Commands/VerifyCodeCommandHandler.cs | 28 FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml | 40 ++ FlexJobApi.UserServer.Application/Auths/Commands/LoginCommandHandler.cs | 101 ++++++ 20 files changed, 692 insertions(+), 218 deletions(-) diff --git a/FlexJobApi.Core/Enums/Common/EnumErrorCodeType.cs b/FlexJobApi.Core/Enums/Common/EnumErrorCodeType.cs index afbff32..31eede6 100644 --- a/FlexJobApi.Core/Enums/Common/EnumErrorCodeType.cs +++ b/FlexJobApi.Core/Enums/Common/EnumErrorCodeType.cs @@ -36,9 +36,14 @@ [ErrorCodeItemMetadata("璇0}涓嶅彲淇敼")] s410 = 410, /// <summary> - /// 绯荤粺寮傚父锛岃鑱旂郴绠$悊鍛� + /// 鏈煡寮傚父 /// </summary> [ErrorCodeItemMetadata("绯荤粺寮傚父锛岃鑱旂郴绠$悊鍛�")] s500 = 500, + /// <summary> + /// 绯荤粺寮傚父 + /// </summary> + [ErrorCodeItemMetadata("{0}")] + s510 = 510 } } diff --git a/FlexJobApi.Core/Enums/Common/EnumSmsTemplateCode.cs b/FlexJobApi.Core/Enums/Common/EnumSmsTemplateCode.cs new file mode 100644 index 0000000..ea2f72a --- /dev/null +++ b/FlexJobApi.Core/Enums/Common/EnumSmsTemplateCode.cs @@ -0,0 +1,95 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FlexJobApi.Core +{ + /// <summary> + /// 鐭俊妯℃澘缂栧彿 + /// </summary> + public enum EnumSmsTemplateCode + { + /// <summary> + /// 818骞冲彴鐭俊楠岃瘉鐮� + /// 楠岃瘉鐮侊細${code}锛岃浜�5鍒嗛挓鍐呭~鍐欙紝璇峰嬁娉勯湶锛岃嫢闈炴湰浜烘搷浣滆蹇界暐銆� + /// </summary> + VerifyCode, + + /// <summary> + /// 818骞冲彴鐧诲綍/娉ㄥ唽 + /// 楠岃瘉鐮�${code}锛岀敤鎴锋偍濂斤紝鎮ㄦ鍦ㄨ繘琛屽钩鍙扮櫥褰�/娉ㄥ唽锛岄獙璇佺爜10鍒嗛挓鍐呮湁鏁堛�� + /// </summary> + LoginOrRegister, + /// <summary> + /// 818璐﹀彿寮�閫氾紙绠$悊绔級 + /// 灏婃暚鐨勭敤鎴锋偍濂斤紝浜哄姏鏃犲咖璐﹀彿宸插紑閫氾紝璐﹀彿锛�${account}锛屽瘑鐮侊細${pwd}锛岃鐧诲綍缃戝潃 https://admin.81812333.com + /// </summary> + CreateOperationAccount, + /// <summary> + /// 818鎵嬫満鍙风爜淇敼 + /// 楠岃瘉鐮�${code}锛屾偍姝e湪杩涜淇敼鎵嬫満鍙风爜鎿嶄綔锛岃鍕挎硠闇诧紝鑻ラ潪鏈汉鎿嶄綔璇峰拷鐣ャ�� + /// </summary> + UpdateUserPhoneNumber, + /// <summary> + /// 818鎵嬫満鍙锋崲缁� + /// 灏婃暚鐨勭敤鎴锋偍濂斤紝818骞冲彴${code}鐨勮处鎴风粦瀹氭墜鏈哄彿鎴愬姛淇敼涓�${account}锛屼綘鍙互浣跨敤璇ユ墜鏈哄彿鐧诲綍锛岀櫥褰曠綉鍧� https://www.81812333.com + /// </summary> + UpdateUserPhoneNumberNotice, + + /// <summary> + /// 818閲嶇疆瀵嗙爜 + /// 楠岃瘉鐮�${code}锛屾偍姝e湪杩涜閲嶇疆瀵嗙爜鎿嶄綔锛岃鍕挎硠闇诧紝鑻ラ潪鏈汉鎿嶄綔璇峰拷鐣ャ�� + /// </summary> + ResetUserPhoneNumber, + /// <summary> + /// 818骞冲彴瀵嗙爜閲嶇疆锛堥�氱煡锛� + /// 鎮ㄥソ锛屾偍鐨勫瘑鐮佸凡閲嶇疆锛岃处鍙凤細${account}锛屽瘑鐮侊細${password}锛岃濡ュ杽淇濆瓨 + /// </summary> + ResetPasswordNotice, + + /// <summary> + /// 璐﹀彿淇敼 + /// 灏婃暚鐨勭敤鎴锋偍濂斤細 鎮ㄧ殑818骞冲彴璐﹀彿鎴愬姛淇敼涓�${account}鎮ㄥ彲浠ヤ娇鐢ㄨ璐﹀彿杩涜鐧诲綍锛岀櫥褰曠綉鍧�锛歨ttps://www.81812333.com + /// </summary> + ChangeUserName, + /// <summary> + /// 818璐﹀彿寮�閫� + /// 灏婃暚鐨勭敤鎴锋偍濂斤紝鎮ㄧ殑璐﹀彿锛�${account}锛屽垵濮嬪瘑鐮侊細${password}锛岃濡ュ杽淇濆瓨锛屾偍鍙娇鐢ㄨ处鍙峰瘑鐮佺櫥褰曞苟淇敼瀵嗙爜锛岀櫥褰曠綉鍧� https://www.81812333.com + /// </summary> + CreateAccountNotice, + /// <summary> + /// 鎵嬫満鍙疯В缁� + /// 灏婃暚鐨勭敤鎴锋偍濂斤細818骞冲彴${account}鐨勮处鍙蜂笌${number}宸茶В缁戯紝浣犲彲浠ョ櫥褰曠綉鍧�锛歨ttps://www.81812333.com閲嶆柊缁戝畾鎵嬫満鍙枫�� + /// </summary> + UnbindingUserPhoneNumber, + /// <summary> + /// 瑙g粦閭 + /// 灏婃暚鐨勭敤鎴锋偍濂斤細818骞冲彴${account}鐨勮处鍙蜂笌${mail}宸茶В缁戯紝浣犲彲浠ョ櫥褰曠綉鍧�锛歨ttps://www.81812333.com閲嶆柊缁戝畾閭銆� + /// </summary> + UnbindingUserEmail, + + /// <summary> + /// 818瀹炲悕璁よ瘉 + /// 楠岃瘉鐮�${code}锛屾偍姝e湪杩涜瀹炲悕璁よ瘉鎿嶄綔锛岃鍕挎硠闇诧紝鑻ラ潪鏈汉鎿嶄綔璇峰拷鐣ャ�� + /// </summary> + UserCertificationAudit, + /// <summary> + /// 鐢宠鏁板瓧璇佷功 + /// 楠岃瘉鐮�${code}锛岀敤鎴锋偍濂斤紝鎮ㄦ鍦ㄧ敵璇锋暟瀛楄瘉涔︼紝楠岃瘉鐮�10鍒嗛挓鍐呮湁鏁堛�� + /// </summary> + ApplyUserCertificate, + /// <summary> + /// 鐢靛瓙绛� + /// ${unit_name}璇锋偍鐐瑰嚮绛剧害t.81812333.com/Inter/${code} + /// </summary> + UserElectronSign, + + /// <summary> + /// 818閽卞寘寮�閫� + /// 楠岃瘉鐮�${code}锛岀敤鎴锋偍濂斤紝鎮ㄦ鍦ㄨ繘琛屽钩鍙伴挶鍖呭紑閫氾紝璇ラ獙璇佺爜5鍒嗛挓鍐呮湁鏁堬紝璇峰嬁娉勯湶浜庝粬浜恒�� + /// </summary> + BankWalletAccountOpen + } +} diff --git a/FlexJobApi.Core/Enums/Common/EnumSmsTemplateType.cs b/FlexJobApi.Core/Enums/Common/EnumSmsTemplateType.cs deleted file mode 100644 index b51658c..0000000 --- a/FlexJobApi.Core/Enums/Common/EnumSmsTemplateType.cs +++ /dev/null @@ -1,35 +0,0 @@ -锘縰sing System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace FlexJobApi.Core -{ - /// <summary> - /// 鐭俊妯℃澘绫诲瀷 - /// </summary> - public enum EnumSmsTemplateType - { - /// <summary> - /// 鐧诲綍 - /// </summary> - Login, - /// <summary> - /// 娉ㄥ唽 - /// </summary> - Register, - /// <summary> - /// 淇敼瀵嗙爜 - /// </summary> - UpdatePassword, - /// <summary> - /// 缁戝畾鎵嬫満鍙风爜 - /// </summary> - BindPhoneNumber, - /// <summary> - /// 淇敼鎵嬫満鍙风爜 - /// </summary> - UpdatePhoneNumber - } -} diff --git a/FlexJobApi.Core/FlexJobApi.Core.xml b/FlexJobApi.Core/FlexJobApi.Core.xml index d6b450b..3dc58eb 100644 --- a/FlexJobApi.Core/FlexJobApi.Core.xml +++ b/FlexJobApi.Core/FlexJobApi.Core.xml @@ -1771,7 +1771,12 @@ </member> <member name="F:FlexJobApi.Core.EnumErrorCodeType.s500"> <summary> - 绯荤粺寮傚父锛岃鑱旂郴绠$悊鍛� + 鏈煡寮傚父 + </summary> + </member> + <member name="F:FlexJobApi.Core.EnumErrorCodeType.s510"> + <summary> + 绯荤粺寮傚父 </summary> </member> <member name="T:FlexJobApi.Core.Enums.Common.EnumFileStoreAccess"> @@ -1989,34 +1994,99 @@ 闃块噷浜戠煭淇� </summary> </member> - <member name="T:FlexJobApi.Core.EnumSmsTemplateType"> + <member name="T:FlexJobApi.Core.EnumSmsTemplateCode"> <summary> - 鐭俊妯℃澘绫诲瀷 + 鐭俊妯℃澘缂栧彿 </summary> </member> - <member name="F:FlexJobApi.Core.EnumSmsTemplateType.Login"> + <member name="F:FlexJobApi.Core.EnumSmsTemplateCode.VerifyCode"> <summary> - 鐧诲綍 + 818骞冲彴鐭俊楠岃瘉鐮� + 楠岃瘉鐮侊細${code}锛岃浜�5鍒嗛挓鍐呭~鍐欙紝璇峰嬁娉勯湶锛岃嫢闈炴湰浜烘搷浣滆蹇界暐銆� </summary> </member> - <member name="F:FlexJobApi.Core.EnumSmsTemplateType.Register"> + <member name="F:FlexJobApi.Core.EnumSmsTemplateCode.LoginOrRegister"> <summary> - 娉ㄥ唽 + 818骞冲彴鐧诲綍/娉ㄥ唽 + 楠岃瘉鐮�${code}锛岀敤鎴锋偍濂斤紝鎮ㄦ鍦ㄨ繘琛屽钩鍙扮櫥褰�/娉ㄥ唽锛岄獙璇佺爜10鍒嗛挓鍐呮湁鏁堛�� </summary> </member> - <member name="F:FlexJobApi.Core.EnumSmsTemplateType.UpdatePassword"> + <member name="F:FlexJobApi.Core.EnumSmsTemplateCode.CreateOperationAccount"> <summary> - 淇敼瀵嗙爜 + 818璐﹀彿寮�閫氾紙绠$悊绔級 + 灏婃暚鐨勭敤鎴锋偍濂斤紝浜哄姏鏃犲咖璐﹀彿宸插紑閫氾紝璐﹀彿锛�${account}锛屽瘑鐮侊細${pwd}锛岃鐧诲綍缃戝潃 https://admin.81812333.com </summary> </member> - <member name="F:FlexJobApi.Core.EnumSmsTemplateType.BindPhoneNumber"> + <member name="F:FlexJobApi.Core.EnumSmsTemplateCode.UpdateUserPhoneNumber"> <summary> - 缁戝畾鎵嬫満鍙风爜 + 818鎵嬫満鍙风爜淇敼 + 楠岃瘉鐮�${code}锛屾偍姝e湪杩涜淇敼鎵嬫満鍙风爜鎿嶄綔锛岃鍕挎硠闇诧紝鑻ラ潪鏈汉鎿嶄綔璇峰拷鐣ャ�� </summary> </member> - <member name="F:FlexJobApi.Core.EnumSmsTemplateType.UpdatePhoneNumber"> + <member name="F:FlexJobApi.Core.EnumSmsTemplateCode.UpdateUserPhoneNumberNotice"> <summary> - 淇敼鎵嬫満鍙风爜 + 818鎵嬫満鍙锋崲缁� + 灏婃暚鐨勭敤鎴锋偍濂斤紝818骞冲彴${code}鐨勮处鎴风粦瀹氭墜鏈哄彿鎴愬姛淇敼涓�${account}锛屼綘鍙互浣跨敤璇ユ墜鏈哄彿鐧诲綍锛岀櫥褰曠綉鍧� https://www.81812333.com + </summary> + </member> + <member name="F:FlexJobApi.Core.EnumSmsTemplateCode.ResetUserPhoneNumber"> + <summary> + 818閲嶇疆瀵嗙爜 + 楠岃瘉鐮�${code}锛屾偍姝e湪杩涜閲嶇疆瀵嗙爜鎿嶄綔锛岃鍕挎硠闇诧紝鑻ラ潪鏈汉鎿嶄綔璇峰拷鐣ャ�� + </summary> + </member> + <member name="F:FlexJobApi.Core.EnumSmsTemplateCode.ResetPasswordNotice"> + <summary> + 818骞冲彴瀵嗙爜閲嶇疆锛堥�氱煡锛� + 鎮ㄥソ锛屾偍鐨勫瘑鐮佸凡閲嶇疆锛岃处鍙凤細${account}锛屽瘑鐮侊細${password}锛岃濡ュ杽淇濆瓨 + </summary> + </member> + <member name="F:FlexJobApi.Core.EnumSmsTemplateCode.ChangeUserName"> + <summary> + 璐﹀彿淇敼 + 灏婃暚鐨勭敤鎴锋偍濂斤細 鎮ㄧ殑818骞冲彴璐﹀彿鎴愬姛淇敼涓�${account}鎮ㄥ彲浠ヤ娇鐢ㄨ璐﹀彿杩涜鐧诲綍锛岀櫥褰曠綉鍧�锛歨ttps://www.81812333.com + </summary> + </member> + <member name="F:FlexJobApi.Core.EnumSmsTemplateCode.CreateAccountNotice"> + <summary> + 818璐﹀彿寮�閫� + 灏婃暚鐨勭敤鎴锋偍濂斤紝鎮ㄧ殑璐﹀彿锛�${account}锛屽垵濮嬪瘑鐮侊細${password}锛岃濡ュ杽淇濆瓨锛屾偍鍙娇鐢ㄨ处鍙峰瘑鐮佺櫥褰曞苟淇敼瀵嗙爜锛岀櫥褰曠綉鍧� https://www.81812333.com + </summary> + </member> + <member name="F:FlexJobApi.Core.EnumSmsTemplateCode.UnbindingUserPhoneNumber"> + <summary> + 鎵嬫満鍙疯В缁� + 灏婃暚鐨勭敤鎴锋偍濂斤細818骞冲彴${account}鐨勮处鍙蜂笌${number}宸茶В缁戯紝浣犲彲浠ョ櫥褰曠綉鍧�锛歨ttps://www.81812333.com閲嶆柊缁戝畾鎵嬫満鍙枫�� + </summary> + </member> + <member name="F:FlexJobApi.Core.EnumSmsTemplateCode.UnbindingUserEmail"> + <summary> + 瑙g粦閭 + 灏婃暚鐨勭敤鎴锋偍濂斤細818骞冲彴${account}鐨勮处鍙蜂笌${mail}宸茶В缁戯紝浣犲彲浠ョ櫥褰曠綉鍧�锛歨ttps://www.81812333.com閲嶆柊缁戝畾閭銆� + </summary> + </member> + <member name="F:FlexJobApi.Core.EnumSmsTemplateCode.UserCertificationAudit"> + <summary> + 818瀹炲悕璁よ瘉 + 楠岃瘉鐮�${code}锛屾偍姝e湪杩涜瀹炲悕璁よ瘉鎿嶄綔锛岃鍕挎硠闇诧紝鑻ラ潪鏈汉鎿嶄綔璇峰拷鐣ャ�� + </summary> + </member> + <member name="F:FlexJobApi.Core.EnumSmsTemplateCode.ApplyUserCertificate"> + <summary> + 鐢宠鏁板瓧璇佷功 + 楠岃瘉鐮�${code}锛岀敤鎴锋偍濂斤紝鎮ㄦ鍦ㄧ敵璇锋暟瀛楄瘉涔︼紝楠岃瘉鐮�10鍒嗛挓鍐呮湁鏁堛�� + </summary> + </member> + <member name="F:FlexJobApi.Core.EnumSmsTemplateCode.UserElectronSign"> + <summary> + 鐢靛瓙绛� + ${unit_name}璇锋偍鐐瑰嚮绛剧害t.81812333.com/Inter/${code} + </summary> + </member> + <member name="F:FlexJobApi.Core.EnumSmsTemplateCode.BankWalletAccountOpen"> + <summary> + 818閽卞寘寮�閫� + 楠岃瘉鐮�${code}锛岀敤鎴锋偍濂斤紝鎮ㄦ鍦ㄨ繘琛屽钩鍙伴挶鍖呭紑閫氾紝璇ラ獙璇佺爜5鍒嗛挓鍐呮湁鏁堬紝璇峰嬁娉勯湶浜庝粬浜恒�� </summary> </member> <member name="T:FlexJobApi.Core.EnumBillingMethod"> @@ -3060,7 +3130,7 @@ 浼佷笟Id </summary> </member> - <member name="P:FlexJobApi.Core.GetTaskInfoQueryResult.EnterpriseName"> + <member name="P:FlexJobApi.Core.GetTaskInfoQueryResult.EnterpriseEnterpriseName"> <summary> 浼佷笟鍏ㄧО </summary> @@ -3175,6 +3245,16 @@ 鏄惁宸叉敹钘� </summary> </member> + <member name="P:FlexJobApi.Core.GetTaskInfoQueryResult.Status"> + <summary> + 浠诲姟鐘舵�� + </summary> + </member> + <member name="P:FlexJobApi.Core.GetTaskInfoQueryResult.ReleaseStatus"> + <summary> + 鍙戝竷鐘舵�� + </summary> + </member> <member name="T:FlexJobApi.Core.GetTaskInfoQueryResultBenefit"> <summary> 鏌ヨ浠诲姟璇︽儏-缁撴灉-绂忓埄 @@ -3185,9 +3265,14 @@ 绂忓埄缂栧彿 </summary> </member> + <member name="P:FlexJobApi.Core.GetTaskInfoQueryResultBenefit.BenefitField2"> + <summary> + 绂忓埄鍥炬爣 + </summary> + </member> <member name="P:FlexJobApi.Core.GetTaskInfoQueryResultBenefit.BenefitContent"> <summary> - 绂忓埄 + 绂忓埄鍚嶇О </summary> </member> <member name="T:FlexJobApi.Core.GetTaskInfoQueryResultCredentialLimit"> @@ -3213,6 +3298,11 @@ <member name="P:FlexJobApi.Core.GetTaskInfosQuery.Keywords"> <summary> 鍏抽敭瀛楋紙浠诲姟鍚嶇О锛� + </summary> + </member> + <member name="P:FlexJobApi.Core.GetTaskInfosQuery.EnterpriseId"> + <summary> + 浼佷笟Id </summary> </member> <member name="P:FlexJobApi.Core.GetTaskInfosQuery.BeginTime"> @@ -3434,34 +3524,29 @@ 瀹㈡埛绔被鍨� </summary> </member> - <member name="T:FlexJobApi.Core.PasswordLoginCommandCallback"> + <member name="T:FlexJobApi.Core.LoginCommandCallback"> <summary> 瀵嗙爜鐧诲綍缁撴灉 </summary> </member> - <member name="P:FlexJobApi.Core.PasswordLoginCommandCallback.AccessToken"> + <member name="P:FlexJobApi.Core.LoginCommandCallback.AccessToken"> <summary> 鐢ㄦ埛璁块棶浠ょ墝 </summary> </member> - <member name="P:FlexJobApi.Core.PasswordLoginCommandCallback.RefreshToken"> + <member name="P:FlexJobApi.Core.LoginCommandCallback.RefreshToken"> <summary> 鍒锋柊浠ょ墝 </summary> </member> - <member name="T:FlexJobApi.Core.SendVerifyCodeCommand"> + <member name="T:FlexJobApi.Core.SendLoginOrRegisterVerifyCodeCommand"> <summary> - 鍙戦�侀獙璇佺爜 + 鍙戦�佺櫥褰曟垨娉ㄥ唽鐭俊 </summary> </member> - <member name="P:FlexJobApi.Core.SendVerifyCodeCommand.PhoneNumber"> + <member name="P:FlexJobApi.Core.SendLoginOrRegisterVerifyCodeCommand.PhoneNumber"> <summary> 鎵嬫満鍙风爜 - </summary> - </member> - <member name="P:FlexJobApi.Core.SendVerifyCodeCommand.TemplateCode"> - <summary> - 鐭俊妯℃澘缂栧彿 </summary> </member> <member name="T:FlexJobApi.Core.SmsLoginCommand"> @@ -3497,21 +3582,6 @@ <member name="P:FlexJobApi.Core.WxmpLoginCommand.Code"> <summary> 鐢ㄦ埛鐧诲綍鍑瘉 - </summary> - </member> - <member name="T:FlexJobApi.Core.WxmpRegisterCommand"> - <summary> - 寰俊灏忕▼搴忔敞鍐� - </summary> - </member> - <member name="P:FlexJobApi.Core.WxmpRegisterCommand.PhoneNumber"> - <summary> - 鎵嬫満鍙风爜 - </summary> - </member> - <member name="P:FlexJobApi.Core.WxmpRegisterCommand.VerifyCode"> - <summary> - 楠岃瘉鐮� </summary> </member> <member name="T:FlexJobApi.Core.GetAliyunOSSAcsQuery"> @@ -5119,6 +5189,31 @@ 闃块噷浜戠煭淇¢厤缃� </summary> </member> + <member name="P:FlexJobApi.Core.AliyunSMSOptions.Enable"> + <summary> + 鏄惁鍚敤 + </summary> + </member> + <member name="P:FlexJobApi.Core.AliyunSMSOptions.Version"> + <summary> + 鐗堟湰 + </summary> + </member> + <member name="P:FlexJobApi.Core.AliyunSMSOptions.SignName"> + <summary> + 绛惧悕鍚嶇О + </summary> + </member> + <member name="P:FlexJobApi.Core.AliyunSMSOptions.RegionId"> + <summary> + 鍖哄煙Id + </summary> + </member> + <member name="P:FlexJobApi.Core.AliyunSMSOptions.TemplateCodes"> + <summary> + 妯℃澘浠g爜 + </summary> + </member> <member name="T:FlexJobApi.Core.AliyunOSSUtils"> <summary> 闃块噷浜慜SS宸ュ叿 @@ -6029,6 +6124,17 @@ <param name="type"></param> <returns></returns> </member> + <member name="M:FlexJobApi.Core.AliyunSmsUtils.SendAsync(System.String,FlexJobApi.Core.EnumSmsTemplateCode,System.String,System.Threading.CancellationToken)"> + <summary> + 鍙戦�佺煭淇� + </summary> + <param name="phoneNumber">鎵嬫満鍙风爜</param> + <param name="templateCode">妯℃澘浠g爜</param> + <param name="templateParam">妯℃澘鍙傛暟</param> + <param name="cancellationToken">鍙栨秷浠ょ墝</param> + <returns></returns> + <exception cref="T:Furion.FriendlyException.Oops"></exception> + </member> <member name="M:FlexJobApi.Core.AliyunSmsUtils.PercentEncode(System.String)"> <summary> 鎺掗櫎鏁忔劅瀛楃涓� @@ -6044,6 +6150,46 @@ <param name="key"></param> <returns></returns> </member> + <member name="T:FlexJobApi.Core.CheckVerifyCodeModel"> + <summary> + 鏍¢獙楠岃瘉鐮� + </summary> + </member> + <member name="P:FlexJobApi.Core.CheckVerifyCodeModel.TemplateCode"> + <summary> + 鐭俊妯℃澘缂栧彿 + </summary> + </member> + <member name="P:FlexJobApi.Core.CheckVerifyCodeModel.PhoneNumber"> + <summary> + 鎵嬫満鍙风爜 + </summary> + </member> + <member name="P:FlexJobApi.Core.CheckVerifyCodeModel.VerifyCode"> + <summary> + 楠岃瘉鐮� + </summary> + </member> + <member name="T:FlexJobApi.Core.SendVerifyCodeModel"> + <summary> + 鍙戦�侀獙璇佺爜 + </summary> + </member> + <member name="P:FlexJobApi.Core.SendVerifyCodeModel.PhoneNumber"> + <summary> + 鎵嬫満鍙风爜 + </summary> + </member> + <member name="P:FlexJobApi.Core.SendVerifyCodeModel.TemplateCode"> + <summary> + 鐭俊妯℃澘缂栧彿 + </summary> + </member> + <member name="T:FlexJobApi.Core.SmsUtils"> + <summary> + 鐭俊宸ュ叿 + </summary> + </member> <member name="T:FlexJobApi.Core.StringUtils"> <summary> 瀛楃涓插伐鍏� diff --git a/FlexJobApi.Core/FlexJobApiCoreStartup.cs b/FlexJobApi.Core/FlexJobApiCoreStartup.cs index 1ffa807..dcc3bed 100644 --- a/FlexJobApi.Core/FlexJobApiCoreStartup.cs +++ b/FlexJobApi.Core/FlexJobApiCoreStartup.cs @@ -51,6 +51,8 @@ services.AddHttpRemote(); services.AddSingleton<ResourceHttpUtils>(); + services.AddSingleton<AliyunSmsUtils>(); + services.AddScoped<SmsUtils>(); services.AddMediatR(cfg => cfg.RegisterServicesFromAssemblies(App.Assemblies.ToArray())); diff --git a/FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetTaskInfoQuery.cs b/FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetTaskInfoQuery.cs index 745eaeb..49e6fb3 100644 --- a/FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetTaskInfoQuery.cs +++ b/FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetTaskInfoQuery.cs @@ -1,6 +1,7 @@ 锘縰sing FlexJobApi.Core.Models.Common; using Mapster; using MediatR; +using Newtonsoft.Json; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; @@ -46,7 +47,8 @@ /// <summary> /// 浼佷笟鍏ㄧО /// </summary> - public string EnterpriseName { get; set; } + [JsonProperty("EnterpriseName")] + public string EnterpriseEnterpriseName { get; set; } /// <summary> /// 鍦ㄦ嫑宀椾綅鏁伴噺 diff --git a/FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetTaskInfosQuery.cs b/FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetTaskInfosQuery.cs index cff4449..21c03df 100644 --- a/FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetTaskInfosQuery.cs +++ b/FlexJobApi.Core/Models/FlexJobServer/Tasks/Queries/GetTaskInfosQuery.cs @@ -24,6 +24,11 @@ public string Keywords { get; set; } /// <summary> + /// 浼佷笟Id + /// </summary> + public Guid? EnterpriseId { get; set; } + + /// <summary> /// 鍙戝竷鏃堕棿-寮�濮� /// </summary> public DateTime? BeginTime { get; set; } diff --git a/FlexJobApi.Core/Models/UserServer/Auths/Commands/PasswordLoginCommand.cs b/FlexJobApi.Core/Models/UserServer/Auths/Commands/PasswordLoginCommand.cs index 06b7e12..5f5dc2f 100644 --- a/FlexJobApi.Core/Models/UserServer/Auths/Commands/PasswordLoginCommand.cs +++ b/FlexJobApi.Core/Models/UserServer/Auths/Commands/PasswordLoginCommand.cs @@ -13,7 +13,7 @@ /// 瀵嗙爜鐧诲綍 /// </summary> [Resource([EnumResourceController.Auth], AllowAnonymous = true)] - public class PasswordLoginCommand : IRequest<PasswordLoginCommandCallback> + public class PasswordLoginCommand : IRequest<LoginCommandCallback> { /// <summary> /// 璐﹀彿 @@ -41,7 +41,7 @@ /// <summary> /// 瀵嗙爜鐧诲綍缁撴灉 /// </summary> - public class PasswordLoginCommandCallback + public class LoginCommandCallback { /// <summary> /// 鐢ㄦ埛璁块棶浠ょ墝 diff --git a/FlexJobApi.Core/Models/UserServer/Auths/Commands/SendLoginOrRegisterVerifyCodeCommand.cs b/FlexJobApi.Core/Models/UserServer/Auths/Commands/SendLoginOrRegisterVerifyCodeCommand.cs new file mode 100644 index 0000000..362c7a2 --- /dev/null +++ b/FlexJobApi.Core/Models/UserServer/Auths/Commands/SendLoginOrRegisterVerifyCodeCommand.cs @@ -0,0 +1,24 @@ +锘縰sing Furion.DataValidation; +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.Auth], AllowAnonymous = true)] + public class SendLoginOrRegisterVerifyCodeCommand : IRequest<Guid> + { + /// <summary> + /// 鎵嬫満鍙风爜 + /// </summary> + [Required, DataValidation(ValidationTypes.PhoneNumber)] + public string PhoneNumber { get; set; } + } +} diff --git a/FlexJobApi.Core/Models/UserServer/Auths/Commands/SmsLoginCommand.cs b/FlexJobApi.Core/Models/UserServer/Auths/Commands/SmsLoginCommand.cs index 2257237..be2f9b2 100644 --- a/FlexJobApi.Core/Models/UserServer/Auths/Commands/SmsLoginCommand.cs +++ b/FlexJobApi.Core/Models/UserServer/Auths/Commands/SmsLoginCommand.cs @@ -1,4 +1,5 @@ -锘縰sing System; +锘縰sing MediatR; +using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; @@ -11,18 +12,20 @@ /// 鐭俊鐧诲綍 /// </summary> [Resource([EnumResourceController.Auth], AllowAnonymous = true)] - public class SmsLoginCommand + public class SmsLoginCommand : IRequest<LoginCommandCallback> { /// <summary> /// 鎵嬫満鍙风爜 /// </summary> [Required] public string PhoneNumber { get; set; } + /// <summary> /// 楠岃瘉鐮� /// </summary> [Required] public string VerifyCode { get; set; } + /// <summary> /// 鐢ㄦ埛绫诲瀷 /// </summary> diff --git a/FlexJobApi.Core/Utils/AliyunUtils/AliyunOptions.cs b/FlexJobApi.Core/Utils/AliyunUtils/AliyunOptions.cs index 245b70b..8b1d057 100644 --- a/FlexJobApi.Core/Utils/AliyunUtils/AliyunOptions.cs +++ b/FlexJobApi.Core/Utils/AliyunUtils/AliyunOptions.cs @@ -37,7 +37,34 @@ /// 闃块噷浜戠煭淇¢厤缃� /// </summary> public class AliyunSMSOptions - { + { + public string AccessKeyId { get; set; } + public string AccessSecret { get; set; } + + /// <summary> + /// 鏄惁鍚敤 + /// </summary> + public bool Enable { get; set; } + + /// <summary> + /// 鐗堟湰 + /// </summary> + public string Version { get; set; } + + /// <summary> + /// 绛惧悕鍚嶇О + /// </summary> + public string SignName { get; set; } + + /// <summary> + /// 鍖哄煙Id + /// </summary> + public string RegionId { get; set; } + + /// <summary> + /// 妯℃澘浠g爜 + /// </summary> + public Dictionary<string, string> TemplateCodes { get; set; } } } diff --git a/FlexJobApi.Core/Utils/SmsUtils/AliyunSmsUtils.cs b/FlexJobApi.Core/Utils/SmsUtils/AliyunSmsUtils.cs index 9e3d276..970e657 100644 --- a/FlexJobApi.Core/Utils/SmsUtils/AliyunSmsUtils.cs +++ b/FlexJobApi.Core/Utils/SmsUtils/AliyunSmsUtils.cs @@ -17,16 +17,13 @@ { private readonly IOptions<AliyunOptions> options; private readonly IHttpRemoteService httpRemoteService; - private readonly IHttpContextAccessor httpContextAccessor; public AliyunSmsUtils( IOptions<AliyunOptions> options, - IHttpRemoteService httpRemoteService, - IHttpContextAccessor httpContextAccessor) + IHttpRemoteService httpRemoteService) { this.options = options; this.httpRemoteService = httpRemoteService; - this.httpContextAccessor = httpContextAccessor; } /// <summary> @@ -38,75 +35,72 @@ /// <param name="cancellationToken">鍙栨秷浠ょ墝</param> /// <returns></returns> /// <exception cref="Oops"></exception> - //public async Task SendAsync(string phoneNumber, EnumSmsTemplateType templateCode, string templateParam, CancellationToken cancellationToken) - //{ - // if (options.Value.Sms?.Enable != true) - // { - // httpContextAccessor.AddAdditionalData("TemplateParam", templateParam); - // return; - // } - // if (options.Value.Sms != null - // && options.Value.Sms.Version.IsNotNull() - // && options.Value.Sms.RegionId.IsNotNull() - // && options.Value.Sms.SignName.IsNotNull() - // && options.Value.AccessKeyId.IsNotNull() - // && options.Value.AccessKeySecret.IsNotNull()) - // { - // var _templateCode = options.Value.Sms.TemplateCodes[templateCode.ToString()]; - // var _params = new Dictionary<string, string> - // { - // {"Action", "SendSms"}, - // {"Version", options.Value.Sms.Version}, - // {"RegionId", options.Value.Sms.RegionId}, - // {"PhoneNumbers", phoneNumber}, - // {"SignName", options.Value.Sms.SignName}, - // {"TemplateCode", _templateCode} - // }; - // if (!string.IsNullOrWhiteSpace(templateParam)) - // { - // _params.Add("TemplateParam", templateParam); - // } - // var timestamp = DateTime.Now.ToUniversalTime() - // .ToString("yyyy-MM-dd'T'HH:mm:ss'Z'", CultureInfo.CreateSpecificCulture("en-US")); + public async Task SendAsync(string phoneNumber, EnumSmsTemplateCode templateCode, string templateParam, CancellationToken cancellationToken) + { + if (options.Value.SMS?.Enable != true) + { + return; + } + if (options.Value.SMS != null + && options.Value.SMS.Version.IsNotNull() + && options.Value.SMS.RegionId.IsNotNull() + && options.Value.SMS.SignName.IsNotNull() + && options.Value.SMS.AccessKeyId.IsNotNull() + && options.Value.SMS.AccessSecret.IsNotNull()) + { + var _templateCode = options.Value.SMS.TemplateCodes[templateCode.ToString()]; + var _params = new Dictionary<string, string> + { + {"Action", "SendSms"}, + {"Version", options.Value.SMS.Version}, + {"RegionId", options.Value.SMS.RegionId}, + {"PhoneNumbers", phoneNumber}, + {"SignName", options.Value.SMS.SignName}, + {"TemplateCode", _templateCode} + }; + if (!string.IsNullOrWhiteSpace(templateParam)) + { + _params.Add("TemplateParam", templateParam); + } + var timestamp = DateTime.Now.ToUniversalTime() + .ToString("yyyy-MM-dd'T'HH:mm:ss'Z'", CultureInfo.CreateSpecificCulture("en-US")); - // _params.Add("AccessKeyId", options.Value.AccessKeyId); - // _params.Add("Timestamp", timestamp); - // _params.Add("Format", "JSON"); - // _params.Add("SignatureMethod", "HMAC-SHA1"); - // _params.Add("SignatureVersion", "1.0"); - // _params.Add("SignatureNonce", Guid.NewGuid().ToString()); + _params.Add("AccessKeyId", options.Value.SMS.AccessKeyId); + _params.Add("Timestamp", timestamp); + _params.Add("Format", "JSON"); + _params.Add("SignatureMethod", "HMAC-SHA1"); + _params.Add("SignatureVersion", "1.0"); + _params.Add("SignatureNonce", Guid.NewGuid().ToString()); - // //鎺掑簭 - // var sortDic = new SortedDictionary<string, string>(_params, StringComparer.Ordinal); + //鎺掑簭 + var sortDic = new SortedDictionary<string, string>(_params, StringComparer.Ordinal); - // //鐢熸垚Url鍙傛暟 - // var urlParams = ""; - // foreach (var dic in sortDic) - // { - // urlParams += $"{PercentEncode(dic.Key)}={PercentEncode(dic.Value)}&"; - // } - // urlParams = urlParams.TrimEnd('&'); + //鐢熸垚Url鍙傛暟 + var urlParams = ""; + foreach (var dic in sortDic) + { + urlParams += $"{PercentEncode(dic.Key)}={PercentEncode(dic.Value)}&"; + } + urlParams = urlParams.TrimEnd('&'); - // //绛惧悕 - // var stringToSign = $"GET&{PercentEncode("/")}&{PercentEncode(urlParams)}"; - // string signature = PercentEncode(ToHmacsha1(stringToSign, options.Value.AccessKeySecret + "&")); + //绛惧悕 + var stringToSign = $"GET&{PercentEncode("/")}&{PercentEncode(urlParams)}"; + string signature = PercentEncode(ToHmacsha1(stringToSign, options.Value.SMS.AccessSecret + "&")); - // var req = $"http://dysmsapi.aliyuncs.com/?Signature={signature}&{urlParams}" - // .SetMethod(HttpMethod.Get); - // var res = await http.SendAsync(req, cancellationToken); - // var callback = res.Callback?.JsonTo(new - // { - // Code = "", - // Message = "", - // RequestId = "", - // BizId = "" - // }); - // if (callback == null || callback.Code != "OK") - // { - // throw new Oops(FriendlyCallbackCode.Error, "鍙戦�佺煭淇″け璐�", $"鍙戦�佺煭淇″紓甯革細{callback?.Message}"); - // } - // } - //} + var res = await httpRemoteService.GetAsStringAsync($"http://dysmsapi.aliyuncs.com/?Signature={signature}&{urlParams}"); + var callback = res.JsonTo(new + { + Code = "", + Message = "", + RequestId = "", + BizId = "" + }); + if (callback == null || callback.Code != "OK") + { + throw Oops.Oh(EnumErrorCodeType.s510, $"鍙戦�佺煭淇″け璐ワ細{callback?.Message}锛岃鑱旂郴绠$悊鍛�"); + } + } + } /// <summary> /// 鎺掗櫎鏁忔劅瀛楃涓� diff --git a/FlexJobApi.Core/Models/UserServer/Auths/Commands/WxmpRegisterCommand.cs b/FlexJobApi.Core/Utils/SmsUtils/CheckVerifyCodeModel.cs similarity index 63% rename from FlexJobApi.Core/Models/UserServer/Auths/Commands/WxmpRegisterCommand.cs rename to FlexJobApi.Core/Utils/SmsUtils/CheckVerifyCodeModel.cs index 8f7c603..595c169 100644 --- a/FlexJobApi.Core/Models/UserServer/Auths/Commands/WxmpRegisterCommand.cs +++ b/FlexJobApi.Core/Utils/SmsUtils/CheckVerifyCodeModel.cs @@ -1,6 +1,6 @@ -锘縰sing System; +锘縰sing MediatR; +using System; using System.Collections.Generic; -using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -8,19 +8,23 @@ namespace FlexJobApi.Core { /// <summary> - /// 寰俊灏忕▼搴忔敞鍐� + /// 鏍¢獙楠岃瘉鐮� /// </summary> - public class WxmpRegisterCommand + public class CheckVerifyCodeModel { + /// <summary> + /// 鐭俊妯℃澘缂栧彿 + /// </summary> + public EnumSmsTemplateCode TemplateCode { get; set; } + /// <summary> /// 鎵嬫満鍙风爜 /// </summary> - [Required] public string PhoneNumber { get; set; } + /// <summary> /// 楠岃瘉鐮� /// </summary> - [Required] public string VerifyCode { get; set; } } } diff --git a/FlexJobApi.Core/Models/UserServer/Auths/Commands/SendVerifyCodeCommand.cs b/FlexJobApi.Core/Utils/SmsUtils/SendVerifyCodeModel.cs similarity index 61% rename from FlexJobApi.Core/Models/UserServer/Auths/Commands/SendVerifyCodeCommand.cs rename to FlexJobApi.Core/Utils/SmsUtils/SendVerifyCodeModel.cs index b527e3a..df89b0f 100644 --- a/FlexJobApi.Core/Models/UserServer/Auths/Commands/SendVerifyCodeCommand.cs +++ b/FlexJobApi.Core/Utils/SmsUtils/SendVerifyCodeModel.cs @@ -1,6 +1,8 @@ -锘縰sing MediatR; +锘縰sing Furion.DataValidation; +using MediatR; using System; using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -10,16 +12,17 @@ /// <summary> /// 鍙戦�侀獙璇佺爜 /// </summary> - [Resource([EnumResourceController.Auth], AllowAnonymous = true)] - public class SendVerifyCodeCommand : IRequest<Guid> + public class SendVerifyCodeModel { /// <summary> /// 鎵嬫満鍙风爜 /// </summary> + [Required, DataValidation(ValidationTypes.PhoneNumber)] public string PhoneNumber { get; set; } + /// <summary> /// 鐭俊妯℃澘缂栧彿 /// </summary> - public EnumSmsTemplateType TemplateCode { get; set; } + public EnumSmsTemplateCode TemplateCode { get; set; } } } diff --git a/FlexJobApi.Core/Utils/SmsUtils/SmsUtils.cs b/FlexJobApi.Core/Utils/SmsUtils/SmsUtils.cs new file mode 100644 index 0000000..fa3b0fa --- /dev/null +++ b/FlexJobApi.Core/Utils/SmsUtils/SmsUtils.cs @@ -0,0 +1,59 @@ +锘縰sing Azure.Core; +using Furion.DatabaseAccessor; +using Furion.FriendlyException; +using Mapster; +using MediatR; +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 SmsUtils + { + private readonly IRepository<SmsLog> rep; + private readonly AliyunSmsUtils aliyunSmsUtils; + + public SmsUtils( + IRepository<SmsLog> rep, + AliyunSmsUtils aliyunSmsUtils) + { + this.rep = rep; + this.aliyunSmsUtils = aliyunSmsUtils; + } + + public async Task<Guid> SendVerifyCode(SendVerifyCodeModel model, CancellationToken cancellationToken = default) + { + var code = new Random().Next(100000, 999999).ToString(); + var entity = new SmsLog(); + model.Adapt(entity); + entity.Expiry = DateTime.Now.AddMinutes(10); + entity.TemplateParam = new { code }.ToJson(); + await aliyunSmsUtils.SendAsync(model.PhoneNumber, model.TemplateCode, entity.TemplateParam, cancellationToken); + await rep.InsertAsync(entity); + return entity.Id; + } + + public async Task CheckVerifyCode(CheckVerifyCodeModel model, CancellationToken cancellationToken = default) + { + var entity = await rep.AsQueryable().AsNoTracking() + .Where(it => + it.PhoneNumber == model.PhoneNumber + && it.TemplateCode == model.TemplateCode.ToString() + && it.TemplateParam == new { code = model.VerifyCode }.ToJson() + && it.Expiry > DateTimeOffset.Now + && !it.IsUsed) + .FirstOrDefaultAsync(cancellationToken); + if (entity == null) throw Oops.Oh(EnumErrorCodeType.s400, "楠岃瘉鐮佹棤鏁�"); + entity.IsUsed = true; + await rep.UpdateAsync(entity); + } + } +} diff --git a/FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs b/FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs index 4a45d2e..b925ea7 100644 --- a/FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs +++ b/FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs @@ -57,6 +57,10 @@ { q = q.Where(it => it.Name.Contains(request.Keywords)); } + if (request.EnterpriseId.HasValue) + { + q = q.Where(it => it.EnterpriseId == request.EnterpriseId); + } if (request.BeginTime.HasValue && request.EndTime.HasValue) { q = q.Where(it => request.BeginTime <= it.BeginTime && it.BeginTime <= request.EndTime); diff --git a/FlexJobApi.UserServer.Application/Auths/Commands/LoginCommandHandler.cs b/FlexJobApi.UserServer.Application/Auths/Commands/LoginCommandHandler.cs new file mode 100644 index 0000000..dad1665 --- /dev/null +++ b/FlexJobApi.UserServer.Application/Auths/Commands/LoginCommandHandler.cs @@ -0,0 +1,101 @@ +锘縰sing Azure.Core; +using FlexJobApi.Core; +using Furion.DatabaseAccessor; +using Furion.DataEncryption; +using Furion.FriendlyException; +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.UserServer.Application +{ + /// <summary> + /// 鐧诲綍鍛戒护澶勭悊鍣� + /// </summary> + public class LoginCommandHandler( + IRepository<User> rep, + SmsUtils smsUtils) : + IRequestHandler<PasswordLoginCommand, LoginCommandCallback>, + IRequestHandler<SmsLoginCommand, LoginCommandCallback> + { + private readonly IRepository<User> rep = rep; + private readonly SmsUtils smsUtils = smsUtils; + + /// <summary> + /// 瀵嗙爜鐧诲綍 + /// </summary> + /// <param name="request"></param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + public async Task<LoginCommandCallback> Handle(PasswordLoginCommand request, CancellationToken cancellationToken) + { + var user = await rep.AsQueryable().AsNoTracking() + .Where(it => it.UserName == request.UserName && it.Type == request.Type) + .FirstOrDefaultAsync(cancellationToken); + if (user == null + || !PBKDF2Encryption.Compare(request.Password, user.Password)) + throw Oops.Oh(EnumUserErrorCodeType.u1000); + if (user.Status == EnumUserStatus.Disabled) + throw Oops.Oh(EnumUserErrorCodeType.u1001); + return GetCurrentLogier(user, request.ClientType); + } + + /// <summary> + /// 鐭俊鐧诲綍 + /// </summary> + /// <param name="request"></param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + public async Task<LoginCommandCallback> Handle(SmsLoginCommand request, CancellationToken cancellationToken) + { + await smsUtils.CheckVerifyCode(new CheckVerifyCodeModel + { + PhoneNumber = request.PhoneNumber, + VerifyCode = request.VerifyCode, + TemplateCode = EnumSmsTemplateCode.LoginOrRegister + }); + var user = await rep.AsQueryable().AsNoTracking() + .Where(it => it.UserName == request.PhoneNumber && it.Type == request.Type) + .FirstOrDefaultAsync(cancellationToken); + if (user == null) + throw Oops.Oh(EnumUserErrorCodeType.u1000); + if (user.Status == EnumUserStatus.Disabled) + throw Oops.Oh(EnumUserErrorCodeType.u1001); + return GetCurrentLogier(user, request.ClientType); + } + + /// <summary> + /// 鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛 + /// </summary> + /// <param name="user"></param> + /// <param name="clientType"></param> + /// <returns></returns> + private LoginCommandCallback GetCurrentLogier(User user, EnumClientType clientType) + { + var logier = new CurrentLogier + { + Id = user.Id, + Avatar = user.Avatar, + Name = user.Name, + UserName = user.UserName, + PhoneNumber = user.PhoneNumber, + Level = user.Level, + Type = user.Type, + ClientType = clientType, + EnterpriseId = user.EnterpriseId, + }; + JwtUtils.GenerateToken(logier); + + return new LoginCommandCallback + { + AccessToken = logier.AccessToken, + RefreshToken = logier.RefreshToken, + }; + } + } +} diff --git a/FlexJobApi.UserServer.Application/Auths/Commands/PasswordLoginCommandHandler.cs b/FlexJobApi.UserServer.Application/Auths/Commands/PasswordLoginCommandHandler.cs deleted file mode 100644 index 30c7ff4..0000000 --- a/FlexJobApi.UserServer.Application/Auths/Commands/PasswordLoginCommandHandler.cs +++ /dev/null @@ -1,71 +0,0 @@ -锘縰sing FlexJobApi.Core; -using Furion.DatabaseAccessor; -using Furion.DataEncryption; -using Furion.FriendlyException; -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.UserServer.Application -{ - /// <summary> - /// 瀵嗙爜鐧诲綍 - /// </summary> - public class PasswordLoginCommandHandler( - IRepository<UserAuth> userAuthRep, - IRepository<User> userInfoRep) - : IRequestHandler<PasswordLoginCommand, PasswordLoginCommandCallback> - { - private readonly IRepository<UserAuth> userAuthRep = userAuthRep; - private readonly IRepository<User> userInfoRep = userInfoRep; - - /// <inheritdoc/> - public async Task<PasswordLoginCommandCallback> Handle(PasswordLoginCommand request, CancellationToken cancellationToken) - { - var user = await userInfoRep.AsQueryable().AsNoTracking() - .Where(it => it.UserName == request.UserName && it.Type == request.Type) - .Select(it => new - { - it.Id, - it.Avatar, - it.Level, - it.EnterpriseId, - it.Name, - it.UserName, - it.PhoneNumber, - it.Password, - it.Status - }) - .FirstOrDefaultAsync(cancellationToken); - if (user == null - || !PBKDF2Encryption.Compare(request.Password, user.Password)) - throw Oops.Oh(EnumUserErrorCodeType.u1000); - if (user.Status == EnumUserStatus.Disabled) - throw Oops.Oh(EnumUserErrorCodeType.u1001); - var logier = new CurrentLogier - { - Id = user.Id, - Avatar = user.Avatar, - Name = user.Name, - UserName = user.UserName, - PhoneNumber = user.PhoneNumber, - Level = user.Level, - Type = request.Type, - ClientType = request.ClientType, - EnterpriseId = user.EnterpriseId, - }; - JwtUtils.GenerateToken(logier); - - return new PasswordLoginCommandCallback - { - AccessToken = logier.AccessToken, - RefreshToken = logier.RefreshToken, - }; - } - } -} diff --git a/FlexJobApi.UserServer.Application/Auths/Commands/VerifyCodeCommandHandler.cs b/FlexJobApi.UserServer.Application/Auths/Commands/VerifyCodeCommandHandler.cs index 4786e19..4831a8d 100644 --- a/FlexJobApi.UserServer.Application/Auths/Commands/VerifyCodeCommandHandler.cs +++ b/FlexJobApi.UserServer.Application/Auths/Commands/VerifyCodeCommandHandler.cs @@ -1,4 +1,5 @@ 锘縰sing FlexJobApi.Core; +using Furion.DatabaseAccessor; using Mapster; using MediatR; using System; @@ -12,27 +13,26 @@ /// <summary> /// 楠岃瘉鐮佸懡浠ゅ鐞嗗櫒 /// </summary> - public class VerifyCodeCommandHandler - : IRequestHandler<SendVerifyCodeCommand, Guid> + public class VerifyCodeCommandHandler( + SmsUtils smsUtils + ) + : IRequestHandler<SendLoginOrRegisterVerifyCodeCommand, Guid> { + private readonly SmsUtils smsUtils = smsUtils; + /// <summary> - /// 鍙戦�侀獙璇佺爜 + /// 鍙戦�佺櫥褰曟垨娉ㄥ唽鐭俊 /// </summary> /// <param name="request"></param> /// <param name="cancellationToken"></param> /// <returns></returns> - public Task<Guid> Handle(SendVerifyCodeCommand request, CancellationToken cancellationToken) + public Task<Guid> Handle(SendLoginOrRegisterVerifyCodeCommand request, CancellationToken cancellationToken) { - throw new Exception(); - //var code = new Random().Next(100000, 999999).ToString(); - //var entity = new SmsLog(); - //request.Adapt(entity); - //entity.Expiry = DateTime.Now.AddMinutes(30); - //entity.TemplateParam = new { code }.ToJson(); - //await utils.SendAsync(request.PhoneNumber, request.TemplateCode, entity.TemplateParam, cancellationToken); - //rep.Add(entity); - //await rep.SaveChangesAsync(cancellationToken); - //return new FriendlyEmptyCallback("楠岃瘉鐮佸凡鍙戦�侊紝璇锋煡鏀�"); + return smsUtils.SendVerifyCode(new SendVerifyCodeModel + { + PhoneNumber = request.PhoneNumber, + TemplateCode = EnumSmsTemplateCode.LoginOrRegister + }); } } } diff --git a/FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml b/FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml index 0595bc9..dd027d8 100644 --- a/FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml +++ b/FlexJobApi.UserServer.Application/FlexJobApi.UserServer.Application.xml @@ -4,27 +4,53 @@ <name>FlexJobApi.UserServer.Application</name> </assembly> <members> - <member name="T:FlexJobApi.UserServer.Application.PasswordLoginCommandHandler"> + <member name="T:FlexJobApi.UserServer.Application.LoginCommandHandler"> + <summary> + 鐧诲綍鍛戒护澶勭悊鍣� + </summary> + </member> + <member name="M:FlexJobApi.UserServer.Application.LoginCommandHandler.#ctor(Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.User},FlexJobApi.Core.SmsUtils)"> + <summary> + 鐧诲綍鍛戒护澶勭悊鍣� + </summary> + </member> + <member name="M:FlexJobApi.UserServer.Application.LoginCommandHandler.Handle(FlexJobApi.Core.PasswordLoginCommand,System.Threading.CancellationToken)"> <summary> 瀵嗙爜鐧诲綍 </summary> + <param name="request"></param> + <param name="cancellationToken"></param> + <returns></returns> </member> - <member name="M:FlexJobApi.UserServer.Application.PasswordLoginCommandHandler.#ctor(Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.UserAuth},Furion.DatabaseAccessor.IRepository{FlexJobApi.Core.User})"> + <member name="M:FlexJobApi.UserServer.Application.LoginCommandHandler.Handle(FlexJobApi.Core.SmsLoginCommand,System.Threading.CancellationToken)"> <summary> - 瀵嗙爜鐧诲綍 + 鐭俊鐧诲綍 </summary> + <param name="request"></param> + <param name="cancellationToken"></param> + <returns></returns> </member> - <member name="M:FlexJobApi.UserServer.Application.PasswordLoginCommandHandler.Handle(FlexJobApi.Core.PasswordLoginCommand,System.Threading.CancellationToken)"> - <inheritdoc/> + <member name="M:FlexJobApi.UserServer.Application.LoginCommandHandler.GetCurrentLogier(FlexJobApi.Core.User,FlexJobApi.Core.EnumClientType)"> + <summary> + 鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛 + </summary> + <param name="user"></param> + <param name="clientType"></param> + <returns></returns> </member> <member name="T:FlexJobApi.UserServer.Application.VerifyCodeCommandHandler"> <summary> 楠岃瘉鐮佸懡浠ゅ鐞嗗櫒 </summary> </member> - <member name="M:FlexJobApi.UserServer.Application.VerifyCodeCommandHandler.Handle(FlexJobApi.Core.SendVerifyCodeCommand,System.Threading.CancellationToken)"> + <member name="M:FlexJobApi.UserServer.Application.VerifyCodeCommandHandler.#ctor(FlexJobApi.Core.SmsUtils)"> <summary> - 鍙戦�侀獙璇佺爜 + 楠岃瘉鐮佸懡浠ゅ鐞嗗櫒 + </summary> + </member> + <member name="M:FlexJobApi.UserServer.Application.VerifyCodeCommandHandler.Handle(FlexJobApi.Core.SendLoginOrRegisterVerifyCodeCommand,System.Threading.CancellationToken)"> + <summary> + 鍙戦�佺櫥褰曟垨娉ㄥ唽鐭俊 </summary> <param name="request"></param> <param name="cancellationToken"></param> diff --git a/FlexJobApi.Web.Entry/appsettings.json b/FlexJobApi.Web.Entry/appsettings.json index 9c3686e..02ec129 100644 --- a/FlexJobApi.Web.Entry/appsettings.json +++ b/FlexJobApi.Web.Entry/appsettings.json @@ -29,5 +29,50 @@ "Policy": "{\"Version\":\"1\",\"Statement\":[{\"Effect\":\"Allow\",\"Action\":\"oss:PutObject\",\"Resource\":[\"acs:oss:*:*:waterdroptest2/*\",\"acs:oss:*:*:parkmanagement/*\",\"acs:oss:*:*:jurenlian/*\"]}]}", "DurationSeconds": 3600 } + }, + "SMS": { + "Enable": false, + "AccessKeyId": "LTAI5tMS7qz1duiyncCqxB8H", + "AccessSecret": "TEHSXK6f6Njg0v0MSFkrjURofdjuKQ", + "Version": "2017-05-25", + "SignName": "818鏁板瓧浜哄姏璧勪骇骞冲彴", + "RegionId": "cn-hangzhou", + "TemplateCodes": { + //818骞冲彴鐭俊楠岃瘉鐮� 楠岃瘉鐮侊細${code}锛岃浜�5鍒嗛挓鍐呭~鍐欙紝璇峰嬁娉勯湶锛岃嫢闈炴湰浜烘搷浣滆蹇界暐銆� + "VerifyCode": "SMS_471100021", + + //818骞冲彴鐧诲綍/娉ㄥ唽 楠岃瘉鐮�${code}锛岀敤鎴锋偍濂斤紝鎮ㄦ鍦ㄨ繘琛屽钩鍙扮櫥褰�/娉ㄥ唽锛岄獙璇佺爜10鍒嗛挓鍐呮湁鏁堛�� + "LoginOrRegister": "SMS_472170005", + //818璐﹀彿寮�閫氾紙绠$悊绔級灏婃暚鐨勭敤鎴锋偍濂斤紝浜哄姏鏃犲咖璐﹀彿宸插紑閫氾紝璐﹀彿锛�${account}锛屽瘑鐮侊細${pwd}锛岃鐧诲綍缃戝潃 https://admin.81812333.com + "CreateOperationAccount": "SMS_471970028", + //818鎵嬫満鍙风爜淇敼 楠岃瘉鐮�${code}锛屾偍姝e湪杩涜淇敼鎵嬫満鍙风爜鎿嶄綔锛岃鍕挎硠闇诧紝鑻ラ潪鏈汉鎿嶄綔璇峰拷鐣ャ�� + "UpdateUserPhoneNumber": "SMS_471100097", + //818鎵嬫満鍙锋崲缁� 灏婃暚鐨勭敤鎴锋偍濂斤紝818骞冲彴${code}鐨勮处鎴风粦瀹氭墜鏈哄彿鎴愬姛淇敼涓�${account}锛屼綘鍙互浣跨敤璇ユ墜鏈哄彿鐧诲綍锛岀櫥褰曠綉鍧� https://www.81812333.com + "UpdateUserPhoneNumberNotice": "SMS_471925037", + + //818閲嶇疆瀵嗙爜 楠岃瘉鐮�${code}锛屾偍姝e湪杩涜閲嶇疆瀵嗙爜鎿嶄綔锛岃鍕挎硠闇诧紝鑻ラ潪鏈汉鎿嶄綔璇峰拷鐣ャ�� + "ResetUserPhoneNumber": "SMS_471240080", + //818骞冲彴瀵嗙爜閲嶇疆锛堥�氱煡锛� 鎮ㄥソ锛屾偍鐨勫瘑鐮佸凡閲嶇疆锛岃处鍙凤細${account}锛屽瘑鐮侊細${password}锛岃濡ュ杽淇濆瓨 + "ResetPasswordNotice": "SMS_476790229", + + //璐﹀彿淇敼 灏婃暚鐨勭敤鎴锋偍濂斤細 鎮ㄧ殑818骞冲彴璐﹀彿鎴愬姛淇敼涓�${account}鎮ㄥ彲浠ヤ娇鐢ㄨ璐﹀彿杩涜鐧诲綍锛岀櫥褰曠綉鍧�锛歨ttps://www.81812333.com + "ChangeUserName": "SMS_475895109", + //818璐﹀彿寮�閫� 灏婃暚鐨勭敤鎴锋偍濂斤紝鎮ㄧ殑璐﹀彿锛�${account}锛屽垵濮嬪瘑鐮侊細${password}锛岃濡ュ杽淇濆瓨锛屾偍鍙娇鐢ㄨ处鍙峰瘑鐮佺櫥褰曞苟淇敼瀵嗙爜锛岀櫥褰曠綉鍧� https://www.81812333.com + "CreateAccountNotice": "SMS_471980029", + //鎵嬫満鍙疯В缁� 灏婃暚鐨勭敤鎴锋偍濂斤細818骞冲彴${account}鐨勮处鍙蜂笌${number}宸茶В缁戯紝浣犲彲浠ョ櫥褰曠綉鍧�锛歨ttps://www.81812333.com閲嶆柊缁戝畾鎵嬫満鍙枫�� + "UnbindingUserPhoneNumber": "SMS_475840188", + //瑙g粦閭 灏婃暚鐨勭敤鎴锋偍濂斤細818骞冲彴${account}鐨勮处鍙蜂笌${mail}宸茶В缁戯紝浣犲彲浠ョ櫥褰曠綉鍧�锛歨ttps://www.81812333.com閲嶆柊缁戝畾閭銆� + "UnbindingUserEmail": "SMS_475875117", + + //818瀹炲悕璁よ瘉 楠岃瘉鐮�${code}锛屾偍姝e湪杩涜瀹炲悕璁よ瘉鎿嶄綔锛岃鍕挎硠闇诧紝鑻ラ潪鏈汉鎿嶄綔璇峰拷鐣ャ�� + "UserCertificationAudit": "SMS_471230080", + //鐢宠鏁板瓧璇佷功 楠岃瘉鐮�${code}锛岀敤鎴锋偍濂斤紝鎮ㄦ鍦ㄧ敵璇锋暟瀛楄瘉涔︼紝楠岃瘉鐮�10鍒嗛挓鍐呮湁鏁堛�� + "ApplyUserCertificate": "SMS_475345383", + //鐢靛瓙绛� ${unit_name}璇锋偍鐐瑰嚮绛剧害t.81812333.com/Inter/${code} + "UserElectronSign": "SMS_476485061", + + //818閽卞寘寮�閫� 楠岃瘉鐮�${code}锛岀敤鎴锋偍濂斤紝鎮ㄦ鍦ㄨ繘琛屽钩鍙伴挶鍖呭紑閫氾紝璇ラ獙璇佺爜5鍒嗛挓鍐呮湁鏁堬紝璇峰嬁娉勯湶浜庝粬浜恒�� + "BankWalletAccountOpen": "SMS_473860301" + } } } \ No newline at end of file -- Gitblit v1.9.1