Pārlūkot izejas kodu

优化登录人数存Table的方式

Li 3 gadi atpakaļ
vecāks
revīzija
f3c27384c1

+ 8 - 0
TEAMModelBI/Controllers/BITest/Ies5TestController.cs

@@ -3,10 +3,13 @@ using Microsoft.AspNetCore.Http;
 using Microsoft.AspNetCore.Mvc;
 using Microsoft.Extensions.Configuration;
 using Microsoft.Extensions.Options;
+using StackExchange.Redis;
 using System;
 using System.Collections.Generic;
 using System.Net.Http;
+using System.Text.Json;
 using System.Threading.Tasks;
+using TEAMModelBI.Tool;
 using TEAMModelOS.Models;
 using TEAMModelOS.SDK;
 using TEAMModelOS.SDK.DI;
@@ -63,5 +66,10 @@ namespace TEAMModelBI.Controllers.BITest
            return Ok(new { state = 200, dateHours, dateHours1, dateHours2, dateDay,dateDays, dateMonth, });
         }
 
+        public async Task<IActionResult> GetRedisToTable(JsonElement jsonElement)
+        {
+            return Ok(new { state = 200 });
+        }
+
     }
 }

+ 183 - 84
TEAMModelOS.SDK/Models/Service/LoginService.cs

@@ -40,7 +40,7 @@ namespace TEAMModelOS.SDK.Models.Service
             var currentDay = dateTime.Day;
             long Expire = dateTime.AddHours(expire).ToUnixTimeMilliseconds();  //token到期时间
             long now = dateTime.ToUnixTimeMilliseconds();   //时间戳
-            
+
             DateTime hour = DateTime.UtcNow.AddHours(25);   //25小时到期
             DateTime month = DateTime.UtcNow.AddDays(32);   //一个月到期
 
@@ -92,56 +92,105 @@ namespace TEAMModelOS.SDK.Models.Service
             //    }
             //}
 
-            //保存当天没小时的峰值
-            HourLogin hourLogin = new() { PartitionKey = $"HourLogin", RowKey = now.ToString(), Hour = int.Parse(dateHour) };
-            if (scope.Equals("teacher"))
-            {
-                hourLogin.Teacher = int.Parse(id);
-                hourLogin.Student = 0;
-                hourLogin.TmdUser = 0;
-            }
-            else if (scope.Equals("student"))
+            //保存当天每小时的峰值
+            List<HourLogin> hourLogins = await table.QueryWhereString<HourLogin>($"PartitionKey eq 'HourLogin' and RowKey eq '{dateHour}'");
+            if (hourLogins.Count > 0)
             {
-                hourLogin.Teacher = 0;
-                hourLogin.Student = int.Parse(id);
-                hourLogin.TmdUser = 0;
+                foreach (var hourLogin in hourLogins)
+                {
+                    if (scope.Equals("teacher"))
+                        hourLogin.Teacher += 1;
+                    else if (scope.Equals("student"))
+                        hourLogin.Student += 1;
+                    else
+                        hourLogin.TmdUser += 1;
+                }
+
+                try
+                {
+                    await table.SaveOrUpdateAll(hourLogins);
+                }
+                catch
+                {
+                }
             }
             else
             {
-                hourLogin.Teacher = 0;
-                hourLogin.Student = 0;
-                hourLogin.TmdUser = int.Parse(id);
-            }
-            try
-            {
-                await table.SaveOrUpdate<HourLogin>(hourLogin);//保存在线数据
-            }
-            catch
-            {
+                HourLogin hourLogin = new() { PartitionKey = $"HourLogin", RowKey = dateHour, Hour = int.Parse(dateHour) };
+                if (scope.Equals("teacher"))
+                {
+                    hourLogin.Teacher = 1;
+                    hourLogin.Student = 0;
+                    hourLogin.TmdUser = 0;
+                }
+                else if (scope.Equals("student"))
+                {
+                    hourLogin.Teacher = 0;
+                    hourLogin.Student = 1;
+                    hourLogin.TmdUser = 0;
+                }
+                else
+                {
+                    hourLogin.Teacher = 0;
+                    hourLogin.Student = 0;
+                    hourLogin.TmdUser = 1;
+                }
+                try
+                {
+                    await table.SaveOrUpdate<HourLogin>(hourLogin);//保存在线数据
+                }
+                catch
+                {
+                }
             }
 
