using Azure.Cosmos;
using System;
using System.Linq;
using System.Text.Json;
using System.Threading.Tasks;
using TEAMModelOS.SDK.DI;
using TEAMModelOS.SDK.Extension;
using TEAMModelOS.SDK.Models.Cosmos.BI.BICommon;
namespace TEAMModelOS.SDK.Models.Service.BI
{
public static class ProductUseRecordService
{
///
/// 产品使用量增加
///
///
///
///
///
public static async Task SetProductUseRecord(CosmosClient cosmosClient, DingDing _dingDing,string type)
{
DateTimeOffset dateOff = DateTimeOffset.UtcNow;
try
{
ProductUseRecord productUseRecord = new();
var resUseRecord = await cosmosClient.GetContainer(Constant.TEAMModelOS, "Common").ReadItemStreamAsync($"{dateOff.Year}", new PartitionKey("ProductUseRecord"));
if (resUseRecord.Status == 200)
{
using var fileJson = await JsonDocument.ParseAsync(resUseRecord.ContentStream);
productUseRecord = fileJson.ToObject();
}
else
{
productUseRecord.time = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
productUseRecord.hiTaHour = new double[24].ToList();
productUseRecord.hiTeachHour = new double[24].ToList();
productUseRecord.hiTeachccHour = new double[24].ToList();
productUseRecord.hiTaDay = new double[366].ToList();
productUseRecord.hiTeachDay = new double[366].ToList();
productUseRecord.hiTeachccDay = new double[366].ToList();
}
DateTimeOffset upTime = DateTimeOffset.UtcNow;
double[] doub = new double[24];
if (dateOff.DayOfYear > upTime.DayOfYear)
{
doub[dateOff.Hour] = 1;
}
if (productUseRecord.time > 1000000000000)
upTime = DateTimeOffset.FromUnixTimeMilliseconds(productUseRecord.time);
else
upTime = DateTimeOffset.FromUnixTimeSeconds(productUseRecord.time);
switch ($"{type}")
{
case "hita":
if (dateOff.DayOfYear == upTime.DayOfYear)
{
productUseRecord.hiTaHour[dateOff.Hour] += 1;
}
else
{
productUseRecord.hiTaHour = doub.ToList();
}
productUseRecord.hiTaDay[dateOff.DayOfYear - 1] += 1;
break;
case "hiTeach":
if (dateOff.DayOfYear == upTime.DayOfYear)
{
productUseRecord.hiTeachHour[dateOff.Hour] += 1;
}
else
{
productUseRecord.hiTeachHour = doub.ToList();
}
productUseRecord.hiTeachDay[dateOff.DayOfYear - 1] += 1;
break;
case "hiTeachcc":
if (dateOff.DayOfYear == upTime.DayOfYear)
{
productUseRecord.hiTeachccHour[dateOff.Hour] += 1;
}
else
{
productUseRecord.hiTeachccHour = doub.ToList();
}
productUseRecord.hiTeachccDay[dateOff.DayOfYear - 1] += 1;
break;
}
if (resUseRecord.Status == 200)
{
productUseRecord = await cosmosClient.GetContainer(Constant.TEAMModelOS, "Common").ReplaceItemAsync(productUseRecord, productUseRecord.id, new PartitionKey("ProductUseRecord"));
}
else
{
productUseRecord = await cosmosClient.GetContainer(Constant.TEAMModelOS, "Common").CreateItemAsync(productUseRecord, new PartitionKey("ProductUseRecord"));
}
}
catch (Exception ex)
{
await _dingDing.SendBotMsg($"BI,SetProductUseRecord(),参数:统计类型:{type},时间:{dateOff}\n {ex.Message}\n {ex.StackTrace}", GroupNames.成都开发測試群組);
}
}
}
}