SurveyTrigger.cs 4.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. using Azure.Cosmos;
  2. using Azure.Messaging.ServiceBus;
  3. using Microsoft.Azure.Documents;
  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.Models;
  12. namespace TEAMModelFunction
  13. {
  14. public class SurveyTrigger
  15. {
  16. public static async void Trigger(AzureCosmosFactory _azureCosmos, AzureServiceBusFactory _serviceBus, AzureStorageFactory _azureStorage, DingDing _dingDing,
  17. CosmosClient client, Document input, string code, long stime, long etime, string school)
  18. {
  19. Survey survey = await client.GetContainer("TEAMModelOS", "Common").ReadItemAsync<Survey>(input.Id, new Azure.Cosmos.PartitionKey($"{code}"));
  20. //messageSurvey.ScheduledEnqueueTime = DateTimeOffset.FromUnixTimeMilliseconds(stime);
  21. //string msgid = messageSurvey.MessageId;
  22. List<ChangeRecord> changeRecords = await _azureStorage.FindListByDict<ChangeRecord>(new Dictionary<string, object>() { { "RowKey", input.Id }, { "PartitionKey", survey.progress } });
  23. //ChangeRecord surveyRecord = await client.GetContainer("TEAMModelOS", "Common").ReadItemAsync<ChangeRecord>(input.Id, new Azure.Cosmos.PartitionKey($"{survey.progress}"));
  24. switch (survey.progress)
  25. {
  26. case "pending":
  27. var messageSurvey = new ServiceBusMessage(new { id = input.Id, progress = "going", code = code }.ToJsonString());
  28. messageSurvey.ApplicationProperties.Add("name", "Survey");
  29. if (changeRecords.Count > 0)
  30. {
  31. await _serviceBus.GetServiceBusClient().cancelMessage("active-task", changeRecords[0].sequenceNumber);
  32. long start = await _serviceBus.GetServiceBusClient().SendScheduleMessageAsync("active-task", messageSurvey, DateTimeOffset.FromUnixTimeMilliseconds(stime));
  33. changeRecords[0].sequenceNumber = start;
  34. await _azureStorage.SaveOrUpdate<ChangeRecord>(changeRecords[0]);
  35. //await client.GetContainer("TEAMModelOS", "Common").ReplaceItemAsync(surveyRecord, surveyRecord.id, new Azure.Cosmos.PartitionKey($"{surveyRecord.code}"));
  36. }
  37. else
  38. {
  39. long start = await _serviceBus.GetServiceBusClient().SendScheduleMessageAsync("active-task", messageSurvey, DateTimeOffset.FromUnixTimeMilliseconds(stime));
  40. ChangeRecord changeRecord = new ChangeRecord
  41. {
  42. RowKey = input.Id,
  43. PartitionKey = "pending",
  44. sequenceNumber = start,
  45. msgId = messageSurvey.MessageId
  46. };
  47. await _azureStorage.Save<ChangeRecord>(changeRecord);
  48. //await client.GetContainer("TEAMModelOS", "Common").CreateItemAsync(changeRecord, new Azure.Cosmos.PartitionKey($"{changeRecord.code}"));
  49. }
  50. break;
  51. case "going":
  52. var messageSurveyEnd = new ServiceBusMessage(new { id = input.Id, progress = "finish", code = code }.ToJsonString());
  53. messageSurveyEnd.ApplicationProperties.Add("name", "Survey");
  54. if (changeRecords.Count > 0)
  55. {
  56. long end = await _serviceBus.GetServiceBusClient().SendScheduleMessageAsync("active-task", messageSurveyEnd, DateTimeOffset.FromUnixTimeMilliseconds(etime));
  57. await _serviceBus.GetServiceBusClient().cancelMessage("active-task", changeRecords[0].sequenceNumber);
  58. changeRecords[0].sequenceNumber = end;
  59. await _azureStorage.SaveOrUpdate<ChangeRecord>(changeRecords[0]);
  60. }
  61. else
  62. {
  63. long end = await _serviceBus.GetServiceBusClient().SendScheduleMessageAsync("active-task", messageSurveyEnd, DateTimeOffset.FromUnixTimeMilliseconds(etime));
  64. ChangeRecord changeRecord = new ChangeRecord
  65. {
  66. RowKey = input.Id,
  67. PartitionKey = "going",
  68. sequenceNumber = end,
  69. msgId = messageSurveyEnd.MessageId
  70. };
  71. await _azureStorage.Save<ChangeRecord>(changeRecord);
  72. //await client.GetContainer("TEAMModelOS", "Common").CreateItemAsync(changeRecord, new Azure.Cosmos.PartitionKey($"{changeRecord.code}"));
  73. }
  74. break;
  75. }
  76. }
  77. }
  78. }