-            //保存当月每天的峰值
-            DayLogin dayLogin = new() { PartitionKey = $"DayLogin", RowKey = now.ToString(), Day = int.Parse(dateDay) };
-            if (scope.Equals("teacher"))
-            {
-                dayLogin.Teacher = int.Parse(id);
-                dayLogin.Student = 0;
-                dayLogin.TmdUser = 0;
-            }
-            else if (scope.Equals("student"))
+            //保存当天的峰值
+            List<DayLogin> dayLogins = await table.QueryWhereString<DayLogin>($"PartitionKey eq 'DayLogin' and RowKey eq '{dateDay}'");
+            if (dayLogins.Count > 0)
             {
-                dayLogin.Teacher = 0;
-                dayLogin.Student = int.Parse(id);
-                dayLogin.TmdUser = 0;
+                foreach (var dayLogin in dayLogins)
+                {
+                    if (scope.Equals("teacher"))
+                        dayLogin.Teacher += 1;
+                    else if (scope.Equals("student"))
+                        dayLogin.Student += 1;
+                    else
+                        dayLogin.TmdUser += 1;
+                }
+
+                try
+                {
+                    await table.SaveOrUpdateAll(dayLogins);
+                }
+                catch
+                {
+                }
             }
             else
             {
-                dayLogin.Teacher = 0;
-                dayLogin.Student = 0;
-                dayLogin.TmdUser = int.Parse(id);
-            }
+                //保存当月每天的峰值
+                DayLogin dayLogin = new() { PartitionKey = $"DayLogin", RowKey = dateDay, Day = int.Parse(dateDay) };
+                if (scope.Equals("teacher"))
+                {
+                    dayLogin.Teacher = 1;
+                    dayLogin.Student = 0;
+                    dayLogin.TmdUser = 0;
+                }
+                else if (scope.Equals("student"))
+                {
+                    dayLogin.Teacher = 0;
+                    dayLogin.Student = 1;
+                    dayLogin.TmdUser = 0;
+                }
+                else
+                {
+                    dayLogin.Teacher = 0;
+                    dayLogin.Student = 0;
+                    dayLogin.TmdUser = 1;
+                }
 
-            await table.SaveOrUpdate<DayLogin>(dayLogin);//保存在线数据
+                await table.SaveOrUpdate<DayLogin>(dayLogin);//保存在线数据
+            }
 
             if (!string.IsNullOrWhiteSpace(school))
             {
@@ -155,7 +204,7 @@ namespace TEAMModelOS.SDK.Models.Service
                 }
 
                 var reScMonth = await _azureRedis.GetRedisClient(8).KeyTimeToLiveAsync($"Login:School:{school}:{scope}:{dateMonth}");
-                if (reScMonth != null)
+                if (reScMonth == null)
                 {
                     await _azureRedis.GetRedisClient(8).KeyExpireAsync($"Login:School:{school}:{scope}:{dateMonth}", month);  //设置到期时间
                 }
@@ -180,62 +229,112 @@ namespace TEAMModelOS.SDK.Models.Service
                 //    }
                 //}
 
-                //学校小时峰值
-                HourLoginSchool hourLoginSc = new() { PartitionKey = $"HourLogin-{school}", RowKey = now.ToString(), Hour = int.Parse(dateHour), School = school };
-                if (scope.Equals("teacher"))
+                //保存学校当天每小时的
+                List<HourLoginSchool> hourLoginSchools = await table.QueryWhereString<HourLoginSchool>($"PartitionKey eq 'HourLogin-{school}' and RowKey eq '{dateHour}'");
+                if (hourLoginSchools.Count > 0)
                 {
-                    hourLoginSc.Teacher = int.Parse(id);
-                    hourLoginSc.Student = 0;
-                    hourLoginSc.TmdUser = 0;
-                }
-                else if (scope.Equals("student"))
-                {
-                    hourLoginSc.Teacher = 0;
-                    hourLoginSc.Student = int.Parse(id);
-                    hourLoginSc.TmdUser = 0;
+                    foreach (var hLoginSc in hourLoginSchools)
+                    {
+                        if (scope.Equals("teacher"))
+                            hLoginSc.Teacher += 1;
+                        else if (scope.Equals("student"))
+                            hLoginSc.Student += 1;
+                        else
+                            hLoginSc.TmdUser += 1;
+                    }
+
+                    try
+                    {
+                        await table.SaveOrUpdateAll(hourLogins);
+                    }
+                    catch
+                    {
+                    }
                 }
                 else
                 {
-                    hourLoginSc.Teacher = 0;
-                    hourLoginSc.Student = 0;
-                    hourLoginSc.TmdUser = int.Parse(id);
-                }
+                    //学校小时峰值
+                    HourLoginSchool hourLoginSc = new() { PartitionKey = $"HourLogin-{school}", RowKey = dateHour, Hour = int.Parse(dateHour), School = school };
+                    if (scope.Equals("teacher"))
+                    {
+                        hourLoginSc.Teacher = 1;
+                        hourLoginSc.Student = 0;
+                        hourLoginSc.TmdUser = 0;
+                    }
+                    else if (scope.Equals("student"))
+                    {
+                        hourLoginSc.Teacher = 0;
+                        hourLoginSc.Student = 1;
+                        hourLoginSc.TmdUser = 0;
+                    }
+                    else
+                    {
+                        hourLoginSc.Teacher = 0;
+                        hourLoginSc.Student = 0;
+                        hourLoginSc.TmdUser = 1;
+                    }
 
