CourseServiceBus.cs 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. using Azure.Cosmos;
  2. using Microsoft.Azure.WebJobs;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Text;
  6. using System.Text.Json;
  7. using System.Threading.Tasks;
  8. using TEAMModelOS.SDK.DI;
  9. using TEAMModelOS.SDK.Extension;
  10. using TEAMModelOS.SDK.Models.Cosmos.Common;
  11. namespace TEAMModelFunction
  12. {
  13. public class CourseServiceBus
  14. {
  15. private readonly AzureCosmosFactory _azureCosmos;
  16. private readonly DingDing _dingDing;
  17. public CourseServiceBus(AzureCosmosFactory azureCosmos, DingDing dingDing)
  18. {
  19. _azureCosmos = azureCosmos;
  20. _dingDing = dingDing;
  21. }
  22. /// <summary>
  23. /// 完善课程变更
  24. /// </summary>
  25. /// <data msg>
  26. /// CourseChange
  27. ///// </data>
  28. /// <param name="msg"></param>
  29. /// <returns></returns>
  30. [FunctionName("Course")]
  31. public async Task Course([ServiceBusTrigger("%Azure:ServiceBus:ActiveTask%", "course", Connection = "Azure:ServiceBus:ConnectionString")] string msg)
  32. {
  33. var client = _azureCosmos.GetCosmosClient();
  34. try
  35. {
  36. await _dingDing.SendBotMsg($"ServiceBus,CourseChange:{msg}", GroupNames.醍摩豆服務運維群組);
  37. var jsonMsg = JsonDocument.Parse(msg);
  38. CourseChange courseChange = msg.ToObject<CourseChange>();
  39. if (courseChange == null) {
  40. return;
  41. }
  42. //根据新增名单获取 新增的学生id 及timdid
  43. (List<string> addTmdids, List<Students> addStudents) = await TriggerStuActivity.GetStuList(client, _dingDing, courseChange.addList, courseChange.school);
  44. //根据删除名单获取 新增的学生id 及timdid
  45. (List<string> delTmdids, List<Students> delStudents) = await TriggerStuActivity.GetStuList(client, _dingDing, courseChange.delList, courseChange.school);
  46. foreach (var addStu in addStudents)
  47. {
  48. var course = new StuCourse
  49. {
  50. id = courseChange.id,
  51. scode = courseChange.code,
  52. name = courseChange.name,
  53. code = $"StuCourse-{courseChange.school}-{addStu.id}",
  54. scope = courseChange.scope,
  55. school = courseChange.school,
  56. creatorId = courseChange.creatorId,
  57. pk = "StuCourse"
  58. };
  59. await client.GetContainer("TEAMModelOS", "Student").UpsertItemAsync(course, new PartitionKey(course.code));
  60. }
  61. foreach (var addTmd in addTmdids)
  62. {
  63. var course = new StuCourse
  64. {
  65. id = courseChange.id,
  66. scode = courseChange.code,
  67. name = courseChange.name,
  68. code = $"StuCourse-{addTmd}",
  69. scope = courseChange.scope,
  70. //school = courseChange.school,
  71. creatorId = courseChange.creatorId,
  72. pk = "StuCourse"
  73. };
  74. await client.GetContainer("TEAMModelOS", "Teacher").UpsertItemAsync(course, new PartitionKey(course.code));
  75. }
  76. foreach (var delStu in delStudents)
  77. {
  78. await client.GetContainer("TEAMModelOS", "Student").DeleteItemStreamAsync(courseChange.id, new PartitionKey($"Course-{courseChange.school}-{delStu.id}"));
  79. }
  80. foreach (var delTmd in delTmdids)
  81. {
  82. await client.GetContainer("TEAMModelOS", "Teacher").DeleteItemStreamAsync(courseChange.id, new PartitionKey($"Course-{delTmd}"));
  83. }
  84. }
  85. catch (Exception ex)
  86. {
  87. await _dingDing.SendBotMsg($"CourseServiceBus-Course\n{ex.Message}{ex.StackTrace}", GroupNames.成都开发測試群組);
  88. }
  89. }
  90. }
  91. }