CrazyIter_Bin 1 год назад
Родитель
Сommit
8c3ca124a2

+ 0 - 1
TEAMModelOS.FunctionV4/ServiceBus/ActiveTaskTopic.cs

@@ -27,7 +27,6 @@ using System.IO;
 using Azure;
 using static TEAMModelOS.SDK.Models.Service.LessonService;
 using DinkToPdf.Contracts;
-using TEAMModelOS.SDK.Helper.Common.DateTimeHelper;
 using static TEAMModelOS.SDK.StatisticsService;
 using DocumentFormat.OpenXml.Office2010.Excel;
 using DocumentFormat.OpenXml.Wordprocessing;

+ 19 - 2
TEAMModelOS.FunctionV4/TimeTrigger/IESTimerTrigger.cs

@@ -102,7 +102,16 @@ namespace TEAMModelOS.FunctionV4.TimeTrigger
                                 json.TryGetProperty("url", out JsonElement base64);
                                 using (MemoryStream ms = new MemoryStream(Convert.FromBase64String($"{base64}")))
                                 {
-                                    image = await _azureStorage.GetBlobContainerClient("0-public").UploadFileByContainer(ms, $"visitCnt/{y}{m}{d}", $"{y}{m}{d}{h}.png", false);
+                                    TimeZoneInfo localTimezone = TimeZoneInfo.Local;
+                                    var Hours = localTimezone.BaseUtcOffset.Hours;
+                                    var nowTime = DateTimeOffset.UtcNow;
+                                    if (Hours!=0)
+                                    {
+                                        //有时差
+                                        nowTime =  DateTimeOffset.UtcNow.AddHours(8-Hours);
+                                    }
+                                    image = await _azureStorage.GetBlobContainerClient("0-public").UploadFileByContainer(ms, $"visitCnt/{nowTime.ToString("yyyyMMdd")}", $"{nowTime.ToString("yyyyMMddHH")}.png", false);
+                                    //image = await _azureStorage.GetBlobContainerClient("0-public").UploadFileByContainer(ms, $"visitCnt/{y}{m}{d}", $"{y}{m}{d}{h}.png", false);
                                 }
 
                             }
@@ -144,7 +153,15 @@ namespace TEAMModelOS.FunctionV4.TimeTrigger
                                     dayJson.TryGetProperty("url", out JsonElement dayBase64);
                                     using (MemoryStream dayMs = new(Convert.FromBase64String($"{dayBase64}")))
                                     {
-                                        dayImage = await _azureStorage.GetBlobContainerClient("0-public").UploadFileByContainer(dayMs, $"visitCnt/{ptY}{ptM}{ptD}", "days.png", false);
+                                        TimeZoneInfo localTimezone = TimeZoneInfo.Local;
+                                        var Hours = localTimezone.BaseUtcOffset.Hours;
+                                        var nowTime = DateTimeOffset.UtcNow;
+                                        if (Hours!=0)
+                                        {
+                                            //有时差
+                                            nowTime =  DateTimeOffset.UtcNow.AddHours(8-Hours);
+                                        }
+                                        dayImage = await _azureStorage.GetBlobContainerClient("0-public").UploadFileByContainer(dayMs, $"visitCnt/{nowTime.ToString("yyyyMMdd")}", "days.png", false);
                                     }
                                 }
                             }

+ 0 - 1
TEAMModelOS.SDK/DI/AzureStorage/Inner/AzureBlobModel.cs

@@ -4,7 +4,6 @@ using Microsoft.Azure.Cosmos.Table;
 using System;
 using System.ComponentModel.DataAnnotations;
 using System.IO;
