|
@@ -43,6 +43,106 @@ namespace TEAMModelOS.Controllers
|
|
|
/// <param name="request"></param>
|
|
|
/// <returns></returns>
|
|
|
[ProducesDefaultResponseType]
|
|
|
+ [HttpPost("statistics-area")]
|
|
|
+ [AuthToken(Roles = "teacher,admin,area")]
|
|
|
+ public async Task<IActionResult> StatisticsArea(JsonElement request) {
|
|
|
+ var (userid, _, _, _) = HttpContext.GetAuthTokenInfo();
|
|
|
+ request.TryGetProperty("standard", out JsonElement _standard);
|
|
|
+ string standard = "";
|
|
|
+ if (string.IsNullOrEmpty($"{_standard}"))
|
|
|
+ {
|
|
|
+ HttpContext.Items.TryGetValue("Standard", out object hstandard);
|
|
|
+ standard = $"{hstandard}";
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ standard = $"{_standard}";
|
|
|
+ }
|
|
|
+ var client = _azureCosmos.GetCosmosClient();
|
|
|
+ Area area = null;
|
|
|
+ string sql = $"select value(c) from c where c.standard='{standard}'";
|
|
|
+ await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Normal").GetItemQueryIterator<Area>(queryText: sql,
|
|
|
+ requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Base-Area") }))
|
|
|
+ {
|
|
|
+ area = item;
|
|
|
+ }
|
|
|
+ AreaSetting setting = null;
|
|
|
+ if (area != null)
|
|
|
+ {
|
|
|
+ try
|
|
|
+ {
|
|
|
+ setting = await client.GetContainer(Constant.TEAMModelOS, "Normal").ReadItemAsync<AreaSetting>(area.id, new PartitionKey("AreaSetting"));
|
|
|
+ }
|
|
|
+ catch (CosmosException)
|
|
|
+ {
|
|
|
+ setting = null;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (setting == null)
|
|
|
+ {
|
|
|
+ setting = new AreaSetting
|
|
|
+ {
|
|
|
+ allTime = 50,
|
|
|
+ classTime = 5,
|
|
|
+ submitTime = 15,
|
|
|
+ onlineTime = 20,
|
|
|
+ offlineTime = 10,
|
|
|
+ lessonMinutes = 45,
|
|
|
+ };
|
|
|
+ }
|
|
|
+
|
|
|
+ try
|
|
|
+ {
|
|
|
+ List<TeacherTrain> teacherTrains = new List<TeacherTrain>();
|
|
|
+ List<School> schools = new List<School>();
|
|
|
+ await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<School>(queryText: $"select value(c) from c where c.areaId='{area.id}'", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Base") }))
|
|
|
+ {
|
|
|
+
|
|
|
+ schools.Add(item);
|
|
|
+ }
|
|
|
+ List<Task<List<TeacherTrain>>> trains = new List<Task<List<TeacherTrain>>>();
|
|
|
+ int countArea = 0;
|
|
|
+ int appraiseArea = 0;
|
|
|
+ List<dynamic> schoolInfos= new List<dynamic>();
|
|
|
+ foreach (var school in schools) {
|
|
|
+ int count = 0;
|
|
|
+ int appraise = 0;
|
|
|
+ await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<bool>(queryText: $"select value(ARRAY_CONTAINS( c.permissions,'train-appraise')) from c", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Teacher-{school.id}") }))
|
|
|
+ {
|
|
|
+ if (item)
|
|
|
+ {
|
|
|
+ appraise += 1;
|
|
|
+ appraiseArea += 1;
|
|
|
+
|
|
|
+ }
|
|
|
+ countArea += 1;
|
|
|
+ count += 1;
|
|
|
+ }
|
|
|
+ schoolInfos.Add(new {schoolId=school.id,schoolName =school.name, teacherCount = count, appraiseCount = appraise });
|
|
|
+ //增加评审人员总人数,学习总人数。
|
|
|
+ trains.Add( StatisticsService.StatisticsSchool(school.id, setting, area, client, _dingDing, null));
|
|
|
+ }
|
|
|
+ List<TeacherTrain> [] tasks = await Task.WhenAll(trains);
|
|
|
+ tasks.ToList().ForEach(x => {
|
|
|
+ teacherTrains.AddRange(x);
|
|
|
+ });
|
|
|
+ long totalTime=teacherTrains.Select(x => x.totalTime).Sum();
|
|
|
+ int hgcount = teacherTrains.Where(x => x.finalScore==1||x.finalScore==2).Count();
|
|
|
+ var teacherAilities = teacherTrains.SelectMany(x => x.currency.teacherAilities);
|
|
|
+
|
|
|
+ return Ok(new { teacherTrains, setting, schools= schoolInfos , totalTime, hgcount, teacherAilities, teacherCount = countArea, appraiseCount = appraiseArea });
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ return BadRequest(new { ex.Message, ex.StackTrace });
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ /// <summary>
|
|
|
+ /// 对某个订阅的能力点进行操作
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="request"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [ProducesDefaultResponseType]
|
|
|
[HttpPost("get-school-appraise")]
|
|
|
[AuthToken(Roles = "teacher,admin,area")]
|
|
|
public async Task<IActionResult> GetSchoolAppraise(JsonElement request)
|