Bläddra i källkod

课纲数据结构调整

CrazyIter_Bin 4 år sedan
förälder
incheckning
d114999323

+ 4 - 1
TEAMModelOS.SDK/Models/Cosmos/Common/Inner/SyllabusTree.cs

@@ -23,7 +23,10 @@ namespace TEAMModelOS.SDK.Models
         /// 册别的id
         /// </summary>
         public string volumeId { get; set; }
-       // public string code { get; set; }
+        /// <summary>
+        /// 校本课纲时传入 学校编码,私人课纲时传入醍摩豆ID
+        /// </summary>
+        public string codeval { get; set; }
         public string scope { get; set; }
         public  List<SyllabusTree>  trees  { get; set; }
 

+ 1 - 0
TEAMModelOS.SDK/Models/Cosmos/Common/Syllabus.cs

@@ -20,6 +20,7 @@ namespace TEAMModelOS.SDK.Models
         [Required(ErrorMessage = "{0} 必须填写")]
         public List<Tnode> children { get; set; }
         public string volumeId { get; set; }
+        public string codeval { get; set; }
         public List<SyllabusAuth> auth { get; set; } = new List<SyllabusAuth>();
         public string scope { get; set; }
 }

+ 0 - 15
TEAMModelOS/Controllers/Syllabus/CoeditController.cs

@@ -1,15 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
-
-namespace TEAMModelOS.Controllers
-{
-    public class CoeditController
-    {
-        public CoeditController()
-        {
-
-        }
-    }
-}

+ 14 - 14
TEAMModelOS/Controllers/Syllabus/ShareController.cs

@@ -76,7 +76,7 @@ namespace TEAMModelOS.Controllers
                 //需要判断id== req.issuer  才能进行授权操作
                 if (request.scope.Equals("school"))
                 {
-                    Syllabus syllabusD = await client.GetContainer("TEAMModelOS", "School").ReadItemAsync<Syllabus>(request.syllabusId, new PartitionKey($"Syllabus-{request.volumeId}"));
+                    Syllabus syllabusD = await client.GetContainer("TEAMModelOS", "School").ReadItemAsync<Syllabus>(request.syllabusId, new PartitionKey($"Syllabus-{request.school}"));
                     if (request.opt == "del")
                     {
                         if (syllabusD.auth.IsNotEmpty())
@@ -90,9 +90,9 @@ namespace TEAMModelOS.Controllers
                             syllabusAuths.ForEach(x => {
                                 syllabusD.auth.Remove(x);
                             });
-                            await client.GetContainer("TEAMModelOS", "School").ReplaceItemAsync<Syllabus>(syllabusD, request.syllabusId, new PartitionKey($"Syllabus-{request.volumeId}"));
+                            await client.GetContainer("TEAMModelOS", "School").ReplaceItemAsync<Syllabus>(syllabusD, request.syllabusId, new PartitionKey($"Syllabus-{request.school}"));
                             request.tmdInfo.ForEach(async x => {
-                                await client.GetContainer("TEAMModelOS", "Teacher").DeleteItemAsync<Share>(request.syllabusId, new PartitionKey($"Share-{x.tmdid}"));
+                                await client.GetContainer("TEAMModelOS", "Teacher").DeleteItemAsync<Share>(request.syllabusId, new PartitionKey($"Share-{request.type}-{x.tmdid}"));
                             });
 
                         }
@@ -119,14 +119,14 @@ namespace TEAMModelOS.Controllers
                             var location = _option.Location;
                             var code = await _notificationService.SendNotification(clientID, clientSecret, location, url, notification);
                         });
