ActivityService.cs 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505
  1. using Azure;
  2. using Azure.Cosmos;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.IO;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Text.Json;
  9. using System.Threading.Tasks;
  10. using TEAMModelOS.SDK.DI;
  11. using TEAMModelOS.SDK.Extension;
  12. using TEAMModelOS.SDK;
  13. using TEAMModelOS.SDK.Models;
  14. using TEAMModelOS.SDK.Models.Cosmos.Common;
  15. using TEAMModelOS.SDK.Models.Service;
  16. using HTEXLib.COMM.Helpers;
  17. namespace TEAMModelOS.SDK
  18. {
  19. public class ActivityService
  20. {
  21. public static async Task FixActivity(CosmosClient client, DingDing _dingDing, GroupChange groupChange, string type)
  22. {
  23. try
  24. {
  25. var query = $"SELECT distinct c.owner, c.id,c.code, c.classes,c.stuLists,c.subjects,c.progress,c.scope,c.startTime,c.school,c.creatorId,c.name,c.pk ,c.endTime FROM c where c.pk='{type}' " +
  26. $" and (( array_contains(c.classes,'{groupChange.listid}')) or ( array_contains(c.stuLists,'{groupChange.listid}'))or ( array_contains(c.tchLists,'{groupChange.listid}')))";
  27. //$"and A1 in('{groupChange.listid}') ";
  28. List<MQActivity> datas = new List<MQActivity>();
  29. if (groupChange.scope.Equals("school", StringComparison.OrdinalIgnoreCase) && !string.IsNullOrEmpty(groupChange.school))
  30. {
  31. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Common").GetItemQueryIterator<MQActivity>(queryText: query,
  32. requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"{type}-{groupChange.school}") }))
  33. {
  34. datas.Add(item);
  35. }
  36. ///还要处理该学校每个老师发布的班级的
  37. List<SchoolTeacher> teachers = new List<SchoolTeacher>();
  38. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<SchoolTeacher>(queryText: $"SELECT c.id, c.name FROM c",
  39. requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Teacher-{groupChange.school}") }))
  40. {
  41. teachers.Add(item);
  42. }
  43. foreach (var techer in teachers)
  44. {
  45. var queryTech = $"SELECT distinct c.owner, c.id,c.code, c.classes,c.stuLists,c.subjects,c.progress,c.scope,c.startTime,c.school,c.creatorId,c.name,c.pk ,c.endTime FROM c " +
  46. $" where c.school='{groupChange.school}' and c.pk='{type}'" +
  47. $" and (( array_contains(c.classes,'{groupChange.listid}')) or ( array_contains(c.stuLists,'{groupChange.listid}')))";
  48. // $" and A1 in('{groupChange.listid}') ";
  49. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Common").GetItemQueryIterator<MQActivity>(queryText: queryTech,
  50. requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"{type}-{techer.id}") }))
  51. {
  52. datas.Add(item);
  53. }
  54. }
  55. }
  56. if (groupChange.scope.Equals("private", StringComparison.OrdinalIgnoreCase) && !string.IsNullOrEmpty(groupChange.creatorId))
  57. {
  58. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Common").GetItemQueryIterator<MQActivity>(queryText: query,
  59. requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"{type}-{groupChange.creatorId}") }))
  60. {
  61. datas.Add(item);
  62. }
  63. }
  64. long nowtime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
  65. foreach (MQActivity activity in datas)
  66. {
  67. //已经完结的不再允许加入,还未开始的。
  68. if (string.IsNullOrEmpty(activity.progress) || activity.progress.Equals("finish") || activity.progress.Equals("pending"))
  69. {
  70. continue;
  71. }
  72. List<string> classes = ExamService.getClasses(activity.classes, activity.stuLists);
  73. //stujoin新加入名单的
  74. foreach (Member member in groupChange.stujoin)
  75. {
  76. var stucourse = new StuActivity
  77. {
  78. id = activity.id,
  79. scode = activity.code,
  80. name = activity.name,
  81. code = $"Activity-{member.code.Replace("Base-", "")}-{member.id}",
  82. scope = activity.scope,
  83. school = activity.school,
  84. creatorId = activity.creatorId,
  85. pk = "Activity",
  86. type = type,
  87. subjects = activity.pk.ToLower().Equals("exam") && activity.subjects.IsNotEmpty() ? new List<string>() { activity.subjects[0].id } : new List<string>() { "" },
  88. startTime = activity.startTime,
  89. endTime = activity.endTime,
  90. blob = activity.blob,
  91. owner = activity.owner,
  92. createTime = nowtime,
  93. taskStatus = -1,
  94. classIds = classes
  95. };
  96. await client.GetContainer(Constant.TEAMModelOS, "Student").UpsertItemAsync(stucourse, new PartitionKey(stucourse.code));
  97. }
  98. //tmdjoin新加入的
  99. foreach (Member member in groupChange.tmdjoin)
  100. {
  101. var stucourse = new StuActivity
  102. {
  103. id = activity.id,
  104. scode = activity.code,
  105. name = activity.name,
  106. code = $"Activity-{member.id}",
  107. scope = activity.scope,
  108. school = activity.school,
  109. creatorId = activity.creatorId,
  110. pk = "Activity",
  111. type = type,
  112. subjects = activity.pk.ToLower().Equals("exam") && activity.subjects.IsNotEmpty() ? new List<string>() { activity.subjects[0].id } : new List<string>() { "" },
  113. startTime = activity.startTime,
  114. endTime = activity.endTime,
  115. blob = activity.blob,
  116. owner = activity.owner,
  117. createTime = nowtime,
  118. taskStatus = -1,
  119. classIds = classes
  120. };
  121. await client.GetContainer(Constant.TEAMModelOS, "Student").UpsertItemAsync(stucourse, new PartitionKey(stucourse.code));
  122. }
  123. //tchjoin新加入的
  124. foreach (Member member in groupChange.tchjoin)
  125. {
  126. var stucourse = new StuActivity
  127. {
  128. id = activity.id,
  129. scode = activity.code,
  130. name = activity.name,
  131. code = $"Activity-{member.id}",
  132. scope = activity.scope,
  133. school = activity.school,
  134. creatorId = activity.creatorId,
  135. pk = "Activity",
  136. type = type,
  137. subjects = activity.pk.ToLower().Equals("exam") && activity.subjects.IsNotEmpty() ? new List<string>() { activity.subjects[0].id } : new List<string>() { "" },
  138. startTime = activity.startTime,
  139. endTime = activity.endTime,
  140. blob = activity.blob,
  141. owner = activity.owner,
  142. createTime = nowtime,
  143. taskStatus = -1,
  144. classIds = classes
  145. };
  146. await client.GetContainer(Constant.TEAMModelOS, "Teacher").UpsertItemAsync(stucourse, new PartitionKey(stucourse.code));
  147. }
  148. foreach (Member member in groupChange.stuleave)
  149. {
  150. try
  151. {
  152. await client.GetContainer(Constant.TEAMModelOS, "Student").DeleteItemAsync<StuActivity>(activity.id, new PartitionKey($"Activity-{member.code.Replace("Base-", "")}-{member.id}"));
  153. }
  154. catch (CosmosException)
  155. {
  156. continue;
  157. // 继续执行 删除失败
  158. }
  159. }
  160. foreach (Member member in groupChange.tmdleave)
  161. {
  162. try
  163. {
  164. await client.GetContainer(Constant.TEAMModelOS, "Student").DeleteItemAsync<StuActivity>(activity.id, new PartitionKey($"Activity-{member.id}"));
  165. }
  166. catch (CosmosException)
  167. {
  168. continue;
  169. // 继续执行 删除失败
  170. }
  171. }
  172. foreach (Member member in groupChange.tchleave)
  173. {
  174. try
  175. {
  176. await client.GetContainer(Constant.TEAMModelOS, "Teacher").DeleteItemAsync<StuActivity>(activity.id, new PartitionKey($"Activity-{member.id}"));
  177. }
  178. catch (CosmosException)
  179. {
  180. continue;
  181. // 继续执行 删除失败
  182. }
  183. }
  184. }
  185. } catch (CosmosException e) {
  186. await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")}-GroupListService-FixActivity\n{e.Message}\n{e.StackTrace}CosmosException{e.Status}", GroupNames.成都开发測試群組);
  187. }
  188. catch (Exception ex)
  189. {
  190. await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")}-GroupListService-FixActivity\n{ex.Message}{ex.StackTrace}{groupChange.ToJsonString()}{type}", GroupNames.醍摩豆服務運維群組);
  191. }
  192. }
  193. public static async Task FixStuCourse(CosmosClient client, DingDing _dingDing, GroupChange groupChange)
  194. {
  195. //1.查找学校或教师的课程是否包含该名单的课程。
  196. var query = $"select distinct c.code,c.id,c.no,c.name,c.scope, c.creatorId,c.school from c join A0 in c.schedule where A0.stulist = '{groupChange.listid}'";
  197. List<Course> courses = new List<Course>();
  198. if (groupChange.scope.Equals("school") && !string.IsNullOrEmpty(groupChange.school))
  199. {
  200. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<Course>(queryText: query,
  201. requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"Course-{groupChange.school}") }))
  202. {
  203. courses.Add(item);
  204. }
  205. }
  206. if (groupChange.scope.Equals("private") && !string.IsNullOrEmpty(groupChange.creatorId))
  207. {
  208. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<Course>(queryText: query,
  209. requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"Course-{groupChange.creatorId}") }))
  210. {
  211. courses.Add(item);
  212. }
  213. }
  214. long nowtime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
  215. // await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")}-GroupListService-FixStuCourse\n名单发生变更 需要处理的课程\n{courses.ToJsonString()}", GroupNames.醍摩豆服務運維群組);
  216. //2.获取课程的id 并尝试添加或移除对应的学生课程记录StuCourse。
  217. foreach (var course in courses)
  218. {
  219. //学生新加入名单的
  220. foreach (Member member in groupChange.stujoin)
  221. {
  222. var stucourse = new StuCourse
  223. {
  224. id = course.id,
  225. scode = course.code,
  226. name = course.name,
  227. code = $"StuCourse-{member.code.Replace("Base-", "")}-{member.id}",
  228. scope = course.scope,
  229. school = course.school,
  230. creatorId = course.creatorId,
  231. pk = "StuCourse",
  232. stulist = new List<string> { groupChange.listid },
  233. createTime = nowtime
  234. };
  235. // await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")}-GroupListService-FixStuCourse\n名单发生变更 新建课程中间表\n{stucourse.ToJsonString()}", GroupNames.醍摩豆服務運維群組);
  236. await client.GetContainer(Constant.TEAMModelOS, "Student").UpsertItemAsync(stucourse, new PartitionKey(stucourse.code));
  237. }
  238. //tmd新加入的
  239. foreach (Member member in groupChange.tmdjoin)
  240. {
  241. var stucourse = new StuCourse
  242. {
  243. id = course.id,
  244. scode = course.code,
  245. name = course.name,
  246. code = $"StuCourse-{member.id}",
  247. scope = course.scope,
  248. school = course.school,
  249. creatorId = course.creatorId,
  250. pk = "StuCourse",
  251. stulist = new List<string> { groupChange.listid },
  252. createTime = nowtime
  253. };
  254. // await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")}-GroupListService-FixStuCourse\n名单发生变更 新建课程中间表\n{stucourse.ToJsonString()}", GroupNames.醍摩豆服務運維群組);
  255. await client.GetContainer(Constant.TEAMModelOS, "Student").UpsertItemAsync(stucourse, new PartitionKey(stucourse.code));
  256. }
  257. //移除名单的。 在点击相关的课程,再去二次校验是否存在,不存在则再去删除。
  258. foreach (var delStu in groupChange.stuleave)
  259. {
  260. await client.GetContainer(Constant.TEAMModelOS, "Student").DeleteItemStreamAsync(course.id, new PartitionKey($"StuCourse-{delStu.code.Replace("Base-", "")}-{delStu.id}"));
  261. }
  262. foreach (var delTmd in groupChange.tmdleave)
  263. {
  264. await client.GetContainer(Constant.TEAMModelOS, "Student").DeleteItemStreamAsync(course.id, new PartitionKey($"StuCourse-{delTmd}"));
  265. }
  266. }
  267. }
  268. public static async Task<string> SaveStuActivity(CosmosClient client, DingDing _dingDing, List<StuActivity> stuActivities, List<StuActivity> tmdActivities, List<StuActivity> tchActivities)
  269. {
  270. try
  271. {
  272. if (stuActivities.IsNotEmpty())
  273. {
  274. foreach (var x in stuActivities)
  275. {
  276. await client.GetContainer(Constant.TEAMModelOS, "Student").UpsertItemAsync(x, new PartitionKey(x.code));
  277. }
  278. }
  279. if (tmdActivities.IsNotEmpty())
  280. {
  281. foreach (var x in tmdActivities)
  282. {
  283. await client.GetContainer(Constant.TEAMModelOS, "Student").UpsertItemAsync(x, new PartitionKey(x.code));
  284. }
  285. }
  286. if (tchActivities.IsNotEmpty())
  287. {
  288. foreach (var x in tchActivities)
  289. {
  290. await client.GetContainer(Constant.TEAMModelOS, "Teacher").UpsertItemAsync(x, new PartitionKey(x.code));
  291. }
  292. }
  293. }
  294. catch (Exception ex)
  295. {
  296. await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")}-OS,TriggerStuActivity-SaveStuActivity\n{ex.Message}\n{ex.StackTrace}", GroupNames.醍摩豆服務運維群組);
  297. }
  298. return "";
  299. }
  300. public static async Task RefreshStuActivity(CoreAPIHttpService _coreAPIHttpService ,CosmosClient client, DingDing _dingDing, string id, string code)
  301. {
  302. MQActivity activity = null;
  303. try
  304. {
  305. var aactivity = await client.GetContainer(Constant.TEAMModelOS, "Common").ReadItemStreamAsync(id, new Azure.Cosmos.PartitionKey(code));
  306. using var da = await JsonDocument.ParseAsync(aactivity.ContentStream);
  307. activity = da.ToObject<MQActivity>();
  308. }
  309. catch (CosmosException)
  310. {
  311. activity = null;
  312. }
  313. if (activity != null)
  314. {
  315. List<Task<ItemResponse<StuActivity>>> tasks = new List<Task<ItemResponse<StuActivity>>>();
  316. List<string> classes = ExamService.getClasses(activity.classes, activity.stuLists);
  317. (List<RMember> tmdIds, List<RGroupList> classLists) = await GroupListService.GetStutmdidListids(_coreAPIHttpService, client, _dingDing, classes, activity.school);
  318. var students = tmdIds.FindAll(x => x.type == 2);
  319. var tmdids = tmdIds.FindAll(x => x.type == 1);
  320. if (tmdids.IsNotEmpty())
  321. {
  322. foreach (RMember tmdid in tmdids)
  323. {
  324. var response = await client.GetContainer(Constant.TEAMModelOS, "Student").ReadItemStreamAsync(activity.id, new PartitionKey($"Activity-{tmdid.id}"));
  325. if (response.Status == 200) {
  326. using var json = await JsonDocument.ParseAsync(response.ContentStream);
  327. StuActivity stu = json.ToObject<StuActivity>();
  328. stu.id = activity.id;
  329. stu.scode = activity.code;
  330. stu.name = activity.name;
  331. stu.source = activity.source;
  332. stu.scope = activity.scope;
  333. stu.school = activity.school;
  334. stu.creatorId = activity.creatorId;
  335. stu.type = activity.pk;
  336. stu.subjects = activity.pk.ToLower().Equals("exam") && activity.subjects.IsNotEmpty() ? new List<string>() { activity.subjects[0].id } : new List<string>() { "" };
  337. stu.startTime = activity.startTime;
  338. stu.endTime = activity.endTime;
  339. stu.blob = activity.blob;
  340. stu.owner = activity.owner;
  341. stu.createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
  342. tasks.Add(client.GetContainer(Constant.TEAMModelOS, "Student").ReplaceItemAsync(stu,stu.id, new PartitionKey(stu.code)));
  343. }
  344. }
  345. }
  346. if (students.IsNotEmpty())
  347. {
  348. foreach (RMember student in students)
  349. {
  350. var response = await client.GetContainer(Constant.TEAMModelOS, "Student").ReadItemStreamAsync(activity.id, new PartitionKey($"Activity-{activity.school}-{student.id}"));
  351. if (response.Status == 200)
  352. {
  353. using var json = await JsonDocument.ParseAsync(response.ContentStream);
  354. StuActivity stu = json.ToObject<StuActivity>();
  355. stu.id = activity.id;
  356. stu.scode = activity.code;
  357. stu.name = activity.name;
  358. stu.source = activity.source;
  359. stu.scope = activity.scope;
  360. stu.school = activity.school;
  361. stu.creatorId = activity.creatorId;
  362. stu.type = activity.pk;
  363. stu.subjects = activity.pk.ToLower().Equals("exam") && activity.subjects.IsNotEmpty() ? new List<string>() { activity.subjects[0].id } : new List<string>() { "" };
  364. stu.startTime = activity.startTime;
  365. stu.endTime = activity.endTime;
  366. stu.blob = activity.blob;
  367. stu.owner = activity.owner;
  368. stu.createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
  369. tasks.Add(client.GetContainer(Constant.TEAMModelOS, "Student").ReplaceItemAsync(stu, stu.id, new PartitionKey(stu.code)));
  370. }
  371. //await client.GetContainer(Constant.TEAMModelOS, "Student").UpsertItemAsync(stucourse, new PartitionKey(stucourse.code));
  372. }
  373. }
  374. await Task.WhenAll(tasks);
  375. }
  376. }
  377. public static async Task DeleteActivity(CoreAPIHttpService _coreAPIHttpService, CosmosClient client, DingDing _dingDing, ActivityList activityList) {
  378. List<(string pId, List<string> gid)> ps = new List<(string pId, List<string> gid)>();
  379. if (activityList.groupLists.Count > 0)
  380. {
  381. var group = activityList.groupLists;
  382. foreach (var keys in group)
  383. {
  384. foreach (KeyValuePair<string, List<string>> pp in keys)
  385. {
  386. ps.Add((pp.Key, pp.Value));
  387. }
  388. }
  389. }
  390. List<string> classes = ExamService.getClasses(activityList.classes, activityList.stuLists);
  391. (List<RMember> tmdIds, List<RGroupList> classLists) = await GroupListService.GetStutmdidListids(_coreAPIHttpService, client, _dingDing, classes, activityList.school, ps);
  392. var addStudentsCls = tmdIds.FindAll(x => x.type == 2);
  393. var addTmdidsCls = tmdIds.FindAll(x => x.type == 1);
  394. List<string> tmds = new List<string>();
  395. if (addTmdidsCls.IsNotEmpty())
  396. {
  397. tmds.AddRange(addTmdidsCls.Select(x => x.id).ToList());
  398. }
  399. List<StuActivity> stuActivities = new List<StuActivity>();
  400. List<StuActivity> tmdActivities = new List<StuActivity>();
  401. List<StuActivity> tchActivities = new List<StuActivity>();
  402. if (tmds.IsNotEmpty())
  403. {
  404. tmds.ForEach(x =>
  405. {
  406. tmdActivities.Add(new StuActivity
  407. {
  408. id = activityList.id,
  409. code = $"Activity-{x}",
  410. });
  411. });
  412. }
  413. if (addStudentsCls.IsNotEmpty())
  414. {
  415. addStudentsCls.ForEach(x =>
  416. {
  417. stuActivities.Add(new StuActivity
  418. {
  419. id = activityList.id,
  420. code = $"Activity-{x.code.Replace("Base-", "")}-{x.id}",
  421. });
  422. });
  423. }
  424. (List<RMember> tchList, List<RGroupList> classInfos) = await GroupListService.GetStutmdidListids(_coreAPIHttpService, client, _dingDing, activityList.tchLists, activityList.school, ps);
  425. (string standard, List<string> tmdids, string school, List<string> update, int statistics) list = (null, null, null, new List<string> { StatisticsService.TeacherVote }, 0);
  426. if (tchList.IsNotEmpty())
  427. {
  428. list.tmdids = tchList.Select(x => x.id).ToList();
  429. School school = null;
  430. if (!string.IsNullOrEmpty(activityList.school))
  431. {
  432. school = await client.GetContainer(Constant.TEAMModelOS, "School").ReadItemAsync<School>(activityList.school, new Azure.Cosmos.PartitionKey("Base"));
  433. list.school = school.id;
  434. list.standard = school.standard;
  435. }
  436. tchList.ForEach(x =>
  437. {
  438. tchActivities.Add(new StuActivity
  439. {
  440. id = activityList.id,
  441. code = $"Activity-{x.id}",
  442. });
  443. });
  444. }
  445. await ActivityService.DeleteStuActivity(client, _dingDing, stuActivities, tmdActivities, tchActivities);
  446. }
  447. public static async Task<string> DeleteStuActivity(CosmosClient client, DingDing _dingDing, List<StuActivity> stuActivities, List<StuActivity> tmdActivities, List<StuActivity> tchActivities)
  448. {
  449. try
  450. {
  451. if (stuActivities.IsNotEmpty())
  452. {
  453. foreach (var x in stuActivities)
  454. {
  455. await client.GetContainer(Constant.TEAMModelOS, "Student").DeleteItemStreamAsync(x.id, new PartitionKey(x.code));
  456. }
  457. }
  458. if (tmdActivities.IsNotEmpty())
  459. {
  460. foreach (var x in tmdActivities)
  461. {
  462. await client.GetContainer(Constant.TEAMModelOS, "Student").DeleteItemStreamAsync(x.id, new PartitionKey(x.code));
  463. }
  464. }
  465. if (tchActivities.IsNotEmpty())
  466. {
  467. foreach (var x in tchActivities)
  468. {
  469. await client.GetContainer(Constant.TEAMModelOS, "Teacher").DeleteItemStreamAsync(x.id, new PartitionKey(x.code));
  470. }
  471. }
  472. }
  473. catch (Exception ex)
  474. {
  475. await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")}-OS,TriggerStuActivity-DeleteStuActivity\n{ex.Message}\n{ex.StackTrace}", GroupNames.醍摩豆服務運維群組);
  476. }
  477. return "";
  478. }
  479. }
  480. public class ActivityList
  481. {
  482. public string id { get; set; }
  483. public string school { get; set; }
  484. /// <summary>
  485. /// 行政班
  486. /// </summary>
  487. public List<string> classes { get; set; } = new List<string>();
  488. /// <summary>
  489. /// 学生名单(包含自定义个人学生名单,学校教学班)
  490. /// </summary>
  491. public List<string> stuLists { get; set; } = new List<string>();
  492. /// <summary>
  493. /// 教研组名单
  494. /// </summary>
  495. public List<string> tchLists { get; set; } = new List<string>();
  496. public List<Dictionary<string, List<string>>> groupLists { get; set; } = new List<Dictionary<string, List<string>>>();
  497. }
  498. }