瀏覽代碼

Merge branch 'PL/develop-BI' into develop

Li 2 年之前
父節點
當前提交
8ac153dfde
共有 36 個文件被更改,包括 334 次插入198 次删除
  1. 1 1
      TEAMModelBI/Controllers/BIAbility/AbilityMgmtController.cs
  2. 1 1
      TEAMModelBI/Controllers/BIAbility/AbilityTaskMgmtController.cs
  3. 45 58
      TEAMModelBI/Controllers/BIHome/AnalyseFileController.cs
  4. 1 1
      TEAMModelBI/Controllers/BIHome/HomeStatisController.cs
  5. 2 2
      TEAMModelBI/Controllers/BIHome/OnLineController.cs
  6. 1 1
      TEAMModelBI/Controllers/BINormal/AppCompanyController.cs
  7. 1 1
      TEAMModelBI/Controllers/BISchool/AreaRelevantController.cs
  8. 1 1
      TEAMModelBI/Controllers/BISchool/BatchAreaController.cs
  9. 1 1
      TEAMModelBI/Controllers/BISchool/BatchSchoolController.cs
  10. 1 1
      TEAMModelBI/Controllers/BISchool/LessonController.cs
  11. 1 1
      TEAMModelBI/Controllers/BISchool/ProductController.cs
  12. 1 1
      TEAMModelBI/Controllers/BISchool/RoomController.cs
  13. 4 4
      TEAMModelBI/Controllers/BISchool/SchoolController.cs
  14. 1 1
      TEAMModelBI/Controllers/BIStudent/StuActivityController.cs
  15. 1 1
      TEAMModelBI/Controllers/BIStudent/StudentController.cs
  16. 1 1
      TEAMModelBI/Controllers/BITable/BIOpenApiController.cs
  17. 1 1
      TEAMModelBI/Controllers/BITable/CompanyController.cs
  18. 1 1
      TEAMModelBI/Controllers/BITable/CompanyUserController.cs
  19. 1 1
      TEAMModelBI/Controllers/BITeacher/TeacherController.cs
  20. 13 64
      TEAMModelBI/Controllers/BITest/TestController.cs
  21. 42 40
      TEAMModelBI/Controllers/Census/ActivitySticsController.cs
  22. 1 1
      TEAMModelBI/Controllers/Census/BlobLogController.cs
  23. 1 1
      TEAMModelBI/Controllers/Census/ItemSticsController.cs
  24. 1 1
      TEAMModelBI/Controllers/Census/LessonSticsController.cs
  25. 1 1
      TEAMModelBI/Controllers/Census/PaperController.cs
  26. 1 1
      TEAMModelBI/Controllers/Census/ProductStatisController.cs
  27. 1 1
      TEAMModelBI/Controllers/Census/SchoolController.cs
  28. 1 1
      TEAMModelBI/Controllers/Census/StudyController.cs
  29. 1 1
      TEAMModelBI/Controllers/Core/BlobController.cs
  30. 1 1
      TEAMModelBI/Controllers/DingDingStruc/DDStructController.cs
  31. 1 1
      TEAMModelBI/Controllers/DingDingStruc/TableDingDingInfoController.cs
  32. 1 1
      TEAMModelBI/Controllers/LoginController.cs
  33. 1 1
      TEAMModelBI/Controllers/OperateRecord/OperateLogController.cs
  34. 1 1
      TEAMModelBI/Tool/Context/BIConst.cs
  35. 35 1
      TEAMModelBI/Models/RecordM/RecAppGWInfo.cs
  36. 164 0
      TEAMModelOS.SDK/Models/Service/BI/BILogAnalyseService.cs

+ 1 - 1
TEAMModelBI/Controllers/BIAbility/AbilityMgmtController.cs

@@ -17,8 +17,8 @@ using TEAMModelOS.SDK.Models.Cosmos.BI;
 using TEAMModelOS.SDK.Extension;
 using TEAMModelBI.Filter;
 using TEAMModelBI.Tool.Extension;
-using TEAMModelBI.Tool.Context;
 using TEAMModelBI.DI.BIAzureStorage;
+using TEAMModelOS.SDK.Context.BI;
 
 namespace TEAMModelBI.Controllers.BIAbility
 {

+ 1 - 1
TEAMModelBI/Controllers/BIAbility/AbilityTaskMgmtController.cs

@@ -18,8 +18,8 @@ using TEAMModelBI.Filter;
 using TEAMModelOS.SDK.Services;
 using TEAMModelBI.Tool.Extension;
 using TEAMModelOS.SDK.Extension;
-using TEAMModelBI.Tool.Context;
 using TEAMModelBI.DI.BIAzureStorage;
+using TEAMModelOS.SDK.Context.BI;
 
 namespace TEAMModelBI.Controllers.BIAbility
 {

+ 45 - 58
TEAMModelBI/Controllers/BIHome/AnalyseFileController.cs

@@ -10,8 +10,7 @@ using System.Linq;
 using System.Text;
 using System.Text.Json;
 using System.Threading.Tasks;
-using TEAMModelBI.Models.RecordM;
-using TEAMModelBI.Tool.Context;
+using TEAMModelOS.SDK.Context.BI;
 using TEAMModelOS.SDK.DI;
 using TEAMModelOS.SDK.Extension;
 using TEAMModelOS.SDK.Models.Cosmos.BI;
@@ -114,85 +113,73 @@ namespace TEAMModelBI.Controllers.BIHome
         public async Task<IActionResult> GetOSLog(JsonElement jsonElement) 
         {
             jsonElement.TryGetProperty("site", out JsonElement site);
-            DateTimeOffset dateTime = DateTimeOffset.UtcNow;
-            int year = dateTime.Year;
-            int month = dateTime.Month;
-            int day = dateTime.Day;
-            int hour = dateTime.Hour;
 
             var blobClient = _azureStorage.GetBlobContainerClient($"insights-logs-applicationgatewayfirewalllog",name:BIConst.LogChina);
             if ($"{site}".Equals(BIConst.Global)) 
             {
-                blobClient = _azureStorage.GetBlobContainerClient($"insights-logs-applicationgatewayfirewalllog", name: BIConst.Global);
+                blobClient = _azureStorage.GetBlobContainerClient($"insights-logs-applicationgatewayfirewalllog", name: BIConst.LogGlobal);
             }
+            
+            //List<ReadContent> contents = new();
+            List<RecCnt> recCnts = new();
+            List<string> urls = new();
+
             //地址:    y={year}/m={month}/d={day}/h={hour}/m=00/PT1H.json
             string logName = "resourceId=/SUBSCRIPTIONS/73B7F9EF-D8B7-4444-9E8D-D80B43BF3CD4/RESOURCEGROUPS/TEAMMODELCHENGDU/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/OSFIREWARE";
             await foreach (BlobItem blobItem in blobClient.GetBlobsAsync(BlobTraits.None, BlobStates.None, logName))
             {
-                BlobClient tempBlobClient = blobClient.GetBlobClient(blobItem.Name);
 
+                StringBuilder visits = new("[");
 
-                StreamReader streamReader = new StreamReader(new FileStream(blobItem.Name, FileMode.Open, FileAccess.Read, FileShare.ReadWrite), Encoding.UTF8);
-                if (await blobClient.ExistsAsync())
+                BlobClient tempBlobClient = blobClient.GetBlobClient(blobItem.Name);
+                BlobDownloadInfo download = tempBlobClient.Download();
+                var content = download.Content;
+                string text;
+                using (var streamReader = new StreamReader(content))
                 {
-                }
-            }
-
-
-
-
-
-
+                    while ((text = streamReader.ReadLine()) != null)
+                    {
+                        if (streamReader.EndOfStream)
+                            visits.Append($"{text.ToString()}");
+                        else
+                            visits.Append($"{text.ToString()},");
+                    }
 
+                    visits.Append("]");
+                    streamReader.Close();
+                }
 
+                string input = visits.ToString();
+                List<AGInfo> aGInfos = input.ToObject<List<AGInfo>>();
+                DateTimeOffset dtime = DateTimeOffset.UtcNow;
+                string cHour = dtime.ToString("yyyyMMddHH");
+                string cDay = dtime.ToString("yyyyMMdd");
+                if (aGInfos.Count > 0)
+                {
+                    cHour = aGInfos.Select(s => DateTimeOffset.Parse(s.time).ToString("yyyyMMddHH")).First();
+                    cDay = aGInfos.Select(s => DateTimeOffset.Parse(s.time).ToString("yyyyMMdd")).First();
+                }
 
-            return Ok(new { state = 200 });
-        }
+                RecCnt saveCnts = new();
 
+                List<RecAppGWInfo> recInfo = aGInfos.Select(s => new RecAppGWInfo { hour = cHour, ip = s.properties.clientIp, api = s.properties.requestUri.Split("?").ToList().Count() > 1 ? s.properties.requestUri.Split("?").ToList()[0] : s.properties.requestUri, hostName = s.properties.hostname }).ToList();
 
+                List<RecApiCnt> apiCnt = recInfo.GroupBy(a => a.api).Select(g => new RecApiCnt { api = g.Key, count = g.Count(), hour = cHour, hostName = g.Select(h => h.hostName).Distinct().ToList(), ip = g.Select(i => i.ip).Distinct().ToList() }).ToList();
+                saveCnts.apiCnt = apiCnt;
 
-        public record StatisNameCnt 
-        {
-            public string name { get; set; }
-            public int cnt { get; set; }
-        }
+                List<RecIpCnt> ipCnt = recInfo.GroupBy(a => a.ip).Select(g => new RecIpCnt { ip = g.Key, count = g.Count(), hour = cHour, hostName = g.Select(h => h.hostName).Distinct().ToList(), api = g.Select(i => i.api).Distinct().ToList() }).ToList();
+                saveCnts.ipCnt = ipCnt;
+                recCnts.Add(saveCnts);
 
-        public record AGInfo 
-        {
-            //public string resourceId { get; set; }
+                ////保存存至Blob文件
+                var url = await _azureStorage.GetBlobContainerClient("0-public").UploadFileByContainer(saveCnts.ToJsonString(), $"visitCnt/{cDay}", $"{cHour}.json");
 
-            public string operationName { get; set; }
-            public string time { get; set; }
-            public string category { get; set; }
-            public Properties properties { get; set; }
-        }
+                urls.Add(url);
+            }
 