-                        await client.GetContainer("TEAMModelOS", "School").UpsertItemAsync<Syllabus>(syllabus, new PartitionKey($"Syllabus-{request.volumeId}"));
+                        await client.GetContainer("TEAMModelOS", "School").UpsertItemAsync<Syllabus>(syllabus, new PartitionKey($"Syllabus-{request.school}"));
 
 
                     }
                 }
                 else if (request.scope.Equals("private"))
                 {
-                    Syllabus syllabusD = await client.GetContainer("TEAMModelOS", "Teacher").ReadItemAsync<Syllabus>(request.syllabusId, new PartitionKey($"Syllabus-{request.volumeId}"));
+                    Syllabus syllabusD = await client.GetContainer("TEAMModelOS", "Teacher").ReadItemAsync<Syllabus>(request.syllabusId, new PartitionKey($"Syllabus-{request.issuer}"));
                     if (request.opt == "del")
                     {
                         if (syllabusD.auth.IsNotEmpty())
@@ -141,9 +141,9 @@ namespace TEAMModelOS.Controllers
                             syllabusAuths.ForEach(x => {
                                 syllabusD.auth.Remove(x);
                             });
-                            await client.GetContainer("TEAMModelOS", "Teacher").ReplaceItemAsync<Syllabus>(syllabusD, request.syllabusId, new PartitionKey($"Syllabus-{request.volumeId}"));
+                            await client.GetContainer("TEAMModelOS", "Teacher").ReplaceItemAsync<Syllabus>(syllabusD, request.syllabusId, new PartitionKey($"Syllabus-{request.issuer}"));
                             request.tmdInfo.ForEach(async x => {
-                                await client.GetContainer("TEAMModelOS", "Teacher").DeleteItemAsync<Share>(request.syllabusId, new PartitionKey($"Share-{x.tmdid}"));
+                                await client.GetContainer("TEAMModelOS", "Teacher").DeleteItemAsync<Share>(request.syllabusId, new PartitionKey($"Share-{request.type}-{x.tmdid}"));
                             });
                         }
                     }
@@ -153,7 +153,7 @@ namespace TEAMModelOS.Controllers
                         shares.ForEach(async x => {
                             await client.GetContainer("TEAMModelOS", "Teacher").UpsertItemAsync<Share>(x, new PartitionKey($"{x.code}"));
                         });
-                        await client.GetContainer("TEAMModelOS", "Teacher").UpsertItemAsync<Syllabus>(syllabusD, new PartitionKey($"Syllabus-{request.volumeId}"));
+                        await client.GetContainer("TEAMModelOS", "Teacher").UpsertItemAsync<Syllabus>(syllabusD, new PartitionKey($"Syllabus-{request.issuer}"));
                     }
                 }
                 return Ok(new { code = 200 });
@@ -275,7 +275,7 @@ namespace TEAMModelOS.Controllers
                 {
                     try 
                     { 
-                        syllabus = await client.GetContainer("TEAMModelOS", "School").ReadItemAsync<Syllabus>($"{id}", new PartitionKey($"Syllabus-{share.volumeId}"));
+                        syllabus = await client.GetContainer("TEAMModelOS", "School").ReadItemAsync<Syllabus>($"{id}", new PartitionKey($"Syllabus-{share.school}"));
                     } catch {
                         //仅处理差不到数据的情况
                     }
@@ -284,7 +284,7 @@ namespace TEAMModelOS.Controllers
                 {
                     try 
                     {
-                        syllabus = await client.GetContainer("TEAMModelOS", "Teacher").ReadItemAsync<Syllabus>($"{id}", new PartitionKey($"Syllabus-{share.volumeId}"));
+                        syllabus = await client.GetContainer("TEAMModelOS", "Teacher").ReadItemAsync<Syllabus>($"{id}", new PartitionKey($"Syllabus-{share.issuer}"));
                     } catch 
                     {
                     }
@@ -310,11 +310,11 @@ namespace TEAMModelOS.Controllers
                     }
                     if (share.scope == "school")
                     {
-                        syllabus = await client.GetContainer("TEAMModelOS", "School").ReplaceItemAsync<Syllabus>(syllabus, $"{id}", new PartitionKey($"Syllabus-{share.volumeId}"));
+                        syllabus = await client.GetContainer("TEAMModelOS", "School").ReplaceItemAsync<Syllabus>(syllabus, $"{id}", new PartitionKey($"Syllabus-{share.school}"));
                     }
                     else if (share.scope == "private")
                     {
-                        syllabus = await client.GetContainer("TEAMModelOS", "Teacher").ReplaceItemAsync<Syllabus>(syllabus, $"{id}", new PartitionKey($"Syllabus-{share.volumeId}"));
+                        syllabus = await client.GetContainer("TEAMModelOS", "Teacher").ReplaceItemAsync<Syllabus>(syllabus, $"{id}", new PartitionKey($"Syllabus-{share.issuer}"));
                     }
                 }
                 return Ok(new { status = 200 });
