CrazyIter_Bin 2 năm trước cách đây
mục cha
commit
3f12b0ea8d

+ 1 - 0
TEAMModelOS.SDK/Context/Constant/Constant.cs

@@ -12,6 +12,7 @@ namespace TEAMModelOS.SDK.DI
         public static readonly string ScopeTeacher = "teacher";
         public static readonly string ScopeTmdUser = "tmduser";
         public static readonly string ScopeStudent = "student";
+        public static readonly string ScopeBusiness = "business";
         public static readonly string RowKey = "RowKey";
         public static readonly string PartitionKey = "PartitionKey";
         public static readonly string School = "School";

+ 54 - 137
TEAMModelOS.SDK/DI/HttpTrigger/WebHookHttpTrigger.cs

@@ -1,6 +1,9 @@
 using Azure.Cosmos;
 using Azure.Storage.Blobs.Models;
+using Grpc.Core;
 using HTEXLib.COMM.Helpers;
+using Microsoft.AspNetCore;
+using Microsoft.AspNetCore.Http;
 using Microsoft.Azure.Cosmos.Table;
 using Microsoft.Azure.Functions.Worker;
 using Microsoft.Azure.Functions.Worker.Http;
@@ -12,6 +15,7 @@ using System.Net;
 using System.Net.Http;
 using System.Net.Http.Json;
 using System.Reflection;
+using System.Security.Policy;
 using System.Text;
 using System.Text.Json;
 using System.Threading.Tasks;
@@ -22,6 +26,7 @@ using TEAMModelOS.SDK.Extension;
 using TEAMModelOS.SDK.Models;
 using TEAMModelOS.SDK.Models.Cosmos.BI.BINormal;
 using TEAMModelOS.SDK.Models.Cosmos.Teacher;
+using TEAMModelOS.SDK.Models.Service;
 using TEAMModelOS.SDK.Models.Table;
 using static TEAMModelOS.SDK.Models.Teacher;
 
@@ -34,7 +39,7 @@ namespace TEAMModelOS.SDK.DI
         private readonly AzureStorageFactory _azureStorage;
         private readonly AzureRedisFactory _azureRedis;
         private readonly IHttpClientFactory _httpClient;
-        public WebHookHttpTrigger(IHttpClientFactory httpClient,AzureCosmosFactory azureCosmos, DingDing dingDing, AzureStorageFactory azureStorage  , AzureRedisFactory azureRedis)
+        public WebHookHttpTrigger(IHttpClientFactory httpClient, AzureCosmosFactory azureCosmos, DingDing dingDing, AzureStorageFactory azureStorage, AzureRedisFactory azureRedis)
         {
             _azureCosmos = azureCosmos;
             _dingDing = dingDing;
@@ -52,33 +57,33 @@ namespace TEAMModelOS.SDK.DI
         public async Task<HttpResponseData> NoticeSchoolAuthChange([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "webhook/school-auth-change")] HttpRequestData request)
         {
             var response = request.CreateResponse(HttpStatusCode.OK);
-            (  List<BizConfig> businessConfigs, List<string> webhookdomain, SchoolAuthChange data) = await GetRequestData<SchoolAuthChange>(request);
-            if (webhookdomain.IsNotEmpty())
+            string datastr = await new StreamReader(request.Body).ReadToEndAsync();
+            var json = JsonDocument.Parse(datastr).RootElement;
+            SchoolAuthChange data = null;
+            if (json.TryGetProperty("data", out JsonElement _data))
             {
-                foreach (var domain in webhookdomain)
+                data = _data.ToObject<SchoolAuthChange>();
+            }
+
+            (List<BizConfig> businessConfigs, List<(List<string> urls, string head, string token, BizConfig config)> webhooks) = await WebHookService.GetRequestData(json, _azureCosmos, _azureRedis, _azureStorage);
+            if (webhooks.IsNotEmpty())
+            {
+                foreach (var webhook in webhooks)
                 {
-                    await send(new
+                    foreach (var url in webhook.urls)
                     {
-                        data.addSchools,
-                        data.rmvSchools
-                    }, domain, "school-auth-change");
+                        await WebHookService.Send(new
+                        {
+                            data.addSchools,
+                            data.rmvSchools
+                        }, (url, webhook.head, webhook.token, webhook.config), "school-auth-change",_httpClient,_dingDing);
+                    }
                 }
             }
             return response;
         }
 
