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