HomeworkService.cs 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  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.GetBlobContainerClient(blobcntr).UploadFileByContainer(cods.ToJsonString(), "homework", $"{work.id}/record.json");
  34. work.id = Guid.NewGuid().ToString();
  35. if (string.IsNullOrEmpty(work.id))
  36. {
  37. if (work.publish == 1)
  38. {
  39. work.progress = "pending";
  40. }
  41. else {
  42. if (work.startTime > now)
  43. {
  44. work.progress = "pending";
  45. }
  46. else
  47. {
  48. work.progress = "going";
  49. }
  50. }
  51. await client.GetContainer("TEAMModelOS", "Common").CreateItemAsync(work, new PartitionKey($"{work.code}"));
  52. }
  53. else
  54. {
  55. await client.GetContainer("TEAMModelOS", "Common").UpsertItemAsync(work, new PartitionKey($"{work.code}"));
  56. }
  57. return work.id;
  58. }
  59. catch (Exception e)
  60. {
  61. await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")}-HomeworkService-saveMore\n{e.Message}\n{e.StackTrace}", GroupNames.醍摩豆服務運維群組);
  62. return "";
  63. }
  64. }
  65. }
  66. }