-        public record Properties 
-        {
-            //public string instanceId { get; set; }
-            public string clientIp { get; set; }
-            public string clientPort { get; set; }
-            public string requestUri { get; set; }
-            public string ruleSetType { get; set; }
-            public string ruleSetVersion { get; set; }
-            public string ruleId { get; set;}
-            public string ruleGroup { get; set; }
-            //public string message { get; set; }
-            public string action { get; set; }
-            public string site { get; set; }
-            //public Datails datails { get; set; }
-            public string hostname { get; set; }
-            public string transactionId { get; set; }
+            return Ok(new { state = 200, recCnts, urls });
         }
 
-        public record Datails 
-        {
-            public string message { get; set; }
-            public string data { get; set; }
-            public string file { get; set; }
-            public string line { get; set; }
-
-        }
 
     }
 }

+ 1 - 1
TEAMModelBI/Controllers/BIHome/HomeStatisController.cs

@@ -14,7 +14,7 @@ using System.Text;
 using StackExchange.Redis;
 using TEAMModelOS.SDK.Extension;
 using TEAMModelBI.Tool;
-using TEAMModelBI.Tool.Context;
+using TEAMModelOS.SDK.Context.BI;
 
 namespace TEAMModelBI.Controllers.BIHome
 {

+ 2 - 2
TEAMModelBI/Controllers/BIHome/OnLineController.cs

@@ -11,12 +11,12 @@ using System.Linq;
 using System.Text;
 using System.Text.Json;
 using System.Threading.Tasks;
-using TEAMModelBI.Models.RecordM;
 using TEAMModelBI.Tool;
-using TEAMModelBI.Tool.Context;
+using TEAMModelOS.SDK.Context.BI;
 using TEAMModelOS.SDK.DI;
 using TEAMModelOS.SDK.Extension;
 using TEAMModelOS.SDK.Models;
+using TEAMModelOS.SDK.Models.Cosmos.BI;
 using TEAMModelOS.SDK.Models.Table;
 
 namespace TEAMModelBI.Controllers.BIHome

+ 1 - 1
TEAMModelBI/Controllers/BINormal/AppCompanyController.cs

@@ -12,9 +12,9 @@ using System.Threading.Tasks;
 using TEAMModelBI.DI.BIAzureStorage;
 using TEAMModelBI.Filter;
 using TEAMModelBI.Models.Extension;
-using TEAMModelBI.Tool.Context;
 using TEAMModelBI.Tool.Extension;
 using TEAMModelOS.Models;
+using TEAMModelOS.SDK.Context.BI;
 using TEAMModelOS.SDK.DI;
 using TEAMModelOS.SDK.Extension;
 using TEAMModelOS.SDK.Models.Cosmos.BI;

+ 1 - 1
TEAMModelBI/Controllers/BISchool/AreaRelevantController.cs

@@ -11,10 +11,10 @@ using System.Threading.Tasks;
 using TEAMModelBI.DI.BIAzureStorage;
 using TEAMModelBI.Filter;
 using TEAMModelBI.Models;
-using TEAMModelBI.Tool.Context;
 using TEAMModelBI.Tool.Extension;
 using TEAMModelOS.Models;
 using TEAMModelOS.SDK;
+using TEAMModelOS.SDK.Context.BI;
 using TEAMModelOS.SDK.Context.Constant;
 using TEAMModelOS.SDK.DI;
 using TEAMModelOS.SDK.Extension;

+ 1 - 1
TEAMModelBI/Controllers/BISchool/BatchAreaController.cs

@@ -20,7 +20,6 @@ using TEAMModelOS.SDK.Models.Service;
 using TEAMModelBI.Filter;
 using TEAMModelBI.Tool.Extension;
 using TEAMModelBI.Tool;
-using TEAMModelBI.Tool.Context;
 using TEAMModelBI.DI.BIAzureStorage;
 using Azure.Storage.Blobs.Models;
 using Azure;
@@ -29,6 +28,7 @@ using System.Net.Http;
 using System.Net.Http.Json;
 using System.Net;
 using TEAMModelOS.SDK;
+using TEAMModelOS.SDK.Context.BI;
 
 namespace TEAMModelBI.Controllers.BISchool
 {

+ 1 - 1
TEAMModelBI/Controllers/BISchool/BatchSchoolController.cs

@@ -26,9 +26,9 @@ using TEAMModelBI.Filter;
 using TEAMModelBI.Tool.Extension;
 using TEAMModelBI.Tool;
 using TEAMModelBI.Models;
-using TEAMModelBI.Tool.Context;
 using TEAMModelBI.DI.BIAzureStorage;
 using TEAMModelOS.SDK;
+using TEAMModelOS.SDK.Context.BI;
 
 namespace TEAMModelBI.Controllers.BISchool
 {

+ 1 - 1
TEAMModelBI/Controllers/BISchool/LessonController.cs

@@ -10,7 +10,7 @@ using System.Text.Json;
 using System.Threading;
 using System.Threading.Tasks;
 using TEAMModelBI.Tool;
-using TEAMModelBI.Tool.Context;
+using TEAMModelOS.SDK.Context.BI;
 using TEAMModelOS.SDK.DI;
 using TEAMModelOS.SDK.Extension;
 using TEAMModelOS.SDK.Models;

+ 1 - 1
TEAMModelBI/Controllers/BISchool/ProductController.cs

@@ -6,8 +6,8 @@ using Microsoft.Extensions.Options;
 using System.Collections.Generic;
 using System.Text.Json;
 using System.Threading.Tasks;
-using TEAMModelBI.Tool.Context;
 using TEAMModelOS.Models;
+using TEAMModelOS.SDK.Context.BI;
 using TEAMModelOS.SDK.DI;
 using TEAMModelOS.SDK.Extension;
 using TEAMModelOS.SDK.Models;

+ 1 - 1
TEAMModelBI/Controllers/BISchool/RoomController.cs

@@ -9,9 +9,9 @@ using System.Text.Json;
 using System.Threading.Tasks;
 using TEAMModelBI.DI.BIAzureStorage;
 using TEAMModelBI.Filter;
-using TEAMModelBI.Tool.Context;
 using TEAMModelBI.Tool.Extension;
 using TEAMModelOS.Models;
+using TEAMModelOS.SDK.Context.BI;
 using TEAMModelOS.SDK.DI;
 using TEAMModelOS.SDK.Extension;
 using TEAMModelOS.SDK.Models;

+ 4 - 4
TEAMModelBI/Controllers/BISchool/SchoolController.cs

@@ -18,11 +18,11 @@ using TEAMModelBI.DI.BIAzureStorage;
 using TEAMModelBI.Filter;
 using TEAMModelBI.Models;
 using TEAMModelBI.Tool;
-using TEAMModelBI.Tool.Context;
 using TEAMModelBI.Tool.CosmosBank;
 using TEAMModelBI.Tool.Extension;
 using TEAMModelOS.Models;
 using TEAMModelOS.SDK;
+using TEAMModelOS.SDK.Context.BI;
 using TEAMModelOS.SDK.Context.Constant;
 using TEAMModelOS.SDK.DI;
 using TEAMModelOS.SDK.Extension;
@@ -1662,7 +1662,7 @@ namespace TEAMModelBI.Controllers.BISchool
             int lessAll = 0;  //所以课例
             int lessLastdayCnt = 0;  //昨天的课例
             int lessDayCnt = 0;    //今天的课例
-            int lessLastYarCnt = 0; //去年的课例
+            int lessLastYearCnt = 0; //去年的课例
             int lessYearCnt = 0; //去年的课例
 
             int interAll = 0;    //所有互动总数
@@ -1692,7 +1692,7 @@ namespace TEAMModelBI.Controllers.BISchool
             lessDayCnt = await CommonFind.GetSqlValueCount(cosmosClient, "School", lessDaySql);
 
             string lessLastYarSql = $"{strSql} and {scSql} and c.startTime >= { lastYears} and c.startTime <= {lastYeare} ";
-            lessLastYarCnt = await CommonFind.GetSqlValueCount(cosmosClient, "School", lessLastYarSql);
+            lessLastYearCnt = await CommonFind.GetSqlValueCount(cosmosClient, "School", lessLastYarSql);
 
             string lessYearSql = $"{strSql} and {scSql} and c.startTime >= { years} and c.startTime <= {yeare} ";
             lessYearCnt = await CommonFind.GetSqlValueCount(cosmosClient, "School", lessYearSql);
@@ -1729,7 +1729,7 @@ namespace TEAMModelBI.Controllers.BISchool
             string yearActSql = $" and {scSql} and c.createTime >= {years} and c.createTime <= {yeare}";
             yearActCn = await ActivityWay.GetCnt(cosmosClient, yearActSql);
 
-            return Ok(new { state = RespondCode.Ok, lessAll, lessLastdayCnt, lessDayCnt, lessLastYarCnt, lessYearCnt, interAll, lastDayInterCnt, interCnt, lastYarInterCnt, yearInterCnt, actAllCnt, lastActCnt, actCnt, lastYearActCn, yearActCn });
+            return Ok(new { state = RespondCode.Ok, lessAll, lessLastdayCnt, lessDayCnt, lessLastYearCnt, lessYearCnt, interAll, lastDayInterCnt, interCnt, lastYarInterCnt, yearInterCnt, actAllCnt, lastActCnt, actCnt, lastYearActCn, yearActCn });
         }
 
         /// <summary>

+ 1 - 1
TEAMModelBI/Controllers/BIStudent/StuActivityController.cs

@@ -7,8 +7,8 @@ using System.Collections.Generic;
 using System.Linq;
 using System.Text.Json;
 using System.Threading.Tasks;
-using TEAMModelBI.Tool.Context;
 using TEAMModelOS.Models;
+using TEAMModelOS.SDK.Context.BI;
 using TEAMModelOS.SDK.DI;
 using TEAMModelOS.SDK.Extension;
 using TEAMModelOS.SDK.Models;

+ 1 - 1
TEAMModelBI/Controllers/BIStudent/StudentController.cs

@@ -5,8 +5,8 @@ using Microsoft.Extensions.Options;
 using System.Collections.Generic;
 using System.Text.Json;
 using System.Threading.Tasks;
-using TEAMModelBI.Tool.Context;
 using TEAMModelOS.Models;
+using TEAMModelOS.SDK.Context.BI;
 using TEAMModelOS.SDK.DI;
 using TEAMModelOS.SDK.Models;
 

+ 1 - 1
TEAMModelBI/Controllers/BITable/BIOpenApiController.cs

@@ -9,9 +9,9 @@ using System.Text.Json;
 using System.Threading.Tasks;
 using TEAMModelBI.DI.BIAzureStorage;
 using TEAMModelBI.Filter;
-using TEAMModelBI.Tool.Context;
 using TEAMModelBI.Tool.Extension;
 using TEAMModelOS.Models;
+using TEAMModelOS.SDK.Context.BI;
 using TEAMModelOS.SDK.DI;
 using TEAMModelOS.SDK.Extension;
 using TEAMModelOS.SDK.Models.Cosmos.BI;

+ 1 - 1
TEAMModelBI/Controllers/BITable/CompanyController.cs

@@ -12,9 +12,9 @@ using System.Threading.Tasks;
 using TEAMModelBI.DI.BIAzureStorage;
 using TEAMModelBI.Filter;
 using TEAMModelBI.Models.Extension;
-using TEAMModelBI.Tool.Context;
 using TEAMModelBI.Tool.Extension;
 using TEAMModelOS.Models;
+using TEAMModelOS.SDK.Context.BI;
 using TEAMModelOS.SDK.DI;
 using TEAMModelOS.SDK.Extension;
 using TEAMModelOS.SDK.Models.Cosmos.BI;

+ 1 - 1
TEAMModelBI/Controllers/BITable/CompanyUserController.cs

@@ -6,8 +6,8 @@ using System.Collections.Generic;
 using System.Text.Json;
 using System.Threading.Tasks;
 using TEAMModelBI.Models;
-using TEAMModelBI.Tool.Context;
 using TEAMModelOS.Models;
+using TEAMModelOS.SDK.Context.BI;
 using TEAMModelOS.SDK.Context.Constant;
 using TEAMModelOS.SDK.DI;
 using TEAMModelOS.SDK.Extension;

+ 1 - 1
TEAMModelBI/Controllers/BITeacher/TeacherController.cs

@@ -9,7 +9,7 @@ using TEAMModelOS.Models;
 using TEAMModelOS.SDK.DI;
 using TEAMModelOS.SDK.Extension;
 using TEAMModelOS.SDK.Models;
-using TEAMModelBI.Tool.Context;
+using TEAMModelOS.SDK.Context.BI;
 
 namespace TEAMModelBI.Controllers.BITeacher
 {

+ 13 - 64
TEAMModelBI/Controllers/BITest/TestController.cs

@@ -45,9 +45,10 @@ using System.Net;
 using TEAMModelBI.Tool.CosmosBank;
 using System.Diagnostics;
 using StackExchange.Redis;
-using TEAMModelBI.Tool.Context;
 using TEAMModelBI.DI.BIAzureStorage;
 using TEAMModelOS.SDK.Models.Service.BI;
+using TEAMModelOS.SDK.Context.BI;
+using TEAMModelOS.SDK.Context.Constant;
 
 namespace TEAMModelBI.Controllers.BITest
 {
@@ -1437,73 +1438,21 @@ namespace TEAMModelBI.Controllers.BITest
         }
 
 
-
-        List<string> schools = new()
-        {
-            "dghznx",
-            "cxhhlx",
-            "xjaxx",
-            "zjqxx",
-            "xnygxx",
-            "lxxcfx",
-            "gxjrxx",
-            "cdgxsx",
-            "yzxx",
-            "kjyxx",
-            "wjylxx",
-            "dsgjxx",
-            "ydzt",
-            "xndbxx",
-            "sqtszx",
-            "cdxczx",
-            "ghsyzx",
-            "lqsx",
-            "cdxxps",
-            "xcfx",
-            "xyqxx",
-            "xncbyy",
-            "cdlqjk",
-            "lqdmxx",
-            "lqyx",
-            "pclxxx",
-            "cdfzx",
-            "xnblxx",
-            "ghsx",
-            "khdycz",
-            "khbmxx",
-            "khdecz",
-            "khzx",
-            "khhbzx",
-            "gxxcxx",
-            "khhtxx",
-            "khdxxx",
-            "khsyxx"
-        };
-
-        public async Task SetTeacherSchool(AzureCosmosFactory _azureCosmos)
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="jsonElement"></param>
+        /// <returns></returns>
+        [HttpPost("get-loganalyse")]
+        public async Task<IActionResult> GetLogAnalyse(JsonElement jsonElement) 
         {
-            var cosmosClient = _azureCosmos.GetCosmosClient();
-            foreach (var item in schools)
-            {
-                School school = await cosmosClient.GetContainer("TEAMModelOS", "School").ReadItemAsync<School>($"{item}", new PartitionKey("Base"));
+            if (!jsonElement.TryGetProperty("path", out JsonElement path)) return BadRequest();
+            var (an ,saveUrl) = await BILogAnalyseService.GetPathAnalyse(_azureStorage, $"{path}");
 
-                List<Teacher> teachers = new();
-                await foreach (var tch in cosmosClient.GetContainer("TEAMModelOS", "Teacher").GetItemQueryIterator<Teacher>(queryText: $"SELECT value(c) FROM c join s in c.schools where s.schoolId='dghznx' and c.code='Base'", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("Base") }))
-                {
-                    teachers.Add(tch);
-                }
-
-                if (teachers.Count > 0)
-                {
-                    foreach (var teacher in teachers)
-                    {
-                        teacher.schools.ForEach(tch => { if (tch.schoolId.Equals(item)) { tch.areaId = school.areaId; } });
-                        await cosmosClient.GetContainer("TEAMModelOS", "Teacher").ReplaceItemAsync<Teacher>(teacher, teacher.id, new PartitionKey("Base"));
-                    }
-                }
-            }
+            return Ok(new { state = RespondCode.Ok, an, saveUrl });
         }
 
+
         public class linqTest
         {
             public string id{ get; set; }

+ 42 - 40
TEAMModelBI/Controllers/Census/ActivitySticsController.cs

@@ -16,8 +16,8 @@ using TEAMModelOS.SDK.Extension;
 using TEAMModelBI.Models;
 using TEAMModelOS.SDK;
 using TEAMModelBI.Tool.CosmosBank;
-using TEAMModelBI.Tool.Context;
 using TEAMModelOS.SDK.Models.Cosmos.BI;
+using TEAMModelOS.SDK.Context.BI;
 
 namespace TEAMModelBI.Controllers.Census
 {
@@ -47,25 +47,25 @@ namespace TEAMModelBI.Controllers.Census
         /// <returns></returns>
         [ProducesDefaultResponseType]
         [HttpPost("get-count")]
-        public async Task<IActionResult> GetCount(JsonElement jsonElement) 
+        public async Task<IActionResult> GetCount(JsonElement jsonElement)
         {
             jsonElement.TryGetProperty("tmdId", out JsonElement tmdId);
-            if(!jsonElement.TryGetProperty("term", out JsonElement term)) return BadRequest();
+            if (!jsonElement.TryGetProperty("term", out JsonElement term)) return BadRequest();
             jsonElement.TryGetProperty("site", out JsonElement site);
             long start = 0, end = 0;
-            if (bool.Parse($"{term}") == true) 
+            if (bool.Parse($"{term}") == true)
             {
                 (start, end) = TimeHelper.GetTermStartOrEnd(DateTime.Now);
             }
             var cosmosClient = _azureCosmos.GetCosmosClient();
             if ($"{site}".Equals(BIConst.Global))
                 cosmosClient = _azureCosmos.GetCosmosClient(name: BIConst.Global);
-             List<object> activityCount = new List<object>();
+            List<object> activityCount = new List<object>();
 
             if (!string.IsNullOrEmpty($"{tmdId}"))
             {
                 List<string> schoolIds = await CommonFind.FindSchoolIds(cosmosClient, $"{tmdId}");
-                
+
                 foreach (var itemId in schoolIds)
                 {
                     School school = new();
@@ -92,7 +92,7 @@ namespace TEAMModelBI.Controllers.Census
                     activityCount.Add(tempCount);
                 }
             }
-            else 
+            else
             {
                 foreach (var type in StaticValue.activityTypes)
                 {
@@ -116,7 +116,7 @@ namespace TEAMModelBI.Controllers.Census
         /// </summary>
         /// <returns></returns>
         [HttpPost("get-allactivity")]
-        public async Task<IActionResult> GetAllActivity(JsonElement jsonElement) 
+        public async Task<IActionResult> GetAllActivity(JsonElement jsonElement)
         {
             try
             {
@@ -128,7 +128,7 @@ namespace TEAMModelBI.Controllers.Census
                 foreach (var type in StaticValue.activityTypes)
                 {
                     string querySql = $"SELECT Count(c.id) as totals FROM c where c.pk='{type}'  ";
-                    
+
                     long totals = await CommonFind.FindTotals(cosmosClient, querySql, new List<string>() { "Common" });
 
                     KeyValuePair<string, long> valuePair = new KeyValuePair<string, long>(type, totals);
@@ -192,7 +192,7 @@ namespace TEAMModelBI.Controllers.Census
         /// <param name="jsonElement"></param>
         /// <returns></returns>
         [HttpPost("get-termactivity")]
-        public async Task<IActionResult> GetTermActivity(JsonElement jsonElement) 
+        public async Task<IActionResult> GetTermActivity(JsonElement jsonElement)
         {
             jsonElement.TryGetProperty("tmdId", out JsonElement tmdId);
             jsonElement.TryGetProperty("site", out JsonElement site);
@@ -217,7 +217,7 @@ namespace TEAMModelBI.Controllers.Census
                     }
                     ActivityCount activityCount = new ActivityCount() { id = schoolId, name = school.name != null ? school.name : schoolId };
 
-                    foreach (var type in StaticValue.activityTypes) 
+                    foreach (var type in StaticValue.activityTypes)
                     {
                         string activitySql = $"SELECT COUNT(c.id) AS totals  FROM c WHERE c.pk='{type}' AND c.school='{school}' and c.createTime >= {start} and c.createTime <= {end}";
                         long totals = await CommonFind.FindTotals(cosmosClient, activitySql, new List<string>() { "Common" });
@@ -251,7 +251,7 @@ namespace TEAMModelBI.Controllers.Census
         /// <param name="jsonElement"></param>
         /// <returns></returns>
         [HttpPost("get-area")]
-        public async Task<IActionResult> GetAreaActovoty(JsonElement jsonElement) 
+        public async Task<IActionResult> GetAreaActovoty(JsonElement jsonElement)
         {
             if (!jsonElement.TryGetProperty("areaId", out JsonElement areaId)) return BadRequest();
             jsonElement.TryGetProperty("site", out JsonElement site);
@@ -277,7 +277,7 @@ namespace TEAMModelBI.Controllers.Census
                 ActivityCount tempCount = new ActivityCount() { id = school.id, name = school.name != null ? school.name : school.id };
                 foreach (var type in StaticValue.activityTypes)
                 {
-                    StringBuilder sqlTxt = new($"select COUNT(c.id) AS totals from c where c.pk='{type}' and c.school='{school.id}' ");                
+                    StringBuilder sqlTxt = new($"select COUNT(c.id) AS totals from c where c.pk='{type}' and c.school='{school.id}' ");
                     long totals = await CommonFind.FindTotals(cosmosClient, sqlTxt.ToString(), new List<string>() { "Common" });
 
                     switch (type)
@@ -286,13 +286,13 @@ namespace TEAMModelBI.Controllers.Census
                             exemAreaCount += totals;
                             break;
                         case "Survey":
-                             surveyAreaCount += totals;
+                            surveyAreaCount += totals;
                             break;
                         case "Vote":
-                             voteAreaCount += totals;
+                            voteAreaCount += totals;
                             break;
                         case "Homework":
-                             homeworkAreaCount += totals;
+                            homeworkAreaCount += totals;
                             break;
                     }
 
@@ -310,7 +310,7 @@ namespace TEAMModelBI.Controllers.Census
         /// <param name="jsonElement"></param>
         /// <returns></returns>
         [HttpPost("get-areastics")]
-        public async Task<IActionResult> GetAreaStics(JsonElement jsonElement) 
+        public async Task<IActionResult> GetAreaStics(JsonElement jsonElement)
         {
             if (!jsonElement.TryGetProperty("areaId", out JsonElement areaId)) return BadRequest();
             jsonElement.TryGetProperty("site", out JsonElement site);
@@ -335,7 +335,7 @@ namespace TEAMModelBI.Controllers.Census
             {
                 schools.Add(item);
             }
-            
+
             int countArea = 0;//区级人员
             int appraiseArea = 0;//区级评审人员
             int areaSize = 0;   //区级空间
@@ -344,7 +344,7 @@ namespace TEAMModelBI.Controllers.Census
             long voteAreaCount = 0;   //投票活动
             long homeworkAreaCount = 0;  //作业活动
             long weekActivity = 0; //周活动数量
-            long termActivity=0;   //学期活动
+            long termActivity = 0;   //学期活动
             int basics = 0; //基础版数
             int standard = 0; //标准版数
             int major = 0;   //专业版数
@@ -359,7 +359,7 @@ namespace TEAMModelBI.Controllers.Census
             double teachCount = 0;    //课例教师
 
             List<SchoolLesson> schoolLessons = new();  //学校课例集合 
-            List<SchoolInfo> schoolInfos = new();            
+            List<SchoolInfo> schoolInfos = new();
             List<LessonRecord> records = new();//所有的课程记录
 
             List<string> scIds = schools.Select(x => x.id).ToList();
@@ -389,14 +389,14 @@ namespace TEAMModelBI.Controllers.Census
                 }
 
                 //查询学校的总学时
-                totalTime += await CommonFind.FindTotals(cosmosClient, "SELECT sum(c.totalTime) as totals FROM c", "Teacher", $"TeacherTrain-{school.id}");
+                totalTime += await CommonFind.GetSqlValueCount(cosmosClient, "Teacher", "SELECT value(sum(c.totalTime)) FROM c", $"TeacherTrain-{school.id}");
                 //查询学校参训人数
-                int tempCount = await CommonFind.FindTotals(cosmosClient, $"select array_length(c.members) as totals from c where c.type='yxtrain'", "School", $"GroupList-{school.id}");
+                int tempCount = await CommonFind.GetSqlValueCount(cosmosClient, "School", $"select value(array_length(c.members)) from c where c.type='yxtrain'", $"GroupList-{school.id}");
                 //学校学生人数
-                long stuCount = await CommonFind.FindTotals(cosmosClient, $"select count(c.id) as totals from c", "Student", $"Base-{school.id}");
+                long stuCount = await CommonFind.GetSqlValueCount(cosmosClient, "Student", $"select value(count(c.id)) from c", $"Base-{school.id}");
 
                 //查询是否有服务
-                int serCount = await CommonFind.FindTotals(cosmosClient, $"select array_length(c.service) as totals from c where c.id='{school.id}'", "School", "ProductSum");
+                int serCount = await CommonFind.GetSqlValueCount(cosmosClient, "School", $"select value(array_length(c.service)) from c where c.id='{school.id}'", "ProductSum");
                 if (serCount > 0)
                     major += 1;
                 else if (school.size >= 300 && school.scale >= 500)
@@ -410,7 +410,7 @@ namespace TEAMModelBI.Controllers.Census
                 }
 
                 //课例
-                int lessCount = await CommonFind.FindTotals(cosmosClient, "select count(c.id) totals from c", "School", $"LessonRecord-{school.id}");
+                int lessCount = await CommonFind.GetSqlValueCount(cosmosClient, "School", "select value(count(c.id)) from c", $"LessonRecord-{school.id}");
                 SchoolLesson schoolLesson = new()
                 {
                     id = school.id,
@@ -419,27 +419,28 @@ namespace TEAMModelBI.Controllers.Census
                     count = lessCount
                 };
 
-                SchoolInfo schoolInfo = new() { 
-                    id = school.id, 
+                SchoolInfo schoolInfo = new()
+                {
+                    id = school.id,
                     name = school.name,
                     picture = school.picture,
                     teacherCount = count,
-                    studentCount = stuCount, 
-                    appraiseCount = appraise, 
-                    trainCount = tempCount 
+                    studentCount = stuCount,
+                    appraiseCount = appraise,
+                    trainCount = tempCount
                 };
 
                 ActivityCount tempActivity = new() { id = school.id, name = school.name != null ? school.name : school.id };
                 foreach (var type in StaticValue.activityTypes)
                 {
-                    long totals = await CommonFind.FindTotals(cosmosClient, $"select COUNT(c.id) AS totals from c where c.pk='{type}' and c.school='{school.id}' ", new List<string>() { "Common" });
+                    long totals = await CommonFind.GetSqlValueCount(cosmosClient, "Common", $"select value(COUNT(c.id)) from c where c.pk='{type}' and c.school='{school.id}' ");
 
-                    string weekSql= $"select count(c.id) as totals from c where c.pk='{type}' and c.school='{school.id}' and c.createTime>={weekStart}   and c.createTime<={weekEnd}";
-                    long weekActCount = await CommonFind.FindTotals(cosmosClient, weekSql, new List<string>() { "Common" });
+                    string weekSql = $"select value(count(c.id)) from c where c.pk='{type}' and c.school='{school.id}' and c.createTime>={weekStart}   and c.createTime<={weekEnd}";
+                    long weekActCount = await CommonFind.GetSqlValueCount(cosmosClient, "Common", weekSql);
                     weekActivity += weekActCount;
 
-                    string termSql = $"select count(c.id) as totals from c where c.pk='{type}' and c.school='{school.id}' and c.createTime>={termStart}   and c.createTime<={termEnd}";
-                    long termActCount = await CommonFind.FindTotals(cosmosClient, termSql, new List<string>() { "Common" });
+                    string termSql = $"select value(count(c.id)) from c where c.pk='{type}' and c.school='{school.id}' and c.createTime>={termStart}   and c.createTime<={termEnd}";
+                    long termActCount = await CommonFind.GetSqlValueCount(cosmosClient, "Common", termSql);
                     termActivity += termActCount;
 
                     switch (type)
@@ -487,6 +488,7 @@ namespace TEAMModelBI.Controllers.Census
             }
 
             return Ok(new { state = 200, schoolCount = schools.Count, countArea, weekActivity, termActivity, totalTime, appraiseArea, examAreaCount, surveyAreaCount, voteAreaCount, homeworkAreaCount, major, standard, basics, oeCount, dayLess, weekLess, monthLess, termLess, teachCount, allLess = records.Count, schools = schoolInfos, schoolLessons });
+
         }
 
         /// <summary>
@@ -535,10 +537,10 @@ namespace TEAMModelBI.Controllers.Census
             stuCount = await CommonFind.FindTotals(cosmosClient, $"SELECT count(c.id) as totals FROM c ", "Student", "Base");
             allSize = await CommonFind.FindTotals(cosmosClient, $"SELECT sum(c.size) as totals FROM c ", "School", "Base");
 
-            foreach (var area in areaInfos) 
+            foreach (var area in areaInfos)
             {
                 List<RecSchool> recSchools = new();
-                await foreach (var school in cosmosClient.GetContainer("TEAMModelOS", "School").GetItemQueryIterator<RecSchool>(queryText: $"select c.id,c.name,c.picture,c.type,c.size,c.scale from c where c.areaId='{area.id}'", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("Base") })) 
+                await foreach (var school in cosmosClient.GetContainer("TEAMModelOS", "School").GetItemQueryIterator<RecSchool>(queryText: $"select c.id,c.name,c.picture,c.type,c.size,c.scale from c where c.areaId='{area.id}'", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("Base") }))
                 {
                     recSchools.Add(school);
                 }
@@ -567,7 +569,7 @@ namespace TEAMModelBI.Controllers.Census
                 long totals = await CommonFind.FindTotals(cosmosClient, sqlTxt, new List<string>() { "Common" });
 
                 string weekSql = $"select COUNT(c.id) AS totals from c where c.pk='{type}' and c.createTime>={weekStart} and c.createTime<={weekStart} ";
-                weekActivity  += await CommonFind.FindTotals(cosmosClient, weekSql,new List<string> { "Common" });
+                weekActivity += await CommonFind.FindTotals(cosmosClient, weekSql, new List<string> { "Common" });
 
                 string termSql = $"select COUNT(c.id) AS totals from c where c.pk='{type}' and c.createTime>={termStart} and c.createTime<={termEnd} ";
                 termActivity += await CommonFind.FindTotals(cosmosClient, termSql, new List<string> { "Common" });
@@ -578,7 +580,7 @@ namespace TEAMModelBI.Controllers.Census
 
             allLess = await CommonFind.FindTotals(cosmosClient, "select count(c.id) as totals from c where c.pk='LessonRecord'", new List<string>() { "School", "Teacher" });
             weekLess = await CommonFind.FindTotals(cosmosClient, $"select count(c.id) as totals from c where c.pk='LessonRecord' and c.startTime>={weekStart} and c.startTime <={weekEnd}", new List<string>() { "School", "Teacher" });
-            termLess = await CommonFind.FindTotals(cosmosClient, $"select count(c.id) as totals from c where c.pk='LessonRecord' and c.startTime>={termStart} and c.startTime <={termEnd}", new List<string>() { "School","Teacher" });
+            termLess = await CommonFind.FindTotals(cosmosClient, $"select count(c.id) as totals from c where c.pk='LessonRecord' and c.startTime>={termStart} and c.startTime <={termEnd}", new List<string>() { "School", "Teacher" });
 
             totalTime = await CommonFind.FindTotals(cosmosClient, "select sum(c.totalTime) as totals from c where c.pk='TeacherTrain'", new List<string>() { "Teacher" });
             resourceCount = await CommonFind.FindTotals(cosmosClient, "select count(c.id) as totals from c where c.pk='Bloblog'", new List<string>() { "School", "Teacher" });
@@ -645,7 +647,7 @@ namespace TEAMModelBI.Controllers.Census
             public string standard { get; set; }
             public string standardName { get; set; }
             public int schoolCount { get; set; }
-            public int techCount { get; set;}
+            public int techCount { get; set; }
             public int stuCount { get; set; }
         }
 

+ 1 - 1
TEAMModelBI/Controllers/Census/BlobLogController.cs

@@ -9,8 +9,8 @@ using System.Text;
 using System.Text.Json;
 using System.Threading.Tasks;
 using TEAMModelBI.Tool;
-using TEAMModelBI.Tool.Context;
 using TEAMModelOS.Models;
+using TEAMModelOS.SDK.Context.BI;
 using TEAMModelOS.SDK.DI;
 using TEAMModelOS.SDK.Extension;
 

+ 1 - 1
TEAMModelBI/Controllers/Census/ItemSticsController.cs

@@ -12,7 +12,7 @@ using System;
 using System.Text;
 using TEAMModelOS.SDK.Models;
 using TEAMModelOS.SDK.Extension;
-using TEAMModelBI.Tool.Context;
+using TEAMModelOS.SDK.Context.BI;
 
 namespace TEAMModelBI.Controllers.Census
 {

+ 1 - 1
TEAMModelBI/Controllers/Census/LessonSticsController.cs

@@ -17,7 +17,7 @@ using System.Text;
 using TEAMModelBI.Tool;
 using MathNet.Numerics.LinearAlgebra.Double;
 using TEAMModelBI.Tool.CosmosBank;
-using TEAMModelBI.Tool.Context;
+using TEAMModelOS.SDK.Context.BI;
 
 namespace TEAMModelBI.Controllers.Census
 {

+ 1 - 1
TEAMModelBI/Controllers/Census/PaperController.cs

@@ -9,8 +9,8 @@ using System.Text.Json;
 using System.Threading.Tasks;
 using TEAMModelBI.Models;
 using TEAMModelBI.Tool;
-using TEAMModelBI.Tool.Context;
 using TEAMModelOS.Models;
+using TEAMModelOS.SDK.Context.BI;
 using TEAMModelOS.SDK.DI;
 using TEAMModelOS.SDK.Extension;
 using TEAMModelOS.SDK.Models;

+ 1 - 1
TEAMModelBI/Controllers/Census/ProductStatisController.cs

@@ -8,8 +8,8 @@ using System.Linq;
 using System.Text.Json;
 using System.Threading.Tasks;
 using TEAMModelBI.Tool;
-using TEAMModelBI.Tool.Context;
 using TEAMModelOS.Models;
+using TEAMModelOS.SDK.Context.BI;
 using TEAMModelOS.SDK.DI;
 using TEAMModelOS.SDK.Extension;
 using TEAMModelOS.SDK.Models;

+ 1 - 1
TEAMModelBI/Controllers/Census/SchoolController.cs

@@ -10,9 +10,9 @@ using System.Text.Json;
 using System.Threading.Tasks;
 using TEAMModelBI.Models;
 using TEAMModelBI.Tool;
-using TEAMModelBI.Tool.Context;
 using TEAMModelBI.Tool.CosmosBank;
 using TEAMModelOS.Models;
+using TEAMModelOS.SDK.Context.BI;
 using TEAMModelOS.SDK.DI;
 using TEAMModelOS.SDK.Extension;
 using TEAMModelOS.SDK.Models;

+ 1 - 1
TEAMModelBI/Controllers/Census/StudyController.cs

@@ -6,8 +6,8 @@ using System.Collections.Generic;
 using System.Text.Json;
 using System.Threading.Tasks;
 using TEAMModelBI.Tool;
-using TEAMModelBI.Tool.Context;
 using TEAMModelOS.Models;
+using TEAMModelOS.SDK.Context.BI;
 using TEAMModelOS.SDK.DI;
 using TEAMModelOS.SDK.Models;
 

+ 1 - 1
TEAMModelBI/Controllers/Core/BlobController.cs

@@ -9,9 +9,9 @@ using System.Net.Http;
 using System.Threading.Tasks;
 using TEAMModelBI.DI.BIAzureStorage;
 using TEAMModelBI.Filter;
-using TEAMModelBI.Tool.Context;
 using TEAMModelOS.Models;
 using TEAMModelOS.SDK;
+using TEAMModelOS.SDK.Context.BI;
 using TEAMModelOS.SDK.DI;
 using TEAMModelOS.SDK.Extension;
 

+ 1 - 1
TEAMModelBI/Controllers/DingDingStruc/DDStructController.cs

@@ -20,7 +20,7 @@ using TEAMModelBI.Controllers.BISchool;
 using TEAMModelOS.SDK.Models.Cosmos.BI;
 using Microsoft.Azure.Cosmos.Table;
 using TEAMModelOS.SDK;
-using TEAMModelBI.Tool.Context;
+using TEAMModelOS.SDK.Context.BI;
 
 namespace TEAMModelBI.Controllers.DingDingStruc
 {

+ 1 - 1
TEAMModelBI/Controllers/DingDingStruc/TableDingDingInfoController.cs

@@ -25,9 +25,9 @@ using TEAMModelBI.Filter;
 using TEAMModelBI.Tool.Extension;
 using TEAMModelBI.Models;
 using TEAMModelBI.Tool.CosmosBank;
-using TEAMModelBI.Tool.Context;
 using TEAMModelBI.DI.BIAzureStorage;
 using TEAMModelOS.SDK;
+using TEAMModelOS.SDK.Context.BI;
 
 namespace TEAMModelBI.Controllers.DingDingStruc
 {

+ 1 - 1
TEAMModelBI/Controllers/LoginController.cs

@@ -35,10 +35,10 @@ using TEAMModelOS.SDK;
 using Microsoft.AspNetCore.Hosting;
 using TEAMModelBI.Tool;
 using TEAMModelBI.DI.BIAzureStorage;
-using TEAMModelBI.Tool.Context;
 using TEAMModelOS.SDK.Models.Table;
 using TEAMModelOS.SDK.Context.Constant;
 using TEAMModelBI.Models;
+using TEAMModelOS.SDK.Context.BI;
 //using static DingTalk.Api.Response.OapiV2UserGetResponse;
 
 namespace TEAMModelBI.Controllers

+ 1 - 1
TEAMModelBI/Controllers/OperateRecord/OperateLogController.cs

@@ -15,8 +15,8 @@ using TEAMModelOS.SDK.Models.Table;
 using TEAMModelBI.Filter;
 using TEAMModelBI.Tool.Extension;
 using TEAMModelOS.SDK.Extension;
-using TEAMModelBI.Tool.Context;
 using TEAMModelBI.DI.BIAzureStorage;
+using TEAMModelOS.SDK.Context.BI;
 
 namespace TEAMModelBI.Controllers.OperateRecord
 {

+ 1 - 1
TEAMModelBI/Tool/Context/BIConst.cs

@@ -1,4 +1,4 @@
-namespace TEAMModelBI.Tool.Context
+namespace TEAMModelOS.SDK.Context.BI
 {
     public class BIConst
     {

+ 35 - 1
TEAMModelBI/Models/RecordM/RecAppGWInfo.cs

@@ -1,6 +1,6 @@
 using System.Collections.Generic;
 
-namespace TEAMModelBI.Models.RecordM
+namespace TEAMModelOS.SDK.Models.Cosmos.BI
 {
     /// <summary>
     /// 防火墙网关信息
@@ -49,4 +49,38 @@ namespace TEAMModelBI.Models.RecordM
         public string api { get; set; }
         public List<string> ip { get; set; }
     }
+
+    /// <summary>
+    /// 读取日志数据结构
+    /// </summary>
+    public record AGInfo
+    {
+        //public string resourceId { get; set; }
+
+        public string operationName { get; set; }
+        public string time { get; set; }
+        public string category { get; set; }
+        public Properties properties { get; set; }
+    }
+
+    /// <summary>
+    /// 读取日志数据结构
+    /// </summary>
+    public record Properties
+    {
+        //public string instanceId { get; set; }
+        public string clientIp { get; set; }
+        public string clientPort { get; set; }
+        public string requestUri { get; set; }
+        public string ruleSetType { get; set; }
+        public string ruleSetVersion { get; set; }
+        public string ruleId { get; set; }
+        public string ruleGroup { get; set; }
+        //public string message { get; set; }
+        public string action { get; set; }
+        public string site { get; set; }
+        //public Datails datails { get; set; }
+        public string hostname { get; set; }
+        public string transactionId { get; set; }
+    }
 }

+ 164 - 0
TEAMModelOS.SDK/Models/Service/BI/BILogAnalyseService.cs

@@ -0,0 +1,164 @@
+using Azure.Storage.Blobs;
+using Azure.Storage.Blobs.Models;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using TEAMModelOS.SDK.Context.BI;
+using TEAMModelOS.SDK.DI;
+using TEAMModelOS.SDK.Extension;
+using TEAMModelOS.SDK.Models.Cosmos.BI;
+
+namespace TEAMModelOS.SDK.Models.Service.BI
+{
+    public static class BILogAnalyseService
+    {
+
+        /// <summary>
+        /// 读取全部的防火墙日志文件并分析保存至
+        /// </summary>
+        /// <param name="_azureStorage"></param>
+        /// <param name="site"></param>
+        /// <returns></returns>
+        public static async Task<(List<RecCnt> recCnts ,List<string> saveUrls)> GetAllLogAnalyse(AzureStorageFactory _azureStorage,string site = null) 
+        {
+            var blobClient = _azureStorage.GetBlobContainerClient($"insights-logs-applicationgatewayfirewalllog", name: BIConst.LogChina);
+            if ($"{site}".Equals(BIConst.Global))
+            {
+                blobClient = _azureStorage.GetBlobContainerClient($"insights-logs-applicationgatewayfirewalllog", name: BIConst.Global);
+            }
+
+            List<RecCnt> recCnts = new();
+            List<string> urls = new();
+            //地址:    y={year}/m={month}/d={day}/h={hour}/m=00/PT1H.json
+            string logName = "resourceId=/SUBSCRIPTIONS/73B7F9EF-D8B7-4444-9E8D-D80B43BF3CD4/RESOURCEGROUPS/TEAMMODELCHENGDU/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/OSFIREWARE";
+            await foreach (BlobItem blobItem in blobClient.GetBlobsAsync(BlobTraits.None, BlobStates.None, logName))
+            {
+
+                StringBuilder visits = new("[");
+
+                BlobClient tempBlobClient = blobClient.GetBlobClient(blobItem.Name);
+                BlobDownloadInfo download = tempBlobClient.Download();
+                var content = download.Content;
+                string text;
+                using (var streamReader = new StreamReader(content))
+                {
+                    while ((text = streamReader.ReadLine()) != null)
+                    {
+                        if (streamReader.EndOfStream)
+                            visits.Append($"{text.ToString()}");
+                        else
+                            visits.Append($"{text.ToString()},");
+                    }
+
+                    visits.Append("]");
+                    streamReader.Close();
+                }
+
+                string input = visits.ToString();
+                List<AGInfo> aGInfos = input.ToObject<List<AGInfo>>();
+                DateTimeOffset dtime = DateTimeOffset.UtcNow;
+                string cHour = dtime.ToString("yyyyMMddHH");
+                string cDay = dtime.ToString("yyyyMMdd");
+                if (aGInfos.Count > 0)
+                {
+                    cHour = aGInfos.Select(s => DateTimeOffset.Parse(s.time).ToString("yyyyMMddHH")).First();
+                    cDay = aGInfos.Select(s => DateTimeOffset.Parse(s.time).ToString("yyyyMMdd")).First();
+                }
+
+                RecCnt saveCnts = new();
+
+                List<RecAppGWInfo> recInfo = aGInfos.Select(s => new RecAppGWInfo { hour = cHour, ip = s.properties.clientIp, api = s.properties.requestUri.Split("?").ToList().Count() > 1 ? s.properties.requestUri.Split("?").ToList()[0] : s.properties.requestUri, hostName = s.properties.hostname }).ToList();
+
+                List<RecApiCnt> apiCnt = recInfo.GroupBy(a => a.api).Select(g => new RecApiCnt { api = g.Key, count = g.Count(), hour = cHour, hostName = g.Select(h => h.hostName).Distinct().ToList(), ip = g.Select(i => i.ip).Distinct().ToList() }).ToList();
+                saveCnts.apiCnt = apiCnt;
+
+                List<RecIpCnt> ipCnt = recInfo.GroupBy(a => a.ip).Select(g => new RecIpCnt { ip = g.Key, count = g.Count(), hour = cHour, hostName = g.Select(h => h.hostName).Distinct().ToList(), api = g.Select(i => i.api).Distinct().ToList() }).ToList();
+                saveCnts.ipCnt = ipCnt;
+                recCnts.Add(saveCnts);
+
+                ////保存存至Blob文件
+                var url = await _azureStorage.GetBlobContainerClient("0-public").UploadFileByContainer(saveCnts.ToJsonString(), $"visitCnt/{cDay}", $"{cHour}.json");
+
+                urls.Add(url);
+            }
+
+            return (recCnts, urls);
+        }
+
+        /// <summary>
+        /// 通过路径获取日志文件并分析结果
+        /// </summary>
+        /// <param name="_azureStorage"></param>
+        /// <param name="path"></param>
+        /// <param name="site"></param>
+        /// <returns></returns>
+        public static async Task<(List<RecCnt> recCnts, List<string> saveUrls)> GetPathAnalyse(AzureStorageFactory _azureStorage,string path, string site = null)
+        {
+            var blobClient = _azureStorage.GetBlobContainerClient($"insights-logs-applicationgatewayfirewalllog", name: BIConst.LogChina);
+            if ($"{site}".Equals(BIConst.Global))
+            {
+                blobClient = _azureStorage.GetBlobContainerClient($"insights-logs-applicationgatewayfirewalllog", name: BIConst.LogGlobal);
+            }
+
+            List<RecCnt> recCnts = new();
+            List<string> urls = new();
+
+            string logName = "resourceId=/SUBSCRIPTIONS/73B7F9EF-D8B7-4444-9E8D-D80B43BF3CD4/RESOURCEGROUPS/TEAMMODELCHENGDU/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/OSFIREWARE";
+            await foreach (BlobItem blobItem in blobClient.GetBlobsAsync(BlobTraits.None, BlobStates.None, path))
+            {
+                StringBuilder visits = new("[");
+                //BlobClient tempBlobClient = blobClient.GetBlobClient(blobItem.Name);
+                //BlobDownloadInfo download = tempBlobClient.Download();
+                BlobDownloadInfo download = blobClient.GetBlobClient(blobItem.Name).Download();
+
+                var content = download.Content;
+                string text;
+                using (var streamReader = new StreamReader(content))
+                {
+                    while ((text = streamReader.ReadLine()) != null)
+                    {
+                        if (streamReader.EndOfStream)
+                            visits.Append($"{text.ToString()}");
+                        else
+                            visits.Append($"{text.ToString()},");
+                    }
+
+                    visits.Append("]");
+                    streamReader.Close();
+                }
+
+                string input = visits.ToString();
+                List<AGInfo> aGInfos = input.ToObject<List<AGInfo>>();
+                DateTimeOffset dtime = DateTimeOffset.UtcNow;
+                string cHour = dtime.ToString("yyyyMMddHH");
+                string cDay = dtime.ToString("yyyyMMdd");
+                if (aGInfos.Count > 0)
+                {
+                    cHour = aGInfos.Select(s => DateTimeOffset.Parse(s.time).ToString("yyyyMMddHH")).First();
+                    cDay = aGInfos.Select(s => DateTimeOffset.Parse(s.time).ToString("yyyyMMdd")).First();
+                }
+
+                RecCnt saveCnts = new();
+
+                List<RecAppGWInfo> recInfo = aGInfos.Select(s => new RecAppGWInfo { hour = cHour, ip = s.properties.clientIp, api = s.properties.requestUri.Split("?").ToList().Count() > 1 ? s.properties.requestUri.Split("?").ToList()[0] : s.properties.requestUri, hostName = s.properties.hostname }).ToList();
+
+                List<RecApiCnt> apiCnt = recInfo.GroupBy(a => a.api).Select(g => new RecApiCnt { api = g.Key, count = g.Count(), hour = cHour, hostName = g.Select(h => h.hostName).Distinct().ToList(), ip = g.Select(i => i.ip).Distinct().ToList() }).ToList();
+                saveCnts.apiCnt = apiCnt;
+
+                List<RecIpCnt> ipCnt = recInfo.GroupBy(a => a.ip).Select(g => new RecIpCnt { ip = g.Key, count = g.Count(), hour = cHour, hostName = g.Select(h => h.hostName).Distinct().ToList(), api = g.Select(i => i.api).Distinct().ToList() }).ToList();
+                saveCnts.ipCnt = ipCnt;
+                recCnts.Add(saveCnts);
+
+                ////保存存至Blob文件
+                var url = await _azureStorage.GetBlobContainerClient("0-public").UploadFileByContainer(saveCnts.ToJsonString(), $"visitCnt/{cDay}", $"{cHour}.json");
+
+                urls.Add(url);
+            }
+
+            return (recCnts, urls);
+        }
+    }
+}