CrazyIter_Bin 2 år sedan
förälder
incheckning
0cec514265

+ 1 - 1
TEAMModelOS.FunctionV4/HttpTrigger/IESHttpTrigger.cs

@@ -237,7 +237,7 @@ namespace TEAMModelOS.FunctionV4
                                 }
                                 else
                                 {
-                                    var blocks = dim.SelectMany(x => x.blocks).Select(bs => new Block { name = bs, source = -1 });
+                                    var blocks = dim.SelectMany(x => x.blocks).Select(bs => new Block { name = bs, source = 1 });
                                     if (blocks.Any())
                                     {
                                         var _new = new Knowledge

+ 61 - 6
TEAMModelOS.SDK/DI/CoreAPI/CoreAPIHttpService.cs

@@ -7,6 +7,7 @@ using Microsoft.Extensions.DependencyInjection;
 using Microsoft.Extensions.Hosting;
 using Microsoft.Extensions.Logging;
 using Microsoft.Extensions.Options;
+using Newtonsoft.Json;
 using OpenXmlPowerTools;
 using System;
 using System.Collections.Generic;
@@ -16,6 +17,7 @@ using System.IO;
 using System.Linq;
 using System.Net;
 using System.Net.Http;
+using System.Net.Http.Headers;
 using System.Net.Http.Json;
 using System.Security.Policy;
 using System.Text;
@@ -27,6 +29,7 @@ using TEAMModelOS.SDK.DI;
 using TEAMModelOS.SDK.Extension;
 using TEAMModelOS.SDK.Models;
 using TEAMModelOS.SDK.Models.Cosmos.BI;
+using TEAMModelOS.SDK.Models.Service;
 using static TEAMModelOS.SDK.CoreAPIHttpService;
 
 namespace TEAMModelOS.SDK
@@ -35,7 +38,8 @@ namespace TEAMModelOS.SDK
     public class CoreAPIHttpServiceOptions
     {
         public string location { get; set; }
-        public string url { get; set; }
+        public string coreUrl { get; set; }
+        public string bbUrl { get; set; }
         public string clientID { get; set; }
         public string clientSecret { get; set; }
 
@@ -55,12 +59,14 @@ namespace TEAMModelOS.SDK
             _httpClient = httpClient;
             string location = _configuration.GetValue<string>("Option:Location");
             string url = _configuration.GetValue<string>("HaBookAuth:CoreAPI");
+            string bburl = _configuration.GetValue<string>("HaBookAuth:CoreBBAPI");
             var clientID = _configuration.GetValue<string>("HaBookAuth:CoreService:clientID");
             var clientSecret = _configuration.GetValue<string>("HaBookAuth:CoreService:clientSecret");
             options = new CoreAPIHttpServiceOptions
             {
                 location=location,
-                url=url,
+                coreUrl=url,
+                bbUrl=bburl,
                 clientID=clientID,
                 clientSecret=clientSecret
             };
@@ -79,11 +85,60 @@ namespace TEAMModelOS.SDK
             public string token_type { get; set; }
         }
 
+        public  async Task<(HttpStatusCode code,string msg )> AdminChange(AdminChange data, string location, IConfiguration _configuration, DI.DingDing _dingDing)
+        {
+            try
+            {
+                string url = _configuration.GetValue<string>("HaBookAuth:CoreBBAPI") + "/ies5/admin-change";
+
+                var clientID = _configuration.GetValue<string>("HaBookAuth:CoreService:clientID");
+                var clientSecret = _configuration.GetValue<string>("HaBookAuth:CoreService:clientSecret");
+                if (location.Contains("China"))
+                {
+                    location = "China";
+                }
+                else if (location.Contains("Global"))
+                {
+                    location = "Global";
+                }
+                var client = _httpClient;
+                var token = await CoreTokenExtensions.CreateAccessToken(clientID, clientSecret, location);
+                if (client.DefaultRequestHeaders.Contains("Authorization"))
+                {
+                    client.DefaultRequestHeaders.Remove("Authorization");
+                }
+                client.DefaultRequestHeaders.Add("Authorization", $"Bearer {token.AccessToken}");
+                HttpResponseMessage responseMessage = await client.PostAsJsonAsync(url, data);
+                if (responseMessage.Content != null)
+                {
+                    string content = await responseMessage.Content.ReadAsStringAsync();
+                    if (!string.IsNullOrWhiteSpace(content))
+                    {
+                     
+                        return (responseMessage.StatusCode, content);
+                    }
+                    else
+                    {
+                        return (responseMessage.StatusCode, null);
+                    }
+                }
+                else
+                {
+                    return (responseMessage.StatusCode, null);
+                }
+            }
+            catch (Exception ex)
+            {
+                await  _dingDing.SendBotMsg($"{location},管理员或管理权限变更通知BB处理相关通知异常\n{data.ToJsonString()}{ex.Message},\n{ex.StackTrace}", GroupNames.成都开发測試群組);
+                return (HttpStatusCode.InternalServerError, null);
+            }
+            
+        }
         public async Task<(HttpStatusCode code , CoreAPIToken token )> GetCoreAPIoAuth2Token(Dictionary<string,object> data, string location, IConfiguration _configuration, DI.DingDing _dingDing) {
             try
             {
                 var url = _configuration.GetValue<string>("HaBookAuth:CoreAPI");
-                //url = "https://api2-rc.teammodel.cn";
+                //coreUrl = "https://api2-rc.teammodel.cn";
                 url = $"{url}/oauth2/token";
                 var clientID = _configuration.GetValue<string>("HaBookAuth:CoreService:clientID");
                 var clientSecret = _configuration.GetValue<string>("HaBookAuth:CoreService:clientSecret");
@@ -332,8 +387,8 @@ namespace TEAMModelOS.SDK
                                 result = $"{responseMessage.StatusCode},推送返回的状态码。";
 
                             }
-                          //  _dingDing.SendBotMsg($"{location}站点发送消息:\n{url}/service/PushNotify \nheader:  {token.AccessToken} \nresult:{result}\n params:{notifyData.ToJsonString()}", GroupNames.成都开发測試群組).GetAwaiter().GetResult();
-
+                            //  _dingDing.SendBotMsg($"{location}站点发送消息:\n{url}/service/PushNotify \nheader:  {token.AccessToken} \nresult:{result}\n params:{notifyData.ToJsonString()}", GroupNames.成都开发測試群組).GetAwaiter().GetResult();
+                           
                         }
                     }
                 }
