Переглянути джерело

查找某一个能力点相同订阅的教师

CrazyIter_Bin 3 роки тому
батько
коміт
07d0e77ed5

+ 40 - 2
TEAMModelOS.SDK/Models/Service/GroupListService.cs

@@ -14,8 +14,9 @@ using Azure.Messaging.ServiceBus;
 using Microsoft.Extensions.Configuration;
 using TEAMModelOS.SDK.Models.Service;
 using System.Text.RegularExpressions;
+using TEAMModelOS.SDK.Models;
 
-namespace TEAMModelOS.SDK.Models
+namespace TEAMModelOS.SDK
 {
     public class GroupListService
     {
@@ -571,7 +572,44 @@ namespace TEAMModelOS.SDK.Models
             }
             return (members,groupLists);
         }
-
+        public static async Task< List<RGroupList>  > GetGroupListMemberByType(CosmosClient client,string type, List<string> scopes, string school, DingDing _dingDing)
+        {
+            StringBuilder sql = new StringBuilder($"SELECT distinct value(c) FROM c where c.type='{type}'");
+            
+            Dictionary<string, List<RGroupList>> groups = new Dictionary<string, List<RGroupList>>();
+            if (scopes.Contains("school"))
+            {
+                if (!string.IsNullOrEmpty(school))
+                {
+                    List<RGroupList> groupLists= new List<RGroupList>();
+                    await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<RGroupList>(queryText: sql.ToString(),
+                    requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"GroupList-{school}") }))
+                    {
+                        groupLists.Add(item);
+                    }
+                    groups.Add("School", groupLists);
+                }
+            }
+            else if (scopes.Contains("private")) {
+                List<RGroupList> groupLists = new List<RGroupList>();
+                await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<RGroupList>(queryText: sql.ToString(),
+                        requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"GroupList") }))
+                {
+                    groupLists.Add(item);
+                }
+                groups.Add("Teacher", groupLists);
+            }
+            foreach (var item in groups)
+            {
+                var list = item.Value.GroupBy(x => x.type).Select(y => new { key = y.Key, list = y.ToList() });
+                foreach (var group in list)
+                {
+                    (List<RGroupList> rgroups, List<RMember> rmembers) = await GetGroupListMemberInfo(client, group.key, group.list, item.Key, _dingDing);
+                }
+            }
+            var  lists= groups.SelectMany(x => x.Value).ToList() ;
+            return lists;
+        }
         public static async Task<(List<RGroupList> groups, List<RMember> members)> GetGroupListMemberInfo(CosmosClient client, string type, List<RGroupList> groups, string groupTbname, DingDing _dingDing)
         {
 

+ 40 - 0
TEAMModelOS/Controllers/Research/AbilitySubController.cs

@@ -641,6 +641,46 @@ namespace TEAMModelOS.Controllers
             }
             return Ok();
         }
+        /// <summary>
+        /// 获取订阅了相同的能力点的教师。
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        [ProducesDefaultResponseType]
+        [HttpPost("get-same-subs")]
+        [AuthToken(Roles = "teacher,admin,area")]
+        public async Task<IActionResult> GetSameSubs(JsonElement request)
+        {
+            // (string id, _, _, string school) = HttpContext.GetAuthTokenInfo();
+            if (!request.TryGetProperty("school", out JsonElement _school))
+            {
+                return Ok(new { error = 400 });
+            }
+           
+            var client = _azureCosmos.GetCosmosClient();
+            if (!request.TryGetProperty("tmdid", out JsonElement _tmdid)) return Ok(new { error = 400 });
+            if (!request.TryGetProperty("abilityId", out JsonElement _abilityId)) return Ok(new { error = 400 });
+            List<RGroupList> yxtrain= await  GroupListService.GetGroupListMemberByType(client, "yxtrain", new List<string> { "school" }, $"{_school}",_dingDing);
+            //排除自己,如果不是组长则不排除
+            List<AbilitySub> abilitySubs = new List<AbilitySub>();
+            if (yxtrain.IsNotEmpty()) {
+                var members = yxtrain.SelectMany(m => m.members).ToList();
+                List<RMember> tmdids = members.FindAll(x => x.type == 1).Where((x, i) => members.FindAll(x => x.type == 1).FindIndex(n => n.id.Equals(x.id)) == i).ToList();
+                foreach (var tmdid in tmdids) {
+                    if (tmdid.id.Equals($"{_tmdid}")) {
+                        continue;
+                    }
+                    try {
+                        var sub = await _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", "Teacher").ReadItemAsync<AbilitySub>($"{_abilityId}", new PartitionKey($"AbilitySub-{_school}-{tmdid}"));
+                        abilitySubs.Add(sub);
+                    } catch (CosmosException ex) {
+                        continue;
+                    }
+                }
+            }
+            return Ok(new { abilitySubs });
+        }
+
         /// <summary>
         /// 获取本小组的订阅
         /// </summary>