-                try
-                {
-                    await table.SaveOrUpdate<HourLoginSchool>(hourLoginSc);//保存在线数据
-                }
-                catch
-                {                    
+                    try
+                    {
+                        await table.SaveOrUpdate<HourLoginSchool>(hourLoginSc);//保存在线数据
+                    }
+                    catch
+                    {
+                    }
                 }
 
                 //学校天峰值
-                DayLoginSchool dayLoginSc = new() { PartitionKey = $"DayLogin-{school}", RowKey = now.ToString(), Day = int.Parse(dateDay), School = school };
-                if (scope.Equals("teacher"))
-                {
-                    dayLoginSc.Teacher = int.Parse(id);
-                    dayLoginSc.Student = 0;
-                    dayLoginSc.TmdUser = 0;
-                }
-                else if (scope.Equals("student"))
+                List<DayLoginSchool> DayLoginSchools = await table.QueryWhereString<DayLoginSchool>($"PartitionKey eq 'DayLogin-{school}' and RowKey eq '{dateDay}'");
+                if (DayLoginSchools.Count > 0)
                 {
-                    dayLoginSc.Teacher = 0;
-                    dayLoginSc.Student = int.Parse(id);
-                    dayLoginSc.TmdUser = 0;
+                    foreach (var hLoginSc in hourLoginSchools)
+                    {
+                        if (scope.Equals("teacher"))
+                            hLoginSc.Teacher += 1;
+                        else if (scope.Equals("student"))
+                            hLoginSc.Student += 1;
+                        else
+                            hLoginSc.TmdUser += 1;
+                    }
+
+                    try
+                    {
+                        await table.SaveOrUpdateAll(hourLogins);
+                    }
+                    catch
+                    {
+                    }
                 }
                 else
                 {
-                    dayLoginSc.Teacher = 0;
-                    dayLoginSc.Student = 0;
-                    dayLoginSc.TmdUser = int.Parse(id);
-                }
+                    //学校天峰值
+                    DayLoginSchool dayLoginSc = new() { PartitionKey = $"DayLogin-{school}", RowKey = dateDay, Day = int.Parse(dateDay), School = school };
+                    if (scope.Equals("teacher"))
+                    {
+                        dayLoginSc.Teacher = 1;
+                        dayLoginSc.Student = 0;
+                        dayLoginSc.TmdUser = 0;
+                    }
+                    else if (scope.Equals("student"))
+                    {
+                        dayLoginSc.Teacher = 0;
+                        dayLoginSc.Student = 1;
+                        dayLoginSc.TmdUser = 0;
+                    }
+                    else
+                    {
+                        dayLoginSc.Teacher = 0;
+                        dayLoginSc.Student = 0;
+                        dayLoginSc.TmdUser = 1;
+                    }
 
-                try
-                {
-                    await table.SaveOrUpdate<DayLoginSchool>(dayLoginSc);//保存在线数据
-                }
-                catch
-                {
+                    try
+                    {
+                        await table.SaveOrUpdate<DayLoginSchool>(dayLoginSc);//保存在线数据
+                    }
+                    catch
+                    {
+                    }
                 }
             }