-        public class SchoolAuthChange
-        {
-            public string bizcode { get; set; }
-            /// <summary>
-            /// 添加的学校数据授权
-            /// </summary>
-            public List<IdSchool> addSchools { get; set; } = new List<IdSchool>();
-            /// <summary>
-            ///  取消的学校数据授权
-            /// </summary>
-            public List<IdSchool> rmvSchools { get; set; } = new List<IdSchool>();
-        }
+    
 
         /// <summary>
         /// 名单变更通知,名单类12开头
@@ -86,130 +91,42 @@ namespace TEAMModelOS.SDK.DI
         /// <param name="request"></param>
         /// <returns></returns>
         [Function("group-member-change")]
-        [ApiToken(Auth = "1201", Name = "名单成员变更",TName = "變更名單成員資料", EName = "Name List Member Changes", RWN = "N")]
-        public async Task<HttpResponseData> NoticeGroupChange([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "webhook/group-member-change")] HttpRequestData request) {
+        [ApiToken(Auth = "1201", Name = "名单成员变更", TName = "變更名單成員資料", EName = "Name List Member Changes", RWN = "N")]
+        public async Task<HttpResponseData> NoticeGroupChange([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "webhook/group-member-change")] HttpRequestData request)
+        {
             var response = request.CreateResponse(HttpStatusCode.OK);
-            (  List < BizConfig > businessConfigs, List<string> webhookdomain, GroupChange data) = await  GetRequestData<GroupChange>(request);
-
-            if (    webhookdomain.IsNotEmpty()&& string.IsNullOrWhiteSpace(data.school)) {
-                foreach (var domain in webhookdomain) {
-                    await send(new
-                    {
-                        data.status,
-                        data.type,
-                        data.listid,
-                        data.tmdjoin,
-                        data.tmdleave,
-                        data.stujoin,
-                        data.stuleave,
-                        data.tchjoin,
-                        data.tchleave,
-                        data.school
-                    }, domain,"group-member-change");
-                }
+            string datastr = await new StreamReader(request.Body).ReadToEndAsync();
+            var json = JsonDocument.Parse(datastr).RootElement;
+            GroupChange data = null;
+            if (json.TryGetProperty("data", out JsonElement _data)){
+                data= _data.ToObject<GroupChange>();
             }
-            return response;
-        }
-        /// <summary>
-        /// 测试域名的webhook是否接入
-        /// </summary>
-        /// <param name="request"></param>
-        /// <returns></returns>
-        [Function("check-domain-webhook")]
-        
-        public async Task<HttpResponseData> CheckDomainWebhook([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "webhook/check-domain-webhook")] HttpRequestData request) {
-            string data = await new StreamReader(request.Body).ReadToEndAsync();
-            var json = JsonDocument.Parse(data).RootElement;
-            if (json.TryGetProperty("domain", out JsonElement domain) && json.TryGetProperty("https", out JsonElement _https))
+           
+            (List<BizConfig> businessConfigs, List<(List<string> urls, string head, string token, BizConfig config)> webhooks ) = await WebHookService.GetRequestData(json,_azureCosmos,_azureRedis,_azureStorage);
+            if (webhooks.IsNotEmpty() && string.IsNullOrWhiteSpace(data.school))
             {
-                string https = _https.ValueKind.Equals(JsonValueKind.Number) && int.Parse($"{_https}") == 1 ? "https" : "http";
-                string url = $"{https}://{domain}";
-                HttpStatusCode httpStatus = await  send(new { }, url, "check-domain-webhook");
-                var response = request.CreateResponse(httpStatus);
-                return response;
-            }
-            else {
-                var response = request.CreateResponse(HttpStatusCode.BadRequest);
-                return response;
-            }
-        }
-        /// <summary>
-        /// 消息发送方法
-        /// </summary>
-        /// <param name="data"></param>
-        /// <param name="domain"></param>
-        /// <param name="notice"></param>
-        public    async Task<HttpStatusCode> send (dynamic data,string domain, string notice) {
-            var timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
-            var client = _httpClient.CreateClient();
-            client.Timeout=new TimeSpan(0,0,10);
-            HttpResponseMessage httpResponse =await client.PostAsJsonAsync($"{domain}/webhook", new
-            {
-                time = timestamp,
-                notice =notice,
-                data = data
-            });
-            return httpResponse.StatusCode;
-        }
-        /// <summary>
-        /// 解析HttpRequestData  传递的数据
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="request"></param>
-        /// <returns></returns>
-        public async Task<( List<BizConfig> businessConfigs,List<string> webhookdomain, T data)> GetRequestData<T>(HttpRequestData request)
-        {
-            //var response = request.CreateResponse(HttpStatusCode.OK);
-            string data = await new StreamReader(request.Body).ReadToEndAsync();
-            var json = JsonDocument.Parse(data).RootElement;
-            List< BizConfig > bizConfigs = new List< BizConfig >();
-            try {
-                var table = _azureStorage.GetCloudTableClient().GetTableReference("IESOpenApi");
-                if (json.TryGetProperty("school", out JsonElement _school) && !string.IsNullOrWhiteSpace($"{_school}"))
+                foreach (var webhook in webhooks)
                 {
-                    string sql = $"select distinct value c from c join s in c.schools where s.id='{_school}' ";
-
-                    await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Normal)
-                        .GetItemQueryIterator<BizConfig>(queryText: sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey("BizConfig") }))
+                    foreach (var url in webhook.urls)
                     {
-                        bizConfigs.Add(item);
+                        await WebHookService.Send(new
+                        {
+                            data.status,
+                            data.type,
+                            data.listid,
+                            data.tmdjoin,
+                            data.tmdleave,
+                            data.stujoin,
+                            data.stuleave,
+                            data.tchjoin,
+                            data.tchleave,
+                            data.school
+                        }, (url, webhook.head, webhook.token, webhook.config), "group-member-change", _httpClient, _dingDing);
                     }
                 }
