CrazyIter_Bin 1 年之前
父節點
當前提交
94fd6d0e9d

+ 7 - 1
TEAMModelOS.SDK/Models/Cosmos/Common/GroupList.cs

@@ -487,7 +487,13 @@ namespace TEAMModelOS.SDK.Models
         public string stulist { get; set; }
         public string teacherId { get; set; }
     }
-    
+    public record IdCodeNameCount
+    {
+        public string id { get; set; }
+        public string code { get; set; }
+        public string name { get; set; }
+        public int count { get; set; }
+    }
     public class IdNameCode
     {
         public string id { get; set; }

+ 1 - 0
TEAMModelOS.SDK/Models/Cosmos/School/Elegant.cs

@@ -45,6 +45,7 @@ namespace TEAMModelOS.SDK.Models
         /// school, course,class
         /// </summary>
         public string type { get; set; }
+        public string periodId { get; set; }
         public List<string> classes { get; set; } = new List<string>();
      
         public List<Attachment> attachments { get; set; } = new List<Attachment>();

+ 2 - 0
TEAMModelOS.sln

@@ -13,6 +13,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TEAMModelBI", "TEAMModelBI\
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TEAMModelOS.TEST", "TEAMModelOS.TEST\TEAMModelOS.TEST.csproj", "{335938F6-8418-497A-AB41-CDD006FB8FD6}"
 EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "TEAMModelContest", "TEAMModelContest", "{43694D93-19B4-4AF6-8A37-2B2073E7014C}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU

+ 42 - 1
TEAMModelOS/Controllers/Client/HiTAControlller.cs

@@ -128,7 +128,42 @@ namespace TEAMModelOS.Controllers.Client
                 return Ok(new { error = 400, msg = "参数错误" });
             }
         }
+        [ProducesDefaultResponseType]
+        [HttpGet("get-school-knowledge")]
+        public async Task<IActionResult> GetSchoolKnowledge([FromQuery] HiTAJoinSchool join)
+        {
+            return Ok();
+        }
+        [ProducesDefaultResponseType]
+        [HttpGet("get-school-data")]
+        public async Task<IActionResult> GetSchoolData([FromQuery] HiTAJoinSchool join)
+        {
+            IList<IdCodeNameCount> periodSubjects = new List<IdCodeNameCount>(); 
+            School school=  await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).ReadItemAsync<School>(join.school, new PartitionKey("Base"));
+            foreach(var period in school.period) 
+            {
+                foreach (var subject in period.subjects) {
+                    string name = subject.name;
+                    if (school.period.Count>1) {
+                        name=$"{period.name} {subject.name}";    
+                    }
+                    string key =   $"Knowledge:Count:{school.id}-{subject.id}";
+                    int pcount = 0;
+                    var value=  _azureRedis.GetRedisClient(8).HashGet(key,period.id) ;
+                    if (value!=default  && !value.IsNullOrEmpty) {
+                        var json = value.ToString().ToObject<JsonElement>();
+                       
+                        if (json.TryGetProperty("pcount", out JsonElement _pcount)  && int.TryParse($"{_pcount}",out  pcount)) { 
+                            
+                        }
+                    }
+                    periodSubjects.Add(new IdCodeNameCount { id=period.id,code =subject.id,name=name,count = pcount });
+                }
+            }
+            return Ok(new { periodSubjects });
+        }
 
+        
         [ProducesDefaultResponseType]
         [HttpGet("check-login")]
         public async Task<IActionResult> CheckLogin([FromQuery] HiTAJoinSchool join)
@@ -146,7 +181,13 @@ namespace TEAMModelOS.Controllers.Client
                         { "account",id },
                         { "nonce",Guid.NewGuid().ToString()}
                         }, location, _configuration);
-                return Ok(implicit_token);
+                IEnumerable<dynamic> schools= new List<dynamic>();
+                var response =  await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).ReadItemStreamAsync(id, new PartitionKey("Base"));
+                if (response.Status==200) { 
+                    Teacher teacher= JsonDocument.Parse(response.Content).RootElement.ToObject<Teacher>();
+                     schools= teacher.schools.Where(x=>x.status.Equals("join")).Select(x => new { id = x.schoolId, name = x.name });
+                }
+                return Ok(new { implicit_token ,schools});
             }
             return Ok();
         }

+ 31 - 4
TEAMModelOS/Controllers/School/ElegantController.cs

@@ -14,6 +14,7 @@ using System.Threading.Tasks;
 using Azure;
 using Azure.Cosmos;
 using Azure.Storage.Sas;
+using DocumentFormat.OpenXml.Drawing.Charts;
 using HTEXLib.COMM.Helpers;
 using Microsoft.AspNetCore.Authorization;
 using Microsoft.AspNetCore.Cryptography.KeyDerivation;
