|
@@ -10,6 +10,7 @@ using TEAMModelOS.Models;
|
|
|
using TEAMModelOS.SDK.DI;
|
|
|
using TEAMModelOS.SDK.Models;
|
|
|
using System.Text.Json;
|
|
|
+using TEAMModelBI.Tool;
|
|
|
|
|
|
namespace TEAMModelBI.Controllers.Census
|
|
|
{
|
|
@@ -229,6 +230,95 @@ namespace TEAMModelBI.Controllers.Census
|
|
|
return Ok(new { state = 200, typeCount });
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 统计当前学期的活动,
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="jsonElement"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPost("get-termactivity")]
|
|
|
+ public async Task<IActionResult> GetTermActivity(JsonElement jsonElement)
|
|
|
+ {
|
|
|
+ jsonElement.TryGetProperty("tmdId", out JsonElement tmdId);
|
|
|
+ var cosmosClient = _azureCosmos.GetCosmosClient();
|
|
|
+ List<KeyValuePair<string, object>> typeCount = new List<KeyValuePair<string, object>>();
|
|
|
+
|
|
|
+ var (start, end) = DateTimeHeloer.GetTermStartOrEnd(DateTime.Now);
|
|
|
+
|
|
|
+ if (!string.IsNullOrEmpty($"{tmdId}"))
|
|
|
+ {
|
|
|
+ List<string> schoolIds = new List<string>();
|
|
|
+
|
|
|
+ string schoolSql = $"SELECT DISTINCT REPLACE(c.code,'Teacher-','') AS schoolId,c.code,c.roles,c.id,c.name From c where ARRAY_CONTAINS(c.roles,'assist',true) AND c.pk = 'Teacher' AND c.status = 'join' AND c.id='{tmdId}'";
|
|
|
+
|
|
|
+ await foreach (var item in cosmosClient.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryStreamIterator(queryText: schoolSql, requestOptions: new QueryRequestOptions() { }))
|
|
|
+ {
|
|
|
+ using var json = await JsonDocument.ParseAsync(item.ContentStream);
|
|
|
+ foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
|
|
|
+ {
|
|
|
+ schoolIds.Add(obj.GetProperty("schoolId").GetString());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ foreach (var type in types)
|
|
|
+ {
|
|
|
+ List<SchoolActivity> schoolActivities = new List<SchoolActivity>();
|
|
|
+ foreach (var itemId in schoolIds)
|
|
|
+ {
|
|
|
+ School school = new();
|
|
|
+ try
|
|
|
+ {
|
|
|
+ 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 };
|
|
|
+
|
|
|
+ string activitySql = $"SELECT COUNT(c.id) AS totals FROM c WHERE c.pk='{type}' AND c.school='{itemId}' and c.createTime >= {start} and c.createTime <= {end}";
|
|
|
+ await foreach (var item in cosmosClient.GetContainer(Constant.TEAMModelOS, "Common").GetItemQueryStreamIterator(queryText: activitySql, requestOptions: new QueryRequestOptions() { }))
|
|
|
+ {
|
|
|
+ using var json = await JsonDocument.ParseAsync(item.ContentStream);
|
|
|
+ if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
|
|
|
+ {
|
|
|
+ foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
|
|
|
+ {
|
|
|
+ schoolActivity.total += obj.GetProperty("totals").GetInt64();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ schoolActivities.Add(schoolActivity);
|
|
|
+ }
|
|
|
+
|
|
|
+ KeyValuePair<string, object> valuePair = new KeyValuePair<string, object>(type, schoolActivities);
|
|
|
+ typeCount.Add(valuePair);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ foreach (var type in types)
|
|
|
+ {
|
|
|
+ long acount = 0;
|
|
|
+ string querySql = $"SELECT COUNT(c.id) AS totals FROM c where c.pk='{type}' and c.createTime >= {start} and c.createTime <= {end}";
|
|
|
+ await foreach (var item in cosmosClient.GetContainer(Constant.TEAMModelOS, "Common").GetItemQueryStreamIterator(queryText: querySql, requestOptions: new QueryRequestOptions() { }))
|
|
|
+ {
|
|
|
+ using var json = await JsonDocument.ParseAsync(item.ContentStream);
|
|
|
+ if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetInt32() > 0)
|
|
|
+ {
|
|
|
+ foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
|
|
|
+ {
|
|
|
+ acount += obj.GetProperty("totals").GetInt64();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ KeyValuePair<string, object> valuePair = new KeyValuePair<string, object>(type, acount);
|
|
|
+ typeCount.Add(valuePair);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return Ok(new { state = 200, typeCount });
|
|
|
+ }
|
|
|
+
|
|
|
public record SchoolActivity
|
|
|
{
|
|
|
public string id { get; set; }
|