소스 검색

update 数据查询工具,工具类方法。优化接口

Li 3 년 전
부모
커밋
d951cc6737

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

@@ -435,7 +435,7 @@ namespace TEAMModelBI.Controllers.BISchool
                 {
                     hubName = "hita",
                     type = "msg",
-                    from = $"ies5:{_option.Location}:private",
+                    from = $"BI:{_option.Location}:private",
                     to = new List<string> { $"{ _tmdId}" },
                     label = $"{partitionCode}_start",
                     body = new { location = _option.Location, biz = partitionCode, tmdid = $"{_tmdId}", tmdname = $"{_tmdName}", status = 1, time = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() }.ToJsonString(),

+ 100 - 1
TEAMModelBI/Controllers/BISchool/SchoolController.cs

@@ -1,11 +1,14 @@
 using Azure.Cosmos;
+using HTEXLib.COMM.Helpers;
 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.Linq;
+using System.Text;
 using System.Text.Json;
 using System.Threading.Tasks;
 using TEAMModelBI.Filter;
@@ -15,6 +18,7 @@ using TEAMModelOS.Models;
 using TEAMModelOS.SDK.DI;
 using TEAMModelOS.SDK.Extension;
 using TEAMModelOS.SDK.Models;
+using TEAMModelOS.SDK.Models.Service;
 
 namespace TEAMModelBI.Controllers.BISchool
 {
@@ -27,14 +31,18 @@ namespace TEAMModelBI.Controllers.BISchool
         private readonly Option _option;
         private readonly AzureStorageFactory _azureStorage;
         private readonly AzureRedisFactory _azureRedis;
+        private readonly IConfiguration _configuration;
+        private readonly NotificationService _notificationService;
 
-        public SchoolController(AzureCosmosFactory azureCosmos, DingDing dingDing, AzureStorageFactory azureStorage, IOptionsSnapshot<Option> option, AzureRedisFactory azureRedis) 
+        public SchoolController(AzureCosmosFactory azureCosmos, DingDing dingDing, AzureStorageFactory azureStorage, IOptionsSnapshot<Option> option, AzureRedisFactory azureRedis, IConfiguration configuration, NotificationService notificationService) 
         {
             _azureCosmos = azureCosmos;
             _dingDing = dingDing;
             _azureStorage = azureStorage;
             _option = option?.Value;
             _azureRedis = azureRedis;
+            _configuration = configuration;
+            _notificationService = notificationService;
         }
 
         /// <summary>
@@ -399,6 +407,97 @@ namespace TEAMModelBI.Controllers.BISchool
             return Ok(new { state = 200, schoolSpaces });
         }
 
+        /// <summary>
+        /// 移交学校顾问
+        /// </summary>
+        /// <param name="jsonElement"></param>
+        /// <returns></returns>
+        [HttpPost("get-shift")]
+        public async Task<IActionResult> GetShift(JsonElement jsonElement)
+        {
+            var (_tmdId, _tmdName, pic, did, dname, dpic) = HttpJwtAnalysis.JwtXAuthBI(HttpContext.GetXAuth("AuthToken"), _option);
+            if (!jsonElement.TryGetProperty("school", out JsonElement _school)) return BadRequest();
+            //if (!jsonElement.TryGetProperty("teacher", out JsonElement _teacher)) return BadRequest();
+            if (!jsonElement.TryGetProperty("shiftTeacher", out JsonElement _shiftTeacher)) return BadRequest();
+
+            var cosmosClient = _azureCosmos.GetCosmosClient();
+            SchoolTeacher schoolTeacher = await cosmosClient.GetContainer("TEAMModelOS", "School").ReadItemAsync<SchoolTeacher>($"{_tmdId}", new PartitionKey($"Teacher-{_school}"));
+            if (schoolTeacher.roles.IsNotEmpty() && schoolTeacher.roles.Contains("assist"))
+            {
+                schoolTeacher.roles.Remove("assist");
+                SchoolTeacher newSchoolTeacher = await cosmosClient.GetContainer("TEAMModelOS", "School").ReadItemAsync<SchoolTeacher>($"{_shiftTeacher}", new PartitionKey($"Teacher-{_school}"));
+                if (!newSchoolTeacher.roles.Contains("assist")) 
+                {
+                    newSchoolTeacher.roles.Add("assist");
+                    newSchoolTeacher = await cosmosClient.GetContainer("TEAMModelOS", "School").ReplaceItemAsync<SchoolTeacher>(newSchoolTeacher, $"{_shiftTeacher}", new PartitionKey($"Teacher-{_school}"));
+                }
+
+                await cosmosClient.GetContainer("TEAMModelOS", "School").ReplaceItemAsync<SchoolTeacher>(schoolTeacher, $"{_tmdId}", new PartitionKey($"Teacher-{_school}"));
+
+                School schoolBase = await cosmosClient.GetContainer("TEAMModelOS", "School").ReadItemAsync<School>($"{_school}", new PartitionKey($"Base"));
+
+                //发送消息实体
+                string shiftCode = "shift-assist";
+                Notification notification = new Notification
+                {
+                    hubName = "hita",
+                    type = "msg",
+                    from = $"BI:{_option.Location}:{_school}",
+                    to = new List<string> { $"{_shiftTeacher}" },
+                    label = $"{shiftCode}_school",
+                    body = new { location = _option.Location, biz = shiftCode, tmdid = $"{_tmdId}", tmdname = $"{_tmdName}", status = 1, time = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() }.ToJsonString(),
+                    expires = DateTimeOffset.UtcNow.AddDays(7).ToUnixTimeSeconds()
+                };
+
+                if (notification != null) 
+                {
+                    var url = _configuration.GetValue<string>("HaBookAuth:CoreService:sendnotification");
+                    var clientID = _configuration.GetValue<string>("HaBookAuth:CoreService:clientID");
+                    var clientSecret = _configuration.GetValue<string>("HaBookAuth:CoreService:clientSecret");
+                    var location = _option.Location;
+                    await _notificationService.SendNotification(clientID, clientSecret, location, url, notification);//站内发送消息
+                }
+
+                //保存操作记录
+                await _azureStorage.SaveLog("area-add", $"{_tmdName}【{_tmdId}】移交顾问给{newSchoolTeacher.name}【{newSchoolTeacher.id}】", _dingDing, httpContext: HttpContext);
+                return Ok(new { state = 200 });
+            }
+            else { return Ok(new { status = 201, msg = $"{_tmdName}【{_tmdId}】账号不是顾问" }); }
+        }
+
+        /// <summary>
+        /// 查询学校   数据管理工具——查询工具
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost("get-info")]
+        public async Task<IActionResult> GetSchool(JsonElement jsonElement)
+        {
+            jsonElement.TryGetProperty("schoolId", out JsonElement schoolId);
+            var clientCosmosDB = _azureCosmos.GetCosmosClient();
+            StringBuilder sqlTxt = new StringBuilder("select * from c");
+            if (!string.IsNullOrEmpty($"{schoolId}"))
+            {
+                sqlTxt.Append($" where c.id='{schoolId}'");
+            }
+
+            List<School> schools = new();
+
+            await foreach (var item in clientCosmosDB.GetContainer("TEAMModelOS", "School").GetItemQueryStreamIterator(queryText: sqlTxt.ToString(), requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("Base") }))
+            {
+                using var json = await JsonDocument.ParseAsync(item.ContentStream);
+                if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
+                {
+                    foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
+                    {
+                        schools.Add(obj.ToObject<School>());
+                    }
+                }
+            }
+
+            return Ok(new { state = 200, schools });
+        }
+
+
         /// <summary>
         /// 修改学校的结构
         /// </summary>