@@ -68,6 +69,8 @@ namespace TEAMModelOS.Controllers
 #endif
         public async Task<IActionResult> Statistics(JsonElement  json)
         {
+            json.TryGetProperty("periodId", out JsonElement _periodId);
+            json.TryGetProperty("periodType", out JsonElement _periodType);
             if (!json.TryGetProperty("scope", out JsonElement _scope))
             {
                 return BadRequest();
@@ -76,16 +79,26 @@ namespace TEAMModelOS.Controllers
             {
                 return BadRequest();
             }
-            List<IdNameCode> schools= new List<IdNameCode>();
+            List<School> schools= new List<School>();
             List<Elegant> elegants = new List<Elegant>();
+            IEnumerable<string> periodIds = new List<string>();
             if ($"{_scope}".Equals("area"))
             {
-                string sql = $"select c.name ,c.picture, c.id  from c where c.areaId ='{_code}'";
-                var result = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).GetList<IdNameCode>(sql, "Base");
+                string sql = $"select value c  from c where c.areaId ='{_code}'";
+                var result = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).GetList<School>(sql, "Base");
                 if (result.list.IsNotEmpty())
                 {
+                    string sqlPeriod = string.Empty;
+                    if (!string.IsNullOrWhiteSpace($"{_periodType}")) {
+                        periodIds = result.list.SelectMany(x => x.period).Where(z => !string.IsNullOrWhiteSpace(z.periodType)  && z.periodType.Equals($"{_periodType}")).Select(x => x.id);
+                        if (periodIds!=null && periodIds.Count()>0)
+                        {
+                            sqlPeriod=$" and c.periodId in ({string.Join(",",periodIds.Select(x=>$"'{x}'"))})";
+                        }
+                    }
+                   
                     schools.AddRange(result.list);
-                    string sqlE = $"select value c from c where c.school in ({string.Join(",", result.list.Select(z => $"'{z.id}'"))}) and c.pk='Elegant' and contains(c.code,'Elegant-')";
+                    string sqlE = $"select value c from c where c.school in ({string.Join(",", result.list.Select(z => $"'{z.id}'"))}) {sqlPeriod} and c.pk='Elegant' and contains(c.code,'Elegant-')";
                     var resultE = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).GetList<Elegant>(sqlE);
                     if (resultE.list.IsNotEmpty())
                     {
@@ -96,6 +109,9 @@ namespace TEAMModelOS.Controllers
             else if ($"{_scope}".Equals("school"))
             {
                 string sqlE = $"select value c from c ";
+                if (!string.IsNullOrWhiteSpace($"{_periodId}")) {
+                    sqlE=$"{sqlE}  where c.periodId='{_periodId}'";
+                }
                 var resultE = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).GetList<Elegant>(sqlE,$"Elegant-{_code}");
                 if (resultE.list.IsNotEmpty())
                 {
@@ -105,6 +121,17 @@ namespace TEAMModelOS.Controllers
             List<ClassifiedItemSchool > schoolDatas= new List<ClassifiedItemSchool>();
             if (schools.IsNotEmpty()) {
                 foreach (var school in schools) {
+                    if (periodIds.Count()>0) {
+                        bool has = false;
+                        foreach (var period in school.period) {
+                            if (periodIds.Contains(period.id)) {
+                                has=true;
+                            }
+                        }
+                        if (!has) {
+                            continue;
+                        }
+                    }
                     var esSchool = elegants.FindAll(z => z.school.Equals(school.id));
                     List<ClassifiedItem> itemschool = ClassifyHierarchy(esSchool);
                     if (!itemschool.Select(z => z.id).Contains("德育风采"))

+ 27 - 0
TEAMModelOS/Controllers/XTest/FixDataController.cs

@@ -46,6 +46,7 @@ using DinkToPdf.Contracts;
 using DocumentFormat.OpenXml.Office2010.Excel;
 using TEAMModelOS.SDK.Models.Cosmos.Student;
 using MathNet.Numerics.RootFinding;
+using DocumentFormat.OpenXml.VariantTypes;
 
 namespace TEAMModelOS.Controllers
 {
@@ -80,6 +81,32 @@ namespace TEAMModelOS.Controllers
            
             _converter = converter;
         }
+
+        [ProducesDefaultResponseType]
+        [HttpPost("fix-elegant")]
+        public async Task<IActionResult> FixElegant(JsonElement json)
+        {
+            string sqlE = $"select value c from c where array_length(c.classes)>0 and  c.pk='Elegant' and contains(c.code,'Elegant-')";
+            var resultE = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).GetList<Elegant>(sqlE);
+            if (resultE .list.IsNotEmpty()) {
+                List<Class> classes = new List<Class>();
+                string classSQL = $"select value c from c where c.id in({string.Join(",",resultE.list.Where(v=>v.classes.Count>0).Select(x => x.classes.First()).Select(z =>$"'{z}'"))}) and  c.pk='Class' and contains(c.code,'Class-')";
+                var resultC = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).GetList<Class>(classSQL);
+                if (resultC.list.IsNotEmpty()) {
+                    classes.AddRange(resultC.list);
+                }
+                foreach (var item in resultE.list)
+                {
+                    var classId = item.classes.First();
+                    var  claszz=  classes.Find(x => x.id.Equals(classId));
+                    if (claszz!= null) {
+                        item.periodId=claszz.periodId;
+                        await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).UpsertItemAsync(item, new PartitionKey(item.code));
+                    }
+                }
+            }
+            return Ok();
+        }
         /// <summary>
         ///
         /// </summary>