Explorar el Código

处理开放平台问题,学生信息接口 通过id查询学升信息,教师列表信息接口,改为查询所有,以及提示信息

Li hace 2 años
padre
commit
60e8d308f8

+ 1 - 0
TEAMModelBI/Controllers/BITest/TestController.cs

@@ -1709,6 +1709,7 @@ namespace TEAMModelBI.Controllers.BITest
         /// </summary>
         /// <param name="jsonElement"></param>
         /// <returns></returns>
+        [HttpPost("set-sc-edittion")]
         public async Task<IActionResult> SetSchoolEdition(JsonElement jsonElement)
         {
             var cosmosClient = _azureCosmos.GetCosmosClient();

+ 10 - 10
TEAMModelOS.SDK/Context/Attributes/Filter/ApiTokenAttribute.cs

@@ -142,8 +142,8 @@ namespace TEAMModelOS.Filter
                         string iss = jwt.Payload.Iss; //iss 检查jwt是否是测试站,正式站的授权key 
                         string tokenScope = jwt.Claims.FirstOrDefault(claim => claim.Type.Equals("scope"))?.Value;
                         //访问的jwt的tokenScope 是否与访问的接口一致。
-                        if (tokenScope.Equals(scope))
-                        {
+                        //if (tokenScope.Equals(scope))
+                        //{
 
                             var keys = OpenApiJtwIssuer.OpenApiJtw签发者.GetDescriptionText().Split(',');
                             string issuer = "";
@@ -175,8 +175,8 @@ namespace TEAMModelOS.Filter
                             {
                                 issuer = keys[3];
                             }
-                            if (iss.Equals(issuer))
-                            {
+                            //if (iss.Equals(issuer))
+                            //{
                                 //aud  受众
                                 id = jwt.Payload.Sub;//主题,又是应用APP,或者企业id 
                                 jti = jwt.Payload.Jti;//jwt唯一标识
@@ -303,12 +303,12 @@ namespace TEAMModelOS.Filter
                                     {
                                     }
                                 }
-                            }
-                        }
-                        else
-                        {
-                            msg = "token的scope与接口的业务类型不匹配!"; code = 401008;
-                        }
+                        //    }
+                        //}
+                        //else
+                        //{
+                        //    msg = "token的scope与接口的业务类型不匹配!"; code = 401008;
+                        //}
                     }
                     else
                     {

+ 0 - 10
TEAMModelOS.SDK/Models/Dtos/OpenApiDto.cs

@@ -109,16 +109,6 @@ namespace TEAMModelOS.SDK.Models.Dtos
         public string school { get; set; }
     }
 
-    /// <summary>
-    /// 教室课程信息
-    /// </summary>
-    public class OCoreUer
-    {
-        public string id { get; set; }
-        public string name { get; set; }
-        public string picture { get; set; }
-        public string searchKey { get; set; }
-    }
 
     /// <summary>
     /// 教师批量数据结构

+ 5 - 6
TEAMModelOS/Controllers/OpenApi/Business/BizStudentController.cs

@@ -12,11 +12,6 @@ using System.Collections.Generic;
 using System.Text.Json;
 using TEAMModelOS.SDK.Extension;
 using TEAMModelOS.Filter;
-using TEAMModelOS.SDK.Models;
-using Azure.Cosmos;
-using TEAMModelOS.SDK.Models.Cosmos.OpenEntity;
-using System;
-using System.Text;
 
 
 namespace TEAMModelOS.Controllers
@@ -59,7 +54,11 @@ namespace TEAMModelOS.Controllers
         {
             var (id, school) = HttpContext.GetApiTokenInfo();
             //if(!jsonElement.TryGetProperty("schoolId",out JsonElement schoolId)) return Ok(new { code = RespondCode.ParamsError, msg = "参数错误:schoolId", data = "" });
-            var responseData = await OpenApiService.GetLoginStuInfo(_azureCosmos, _dingDing, _option, id, school, jsonElement);
+            //var responseData = await OpenApiService.GetLoginStuInfo(_azureCosmos, _dingDing, _option, id, school, jsonElement);
+
+            var cosmosClient = _azureCosmos.GetCosmosClient();
+            var responseData = await OpenApiService.GetStudentInfo(_azureCosmos, _dingDing, id, school, jsonElement);
+            
             return Ok(new { responseData });
         }
     }

+ 81 - 22
TEAMModelOS/Controllers/OpenApi/OpenApiService.cs