+ 20 - 6
TEAMModelBI/Controllers/BITest/TestController.cs

@@ -24,7 +24,6 @@ using TEAMModelOS.SDK;//引用创建学校Code
 using TEAMModelOS.SDK.Context.Attributes.Azure;
 using TEAMModelOS.SDK.DI;
 using TEAMModelOS.SDK.Extension;
-using TEAMModelOS.SDK.Helper.Common.DateTimeHelper;
 using TEAMModelOS.SDK.Models;
 using TEAMModelOS.SDK.Models.Cosmos.BI;
 using TEAMModelOS.SDK.Models.Cosmos.Common;
@@ -111,7 +110,7 @@ namespace TEAMModelBI.Controllers.BITest
         /// <returns></returns>
         [ProducesDefaultResponseType]
         [HttpPost("get-schoolcode")]
-        public async Task<IActionResult> GetTest(JsonElement jsonElement)
+        public async Task<IActionResult> GetSchoolCode(JsonElement jsonElement)
         {
             //string data = await SchoolCode.GenerateSchoolCode(jsonElement, _dingDing, _environment).ToString();
             CreateSchoolInfo createSchoolInfo = new CreateSchoolInfo();
@@ -416,9 +415,9 @@ namespace TEAMModelBI.Controllers.BITest
             var start = GetMonthStart(ere);
             var end = GetMonthEnd(ere);
 
-            List<MonthStartEnd> endList = DateTimeHeloer.GetYearMonthlyStartEnd10(DateTimeOffset.UtcNow.Year);
-            List<MonthStartEnd> endList1 = DateTimeHeloer.GetYearMonthlyStartEnd13(DateTimeOffset.UtcNow.Year);
-            List<MonthStartEnd> endList2 = DateTimeHeloer.monthsOfYear(DateTimeOffset.UtcNow.ToString());
+            List<MonthStartEnd> endList = TimeHelper.GetYearMonthlyStartEnd10(DateTimeOffset.UtcNow.Year);
+            List<MonthStartEnd> endList1 = TimeHelper.GetYearMonthlyStartEnd13(DateTimeOffset.UtcNow.Year);
+            List<MonthStartEnd> endList2 = TimeHelper.monthsOfYear(DateTimeOffset.UtcNow.ToString());
 
             return Ok(new { strList, dateTime, year, start, end, endList, endList1 , endList2 });
         }