@@ -427,7 +427,7 @@ namespace TEAMModelOS.Controllers
                 {
                     code = request.school;
                     var queryslt = $"SELECT  value(c) FROM c where c.id in ({sidSql})";
-                    await foreach (var item in client.GetContainer("TEAMModelOS", "School").GetItemQueryIterator<Syllabus>(queryText: queryslt, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Syllabus-{request.volumeId}") }))
+                    await foreach (var item in client.GetContainer("TEAMModelOS", "School").GetItemQueryIterator<Syllabus>(queryText: queryslt, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Syllabus-{request.school}") }))
                     {
                         List<SyllabusTree> trees = SyllabusService.ListToTree(item.children);
                         SyllabusTreeNode tree = new SyllabusTreeNode() { id = item.id, scope = item.scope, trees = trees, volumeId = item.volumeId, auth = item.auth };
@@ -441,7 +441,7 @@ namespace TEAMModelOS.Controllers
                 {
                     code = request.issuer;
                     var queryslt = $"SELECT  value(c) FROM c where c.id in ({sidSql})";
-                    await foreach (var item in client.GetContainer("TEAMModelOS", "Teacher").GetItemQueryIterator<Syllabus>(queryText: queryslt, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Syllabus-{request.volumeId}") }))
+                    await foreach (var item in client.GetContainer("TEAMModelOS", "Teacher").GetItemQueryIterator<Syllabus>(queryText: queryslt, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Syllabus-{request.issuer}") }))
                     {
                         List<SyllabusTree> trees = SyllabusService.ListToTree(item.children);
                         SyllabusTreeNode tree = new SyllabusTreeNode() { id = item.id, scope = item.scope, trees = trees, volumeId = item.volumeId, auth = item.auth };

+ 20 - 18
TEAMModelOS/Controllers/Syllabus/SyllabusController.cs

@@ -76,7 +76,7 @@ namespace TEAMModelOS.Controllers
                     {
                         try
                         {
-                            syllabus = await _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", "School").ReadItemAsync<Syllabus>(syllabusTree.id, new Azure.Cosmos.PartitionKey($"Syllabus-{syllabusTree.volumeId}"));
+                            syllabus = await _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", "School").ReadItemAsync<Syllabus>(syllabusTree.id, new Azure.Cosmos.PartitionKey($"Syllabus-{syllabusTree.codeval}"));
                         }
                         catch
                         {
@@ -86,25 +86,25 @@ namespace TEAMModelOS.Controllers
                             syllabus = new Syllabus();
                             syllabus.id = syllabusTree.id;
                             syllabus.children = nodes;
-                            syllabus.code = $"Syllabus-{syllabusTree.volumeId}";
+                            syllabus.code = $"Syllabus-{syllabusTree.codeval}";
                             syllabus.pk = "Syllabus";
                             syllabus.ttl = -1;
                             syllabus.volumeId = syllabusTree.volumeId;
                             syllabus.scope = syllabusTree.scope;
-                            await _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", "School").CreateItemAsync<Syllabus>(syllabus, new Azure.Cosmos.PartitionKey($"Syllabus-{syllabusTree.volumeId}"));
+                            await _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", "School").CreateItemAsync<Syllabus>(syllabus, new Azure.Cosmos.PartitionKey($"Syllabus-{syllabusTree.codeval}"));
                         }
                         else
                         {
                             syllabus.children = nodes;
                             syllabusTree.auth = syllabus.auth;
-                            await _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", "School").ReplaceItemAsync<Syllabus>(syllabus,syllabus.id, new Azure.Cosmos.PartitionKey($"Syllabus-{syllabusTree.volumeId}"));
+                            await _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", "School").ReplaceItemAsync<Syllabus>(syllabus,syllabus.id, new Azure.Cosmos.PartitionKey($"Syllabus-{syllabusTree.codeval}"));
                         }
 
                     }
                     else {
                         try
                         {
-                            syllabus = await _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", "Teacher").ReadItemAsync<Syllabus>(syllabusTree.id, new Azure.Cosmos.PartitionKey($"Syllabus-{syllabusTree.volumeId}"));
+                            syllabus = await _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", "Teacher").ReadItemAsync<Syllabus>(syllabusTree.id, new Azure.Cosmos.PartitionKey($"Syllabus-{syllabusTree.codeval}"));
                         }
                         catch
                         {
@@ -114,18 +114,18 @@ namespace TEAMModelOS.Controllers
                             syllabus = new Syllabus();
                             syllabus.id = syllabusTree.id;
                             syllabus.children = nodes;
-                            syllabus.code = $"Syllabus-{syllabusTree.volumeId}";
+                            syllabus.code = $"Syllabus-{syllabusTree.codeval}";
                             syllabus.pk = "Syllabus";
                             syllabus.ttl = -1;
                             syllabus.volumeId = syllabusTree.volumeId;
                             syllabus.scope = syllabusTree.scope;
-                            await _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", "Teacher").CreateItemAsync<Syllabus>(syllabus, new Azure.Cosmos.PartitionKey($"Syllabus-{syllabusTree.volumeId}"));
+                            await _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", "Teacher").CreateItemAsync<Syllabus>(syllabus, new Azure.Cosmos.PartitionKey($"Syllabus-{syllabusTree.codeval}"));
                         }
                         else
                         {
                             syllabus.children = nodes;
                             syllabusTree.auth = syllabus.auth;
-                            await _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", "Teacher").UpsertItemAsync<Syllabus>(syllabus, new Azure.Cosmos.PartitionKey($"Syllabus-{syllabusTree.volumeId}"));
+                            await _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", "Teacher").UpsertItemAsync<Syllabus>(syllabus, new Azure.Cosmos.PartitionKey($"Syllabus-{syllabusTree.codeval}"));
                         }
                     }
                 }
@@ -134,7 +134,7 @@ namespace TEAMModelOS.Controllers
                     syllabusTree.id = id;
                     Syllabus syllabus = new Syllabus {
                         id = id,
-                        code = $"Syllabus-{syllabusTree.volumeId}",
+                        code = $"Syllabus-{syllabusTree.codeval}",
                         pk = "Syllabus",
                         ttl = -1,
                         volumeId=syllabusTree.volumeId,
@@ -142,9 +142,9 @@ namespace TEAMModelOS.Controllers
                         scope = syllabusTree.scope
                     };
                     if (syllabusTree.scope == "school") {
-                        await _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", "School").CreateItemAsync<Syllabus>(syllabus, new Azure.Cosmos.PartitionKey($"Syllabus-{syllabusTree.volumeId}"));
+                        await _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", "School").CreateItemAsync<Syllabus>(syllabus, new Azure.Cosmos.PartitionKey($"Syllabus-{syllabusTree.codeval}"));
                     } else {
-                        await _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", "Teacher").CreateItemAsync<Syllabus>(syllabus, new Azure.Cosmos.PartitionKey($"Syllabus-{syllabusTree.volumeId}"));
+                        await _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", "Teacher").CreateItemAsync<Syllabus>(syllabus, new Azure.Cosmos.PartitionKey($"Syllabus-{syllabusTree.codeval}"));
                     }
                 }
             }
@@ -174,25 +174,27 @@ namespace TEAMModelOS.Controllers
                 if (scope.ToString().Equals("school"))
                 {
                       volume = await client.GetContainer("TEAMModelOS", "School").ReadItemAsync<Volume>($"{volumeId}", new PartitionKey($"{volumeCode}"));
-                      await foreach (var item in client.GetContainer("TEAMModelOS", "School").GetItemQueryIterator<Syllabus>(queryText: $"select value(c) from c ",
-                    requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"Syllabus-{volumeId}") }))
+                      await foreach (var item in client.GetContainer("TEAMModelOS", "School").GetItemQueryIterator<Syllabus>(queryText: $"select value(c) from c where c.volumeId='{volumeId}'",
+
+                    requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"Syllabus-{volume.school}") }))
                     {
                         List<SyllabusTree> trees = SyllabusService.ListToTree(item.children);
-                        SyllabusTreeNode tree = new SyllabusTreeNode() { id = item.id, scope =item.scope, trees = trees ,volumeId=item.volumeId,auth=item.auth};
+                        SyllabusTreeNode tree = new SyllabusTreeNode() { id = item.id, scope =item.scope, trees = trees ,volumeId=item.volumeId,auth=item.auth,codeval=volume.school};
                         treeNodes.Add(tree);
                     }
                 }
                 else
                 {
                     volume = await client.GetContainer("TEAMModelOS", "Teacher").ReadItemAsync<Volume>($"{volumeId}", new PartitionKey($"{volumeCode}"));
-                    await foreach (var item in client.GetContainer("TEAMModelOS", "Teacher").GetItemQueryIterator<Syllabus>(queryText: $"select value(c) from c ",
-                     requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"Syllabus-{volumeId}") }))
+                    await foreach (var item in client.GetContainer("TEAMModelOS", "Teacher").GetItemQueryIterator<Syllabus>(queryText: $"select value(c) from c where c.volumeId='{volumeId}'",
+                     requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"Syllabus-{volume.creatorId}") }))
                     {
                         List<SyllabusTree> trees = SyllabusService.ListToTree(item.children);
-                        SyllabusTreeNode tree = new SyllabusTreeNode() { id = item.id, scope = item.scope, trees = trees, volumeId = item.volumeId, auth = item.auth };
+                        SyllabusTreeNode tree = new SyllabusTreeNode() { id = item.id, scope = item.scope, trees = trees, volumeId = item.volumeId, auth = item.auth,codeval=volume.creatorId };
                         treeNodes.Add(tree);
                     }
                 }
+                //对课纲树形结构排序
                 if (volume.syllabusIds.IsNotEmpty())
                 {
                     volume.syllabusIds.ForEach(x =>
@@ -220,7 +222,7 @@ namespace TEAMModelOS.Controllers
         }
 
         /*
-            {"id":"章节id","code":"册别id","scope":"school/private"}
+            {"id":"章节id","code":"学校编码/醍摩豆id","scope":"school/private"}
          */
 
         /// <summary>

+ 5 - 5
TEAMModelOS/Controllers/Syllabus/VolumeController.cs

@@ -61,12 +61,12 @@ namespace TEAMModelOS.Controllers
                 if (!request.TryGetProperty("code", out JsonElement code)) return BadRequest();
                 if (!request.TryGetProperty("scope", out JsonElement scope)) return BadRequest();
                 var client = _azureCosmos.GetCosmosClient();
-                string sql = "select value(c) from c ";
+                string sql =$"select value(c) from c where c.volumeId='{id}'";
                 List<Syllabus> syllabus = new List<Syllabus>();
                 if (scope.ToString().Equals("school"))
                 {
                     var response = await client.GetContainer("TEAMModelOS", "School").DeleteItemStreamAsync(id.ToString(), new PartitionKey($"Volume-{code}"));
-                    await foreach (var item in client.GetContainer("TEAMModelOS", "School").GetItemQueryIterator<Syllabus>(queryText: sql, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Syllabus-{id}") })) {
+                    await foreach (var item in client.GetContainer("TEAMModelOS", "School").GetItemQueryIterator<Syllabus>(queryText: sql, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Syllabus-{code}") })) {
                         syllabus.Add(item);
                     }
                     if (syllabus.IsNotEmpty())
@@ -84,14 +84,14 @@ namespace TEAMModelOS.Controllers
                                 }
                             }
                         }
-                        var sresponse = await client.GetContainer("TEAMModelOS", "School").DeleteItemsStreamAsync(syllabus.Select(x => x.id).ToList(), $"Syllabus-{id}");
+                        var sresponse = await client.GetContainer("TEAMModelOS", "School").DeleteItemsStreamAsync(syllabus.Select(x => x.id).ToList(), $"Syllabus-{code}");
                     }
                     return Ok(new { code = response.Status });
                 }
                 else
                 {
                     var response = await client.GetContainer("TEAMModelOS", "Teacher").DeleteItemStreamAsync(id.ToString(), new PartitionKey($"Volume-{code}"));
-                    await foreach (var item in client.GetContainer("TEAMModelOS", "Teacher").GetItemQueryIterator<Syllabus>(queryText: sql, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Syllabus-{id}") }))
+                    await foreach (var item in client.GetContainer("TEAMModelOS", "Teacher").GetItemQueryIterator<Syllabus>(queryText: sql, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Syllabus-{code}") }))
                     {
                         syllabus.Add(item);
                     }
@@ -116,7 +116,7 @@ namespace TEAMModelOS.Controllers
                                 }
                             }
                         }
-                        var sresponse = await client.GetContainer("TEAMModelOS", "Teacher").DeleteItemsStreamAsync(syllabus.Select(x => x.id).ToList(), $"Syllabus-{id}");
+                        var sresponse = await client.GetContainer("TEAMModelOS", "Teacher").DeleteItemsStreamAsync(syllabus.Select(x => x.id).ToList(), $"Syllabus-{code}");
                     }
                     return Ok(new { code = response.Status });
                 }