using System; using System.Collections.Generic; using System.Text.Json; using System.Threading.Tasks; using Azure.Cosmos; using Microsoft.Azure.WebJobs; using Microsoft.Azure.WebJobs.Host; using Microsoft.Extensions.Logging; using TEAMModelOS.SDK.DI; using TEAMModelOS.SDK.Extension; namespace TEAMModelFunction { public class ServiceBusTopic { private readonly AzureCosmosFactory _azureCosmos; public ServiceBusTopic( AzureCosmosFactory azureCosmos) { _azureCosmos = azureCosmos; } [FunctionName("ServiceBusTopic")] public async Task Run([ServiceBusTrigger("test_topic_ActiveTask", "test_topic_ReciveTask", Connection = "ConnectionBusName")] string mySbMsg, ILogger log) { log.LogInformation($"C# ServiceBus topic trigger function processed message: {mySbMsg}"); Dictionary keyValuePairs = mySbMsg.ToObject>(); var client = _azureCosmos.GetCosmosClient(); keyValuePairs.TryGetValue("id", out object id); keyValuePairs.TryGetValue("name", out object name); keyValuePairs.TryGetValue("code", out object code); //keyValuePairs.TryGetValue("status", out object progress); if (name.ToString().Equals("ExamInfo")) { ExamInfo exam = await client.GetContainer("TEAMModelOS", "Common").ReadItemAsync(id.ToString(), new PartitionKey($"{code}")); if (DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().CompareTo(exam.startTime) > 0 && DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().CompareTo(exam.endTime) < 0) { exam.progress = "going"; } else if (DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().CompareTo(exam.endTime) > 0) { exam.progress = "finish"; } await client.GetContainer("TEAMModelOS", "Common").ReplaceItemAsync(exam, id.ToString(), new PartitionKey($"{code}")); } else if (name.ToString().Equals("Survey")) { Survey survey = await client.GetContainer("TEAMModelOS", "Common").ReadItemAsync(id.ToString(), new PartitionKey($"{code}")); if (DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().CompareTo(survey.startTime) > 0 && DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().CompareTo(survey.endTime) < 0) { survey.progress = "going"; } else if (DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().CompareTo(survey.endTime) > 0) { survey.progress = "finish"; } await client.GetContainer("TEAMModelOS", "Common").ReplaceItemAsync(survey, id.ToString(), new PartitionKey($"{code}")); } else if (name.ToString().Equals("Vote")) { Vote vote; var sresponse = await client.GetContainer("TEAMModelOS", "Common").ReadItemStreamAsync(id.ToString(), new PartitionKey($"{code}")); if (sresponse.Status == 200) { using var json = await JsonDocument.ParseAsync(sresponse.ContentStream); vote = json.ToObject(); if (DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().CompareTo(vote.startTime) > 0 && DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().CompareTo(vote.endTime) < 0) { vote.progress = "going"; } else if (DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().CompareTo(vote.endTime) > 0) { vote.progress = "finish"; } await client.GetContainer("TEAMModelOS", "Common").ReplaceItemAsync(vote, id.ToString(), new PartitionKey($"{code}")); } } } } }