-                if (json.TryGetProperty("bizid", out JsonElement _bizid))
-                {
-                    try
-                    {
-                        BizConfig bizConfig = await _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", "Normal").ReadItemAsync<BizConfig>($"{_bizid}", new PartitionKey("BizConfig"));
-                        bizConfigs.Add(bizConfig);
-                    }
-                    catch (CosmosException ex) when (ex.Status == 404)
-                    {
-                        return (bizConfigs, null, default(T));
-                    }
-                }
-                if (json.TryGetProperty("data", out JsonElement _data) && bizConfigs.IsNotEmpty())
-                {
-                    var webhookdomain = bizConfigs.Where(z => !string.IsNullOrWhiteSpace(z.webhook)).ToList();
-                    List<string> webhookdomains = new List<string>();
-                    webhookdomain.ForEach(x => {
-                        webhookdomains.AddRange(x.webhook.Split(",").Select(y => x.https == 1 ? $"https://{y}" : $"http://{y}"));
-                    });
-                    return (bizConfigs, webhookdomains, _data.ToObject<T>());
-                }
-                else 
-                { 
-                    return (bizConfigs, null, default(T)); 
-                }
-            } catch {
-                return (bizConfigs, null, default(T));
             }
+            return response;
         }
-    }
-   
-
-    public class WebhookSchoolData { 
-        public string school { get; set; }
-        public string data { get; set; }
-    }
-
+        
+    } 
 }

+ 10 - 5
TEAMModelOS.SDK/Models/Cosmos/BI/BINormal/BizConfig.cs