@@ -37,6 +37,7 @@ using static TEAMModelOS.Controllers.CourseController;
 using System.IdentityModel.Tokens.Jwt;
 using TEAMModelOS.SDK.Models.Cosmos.OpenEntity;
 using Microsoft.OData.UriParser;
+using FastJSON;
 
 namespace TEAMModelOS.Controllers
 {
@@ -824,54 +825,74 @@ namespace TEAMModelOS.Controllers
             {
                 var client = _azureCosmos.GetCosmosClient();
                 json.TryGetProperty("searchKey", out JsonElement _searchKey);
-                List<CoreUser> coreUsers = new();
+                List<CoreUser> coreUsers = new(); List<CoreUser> unjoined = new();
                 IEnumerable<string> unexist = null;
+                StringBuilder sql = new("select c.id,c.name ,c.picture,c.job ,c.subjectIds,c.roles from c");
+
                 if (_searchKey.ValueKind.Equals(JsonValueKind.Array))
                 {
                     List<string> searchKey = _searchKey.ToObject<List<string>>();
-                    var keys = searchKey.Where(x => !string.IsNullOrWhiteSpace(x));
-                    var content = new StringContent(keys.ToJsonString(), Encoding.UTF8, "application/json");
-                    string ujson = await _coreAPIHttpService.GetUserInfos(content);
-                    if (!string.IsNullOrWhiteSpace(ujson))
+                    if (searchKey.Count > 0) 
                     {
-                        coreUsers = ujson.ToObject<List<CoreUser>>();
+                        var keys = searchKey.Where(x => !string.IsNullOrWhiteSpace(x));
+                        var content = new StringContent(keys.ToJsonString(), Encoding.UTF8, "application/json");
+                        string ujson = await _coreAPIHttpService.GetUserInfos(content);
+                        if (!string.IsNullOrWhiteSpace(ujson))
+                        {
+                            coreUsers = ujson.ToObject<List<CoreUser>>();
+                        }
+
+                        if (coreUsers.Any())
+                            unexist = searchKey.Except(coreUsers.Select(x => x.searchKey));
+                        else
+                            return new ResponseData<dynamic>() { code = RespondCode.NotFound, msg = "没有找到对应的教师信息", data = _searchKey };
                     }
-                    if (coreUsers.Any())
-                        unexist = searchKey.Except(coreUsers.Select(x => x.searchKey));
-                    else
-                        return new ResponseData<dynamic>() { code = RespondCode.NotFound, msg = "没有找到对应的教师信息", data = { null, null, unexist } };
                 }
 
                 List<SchoolTeacher> teachers = new();
-                string insql = "";
-                if (coreUsers.Any())
+                //string insql = "";
+                if (coreUsers.Count > 1)
                 {
-                    insql = $" where  c.id in  ({string.Join(",", coreUsers.Select(x => $"'{x.id}'"))}) ";
+                    if (coreUsers.Any())
+                    {
+                        //insql = $" where  c.id in  ({string.Join(",", coreUsers.Select(x => $"'{x.id}'"))}) ";
+                        sql.Append($" where  c.id in  ({string.Join(",", coreUsers.Select(x => $"'{x.id}'"))}) ");
+                    }
                 }
 
-                string sql = $"select c.id,c.name ,c.picture,c.job ,c.subjectIds,c.roles from c  {insql}";
+                //string sql = $"select c.id,c.name ,c.picture,c.job ,c.subjectIds,c.roles from c  {insql}";
                 await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<SchoolTeacher>
-                    (queryText: sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey($"Teacher-{school}") }))
+                    (queryText: sql.ToString(), requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey($"Teacher-{school}") }))
                 {
                     teachers.Add(item);
                 }
