HomeworkService.cs 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  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. using TEAMModelOS.SDK.Services;
  12. namespace TEAMModelOS.SDK.Models.Service
  13. {
  14. public static class HomeworkService
  15. {
  16. public static async Task<string> saveMoreAsync(CosmosClient client, DingDing _dingDing, Homework work, AzureServiceBusFactory _serviceBus, AzureStorageFactory _azureStorage, IConfiguration _configuration, AzureRedisFactory _azureRedis)
  17. {
  18. try
  19. {
  20. work.ttl = -1;
  21. work.code = "Homework-" + work.school;
  22. long now = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
  23. work.createTime = now;
  24. string blobcntr = null;
  25. blobcntr = work.school;
  26. work.size = await _azureStorage.GetBlobContainerClient(work.school).GetBlobsSize($"homework/{work.id}");
  27. await BlobService.RefreshBlobRoot(new BlobRefreshMessage { progress = "insert", root = $"homework", name = $"{blobcntr}" }, _serviceBus, _configuration, _azureRedis);
  28. work.recordUrl = $"/homework/{work.id}/record.json";
  29. var cods = new { records = new List<string>(), userids = new List<string>(), question = new List<QuestionRecord>() };
  30. await _azureStorage.GetBlobContainerClient(blobcntr).UploadFileByContainer(cods.ToJsonString(), "homework", $"{work.id}/record.json");
  31. work.id = Guid.NewGuid().ToString();
  32. if (string.IsNullOrEmpty(work.id))
  33. {
  34. if (work.publish == 1)
  35. {
  36. work.progress = "pending";
  37. }
  38. else {
  39. if (work.startTime > now)
  40. {
  41. work.progress = "pending";
  42. }
  43. else
  44. {
  45. work.progress = "going";
  46. }
  47. }
  48. await client.GetContainer("TEAMModelOS", "Common").CreateItemAsync(work, new PartitionKey($"{work.code}"));
  49. }
  50. else
  51. {
  52. await client.GetContainer("TEAMModelOS", "Common").UpsertItemAsync(work, new PartitionKey($"{work.code}"));
  53. }
  54. return work.id;
  55. }
  56. catch (Exception e)
  57. {
  58. await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")}-HomeworkService-saveMore\n{e.Message}\n{e.StackTrace}", GroupNames.醍摩豆服務運維群組);
  59. return "";
  60. }
  61. }
  62. }
  63. }