@@ -692,7 +747,7 @@ namespace TEAMModelOS.SDK
             var clientID = options.clientID;
             var clientSecret = options.clientSecret;
             var location = options.location;
-            var url = options.url;
+            var url = options.coreUrl;
             if (location.Contains("China"))
             {   url =string.IsNullOrWhiteSpace(url)? "https://api2.teammodel.cn":url;
                 location = "China";

+ 20 - 0
TEAMModelOS.SDK/Models/Dtos/AdminChange.cs

@@ -0,0 +1,20 @@
+using System.Collections.Generic;
+
+namespace TEAMModelOS.Models
+{
+    public class AdminChange
+    {
+        /// <summary>
+        /// 学校编码
+        /// </summary>
+        public string school { get; set; }
+        /// <summary>
+        /// 增加的管理员醍摩豆id(包含主管理员,子管理员)
+        /// </summary>
+        public HashSet<string> adminAdd { get; set; }= new HashSet<string>();
+        /// <summary>
+        /// 移除的管理员醍摩豆id(包含主管理员,子管理员)
+        /// </summary>
+        public HashSet<string> adminRmv { get; set; }= new HashSet<string>();
+    }
+}

+ 1 - 1
TEAMModelOS.SDK/Models/Service/GroupListService.cs

@@ -1222,7 +1222,7 @@ namespace TEAMModelOS.SDK
                         }
                         catch (Exception ex)
                         {
-                            await _dingDing.SendBotMsg($"{_coreAPIHttpService.options.location}用户转换失败:{_coreAPIHttpService.options.url}{json}\n {ex.Message}\n{ex.StackTrace}{tmdids.Select(x => x.id).ToJsonString()}", GroupNames.醍摩豆服務運維群組);
+                            await _dingDing.SendBotMsg($"{_coreAPIHttpService.options.location}用户转换失败:{_coreAPIHttpService.options.coreUrl}{json}\n {ex.Message}\n{ex.StackTrace}{tmdids.Select(x => x.id).ToJsonString()}", GroupNames.醍摩豆服務運維群組);
                         }
                     }
                    

