Li пре 3 година
родитељ
комит
8c58e26fb1
1 измењених фајлова са 54 додато и 38 уклоњено
  1. 54 38
      TEAMModelBI/Controllers/Census/ActivitySticsController.cs

+ 54 - 38
TEAMModelBI/Controllers/Census/ActivitySticsController.cs

@@ -11,6 +11,7 @@ using TEAMModelOS.SDK.DI;
 using TEAMModelOS.SDK.Models;
 using System.Text.Json;
 using TEAMModelBI.Tool;
+using System.Text;
 
 namespace TEAMModelBI.Controllers.Census
 {
@@ -42,8 +43,10 @@ namespace TEAMModelBI.Controllers.Census
         public async Task<IActionResult> GetCount(JsonElement jsonElement) 
         {
             jsonElement.TryGetProperty("tmdId", out JsonElement tmdId);
+            if(!jsonElement.TryGetProperty("term", out JsonElement term)) return BadRequest();
+            var (start, end) = DateTimeHeloer.GetTermStartOrEnd(DateTime.Now);
             var cosmosClient = _azureCosmos.GetCosmosClient();
-            List<KeyValuePair<string, object>> typeCount = new List<KeyValuePair<string, object>>();
+            List<object> activityCount = new List<object>();
 
             if (!string.IsNullOrEmpty($"{tmdId}"))
             {
@@ -59,69 +62,73 @@ namespace TEAMModelBI.Controllers.Census
                     }
                 }
 
-                foreach (var type in types)
+                foreach (var itemId in schoolIds)
                 {
-                    long acount = 0;
-                    List<SchoolActivity> schoolActivities = new List<SchoolActivity>();
-                    foreach (var itemId in schoolIds)
+                    School school = new();
+                    try
                     {
-                        School school = new();
-                        try
-                        {
-                            school = await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").ReadItemAsync<School>(itemId, new PartitionKey("Base"));
-                        }
-                        catch
-                        {
-                        }
+                        school = await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").ReadItemAsync<School>(itemId, new PartitionKey("Base"));
+                    }
+                    catch
+                    {
+                    }
 
-                        SchoolActivity schoolActivity = new SchoolActivity() { id = itemId, name = school.name != null ? school.name : itemId };
+                    ActivityCount tempCount = new ActivityCount() { id = itemId, name = school.name != null ? school.name : itemId };
 
-                        string activitySql = $"SELECT DISTINCT c.id,c.code,c.name FROM c WHERE c.pk='{type}' AND c.school='{itemId}'";
-                        await foreach (var item in cosmosClient.GetContainer(Constant.TEAMModelOS, "Common").GetItemQueryStreamIterator(queryText: activitySql, requestOptions: new QueryRequestOptions() { }))
+
+                    foreach (var type in types)
+                    {
+                        StringBuilder sqlTxt = new StringBuilder($"select COUNT(c.id) AS totals from c where c.pk='{type}' and c.school='{itemId}' ");
+                        if (bool.Parse($"{term}") == true)
+                        {
+                            sqlTxt.Append($" and c.createTime >= {start} and c.createTime <= {end}");
+                        }
+                        long totals = 0;
+                        await foreach (var item in cosmosClient.GetContainer(Constant.TEAMModelOS, "Common").GetItemQueryStreamIterator(queryText: sqlTxt.ToString(), requestOptions: new QueryRequestOptions() { }))
                         {
                             using var json = await JsonDocument.ParseAsync(item.ContentStream);
                             if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
                             {
-                                acount += count.GetInt32();
-                                schoolActivity.total += count.GetInt64();
-                                //foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
-                                //{
-                                //    acount += 1;
-                                //}
+                                foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
+                                {
+                                    totals += obj.GetProperty("totals").GetInt64();
+                                }
                             }
                         }
-                        schoolActivities.Add(schoolActivity);
+                        tempCount.census.Add(new KeyValuePair<object, long>(type, totals));
                     }
-
-                    KeyValuePair<string, object> valuePair = new KeyValuePair<string, object>(type, schoolActivities);
-                    typeCount.Add(valuePair);
+                    activityCount.Add(tempCount);
                 }
+
             }
             else 
             {
                 foreach (var type in types)
                 {
-                    int acount = 0;
-                    string querySql = $"SELECT distinct c.id,c.code,c.name,c.pk FROM c where c.pk='{type}'  ";
-                    await foreach (var item in cosmosClient.GetContainer(Constant.TEAMModelOS, "Common").GetItemQueryStreamIterator(queryText: querySql, requestOptions: new QueryRequestOptions() { }))
+                    long totals = 0;
+                    StringBuilder sqlTxt = new StringBuilder($"SELECT distinct c.id,c.code,c.name,c.pk FROM c where c.pk='{type}' ");
+                    if (bool.Parse($"{term}") == true)
+                    {
+                        sqlTxt.Append($" and c.createTime >= {start} and c.createTime <= {end}");
+                    }
+
+                    await foreach (var item in cosmosClient.GetContainer(Constant.TEAMModelOS, "Common").GetItemQueryStreamIterator(queryText: sqlTxt.ToString(), requestOptions: new QueryRequestOptions() { }))
                     {
                         using var json = await JsonDocument.ParseAsync(item.ContentStream);
                         if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetInt32() > 0)
                         {
-                            acount += count.GetInt32();
-                            //foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
-                            //{
-                            //    acount += 1;
-                            //}
+                            foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
+                            {
+                                totals += obj.GetProperty("totals").GetInt64();
+                            }
                         }
                     }
 
-                    KeyValuePair<string, object> valuePair = new KeyValuePair<string, object>(type, acount);
-                    typeCount.Add(valuePair);
+                    activityCount.Add(new KeyValuePair<string, object>(type, totals));
                 }
             }
 
-            return Ok(new { state = 200, typeCount });
+            return Ok(new { state = 200, activityCount });
         }
 
         /// <summary>
@@ -231,7 +238,7 @@ namespace TEAMModelBI.Controllers.Census
         }
 
         /// <summary>
-        /// 统计当前学期的活动,
+        /// 统计当前学期的活动,传醍摩豆账户则统计该账户当前学期
         /// </summary>
         /// <param name="jsonElement"></param>
         /// <returns></returns>
@@ -326,5 +333,14 @@ namespace TEAMModelBI.Controllers.Census
 
             public long total { get; set; }
         }
+
+        public record ActivityCount 
+        {
+            public string id { get; set; }
+            public string name { get; set; }
+
+            public List<KeyValuePair<object, long>> census { get; set; } = new List<KeyValuePair<object, long>>();
+
+        }
     }
 }