HomeworkService.cs 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. using Azure.Cosmos;
  2. using Azure.Messaging.ServiceBus;
  3. using Microsoft.Extensions.Configuration;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Text;
  7. using System.Text.Json;
  8. using System.Threading.Tasks;
  9. using TEAMModelOS.SDK.DI;
  10. using TEAMModelOS.SDK.Extension;
  11. namespace TEAMModelOS.SDK.Models.Service
  12. {
  13. public static class HomeworkService
  14. {
  15. public static async Task<string> saveMoreAsync(CosmosClient client, DingDing _dingDing, Homework work, AzureServiceBusFactory _serviceBus, AzureStorageFactory _azureStorage, IConfiguration _configuration)
  16. {
  17. try
  18. {
  19. work.ttl = -1;
  20. work.code = "Homework-" + work.school;
  21. long now = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
  22. work.createTime = now;
  23. var messageBlob = new ServiceBusMessage();
  24. string blobcntr = null;
  25. blobcntr = work.school;
  26. work.size = await _azureStorage.GetBlobContainerClient(work.school).GetBlobsSize($"homework/{work.id}");
  27. messageBlob = new ServiceBusMessage(new { id = Guid.NewGuid().ToString(), progress = "insert", root = $"homework/{work.id}", name = $"{work.school}" }.ToJsonString());
  28. messageBlob.ApplicationProperties.Add("name", "BlobRoot");
  29. var ActiveTask = _configuration.GetValue<string>("Azure:ServiceBus:ActiveTask");
  30. await _serviceBus.GetServiceBusClient().SendMessageAsync(ActiveTask, messageBlob);
  31. work.recordUrl = $"/homework/{work.id}/record.json";
  32. var cods = new { records = new List<string>(), userids = new List<string>(), question = new List<QuestionRecord>() };
  33. await _azureStorage.UploadFileByContainer(blobcntr, cods.ToJsonString(), "homework", $"{work.id}/record.json");
  34. work.id = Guid.NewGuid().ToString();
  35. if (string.IsNullOrEmpty(work.id))
  36. {
  37. if (work.startTime > now)
  38. {
  39. work.progress = "pending";
  40. }
  41. else
  42. {
  43. work.progress = "going";
  44. }
  45. await client.GetContainer("TEAMModelOS", "Common").CreateItemAsync(work, new PartitionKey($"{work.code}"));
  46. }
  47. else
  48. {
  49. await client.GetContainer("TEAMModelOS", "Common").UpsertItemAsync(work, new PartitionKey($"{work.code}"));
  50. }
  51. return work.id;
  52. }
  53. catch (Exception e)
  54. {
  55. await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")}-HomeworkService-saveMore\n{e.Message}{e.StackTrace}", GroupNames.醍摩豆服務運維群組);
  56. return "";
  57. }
  58. }
  59. }
  60. }