@@ -56,16 +56,21 @@ namespace TEAMModelOS.SDK.Models.Cosmos.BI.BINormal
         public string domain { get; set; }
 
         /// <summary>
-        /// webhook  支持多个域名, 逗号隔开 。
+        /// webhook  支持多个地址, 逗号隔开 。
         /// </summary>
-
         public string webhook { get; set; }
-
+        /// <summary>
+        /// webhook的访问金钥
+        /// </summary>
+        public string webhookToken { get; set; }
+        /// <summary>
+        /// webhook的访问金钥
+        /// </summary>
+        public string webhookHead { get; set; }
         /// <summary>
         /// 是否https 0 否,1 是 
         /// </summary>
-        public int https { get; set; } = 0;
-
+        /// public int https { get; set; } = 0;
         /// <summary>
         /// 授权的token ,存放 scope="business",Sub="合作方id",  9e40e436-f958-498d-93cf-4242b77a17ab
         /// </summary>

+ 13 - 0
TEAMModelOS.SDK/Models/Service/Common/MonitorService.cs

@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace TEAMModelOS.SDK.Models.Service.Common
+{
+    public static class MonitorService
+    {
+        public static async Task ListenFcuntion() { }
+    }
+}

+ 130 - 0
TEAMModelOS.SDK/Models/Service/Common/WebHookService.cs

@@ -0,0 +1,130 @@
+using HTEXLib.COMM.Helpers;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Net.Http;
+using System.Net;
+using System.Text;
+using System.Text.Json;
+using System.Threading.Tasks;
+using TEAMModelOS.SDK.DI;
+using TEAMModelOS.SDK.Models.Cosmos.BI.BINormal;
+using Microsoft.Azure.Functions.Worker.Http;
+using Azure.Cosmos;
+using TEAMModelOS.SDK.Extension;
+using System.Net.Http.Json;
+
+namespace TEAMModelOS.SDK.Models.Service
+{
+    public static class WebHookService
+    {
+        /// <summary>
+        /// 消息发送方法
+        /// </summary>
+        /// <param name="data"></param>
+        /// <param name="domain"></param>
+        /// <param name="notice"></param>
+        public static async Task<HttpStatusCode> Send(dynamic data, (string url, string head, string token, BizConfig config) webhook, string notice, IHttpClientFactory _httpClient,DingDing _dingDing,int timeout= 60)
+        {
+            try
+            {
+                
+                var timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
+                var client = _httpClient.CreateClient();
+                client.Timeout= new TimeSpan(0, 0, timeout);
+                if (!string.IsNullOrWhiteSpace(webhook.head) && !string.IsNullOrWhiteSpace(webhook.token))
+                {
+                    client.DefaultRequestHeaders.Remove(webhook.head);
+                    client.DefaultRequestHeaders.Add(webhook.head, webhook.token);
+                }
+            
+                HttpResponseMessage httpResponse = await client.PostAsJsonAsync($"{webhook.url}", new
+                {
+                    time = timestamp,
+                    notice = notice,
+                    data = data
+                });
+                return httpResponse.StatusCode;
+            }
+            catch (Exception e)
+            {
+                await _dingDing.SendBotMsg($"第三方webhook回调失败:\n企业:{webhook.config.name}({webhook.config.id})\n地址:{webhook.url}\n通知:{notice}\n原因:{e.Message}{e.StackTrace}", GroupNames.成都开发測試群組);
+                return HttpStatusCode.InternalServerError;
+            }
+        }
+
+        /// <summary>
+        /// 解析HttpRequestData  传递的数据
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        public static async Task<(List<BizConfig> businessConfigs, List<(List<string> urls, string head, string token, BizConfig config)> webhooks)> 
+            GetRequestData(JsonElement json , AzureCosmosFactory _azureCosmos, AzureRedisFactory _azureRedis, AzureStorageFactory _azureStorage)
+        {
+            //var response = request.CreateResponse(HttpStatusCode.OK);
+           
+            List<BizConfig> bizConfigs = new List<BizConfig>();
+            try
+            {
+                var table = _azureStorage.GetCloudTableClient().GetTableReference("IESOpenApi");
+                if (json.TryGetProperty("school", out JsonElement _school) && !string.IsNullOrWhiteSpace($"{_school}"))
+                {
+                    string sql = $"select distinct value c from c join s in c.schools where s.id='{_school}' and c.webhook<>null and c.webhook<>'' ";
+                    await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Normal)
+                        .GetItemQueryIterator<BizConfig>(queryText: sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey("BizConfig") }))
+                    {
+                        bizConfigs.Add(item);
+                    }
+                }
+                if (json.TryGetProperty("bizid", out JsonElement _bizid))
+                {
+                    try
+                    {
+                        BizConfig bizConfig = await _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", "Normal").ReadItemAsync<BizConfig>($"{_bizid}", new PartitionKey("BizConfig"));
+                        bizConfigs.Add(bizConfig);
+                    }
+                    catch (CosmosException ex) when (ex.Status == 404)
+                    {
+                        return (bizConfigs, null);
+                    }
+                }
+                if (bizConfigs.IsNotEmpty())
+                {
+                    var webhookdomain = bizConfigs.Where(z => !string.IsNullOrWhiteSpace(z.webhook)).Select(w => new { w.webhook, w.webhookHead, w.webhookToken, config = w }).ToList();
+                    List<(List<string> urls, string head, string token, BizConfig config)> webhookdomains = new List<(List<string> urls, string head, string token, BizConfig config)>();
+                    webhookdomain.ForEach(x => {
+                        webhookdomains.Add((x.webhook.Trim().Split(",").ToList(), x.webhookHead, x.webhookToken, x.config));
+                    });
+                    return (bizConfigs, webhookdomains);
+                }
+                else
+                {
+                    return (bizConfigs, null);
+                }
+            }
+            catch
+            {
+                return (bizConfigs, null);
+            }
+        }
+    }
+    public class SchoolAuthChange
+    {
+        public string bizcode { get; set; }
+        /// <summary>
+        /// 添加的学校数据授权
+        /// </summary>
+        public List<IdSchool> addSchools { get; set; } = new List<IdSchool>();
+        /// <summary>
+        ///  取消的学校数据授权
+        /// </summary>
+        public List<IdSchool> rmvSchools { get; set; } = new List<IdSchool>();
+    }
+    public class WebhookSchoolData
+    {
+        public string school { get; set; }
+        public string data { get; set; }
+    }
+}