+ 6 - 0
TEAMModelOS.SDK/TEAMModelOS.SDK.csproj

@@ -46,4 +46,10 @@
 	<PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.Abstractions" Version="1.1.0" />
 	<PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.Http" Version="3.0.13" />
   </ItemGroup>
+
+
+
+  <ItemGroup>
+    <Folder Include="DI\BBAPI\" />
+  </ItemGroup>
 </Project>

+ 2 - 2
TEAMModelOS/Controllers/Common/ExamController.cs

@@ -1533,7 +1533,7 @@ namespace TEAMModelOS.Controllers
                                 }
                                 catch (Exception ex)
                                 {
-                                    await _dingDing.SendBotMsg($"{_coreAPIHttpService.options.location}用户转换失败:{_coreAPIHttpService.options.url}{json}\n ", GroupNames.醍摩豆服務運維群組);
+                                    await _dingDing.SendBotMsg($"{_coreAPIHttpService.options.location}用户转换失败:{_coreAPIHttpService.options.coreUrl}{json}\n ", GroupNames.醍摩豆服務運維群組);
                                 }
                             }
                         }
@@ -1590,7 +1590,7 @@ namespace TEAMModelOS.Controllers
                                         }
                                         catch (Exception ex)
                                         {
-                                            await _dingDing.SendBotMsg($"{_coreAPIHttpService.options.location}用户转换失败:{_coreAPIHttpService.options.url}{json}\n ", GroupNames.醍摩豆服務運維群組);
+                                            await _dingDing.SendBotMsg($"{_coreAPIHttpService.options.location}用户转换失败:{_coreAPIHttpService.options.coreUrl}{json}\n ", GroupNames.醍摩豆服務運維群組);
                                         }
                                     }
                                 }

+ 1 - 1
TEAMModelOS/Controllers/Common/StudyController.cs

@@ -561,7 +561,7 @@ namespace TEAMModelOS.Controllers.Common
                             }
                             catch (Exception ex)
                             {
-                                await _dingDing.SendBotMsg($"{_coreAPIHttpService.options.location}用户转换失败:{_coreAPIHttpService.options.url}{json}\n ", GroupNames.醍摩豆服務運維群組);
+                                await _dingDing.SendBotMsg($"{_coreAPIHttpService.options.location}用户转换失败:{_coreAPIHttpService.options.coreUrl}{json}\n ", GroupNames.醍摩豆服務運維群組);
                             }
                         }
                     }

+ 1 - 1
TEAMModelOS/Controllers/OpenApi/OpenSchool/ScGroupListController.cs

@@ -317,7 +317,7 @@ namespace TEAMModelOS.Controllers
             }
             catch (Exception ex)
             {
-                await _dingDing.SendBotMsg($"开放平台导入教学班 import-teach-members:{_coreAPIHttpService.options.location}用户转换失败:{_coreAPIHttpService.options.url}{tmdstr}\n {ex.Message}\n{ex.StackTrace}", GroupNames.醍摩豆服務運維群組);
+                await _dingDing.SendBotMsg($"开放平台导入教学班 import-teach-members:{_coreAPIHttpService.options.location}用户转换失败:{_coreAPIHttpService.options.coreUrl}{tmdstr}\n {ex.Message}\n{ex.StackTrace}", GroupNames.醍摩豆服務運維群組);
                 //return Ok(new { error =3, msg = "醍摩豆ID验证错误!" });
             }
             var unexist_student = stus.Select(x => x.id).Except(students.Select(y => y.id)).ToList();

+ 14 - 1
TEAMModelOS/Controllers/School/SchoolTeacherController.cs

@@ -529,6 +529,8 @@ namespace TEAMModelOS.Controllers
                 {
                     hasjob = true;
                 }
