using Azure.Cosmos; using System; using System.Collections.Generic; using System.Text; using System.Text.Json; using System.Threading.Tasks; using TEAMModelOS.SDK.DI; using TEAMModelOS.SDK.Extension; using TEAMModelOS.SDK.Helper.Common.DateTimeHelper; using TEAMModelOS.SDK.Models.Cosmos.Common; namespace TEAMModelOS.SDK.Models.Service { public class LessonService { /// /// /// /// /// /// /// public static LessonDis DisLessonCount(LessonRecord oldRecord, LessonRecord newRecord, LessonDis lessonDis) { //创建课堂的情况 if (oldRecord == null && newRecord != null) { lessonDis.record = 1; } //删除数据的情况 else if (oldRecord != null && newRecord == null) { lessonDis.record = -1; //P分数量加减 if (oldRecord.pScore >= 70) { lessonDis.disPCount = -1; } //T分数量加减 if (oldRecord.tScore >= 70) { lessonDis.disTCount = -1; } if (oldRecord.tScore >= 70 && oldRecord.pScore >= 70) { lessonDis.disTCount = -1; } } //无效操作 else if (oldRecord == null && newRecord == null) { //前后操作都有值,则表示更新 } else { //P分数量加减 if (oldRecord.pScore >= 70) { if (newRecord.pScore < 70) { lessonDis.disPCount = -1; } } else { if (newRecord.pScore >= 70) { lessonDis.disPCount = 1; } } //T分数量加减 if (oldRecord.tScore >= 70) { if (newRecord.tScore < 70) { lessonDis.disTCount = -1; } } else { if (newRecord.tScore >= 70) { lessonDis.disTCount = 1; } } //双绿灯数量 if (oldRecord.tScore >= 70 && oldRecord.pScore >= 70) { if (newRecord.tScore < 70 || newRecord.pScore < 70) { lessonDis.disDCount = -1; } } else { if (newRecord.tScore >= 70 && newRecord.pScore >= 70) { lessonDis.disDCount = 1; } } } return lessonDis; } public static async Task FixLessonCount(CosmosClient client, DingDing _dingDing, LessonRecord data, LessonDis lessonDis) { try { int day = DateTimeOffset.FromUnixTimeMilliseconds(data.startTime).DayOfYear; int year = DateTimeOffset.FromUnixTimeMilliseconds(data.startTime).Year; int days = DateTimeHelper.getDays(year); //int years = DateTimeOffset.UtcNow.DayOfYear; string tbname = string.Empty; string code = string.Empty; if (data.scope.Equals("school")) { code = $"LessonCount-{data.school}-{year}"; tbname = "School"; } else { code = $"LessonCount-{year}"; tbname = "Teacher"; } var response = await client.GetContainer(Constant.TEAMModelOS, tbname).ReadItemStreamAsync(data.tmdid.ToString(), new PartitionKey(code)); if (response.Status == 200) { using var json = await JsonDocument.ParseAsync(response.ContentStream); LessonCount count = json.ToObject(); count.tCount[day] += lessonDis.disTCount; count.pCount[day] += lessonDis.disPCount; count.ptCount[day] += lessonDis.disDCount; count.beginCount[day] += lessonDis.record; /*if (!count.courseIds.Contains(data.courseId)) { count.courseIds.Add(data.courseId); count.beginCount[day] += 1; }*/ await client.GetContainer("TEAMModelOS", tbname).ReplaceItemAsync(count, count.id, new PartitionKey(code)); } else { LessonCount count = new LessonCount { id = data.tmdid, code = code, ttl = -1 }; double[] da = new double[days]; List list = new List(da); List listT = new List(da); List listP = new List(da); List listPT = new List(da); list[day] += lessonDis.record; listT[day] += lessonDis.disTCount; listP[day] += lessonDis.disPCount; listPT[day] += lessonDis.disDCount; count.beginCount.AddRange(list); count.tCount.AddRange(listT); count.pCount.AddRange(listP); count.ptCount.AddRange(listPT); count.courseIds.Add(data.courseId); await client.GetContainer("TEAMModelOS", tbname).CreateItemAsync(count, new PartitionKey(code)); } } catch (Exception ex) { await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")}-LessonCount-FixLessonCount\n{ex.Message}{ex.StackTrace}{data.ToJsonString()}", GroupNames.醍摩豆服務運維群組); } } } }