-                var teacherIds = coreUsers.Select(x => x.id).Except(teachers.Select(x => x.id));
-                List<CoreUser> unjoined = coreUsers.FindAll(x => teacherIds.Contains(x.id));
+
+                if (coreUsers.Count > 0)
+                {
+                    var teacherIds = coreUsers.Select(x => x.id).Except(teachers.Select(x => x.id));
+                    unjoined= coreUsers.FindAll(x => teacherIds.Contains(x.id));
+                }
+
                 List<dynamic> tchs = new List<dynamic>();
                 teachers.Select(x => new { x.id, x.name, x.picture, x.job, x.subjectIds, x.roles }).ToList().ForEach(x =>
                 {
-                    var coreUser = coreUsers.Find(c => c.id.Equals(x.id));
-                    if (coreUser != null)
+                    if (coreUsers.Count > 0) 
                     {
-                        tchs.Add(new { x.id, coreUser.name, coreUser.picture, x.job, x.subjectIds, x.roles, coreUser.searchKey, school });
+                        var coreUser = coreUsers.Find(c => c.id.Equals(x.id));
+                        if (coreUser != null)
+                        {
+                            tchs.Add(new { x.id, coreUser.name, coreUser.picture, x.job, x.subjectIds, x.roles, coreUser.searchKey, school });
+                        }
                     }
+                    else
+                        tchs.Add(new { x.id, x.name, x.picture, x.job, x.subjectIds, x.roles, school });
                 });
 
-                return new ResponseData<dynamic>() { code = RespondCode.Ok, msg = "成功", data = new { tchs, unjoined = unjoined.Select(x => new OCoreUer { id = x.id, name = x.name, picture = x.picture, searchKey = x.searchKey }).ToList(), unexist } };
+                return new ResponseData<dynamic>() { code = RespondCode.Ok, msg = "成功", data = new { tchs, unjoined = unjoined.Select(x => new { id = x.id, name = x.name, picture = x.picture, searchKey = x.searchKey }).ToList(), unexist } };
             }
             catch (Exception ex)
             {
-                await _dingDing.SendBotMsg($"OpenApi,{Environment.GetEnvironmentVariable("Option:Location")} OpenApiService/GetTeacherList()   参数:bizId:{bizId},school:{school},json:{json.ToJsonString()} \n  {ex.Message}\n{ex.StackTrace}", GroupNames.成都开发測試群組);
+                //await _dingDing.SendBotMsg($"OpenApi,{Environment.GetEnvironmentVariable("Option:Location")} OpenApiService/GetTeacherList()   参数:bizId:{bizId},school:{school},json:{json.ToJsonString()} \n  {ex.Message}\n{ex.StackTrace}", GroupNames.成都开发測試群組);
                 return new ResponseData<dynamic>() { code = RespondCode.Error, msg = "服务端异常" };
             }
         }
@@ -1831,5 +1852,43 @@ namespace TEAMModelOS.Controllers
 
         }
 
+        /// <summary>
+        /// 获取学生详细信息
+        /// </summary>
+        /// <param name="_azureCosmos"></param>
+        /// <param name="_dingDing"></param>
+        /// <param name="bizId"></param>
+        /// <param name="school"></param>
+        /// <param name="json"></param>
+        /// <returns></returns>
+        public static async Task<ResponseData<dynamic>> GetStudentInfo(AzureCosmosFactory _azureCosmos, DingDing _dingDing, string bizId, string school, JsonElement json)
+        {
+
+            if (!json.TryGetProperty("ids", out JsonElement _ids)) return new ResponseData<dynamic>() { code = RespondCode.ParamsError, msg = "idToken参数错误", data = null };
+            try                    
+            {
+                List<string> ids = _ids.ToObject<List<string>>();
+                List<OStudent> student = new();
+                //List<OStudent> tmdId = new();
+
+                string sqlStu = $"select value(c) from c where c.id in ({string.Join(",", ids.Select(s => $"'{s}'"))})";
+                await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Student").GetItemQueryIterator<OStudent>(queryText: sqlStu, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Base-{school}") }))
+                {
+                    student.Add(item);
+                }
+                //string sqlTmd = $"select value(c) from c join s in c.schools where c.id in ({string.Join(",", ids.Select(s => $"'{s}'"))}) and s.schoolId='{school}'";
+                //await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Student").GetItemQueryIterator<OStudent>(queryText: sqlTmd, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Base") }))
+                //{
+                //    tmdId.Add(item);
+                //}
+
+                return new ResponseData<dynamic>() { code = RespondCode.Ok, msg = "成功", data = student };
+            }
+            catch (Exception ex)
+            {
+                await _dingDing.SendBotMsg($"OpenApi,{Environment.GetEnvironmentVariable("Option:Location")} OpenApiService/GetLoginStuInfo()   参数:学生id集合:{_ids},school:{school},json:{json.ToJsonString()} \n  {ex.Message}\n{ex.StackTrace}", GroupNames.成都开发測試群組);
+                return new ResponseData<dynamic>() { code = RespondCode.Error, msg = "服务器错误" };
+            }
+        }
     }
 }