+
+                AdminChange adminChange = new AdminChange { school = school_code.ToString() };
                 foreach (var id in ids)
                 {
                     SchoolTeacher st = await client.GetContainer(Constant.TEAMModelOS, "School").ReadItemAsync<SchoolTeacher>(id, new PartitionKey($"Teacher-{school_code}"));
@@ -537,7 +539,7 @@ namespace TEAMModelOS.Controllers
                        oldper = st.permissions.ToJsonString().ToObject<List<string>>();
                     }
                     Teacher teacher = await client.GetContainer(Constant.TEAMModelOS, Constant.Teacher).ReadItemAsync<Teacher>(id, new PartitionKey($"Base"));
-                   var schoolData= teacher.schools.Find(z => z.schoolId.Equals($"{school_code}"));
+                    var schoolData= teacher.schools.Find(z => z.schoolId.Equals($"{school_code}"));
                     List<string> addAuthority = new List<string>();
                     List<string> rmvAuthority = new List<string>();
                     if (permission.IsNotEmpty())
@@ -619,12 +621,23 @@ namespace TEAMModelOS.Controllers
                     else {
                         rmvText.Add($"{none}");
                     }
+                   
                     await client.GetContainer(Constant.TEAMModelOS, "School").ReplaceItemAsync<SchoolTeacher>(st, id, new PartitionKey($"Teacher-{school_code}"));
                     _coreAPIHttpService.PushNotify(nameCodes, "authority-change", Constant.NotifyType_IES5_Management,
                       new Dictionary<string, object> { { "tmdname", teacher.name }, { "tmdid", teacher.id }, { "schoolName", schoolData.name }, { "addAuthority", $"[{string.Join(",", addText)}]" }, { "rmvAuthority", $"[{string.Join(",", rmvText)}]" } }
                       , _option.Location, _configuration, _dingDing, _environment.ContentRootPath);
                     schoolTeachers.Add(st);
+                    //标记
+                    if (addAuthority.Contains("teacher-upd"))
+                    {
+                        adminChange.adminAdd.Add(id);
+                    }
+                    if (rmvAuthority.Contains("teacher-upd"))
+                    {
+                        adminChange.adminRmv.Add(id);
+                    }
                 }
+                await _coreAPIHttpService.AdminChange(adminChange, _option.Location, _configuration, _dingDing);
                 return Ok(new { teachers = schoolTeachers });
             }
             catch (Exception)

+ 1 - 1
TEAMModelOS/Controllers/Student/TmdUserController.cs

@@ -222,7 +222,7 @@ namespace TEAMModelOS.Controllers
                     }
                     catch (Exception ex)
                     {
-                        await _dingDing.SendBotMsg($"{_coreAPIHttpService.options.location}用户转换失败:{_coreAPIHttpService.options.url}{json}\n ", GroupNames.醍摩豆服務運維群組);
+                        await _dingDing.SendBotMsg($"{_coreAPIHttpService.options.location}用户转换失败:{_coreAPIHttpService.options.coreUrl}{json}\n ", GroupNames.醍摩豆服務運維群組);
                     }
                 }
             }

+ 5 - 0
TEAMModelOS/Controllers/Teacher/InitController.cs

@@ -255,6 +255,11 @@ namespace TEAMModelOS.Controllers
                                 _ = _azureStorage.SaveLogLang("transfer-admin-role", _environment.ContentRootPath, replaceData, _dingDing, bizId: $"{userid}-{schoolBase.id}-{_targetTecher}", httpContext: HttpContext, scope: "school");
                                 //保存管理员移交至BI
                                 await AzureStorageBlobExtensions.SaveBILog(blobClient, tableClient, "school-transfer-admin", strMsg?.ToString(), _dingDing, twebsite: "IES5", httpContext: HttpContext);
+                                var adminAdd = new HashSet<string>();
+                                adminAdd.Add(newSchoolTeacher.id);
+                                var adminRmv = new HashSet<string>();
+                                adminRmv.Add(schoolTeacher.id);
+                                await _coreAPIHttpService.AdminChange(new AdminChange { school = school, adminAdd = adminAdd, adminRmv = adminRmv },_option.Location,_configuration,_dingDing);
                                 return Ok(new { status = 1 });
                             }
                             else