@@ -749,10 +748,25 @@ namespace TEAMModelBI.Controllers.BITest
                     }
                 }
             }
+            IAsyncResult iAsyncResult = null;
 
             return Ok(new { state = 200, schools });
         }
 
+        [HttpPost("get-test")]
+        public async Task<IActionResult> GetTest(JsonElement jsonElement) 
+        {
+            if (!jsonElement.TryGetProperty("size", out JsonElement size)) return BadRequest();
+            string temps = GenerateRandom.StrRandom(int.Parse($"{size}"), small:true);
+
+            RNGCryptoServiceProvider csp = new RNGCryptoServiceProvider();
+            byte[] byteCsp = new byte[int.Parse($"{size}")];
+            csp.GetBytes(byteCsp);
+            string lo = BitConverter.ToString(byteCsp);
+
+            return Ok(new { state = 200, temps, byteCsp, csp, lo });
+        }
+
 
         public class strend
         {
@@ -818,7 +832,7 @@ namespace TEAMModelBI.Controllers.BITest
             public List<string> listv { get; set; }
         }
 
-        public class GenerateRandom
+        public class GenerateRandom1
         {
             /// <summary>
             /// 生成随机数字

+ 49 - 2
TEAMModelBI/Controllers/Census/ActivitySticsController.cs

@@ -49,7 +49,7 @@ namespace TEAMModelBI.Controllers.Census
             long start = 0, end = 0;
             if (bool.Parse($"{term}") == true) 
             {
-                (start, end) = DateTimeHeloer.GetTermStartOrEnd(DateTime.Now);
+                (start, end) = TimeHelper.GetTermStartOrEnd(DateTime.Now);
             }
             var cosmosClient = _azureCosmos.GetCosmosClient();
             List<object> activityCount = new List<object>();
@@ -182,7 +182,7 @@ namespace TEAMModelBI.Controllers.Census
             jsonElement.TryGetProperty("tmdId", out JsonElement tmdId);
             var cosmosClient = _azureCosmos.GetCosmosClient();
 
-            var (start, end) = DateTimeHeloer.GetTermStartOrEnd(DateTime.Now);
+            var (start, end) = TimeHelper.GetTermStartOrEnd(DateTime.Now);
 
             if (!string.IsNullOrEmpty($"{tmdId}"))
             {
@@ -229,6 +229,53 @@ namespace TEAMModelBI.Controllers.Census
 
         }
 
+        /// <summary>
+        /// 依据活动Id查询活动详情信息  数据管理工具——查询工具
+        /// </summary>
+        /// <param name="jsonElement"></param>
+        /// <returns></returns>
+        [HttpPost("get-info")]
+        public async Task<IActionResult> GetInfo(JsonElement jsonElement)
+        {
+            if (!jsonElement.TryGetProperty("id", out JsonElement id)) return BadRequest();
+            jsonElement.TryGetProperty("activity", out JsonElement activity);
+            jsonElement.TryGetProperty("isPersonal", out JsonElement isPersonal);
+            //if (jsonElement.TryGetProperty("", out JsonElement code)) return BadRequest();
+
+            var cosmosClient = _azureCosmos.GetCosmosClient();
+            List<object> infos = new List<object>();
+            StringBuilder sqlTxt = new StringBuilder($"select * from c where c.id='{id}'");
+            if (!string.IsNullOrEmpty($"{activity}"))
+            {
+                sqlTxt.Append($" and c.pk='{activity}'");
+            }
+
+            if (!string.IsNullOrEmpty($"{isPersonal}"))
+            {
+                if (bool.Parse($"{isPersonal}") == true)
+                {
+                    sqlTxt.Append($" and c.scope='private'");
+                }
+                else
+                {
+                    sqlTxt.Append($" and c.scope='school'");
+                }
+            }
+
+            await foreach (var item in cosmosClient.GetContainer("TEAMModelOS", "Common").GetItemQueryStreamIterator(queryText: sqlTxt.ToString(), requestOptions: new QueryRequestOptions() { }))
+            {
+                using var json = await JsonDocument.ParseAsync(item.ContentStream);
+                foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
+                {
+                    infos.Add(obj.ToObject<object>());
+                }
+            }
+
+            return Ok(new { state = 200, infos });
+        }
+
+
+
         public record SchoolActivity 
         {
             public string id { get; set; }

+ 53 - 3
TEAMModelBI/Controllers/Census/ItemSticsController.cs

@@ -86,7 +86,7 @@ namespace TEAMModelBI.Controllers.Census
             jsonElement.TryGetProperty("tmdId", out JsonElement tmdId);
             if (!jsonElement.TryGetProperty("term", out JsonElement term)) return BadRequest();
 
-            var (start, end) = DateTimeHeloer.GetTermStartOrEnd(DateTime.Now);
+            var (start, end) = TimeHelper.GetTermStartOrEnd(DateTime.Now);
 
             var cosmosClient = _azureCosmos.GetCosmosClient();
             List<string> itemType = new List<string> { "single", "multiple", "judge", "complete", "subjective", "connector", "correct", "compose" };
@@ -152,7 +152,7 @@ namespace TEAMModelBI.Controllers.Census
             jsonElement.TryGetProperty("tmdId", out JsonElement tmdId);
             if(!jsonElement.TryGetProperty("term", out JsonElement term)) return BadRequest();
             var cosmosClient = _azureCosmos.GetCosmosClient();
-            var (start, end) = DateTimeHeloer.GetTermStartOrEnd(DateTime.Now);
+            var (start, end) = TimeHelper.GetTermStartOrEnd(DateTime.Now);
 
             List<object> levelCount = new List<object>();
 
@@ -219,7 +219,7 @@ namespace TEAMModelBI.Controllers.Census
             jsonElement.TryGetProperty("tmdId", out JsonElement tmdId);
             if (!jsonElement.TryGetProperty("term", out JsonElement term)) return BadRequest();
 
-            var (start, end) = DateTimeHeloer.GetTermStartOrEnd(DateTime.Now);
+            var (start, end) = TimeHelper.GetTermStartOrEnd(DateTime.Now);
             var cosmosClient = _azureCosmos.GetCosmosClient();
             List<object> layerCount = new List<object>();
 
@@ -275,6 +275,56 @@ namespace TEAMModelBI.Controllers.Census
             return Ok(new { state = 200, layerCount });
         }
 
+        /// <summary>
+        /// 依据试题id查询试题信息  数据管理工具——查询工具
+        /// </summary>
+        /// <param name="jsonElement"></param>
+        /// <returns></returns>
+        [HttpPost("get-info")]
+        public async Task<IActionResult> GetInfo(JsonElement jsonElement) 
+        {
+            if (!jsonElement.TryGetProperty("itemId", out JsonElement itemId)) return BadRequest();
+            jsonElement.TryGetProperty("isPersonal", out JsonElement isPersonal);
+            var cosmosClient = _azureCosmos.GetCosmosClient();
+
+            List<object> objItems = new List<object>();
+            string sqlTxt = $"select * from c where c.id='{itemId}' and c.pk='Item'";
+
+            if (!string.IsNullOrEmpty($"{isPersonal}"))
+            {
+                string tableName = "School";
+                if (bool.Parse($"{isPersonal}") == true)
+                {
+                    tableName = "Teacher";
+                }
+
+                await foreach (var item in cosmosClient.GetContainer("TEAMModelOS", tableName).GetItemQueryStreamIterator(queryText: sqlTxt, requestOptions: new QueryRequestOptions() { }))
+                {
+                    using var json = await JsonDocument.ParseAsync(item.ContentStream);
+                    foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
+                    {
+                        objItems.Add(obj.ToObject<object>());
+                    }
+                }
+            }
+            else 
+            {
+                List<string> tableName = new List<string> { "School", "Teacher" };
+                foreach (string key in tableName) 
+                {
+                    await foreach (var item in cosmosClient.GetContainer("TEAMModelOS", key).GetItemQueryStreamIterator(queryText: sqlTxt, requestOptions: new QueryRequestOptions() { }))
+                    {
+                        using var json = await JsonDocument.ParseAsync(item.ContentStream);
+                        foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
+                        {
+                            objItems.Add(obj.ToObject<object>());
+                        }
+                    }
+                }
+            }
+
+            return Ok(new { state = 200, items = objItems });
+        }
 
         public record ItemTatols
         {

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

@@ -47,7 +47,7 @@ namespace TEAMModelBI.Controllers.Census
             jsonElement.TryGetProperty("tmdId", out JsonElement tmdId);
             if (!jsonElement.TryGetProperty("term", out JsonElement term)) return BadRequest();
             var cosmosClient = _azureCosmos.GetCosmosClient();
-            var (start, end) = DateTimeHeloer.GetTermStartOrEnd(DateTime.Now);
+            var (start, end) = TimeHelper.GetTermStartOrEnd(DateTime.Now);
             object totals = new object();
             if (!string.IsNullOrEmpty($"{tmdId}"))
             {
@@ -317,6 +317,29 @@ namespace TEAMModelBI.Controllers.Census
             return Ok(new { state = 200, schoolLens });
         }
 
+        /// <summary>
+        /// 依据课例Id获取课例详情   数据管理工具——查询工具
+        /// </summary>
+        /// <param name="jsonElement"></param>
+        /// <returns></returns>
+        [HttpPost("get-info")]
+        public async Task<IActionResult> GetInfo(JsonElement jsonElement) 
+        {
+            if (!jsonElement.TryGetProperty("lessonId", out JsonElement lessonId)) return BadRequest();
+            var cosmosClient = _azureCosmos.GetCosmosClient();
+            List<object> lessons = new List<object>();
+            string sqlTxt = $"select * from c where c.id='{lessonId}'";
+            await foreach (var item in cosmosClient.GetContainer("TEAMModelOS", "School").GetItemQueryStreamIterator(queryText: sqlTxt, requestOptions: new QueryRequestOptions() { })) 
+            {
+                using var json = await JsonDocument.ParseAsync(item.ContentStream);
+                foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
+                {
+                    lessons.Add(obj.ToObject<object>());
+                }
+            }
+
+            return Ok(new { state = 200, lessons });
+        }
 
         public record SchoolLen 
         {

+ 73 - 11
TEAMModelBI/Controllers/Census/PaperController.cs

@@ -14,7 +14,7 @@ using TEAMModelOS.SDK.DI;
 using TEAMModelOS.SDK.Extension;
 using TEAMModelOS.SDK.Models;
 
-namespace TEAMModelBI.Controllers.BISchool
+namespace TEAMModelBI.Controllers.Census
 {
     /// <summary>
     /// 试卷
@@ -46,11 +46,11 @@ namespace TEAMModelBI.Controllers.BISchool
         {
             jsonElement.TryGetProperty("tmdId", out JsonElement tmdId);
             if(!jsonElement.TryGetProperty("term", out JsonElement term)) return BadRequest();
-            var (start, end) = DateTimeHeloer.GetTermStartOrEnd(DateTime.Now);
+            var (start, end) = TimeHelper.GetTermStartOrEnd(DateTime.Now);
             var cosmosClient = _azureCosmos.GetCosmosClient();
             object paperCount = new object();
 
-            StringBuilder sqlTxt = new StringBuilder("select count(c.id) AS totals from c");
+            
 
             if (!string.IsNullOrEmpty($"{tmdId}"))
             {
@@ -58,14 +58,23 @@ namespace TEAMModelBI.Controllers.BISchool
                 schoolIds = await CommonFind.FindSchoolIds(cosmosClient, $"{tmdId}");
 
                 List<SchoolPaper> schoolPapers = new List<SchoolPaper>();
-
-                if (bool.Parse($"{term}") == true)
+                string time = "";
+                bool bos = bool.Parse($"{term}");
+                if (bos == true)
                 {
-                    sqlTxt.Append($" where c.createTime >={start} and c.createTime <={end}");
+                    time = $" where c.createTime >={start} and c.createTime <={end}";
                 }
 
                 foreach (var schoolId in schoolIds)
                 {
+                    StringBuilder sqlTxt = new StringBuilder("select count(c.id) AS totals from c");
+                    if (bos != true)
+                        sqlTxt.Append($" where c.code='Paper-{schoolId}'");
+                    else
+                    {
+                        sqlTxt.Append(time);
+                        sqlTxt.Append($" and c.code='Paper-{schoolId}'");
+                    };
                     School school = new();
                     var response = await cosmosClient.GetContainer("TEAMModelOS", "School").ReadItemStreamAsync(schoolId, new PartitionKey("Base"));
                     if (response.Status == 200)
@@ -85,7 +94,7 @@ namespace TEAMModelBI.Controllers.BISchool
             }
             else
             {
-                sqlTxt.Append(" where c.pk='Paper' ");
+                StringBuilder sqlTxt = new StringBuilder("select count(c.id) AS totals from c where c.pk='Paper'");
                 if (bool.Parse($"{term}") == true)
                 {
                     sqlTxt.Append($" and c.createTime >= {start} and c.createTime <={end}");
@@ -140,7 +149,7 @@ namespace TEAMModelBI.Controllers.BISchool
 
                 SchoolPaper schoolPaper = new SchoolPaper() { id = schoolId , name = school != null ? school.name : schoolId };
 
-                schoolPaper.totals = await CommonFind.FindTotals(cosmosClient, "select COUNT(c.id) AS totals from c", new List<string>() { "School" });
+                schoolPaper.totals = await CommonFind.FindTotals(cosmosClient, $"select COUNT(c.id) AS totals from c where c.code='Paper-{schoolId}'", new List<string>() { "School" });
 
                 schoolPapers.Add(schoolPaper);
             }
@@ -158,7 +167,7 @@ namespace TEAMModelBI.Controllers.BISchool
         {
             jsonElement.TryGetProperty("tmdId", out JsonElement tmdId);
             var cosmosClient = _azureCosmos.GetCosmosClient();
-            List<MonthStartEnd> endList1 = DateTimeHeloer.GetYearMonthlyStartEnd13(DateTimeOffset.UtcNow.Year);
+            List<MonthStartEnd> endList1 = TimeHelper.GetYearMonthlyStartEnd13(DateTimeOffset.UtcNow.Year);
             if (string.IsNullOrEmpty($"{tmdId}"))
             {
                 Dictionary<string, long> schoolYears = new Dictionary<string, long>();
@@ -194,7 +203,7 @@ namespace TEAMModelBI.Controllers.BISchool
                     Dictionary<string, long> yearCount = new Dictionary<string, long>();
                     foreach (var temp in endList1)
                     {                        
-                        string sqlTxt = $"SELECT  COUNT(c.id) AS totals FROM c WHERE c.createTime >= {temp.start} and c.createTime <= {temp.end} and c.pk='Paper'";
+                        string sqlTxt = $"SELECT COUNT(c.id) AS totals FROM c WHERE c.code='Paper-{schoolId}' and c.createTime >= {temp.start} and c.createTime <= {temp.end} and c.pk='Paper'";
                         long totals = await CommonFind.FindTotals(cosmosClient, sqlTxt, new List<string>() { "School", "Teacher" });
 
                         yearCount.Add(temp.yearMonth, totals);
@@ -216,7 +225,7 @@ namespace TEAMModelBI.Controllers.BISchool
         {
             jsonElement.TryGetProperty("tmdId", out JsonElement tmdId);
             var cosmosClient = _azureCosmos.GetCosmosClient();
-            var (start, end) = DateTimeHeloer.GetTermStartOrEnd(DateTime.Now);
+            var (start, end) = TimeHelper.GetTermStartOrEnd(DateTime.Now);
 
              var totals = new object();
             if (!string.IsNullOrEmpty($"{tmdId}"))
@@ -270,6 +279,59 @@ namespace TEAMModelBI.Controllers.BISchool
             return Ok(new { state = 200, totals });
         }
 
+        /// <summary>
+        /// 依据试卷Id查询试卷信息 数据管理工具——查询工具
+        /// </summary>
+        /// <param name="jsonElement"></param>
+        /// <returns></returns>
+        [HttpPost("get-info")]
+        public async Task<IActionResult> GetInfo(JsonElement jsonElement) 
+        {
+            if (!jsonElement.TryGetProperty("paperId", out JsonElement paperId)) return BadRequest();
+            jsonElement.TryGetProperty("isPersonal", out JsonElement isPersonal);
+
+            var cosmosClient = _azureCosmos.GetCosmosClient();
+
+            List<object> paperInfos = new List<object>();
+            string sqlTxt = $"select * from c where c.id='{paperId}' and c.pk='Paper'";
+
+            if (!string.IsNullOrEmpty($"{isPersonal}"))
+            {
+                string tableName = "School";
+                if (bool.Parse($"{isPersonal}") == true)
+                {
+                    tableName = "Teacher";
+                }
+
+                await foreach (var item in cosmosClient.GetContainer("TEAMModelOS", tableName).GetItemQueryStreamIterator(queryText: sqlTxt, requestOptions: new QueryRequestOptions() { }))
+                {
+                    using var json = await JsonDocument.ParseAsync(item.ContentStream);
+                    foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
+                    {
+                        paperInfos.Add(obj.ToObject<object>());
+                    }
+                }
+            }
+            else
+            {
+                List<string> tableName = new List<string> { "School", "Teacher" };
+                foreach (var temp in tableName)
+                {
+                    await foreach (var item in cosmosClient.GetContainer("TEAMModelOS", temp).GetItemQueryStreamIterator(queryText: sqlTxt, requestOptions: new QueryRequestOptions() { }))
+                    {
+                        using var json = await JsonDocument.ParseAsync(item.ContentStream);
+                        foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
+                        {
+                            paperInfos.Add(obj.ToObject<object>());
+                        }
+                    }
+                }
+            }
+
+            return Ok(new { state = 200, paperInfos });
+        }
+
+
         public record SchoolPaper 
         {
             public string id { get; set; }

+ 62 - 0
TEAMModelBI/Controllers/Census/SchoolController.cs

@@ -0,0 +1,62 @@
+using Azure.Cosmos;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Options;
+using System.Collections.Generic;
+using System.Text;
+using System.Text.Json;
+using System.Threading.Tasks;
+using TEAMModelOS.Models;
+using TEAMModelOS.SDK.DI;
+using TEAMModelOS.SDK.Extension;
+using TEAMModelOS.SDK.Models;
+
+namespace TEAMModelBI.Controllers.Census
+{
+    [Route("school")]
+    [ApiController]
+    public class SchoolController : ControllerBase
+    {
+        private readonly AzureCosmosFactory _azureCosmos;
+        private readonly AzureStorageFactory _azureStorage;
+        private readonly DingDing _dingDing;
+        private readonly Option _option;
+
+        public SchoolController(AzureCosmosFactory azureCosmos, AzureStorageFactory azureStorage, DingDing dingDing, IOptionsSnapshot<Option> option)
+        {
+            _azureCosmos = azureCosmos;
+            _azureStorage = azureStorage;
+            _dingDing = dingDing;
+            _option = option?.Value;
+        }
+
+        /// <summary>
+        /// 依据Id查询School容器  数据管理工具——查询工具
+        /// </summary>
+        /// <param name="jsonElement"></param>
+        /// <returns></returns>
+        [HttpPost("get-info")]
+        public async Task<IActionResult> GetSchool(JsonElement jsonElement) 
+        {
+            if (!jsonElement.TryGetProperty("id", out JsonElement id)) return BadRequest();
+            var cosmosClient = _azureCosmos.GetCosmosClient();
+            List<object> infos = new List<object>();
+
+            string sqlTxt = $"";
+            await foreach (var item in cosmosClient.GetContainer("TEAMModelOS", "School").GetItemQueryStreamIterator(queryText: sqlTxt, requestOptions: new QueryRequestOptions() { }))
+            {
+                using var json = await JsonDocument.ParseAsync(item.ContentStream);
+                foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
+                {
+                    infos.Add(obj.ToObject<object>());
+                }
+            }
+
+            return Ok(new { state = 200, infos });
+        }
+
+
+
+
+    }
+}

+ 0 - 68
TEAMModelBI/Controllers/QueryTool/SchoolController.cs

@@ -1,68 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-using Microsoft.Extensions.Options;
-using System.Text.Json;
-using System.Threading.Tasks;
-using TEAMModelOS.Models;
-using TEAMModelOS.SDK.DI;
-using System.Text;
-using TEAMModelOS.SDK.Models;
-using Azure.Cosmos;
-using System.Collections.Generic;
-using TEAMModelOS.SDK.Extension;
-
-namespace TEAMModelBI.Controllers.DataTool
-{
-    [Route("school")]
-    [ApiController]
-    public class SchoolController : ControllerBase
-    {
-        private readonly AzureCosmosFactory _azureCosmos;
-        private readonly AzureStorageFactory _azureStorage;
-        private readonly DingDing _dingDing;
-        private readonly Option _option;
-        public SchoolController(AzureCosmosFactory azureCosmos, AzureStorageFactory azureStorage, DingDing dingDing, IOptionsSnapshot<Option> option) 
-        {
-            _azureCosmos = azureCosmos;
-            _azureStorage = azureStorage;
-            _dingDing = dingDing;
-            _option = option?.Value;        
-        }
-
-        /// <summary>
-        /// 查询学校
-        /// </summary>
-        /// <returns></returns>
-        [HttpPost("get-school")]
-        public async Task<IActionResult> GetSchool(JsonElement jsonElement) 
-        {
-            jsonElement.TryGetProperty("schoolId", out JsonElement schoolId);
-            var clientCosmosDB = _azureCosmos.GetCosmosClient();
-            StringBuilder sqlTxt = new StringBuilder("select * from c");
-            if (!string.IsNullOrEmpty($"{schoolId}")) 
-            {
-                sqlTxt.Append($" where c.id='{schoolId}'");
-            }
-
-            List<School> schools = new();
-
-            await foreach (var item in clientCosmosDB.GetContainer("TEAMModelOS", "School").GetItemQueryStreamIterator(queryText: sqlTxt.ToString(), requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("Base") }))
-            {
-                using var json = await JsonDocument.ParseAsync(item.ContentStream);
-                if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
-                {
-                    foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
-                    {
-                        schools.Add(obj.ToObject<School>());
-                    }
-                }
-            }
-
-            return Ok(new { state = 200, schools });
-        }
-
-
-
-
-    }
-}

+ 3 - 2
TEAMModelBI/Filter/AuthTokenAttribute.cs

@@ -87,9 +87,10 @@ namespace TEAMModelBI.Filter
                     context.HttpContext.Items.Add("Website", website);
                 }
                 else
-                    //authtoken = "400";
+                    //context.Result = new OkObjectResult("state=400");
                     //context.Result = new OkObjectResult("state=401");
-                    context.Result = new BadRequestResult();
+                    //context.Result = new BadRequestResult(); //返回400
+                    context.Result = new UnauthorizedResult();  //返回401
             }
 
             public void OnResourceExecuted(ResourceExecutedContext context)

+ 2 - 0
TEAMModelBI/TEAMModelBI.csproj

@@ -27,6 +27,8 @@
 	</ItemGroup>
 
 	<ItemGroup>
+		<Folder Include="Controllers\Normal\" />
+		<Folder Include="Controllers\Teacher\" />
 		<Folder Include="wwwroot\" />
 	</ItemGroup>
 	<PropertyGroup>

+ 0 - 14
TEAMModelBI/Tool/CommonFind.cs

@@ -111,19 +111,5 @@ namespace TEAMModelBI.Tool
             return schoolIds;
         }
 
-
-        public static async Task<List<LessonCount>> FindLessonCount(CosmosClient cosmosClient, string dateTime) 
-        {
-            List<LessonCount> lessonCounts =new List<LessonCount>();
-            DateTimeOffset dto = DateTimeOffset.Parse(dateTime);
-            if (dto.Month <= 8 && dto.Month >= 3) 
-            {
-            
-            }
-
-
-
-            return lessonCounts;
-        }
     }
 }

+ 126 - 0
TEAMModelBI/Tool/Extension/GenerateRandom.cs

@@ -0,0 +1,126 @@
+using System;
+using System.Linq;
+using System.Security.Cryptography;
+using System.Text;
+
+namespace TEAMModelBI.Tool.Extension
+{
+    public static class GenerateRandom
+    {
+        static char[] ch_Number = new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
+        static char[] ch_Upper = new char[] { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };
+        static char[] ch_Lower = new char[] { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' };
+
+        /// <summary>
+        /// 生成随机数字
+        /// </summary>
+        /// <param name="Length">生成长度</param>
+        /// <param name="Sleep">是否要在生成前将当前线程阻止以避免重复</param>
+        /// <returns></returns>
+        public static string Number(int Length, bool Sleep = false)
+        {
+            if (Sleep)
+                System.Threading.Thread.Sleep(3);
+            string result = "";
+            Random random = new Random();
+            for (int i = 0; i < Length; i++)
+            {
+                result += random.Next(10).ToString();
+            }
+            return result;
+        }
+
+        /// <summary>
+        /// 生成随机大写字母与数字
+        /// </summary>
+        /// <param name="Length">生成长度</param>
+        /// <param name="Sleep">是否要在生成前将当前线程阻止以避免重复</param>
+        /// <returns></returns>
+        public static string StrNumberUpeper(int Length, bool Sleep = false)
+        {
+            if (Sleep) System.Threading.Thread.Sleep(3);
+            var numUpper = ch_Number.Concat(ch_Upper).ToArray();
+            StringBuilder result = new StringBuilder();
+            int n = numUpper.Length;
+            Random random = new Random(~unchecked((int)DateTime.Now.Ticks));
+            for (int i = 0; i < Length; i++)
+            {
+                int rnd = random.Next(0, n);
+                result.Append(numUpper[rnd]);
+            }
+            return result.ToString();
+        }
+
+        /// <summary>
+        /// 生成随机小写字母
+        /// </summary>
+        /// <param name="Length">生成长度</param>
+        /// <param name="Sleep">是否要在生成前将当前线程阻止以避免重复</param>
+        /// <returns></returns>
+        public static string StrLower(int length, bool sleep = false)
+        {
+            if (sleep) System.Threading.Thread.Sleep(3);
+            StringBuilder result = new StringBuilder();
+            int n = ch_Lower.Length;
+            Random random = new Random(~unchecked((int)DateTime.Now.Ticks));
+            for (int i = 0; i < length; i++)
+            {
+                int rnd = random.Next(0, n);
+                result.Append(ch_Lower[rnd]);
+            }
+
+            return result.ToString();
+        }
+
+        /// <summary>
+        /// 随机生产大小写字母和数字的随机数
+        /// </summary>
+        /// <param name="length">生成长度</param>
+        /// <param name="sleep">是否要在生成前将当前线程阻止以避免重复</param>
+        /// <returns></returns>
+        public static string StrAll(int length, bool sleep = false)
+        {
+            if (sleep) System.Threading.Thread.Sleep(3);
+            StringBuilder result = new StringBuilder();
+            var temp = ch_Number.Concat(ch_Upper).ToArray();
+            var allchar = ch_Number.Concat(temp).ToArray();
+            int l = allchar.Length;
+            Random random = new Random(~unchecked((int)DateTime.Now.Ticks));
+            for (int i = 0; i < length; i++) 
+            {
+                int rnd = random.Next(0, l);
+                result.Append(allchar[rnd]);
+            }
+
+            return result.ToString();
+        }
+
+        /// <summary>
+        /// 生成随机数
+        /// </summary>
+        /// <param name="length">生成长度</param>
+        /// <param name="sleep">是否要在生成前将当前线程阻止以避免重复</param>
+        /// <param name="large">是否需要大写字母</param>
+        /// <param name="small">是否需要小写字母</param>
+        /// <returns></returns>
+        public static string StrRandom(int length, bool sleep = false, bool large = false, bool small = false)
+        {
+            if (sleep) System.Threading.Thread.Sleep(3);
+            char[] ch = new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
+
+            if (large == true) { ch = ch.Concat(ch_Upper).ToArray(); }
+            if (small == true) { ch = ch.Concat(ch_Lower).ToArray(); }
+
+            StringBuilder result = new StringBuilder();
+            int l = ch.Length;
+            Random random = new Random(~unchecked((int)DateTime.Now.Ticks));
+            for (int i = 0; i < length; i++)
+            {
+                int rnd = random.Next(0, l);
+                result.Append(ch[rnd]);
+            }
+
+            return result.ToString();
+        }
+    }
+}

+ 1 - 1
TEAMModelBI/Tool/DateTimeHeloer.cs

@@ -4,7 +4,7 @@ using TEAMModelBI.Models;
 
 namespace TEAMModelBI.Tool
 {
-    public static class DateTimeHeloer
+    public static class TimeHelper
     {
         /// <summary>
         /// 获取月份的开始和结束时间戳   10位