+ 1 - 1
TEAMModelOS/Controllers/OpenApi/Business/BizCustomizeController.cs

@@ -416,7 +416,7 @@ namespace TEAMModelOS.Controllers
         /// <param name="jsonElement"></param>
         /// <returns></returns>
         [ProducesDefaultResponseType]
-        [HttpPost("upsert-student-score")]
+        [HttpPost("upsert-student-score-zhiyin")]
         [ApiToken(Auth = "2005", Name = "添加/修改学生艺术评测(音乐)答题结果", TName = "添加/修改學生藝術評測音樂答題結果", EName = "Add/modify the music answer results of student art evaluation", RWN = "W", Limit = false)]
         public async Task<IActionResult> SetStudnetScore(JsonElement jsonElement)
         {

+ 9 - 9
TEAMModelOS/Controllers/OpenApi/Business/BizOverallEducationController.cs

@@ -87,9 +87,9 @@ namespace TEAMModelOS.Controllers
         /// </summary>
         /// <param name="jsonElement"></param>
         /// <returns></returns>
-        [ProducesDefaultResponseType]
-        [HttpPost("set-lesson-relord")]
-        [ApiToken(Auth = "1903", Name = "开课/上传课例信息", TName = "開課/上傳課例信息", EName = "Start class/upload class information", RWN = "W", Limit = false)]
+        //[ProducesDefaultResponseType]
+        //[HttpPost("set-lesson-relord")]
+        //[ApiToken(Auth = "1903", Name = "开课/上传课例信息", TName = "開課/上傳課例信息", EName = "Start class/upload class information", RWN = "W", Limit = false)]
         public async Task<IActionResult> UpLessonRec(JsonElement jsonElement)
         {
             var (id, school) = HttpContext.GetApiTokenInfo();
@@ -319,9 +319,9 @@ namespace TEAMModelOS.Controllers
         /// </summary>
         /// <param name="jsonElement"></param>
         /// <returns></returns>
-        [ProducesDefaultResponseType]
-        [HttpPost("get-lesson-relords")]
-        [ApiToken(Auth = "1904", Name = "获取学校课例", TName = "獲取學校課例", EName = "Get school lessons", RWN = "R", Limit = false)]
+        //[ProducesDefaultResponseType]
+        //[HttpPost("get-lesson-relords")]
+        //[ApiToken(Auth = "1904", Name = "获取学校课例", TName = "獲取學校課例", EName = "Get school lessons", RWN = "R", Limit = false)]
         public async Task<IActionResult> GetLessonRec(JsonElement jsonElement)
         {
             var (id, school) = HttpContext.GetApiTokenInfo();
@@ -437,9 +437,9 @@ namespace TEAMModelOS.Controllers
         /// </summary>
         /// <param name="jsonElement"></param>
         /// <returns></returns>
-        [ProducesDefaultResponseType]
-        [HttpPost("set-stdent-score")]
-        [ApiToken(Auth = "1905", Name = "添加/修改学生艺术评测(音乐)答题结果", TName = "添加/修改學生藝術評測音樂答題結果", EName = "Add/modify the music answer results of student art evaluation", RWN = "W", Limit = false)]
+        //[ProducesDefaultResponseType]
+        //[HttpPost("set-stdent-score")]
+        //[ApiToken(Auth = "1905", Name = "添加/修改学生艺术评测(音乐)答题结果", TName = "添加/修改學生藝術評測音樂答題結果", EName = "Add/modify the music answer results of student art evaluation", RWN = "W", Limit = false)]
         public async Task<IActionResult> SetStudnetScore(JsonElement jsonElement)
         {
             var (id, school) = HttpContext.GetApiTokenInfo();

+ 44 - 5
TEAMModelOS/Controllers/OpenApi/Init/BizUsersController.cs

@@ -1,15 +1,21 @@
 using Azure.Cosmos;
 using Azure.Storage.Sas;
+using DocumentFormat.OpenXml.Office2010.Excel;
+using DocumentFormat.OpenXml.Wordprocessing;
+using Microsoft.AspNetCore.Authorization;
 using Microsoft.AspNetCore.Http;
 using Microsoft.AspNetCore.Mvc;
 using Microsoft.Extensions.Configuration;
 using Microsoft.Extensions.Options;
 using System;
 using System.Collections.Generic;
+using System.Net;
+using System.Net.Http;
 using System.Security.Policy;
 using System.Text;
 using System.Text.Json;
 using System.Threading.Tasks;
+using TEAMModelOS.Filter;
 using TEAMModelOS.Models;
 using TEAMModelOS.SDK;
 using TEAMModelOS.SDK.Context.BI;
@@ -18,6 +24,7 @@ using TEAMModelOS.SDK.DI;
 using TEAMModelOS.SDK.Extension;
 using TEAMModelOS.SDK.Models;
 using TEAMModelOS.SDK.Models.Cosmos.BI.BINormal;
+using TEAMModelOS.SDK.Models.Service;
 using TEAMModelOS.SDK.Models.Table;
 
 namespace TEAMModelOS.Controllers
@@ -36,7 +43,8 @@ namespace TEAMModelOS.Controllers
         private readonly Option _option;
         //隐式登录
         private readonly CoreAPIHttpService _coreAPIHttpService;
-        public BizUsersController(IConfiguration configuration, AzureCosmosFactory azureCosmos, AzureStorageFactory azureStorage, DingDing dingDing, IOptionsSnapshot<Option> option, CoreAPIHttpService coreAPIHttpService)
+        private readonly IHttpClientFactory _httpClient;
+        public BizUsersController(IHttpClientFactory httpClient, IConfiguration configuration, AzureCosmosFactory azureCosmos, AzureStorageFactory azureStorage, DingDing dingDing, IOptionsSnapshot<Option> option, CoreAPIHttpService coreAPIHttpService)
         {
             _configuration = configuration;
             _azureCosmos = azureCosmos;
@@ -44,6 +52,7 @@ namespace TEAMModelOS.Controllers
             _dingDing = dingDing;
             _option = option?.Value;
             _coreAPIHttpService = coreAPIHttpService;
+            _httpClient = httpClient;
         }
 
 
@@ -94,12 +103,16 @@ namespace TEAMModelOS.Controllers
                 }
             }
             else return Ok(new { state = RespondCode.NotFound, msg = "未找到该用户!" });
-
-            (osblob_uri, osblob_sas) = _azureStorage.GetBlobContainerSAS("teammodelos", BlobContainerSasPermissions.Write | BlobContainerSasPermissions.Read | BlobContainerSasPermissions.List | BlobContainerSasPermissions.Delete);
             if (businessUsers.id != null)
-                return Ok(new { state = RespondCode.Ok, openid_token, businessUsers, osblob_uri, osblob_sas });
+            {
+                var auth_token = JwtAuthExtension.CreateAuthToken(_option.HostName, businessUsers.id, businessUsers. name, businessUsers. picture, _option.JwtSecretKey, scope: Constant.ScopeStudent, Website: "IES",    roles: new[] { "business" }, expire: 1);
+                var clientID = _configuration.GetValue<string>("HaBookAuth:CoreService:clientID");
+                var clientSecret = _configuration.GetValue<string>("HaBookAuth:CoreService:clientSecret");
+                var token = await CoreTokenExtensions.CreateAccessToken(clientID, clientSecret, _option.Location.Replace("-Dep", "").Replace("-Test", ""));
+                return Ok(new { state = RespondCode.Ok, openid_token, auth_token, token, businessUsers=new { businessUsers .name, businessUsers .id, businessUsers .picture, businessUsers .mobile, businessUsers .mail, businessUsers .relation} });
+            }
             else
-                return Ok(new { state = RespondCode.ForbiddenPwd, msg = "密码错误" });
+            { return Ok(new { state = RespondCode.ForbiddenPwd, msg = "密码错误" }); }
         }
 
         /// <summary>
@@ -371,5 +384,31 @@ namespace TEAMModelOS.Controllers
             return Ok(new { state = RespondCode.Ok, bizConfig });
         }
 
+
+        [ProducesDefaultResponseType]
+        [AuthToken(Roles = "business")]
+        [HttpPost("check-webhook")]
+        [Authorize(Roles = "IES")]
+        public async Task<IActionResult> CheckWebhook() {
+            //var (userid, name, picture, bizCode) = HttpContext.GetAuthTokenInfo();
+            string bizCode = "80e1bb6c-acba-46ab-9939-4851c4ef2158";
+            BizConfig config= await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Normal).ReadItemAsync<BizConfig>(bizCode, new PartitionKey("BizConfig"));
+            List<dynamic> results = new List<dynamic>();
+            if (!string.IsNullOrWhiteSpace(config?.webhook))
+            {
+                var urls = config?.webhook.Trim().Split(",");
+                foreach (var url in urls)
+                {
+                     
+                    HttpStatusCode httpStatus = await WebHookService.Send(new { data= "check-webhook" }, (url,config.webhookHead,config.webhookToken,config), "check-webhook", _httpClient, _dingDing, 2);
+                    results.Add(new { url = url, status = httpStatus });
+                }
+                return Ok(results);
+            }
+            else { 
+                return BadRequest(new { code=1,msg="未配置Webhook通知回调"});
+            }
+            
+        }
     }
 }