-using TEAMModelOS.SDK.Helper.Common.DateTimeHelper;
 
 namespace TEAMModelOS.SDK.Module.AzureBlob.Container
 {

+ 33 - 90
TEAMModelOS.SDK/Helper/Common/DateTimeHelper/DateTimeHelper.cs

@@ -2,20 +2,10 @@ using System;
 using System.Collections.Generic;
 using System.Text;
 
-namespace TEAMModelOS.SDK.Helper.Common.DateTimeHelper
+namespace TEAMModelOS.SDK
 {
     public static class DateTimeHelper
     {
-        /// <summary>
-        /// 日期转换为时间戳(时间戳单位秒)
-        /// </summary>
-        /// <param name="TimeStamp"></param>
-        /// <returns></returns>
-        public static long ConvertToTimeStamp10(DateTime time)
-        {
-            DateTime Jan1st1970 = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
-            return (long)(time.AddHours(-8) - Jan1st1970).TotalMilliseconds / 1000;
-        }
 
         public static DateTime FromUnixTimestamp(this long unixtime)
         {
@@ -23,102 +13,55 @@ namespace TEAMModelOS.SDK.Helper.Common.DateTimeHelper
             return sTime.AddMilliseconds(unixtime);
         }
 
-        public static DateTime FromUnixTimestampOffSet(this long unixtime, int offset)
-        {
-            DateTime sTime = TimeZoneInfo.ConvertTime(new DateTime(1970, 1, 1), TimeZoneInfo.Utc, TimeZoneInfo.Local);
-            int serverOffset = (int)TimeZoneInfo.Local.GetUtcOffset(DateTime.Now).TotalMinutes;
-            int subOffset = offset - serverOffset;
-            return sTime.AddMilliseconds(unixtime).AddMinutes(subOffset);
-        }
+         
         public static long ToUnixTimestamp(this DateTime datetime)
         {
             //DateTime sTime = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
             DateTime sTime = TimeZoneInfo.ConvertTime(new DateTime(1970, 1, 1), TimeZoneInfo.Utc, TimeZoneInfo.Local);
             return (long)(datetime - sTime).TotalMilliseconds;
         }
+       
         /// <summary>
-        /// 获取当前cpu振荡时间戳 17位数
-        /// </summary>
-        /// <returns></returns>
-        public static long GetCPUMillisecond()
-        {
-            return DateTime.Now.ToUniversalTime().Ticks - 621355968000000000;
-        }
-        /// <summary>
-        /// 获取标准毫秒级时间戳 13位数
-        /// </summary>
-        /// <returns></returns>
-        public static long GetMillisecond()
-        {
-            return (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000;
-        }
-        /// <summary>
-        /// 获取当前年
-        /// </summary>
-        /// <returns></returns>
-        public static int GetCurrentYear()
-        {
-            return DateTime.Now.Year;
-        }
-        /// <summary>
-        /// 获取当前月份
-        /// </summary>
-        /// <returns></returns>
-        public static int GetCurrentMonth()
-        {
-            return DateTime.Now.Month;
-        }
-        /// <summary>
-        /// 获取星期几
-        /// </summary>
-        /// <returns></returns>
-        public static DayOfWeek GetCurrentDayOfWeek()
-        {
-            return DateTime.Now.DayOfWeek;
-        }
-        /// <summary>
-        /// 获取本年第几天
-        /// </summary>
-        /// <returns></returns>
-        public static int GetCurrentDayOfYear()
-        {
-            return DateTime.Now.DayOfYear;
-        }
-        /// <summary>
-        /// 获取当前小时
-        /// </summary>
-        /// <returns></returns>
-        public static int GetCurrentHour()
-        {
-            return DateTime.Now.Hour;
-        }
-        /// <summary>
-        /// 获取当前分钟
+        /// 获得 GMT+8 时间
         /// </summary>
         /// <returns></returns>
-        public static int GetCurrentMinute()
+        public static DateTime GetGMTTime(this DateTime dateTime, int GMT = 8)
         {
-            return DateTime.Now.Minute;
+            //SystemTimeZoneById  :  https://learn.microsoft.com/zh-cn/previous-versions/windows/embedded/ms912391(v=winembedded.11)
+            //TimeZoneInfo easternZone = TimeZoneInfo.FindSystemTimeZoneById("China Standard Time");//设置时区
+            //DateTime easternTime = TimeZoneInfo.ConvertTimeFromUtc(dateTime, easternZone);
+            //return easternTime;
+
+
+            //处理UTC时差
+            TimeZoneInfo localTimezone = TimeZoneInfo.Local;
+            var Hours = localTimezone.BaseUtcOffset.Hours;
+            if (Hours!=0)
+            {
+                //有时差
+                dateTime = dateTime.AddHours(GMT-Hours);
+            }
+            return dateTime;
         }
         /// <summary>
-        /// 获取当前秒
+        /// 默认东八区+8
         /// </summary>
+        /// <param name="dateTime"></param>
+        /// <param name="GMT"></param>
         /// <returns></returns>
-        public static int GetCurrentSecond()
+        public static DateTimeOffset GetGMTTime(this DateTimeOffset dateTime,int GMT=+8)
         {
-            return DateTime.Now.Second;
+            //处理UTC时差
+            TimeZoneInfo localTimezone = TimeZoneInfo.Local;
+            var Hours = localTimezone.BaseUtcOffset.Hours;
+            if (Hours!=0)
+            {
+                //有时差
+                dateTime = dateTime.AddHours(GMT-Hours);
+            }
+            return dateTime;
         }
-        /// <summary>
-        /// 获得 GMT+8 时间
-        /// </summary>
-        /// <returns></returns>
-        public static DateTime ChinaTime()
-        {
 
-            TimeZoneInfo easternZone = TimeZoneInfo.FindSystemTimeZoneById("China Standard Time");//设置时区
-            DateTime easternTime = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, easternZone);
-            return easternTime;
-        }
         public static  int getDays(int year) { 
             int day = 0;
             for (int i = 0;i<=12;i++) {

+ 99 - 0
TEAMModelOS.SDK/Models/Dtos/Accumulate.cs

@@ -0,0 +1,99 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace TEAMModelOS.SDK.Models.Dtos
+{
+    public class Accumulate
+    {
+
+        /// <summary>
+        /// course,课程
+        /// exam 评测
+        /// homework 作业
+        /// login_school_student
+        /// login_student
+        /// login_school_teacher
+        /// login_teacher
+        /// </summary>
+        public string key { get; set; }
+        /// <summary>
+        /// 教师,学校管理员,系统管理员(包含钉钉)
+        /// </summary>
+        public string target { get; set; }
+        /// <summary>
+        /// 业务id
+        /// </summary>
+        public string id { get; set; }
+        /// <summary>
+        /// 名称
+        /// </summary>
+        public string name { get; set; }
+        /// <summary>
+        /// teacher  school  system
+        /// </summary>
+        public string scope { get; set; }
+        public int count { get; set; }
+
+        //Accumulate:Keys:Day
+
+        //Accumulate:Keys:Week
+
+        /*课程加入的人数
+         * Accumulate:Daily:teacher:course:yyyyddMM:==>1595321354-courseId=>count
+        key:course
+        target:1595321354
+        id:courseId
+        scope:teacher
+        name:课程名称
+        count:8
+         */
+        /*作业提交人数
+         * Accumulate:Daily:teacher:homework:yyyyddMM:==>1595321354-homeworkId=>count
+        key:homework
+        target:1595321354
+        id:homeworkId
+        scope:teacher
+        name:作业名称
+        count:8
+         */
+        /*评测完成人数
+         * Accumulate:Daily:teacher:exam:yyyyddMM:==>1595321354-examId=>count
+        key:exam
+        target:1595321354
+        id:examId
+        scope:teacher
+        name:作业名称
+        count:8
+         */
+        /*学生登入人数,scope学校的统一发送给管理员scope:system,发送给系统管理员,及钉钉
+        * Accumulate:Daily:school:login_student:yyyyddMM:==>hbcn-hbcn=>count
+        key:login_student
+        target:hbcn,root
+        id:hbcn,ies
+        scope:school,system
+        name:学校名称
+        count:8
+        */
+        /*教师登入人数,scope学校的统一发送给管理员scope:system,发送给系统管理员,及钉钉
+        * Accumulate:Daily:school:login_teacher:yyyyddMM:==>hbcn-hbcn=>count
+        key:login_teacher
+        target:hbcn,root
+        id:hbcn,ies
+        scope:school,system
+        name:学校名称
+        count:8
+        */
+        /*开课数量,scope学校的统一发送给管理员,scope:system,发送给系统管理员,及钉钉
+       * Accumulate:Daily:school:lesson:yyyyddMM:==>hbcn-hbcn=>count
+       key:lesson
+       target:hbcn,root
+       id:hbcn,ies
+       scope:school,system
+       name:学校名称
+       count:8
+       */
+    }
+}

+ 8 - 1
TEAMModelOS.SDK/Models/Service/BI/BILogAnalyseService.cs

@@ -101,8 +101,15 @@ namespace TEAMModelOS.SDK.Models.Service.BI
          {
             List<RecCnt> recCnts = new();
             List<string> urls = new();
-
+            TimeZoneInfo localTimezone = TimeZoneInfo.Local;
+            var Hours = localTimezone.BaseUtcOffset.Hours;
             DateTimeOffset dtime = DateTimeOffset.UtcNow;
+            if (Hours!=0)
+            {
+                //有时差
+                dtime =  DateTimeOffset.UtcNow.AddHours(8-Hours);
+            }
+          
             string cDay = dtime.ToString("yyyyMMdd");
 
             //天api

+ 0 - 1
TEAMModelOS.SDK/Models/Service/FixDataService.cs

@@ -16,7 +16,6 @@ using System.Dynamic;
 using Newtonsoft.Json;
 using TEAMModelOS.Models;
 using Azure.Storage.Blobs.Models;
-using TEAMModelOS.SDK.Helper.Common.DateTimeHelper;
 using DinkToPdf.Contracts;
 
 namespace TEAMModelOS.SDK.Models.Service

+ 0 - 1
TEAMModelOS.SDK/Models/Service/LessonService.cs

@@ -17,7 +17,6 @@ using System.Text.Json;
 using System.Threading.Tasks;
 using TEAMModelOS.SDK.DI;
 using TEAMModelOS.SDK.Extension;
-using TEAMModelOS.SDK.Helper.Common.DateTimeHelper;
 using TEAMModelOS.SDK.Models.Cosmos.Common;
 using TEAMModelOS.SDK.Models.Cosmos.OpenEntity;
 using TEAMModelOS.SDK.Services;

+ 44 - 0
TEAMModelOS.SDK/Models/Service/SystemService.cs

@@ -0,0 +1,44 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using TEAMModelOS.SDK.DI;
+using static OpenXmlPowerTools.RevisionProcessor;
+
+namespace TEAMModelOS.SDK.Models.Service
+{
+    public static class SystemService
+    {
+        /// <summary>
+        /// 记录累计数据
+        /// </summary>
+        public static async Task RecordAccumulateData(AzureRedisFactory azureRedis, string key, string target, string id, string name, string scope) 
+        {
+            if (!string.IsNullOrWhiteSpace(key)  && !string.IsNullOrWhiteSpace(target) && !string.IsNullOrWhiteSpace(id) && !string.IsNullOrWhiteSpace(name) && !string.IsNullOrWhiteSpace(scope)) {
+                //处理UTC时差
+                 var nowTime = DateTimeOffset.UtcNow.GetGMTTime();
+                var day = nowTime.ToString("yyyyMMdd");
+                ///一周的第一天
+                if (nowTime.DayOfWeek.Equals(DayOfWeek.Monday))
+                {
+                }
+                string redisKey = $"Accumulate:Daily:{scope}:{key}:{day}";
+                string member = $"{target}::{id}::{name}";
+                await azureRedis.GetRedisClient(8).SortedSetIncrementAsync(redisKey, member, 1);
+                if (key.Equals("lesson")  || key.StartsWith("login_"))
+                {
+                    redisKey = $"Accumulate:Daily:ies:{key}:{day}";
+                    if (scope.Equals("school"))
+                    {
+                        member = $"ies::{id}::{name}";
+                    }
+                    else {
+                        member = $"ies::ies::{name}";
+                    }
+                    await azureRedis.GetRedisClient(8).SortedSetIncrementAsync(redisKey, member, 1);
+                }
+            }
+        }
+    }
+}

+ 0 - 1
TEAMModelOS/Controllers/Analysis/ChangeController.cs

@@ -11,7 +11,6 @@ using System.Threading.Tasks;
 using TEAMModelOS.SDK;
 using TEAMModelOS.SDK.DI;
 using TEAMModelOS.SDK.Extension;
-using TEAMModelOS.SDK.Helper.Common.DateTimeHelper;
 using TEAMModelOS.SDK.Helper.Common.JsonHelper;
 using TEAMModelOS.SDK.Helper.Common.JsonHelper.JsonPath;
 using TEAMModelOS.SDK.Helper.Security.ShaHash;

+ 0 - 1
TEAMModelOS/Controllers/Analysis/ClassAnalysisController.cs

@@ -26,7 +26,6 @@ using TEAMModelOS.Models;
 using TEAMModelOS.SDK;
 using TEAMModelOS.SDK.DI;
 using TEAMModelOS.SDK.Extension;
-using TEAMModelOS.SDK.Helper.Common.DateTimeHelper;
 using TEAMModelOS.SDK.Models;
 using TEAMModelOS.SDK.Models.Cosmos.Common;
 using System.Net;

+ 0 - 1
TEAMModelOS/Controllers/Both/ScoreCalcController.cs

@@ -54,7 +54,6 @@ using TEAMModelOS.Models.Dto;
 using TEAMModelOS.SDK;
 using TEAMModelOS.SDK.DI;
 using TEAMModelOS.SDK.Extension;
-using TEAMModelOS.SDK.Helper.Common.DateTimeHelper;
 using TEAMModelOS.SDK.Models;
 using TEAMModelOS.SDK.Models.Cosmos.Common;
 using TEAMModelOS.SDK.Models.Cosmos.OpenEntity;

+ 0 - 1
TEAMModelOS/Controllers/Client/HiTeachController.cs

@@ -32,7 +32,6 @@ using TEAMModelOS.Models.Request;
 using Azure;
 using TEAMModelOS.Controllers.Both;
 using TEAMModelOS.SDK.Models.Cosmos.School;
-using TEAMModelOS.SDK.Helper.Common.DateTimeHelper;
 using Azure.Storage.Blobs;
 
 

+ 0 - 1
TEAMModelOS/Controllers/Common/ExamController.cs

@@ -38,7 +38,6 @@ using TEAMModelOS.SDK.Models.Cosmos.Student;
 using DocumentFormat.OpenXml.Drawing.Charts;
 using ClouDASLibx;
 using HTEXLib.Helpers.ShapeHelpers;
-using TEAMModelOS.SDK.Helper.Common.DateTimeHelper;
 using Microsoft.Extensions.Hosting;
 using System.Configuration;
 using DocumentFormat.OpenXml.Presentation;

+ 2 - 2
TEAMModelOS/Controllers/System/CoreController.cs

@@ -726,8 +726,8 @@ namespace TEAMModelOS.Controllers
                 os = "OSX";
             } 
             string region = await _searcher.SearchIpAsync(ip);
-
-            return Ok(new { os, version, description, nowtime, region, ip });
+            TimeZoneInfo localTimezone = TimeZoneInfo.Local; // 获取本地时区信息
+            return Ok(new { os, version, description, nowtime, region, ip, localTimezone , Hours = localTimezone.BaseUtcOffset.Hours, ticks=localTimezone.BaseUtcOffset.Ticks, utcNowoff =  DateTimeOffset.UtcNow, nowoff = DateTimeOffset.Now,utcNow =DateTime.UtcNow,now =DateTime.Now });
         }
         /// <summary>
         /// 等待P1V3,啟動Dcoker,支持EMF GDI+

+ 0 - 1
TEAMModelOS/Controllers/XTest/TestController.cs

@@ -54,7 +54,6 @@ using TEAMModelOS.Models;
 using TEAMModelOS.SDK;
 using TEAMModelOS.SDK.DI;
 using TEAMModelOS.SDK.Extension;
-using TEAMModelOS.SDK.Helper.Common.DateTimeHelper;
 using TEAMModelOS.SDK.Helper.Common.JsonHelper.JsonPath;
 using TEAMModelOS.SDK.Models;
 using TEAMModelOS.SDK.Models.Cosmos.Common;