Просмотр исходного кода

添加查询未加入区域的学校接口,添加学校加入区接口,添加删除操作记录接口,添加查询BI操作记录接口,以及优化创校接口。

Li 3 лет назад
Родитель
Сommit
ae4e962413

+ 40 - 16
TEAMModeBI/Controllers/BISchool/BatchSchoolController.cs

@@ -17,6 +17,7 @@ using TEAMModelOS.SDK.Models;
 using TEAMModelOS.SDK.Models.Cosmos.BI;
 using static TEAMModelOS.SDK.Models.Teacher;
 using Microsoft.AspNetCore.Hosting;  //引用读取文件
+using TEAMModelOS.SDK.Models.Service;
 
 namespace TEAMModeBI.Controllers.BISchool
 {
@@ -231,12 +232,39 @@ namespace TEAMModeBI.Controllers.BISchool
                     var cosmosClient = _azureCosmos.GetCosmosClient();
                     foreach (BISchool bischool in foundSchools.biSchools)
                     {
-                        var schoolStatus = await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").ReadItemStreamAsync($"{bischool.id}", new PartitionKey($"Base"));
+                        CreateSchoolInfo createSchoolInfo = new CreateSchoolInfo()
+                        {
+                            province = bischool.province,
+                            id = "",
+                            name = bischool.name,
+                            city = bischool.city,
+                            aname = "",
+                            createCount = 0,
+                        };
+
+                        //生成学校ID
+                        createSchoolInfo = await SchoolCode.GenerateSchoolCode(createSchoolInfo, _dingDing, _environment);  
+
+                        var schoolStatus = await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").ReadItemStreamAsync($"{createSchoolInfo.id}", new PartitionKey($"Base"));
                         if (schoolStatus.Status == 200)
                         {
-                            schools.Add(bischool);
+                            createSchoolInfo.createCount = 1;
+                            createSchoolInfo = await SchoolCode.GenerateSchoolCode(createSchoolInfo, _dingDing, _environment);
+                            var schoolStatu1 = await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").ReadItemStreamAsync($"{createSchoolInfo.id}", new PartitionKey($"Base"));
+                            if (schoolStatu1.Status == 200)
+                            {
+                                createSchoolInfo.createCount = 2;                                
+                                createSchoolInfo = await SchoolCode.GenerateSchoolCode(createSchoolInfo, _dingDing, _environment);
+                                var schoolStatu2 = await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").ReadItemStreamAsync($"{createSchoolInfo.id}", new PartitionKey($"Base"));
+                                if (schoolStatu2.Status == 200)
+                                {
+                                    createSchoolInfo.createCount = 3;
+                                    createSchoolInfo = await SchoolCode.GenerateSchoolCode(createSchoolInfo, _dingDing, _environment);
+                                }
+                            }
                         }
-                        else
+
+                        if (createSchoolInfo.id != null)
                         {
                             List<Period> periods = new List<Period>();
                             string campusId = Guid.NewGuid().ToString();
@@ -255,7 +283,7 @@ namespace TEAMModeBI.Controllers.BISchool
                             });
                             School upSchool = new School
                             {
-                                id = bischool.id,
+                                id = createSchoolInfo.id,
                                 name = bischool.name,
                                 size = bischool.size,
                                 code = "Base",
@@ -267,13 +295,13 @@ namespace TEAMModeBI.Controllers.BISchool
                                 address = bischool.address,
                                 picture = "https://teammodelstorage.blob.core.chinacloudapi.cn/0-public/school/bbf54fb3-3fc8-43ae-a358-107281c174cc.png",
                                 timeZone = new TEAMModelOS.SDK.Models.TimeZone { label = "(UTC+08:00) 北京,重庆,香港特别行政区,乌鲁木齐", value = "+08:00" },
-                                type = 2,
+                                type = 1,
                                 pk = "School",
                                 ttl = -1,
-                                schoolCode = bischool.id,
+                                schoolCode = createSchoolInfo.id,
                                 period = periods
                             };
-                            stringBuilder.Append($"创建学校:{upSchool.id}【{upSchool.name}】");
+                            stringBuilder.Append($"创建学校:{upSchool.name}【{upSchool.id}】");
                             //创建学校
                             await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").CreateItemAsync<School>(upSchool, new PartitionKey(upSchool.code));
                             Teacher teacher = null;
@@ -288,12 +316,12 @@ namespace TEAMModeBI.Controllers.BISchool
                             if (teacher != null)
                             {
                                 //教师存在,在该教师信息中添加要管理的学校信息
-                                teacher.schools.Add(new Teacher.TeacherSchool { schoolId = bischool.id, name = bischool.name, status = "join", time = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() });
+                                teacher.schools.Add(new Teacher.TeacherSchool { schoolId = createSchoolInfo.id, name = bischool.name, status = "join", time = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() });
                                 await cosmosClient.GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync<Teacher>(teacher, bischool.admin, new PartitionKey("Base"));
                                 SchoolTeacher schoolTeacher = new SchoolTeacher
                                 {
                                     id = bischool.admin,
-                                    code = $"Teacher-{bischool.id}",
+                                    code = $"Teacher-{createSchoolInfo.id}",
                                     roles = new List<string> { "admin", "teacher" },
                                     job = "管理员",
                                     name = teacher.name,
@@ -319,8 +347,8 @@ namespace TEAMModeBI.Controllers.BISchool
                                     picture = "",
                                     //创建账号并第一次登录IES5则默认赠送1G
                                     size = 1,
-                                    defaultSchool = bischool.id,
-                                    schools = new List<Teacher.TeacherSchool>() { new TeacherSchool { schoolId = bischool.id, name = bischool.name, status = "join", time = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() } }
+                                    defaultSchool = createSchoolInfo.id,
+                                    schools = new List<Teacher.TeacherSchool>() { new TeacherSchool { schoolId = createSchoolInfo.id, name = bischool.name, status = "join", time = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() } }
                                 };
 
                                 stringBuilder.Append($"没有该教师信息创建的教师信息:{addteacher.name}【{addteacher.id}】");
@@ -328,7 +356,7 @@ namespace TEAMModeBI.Controllers.BISchool
                                 SchoolTeacher schoolTeacher = new SchoolTeacher
                                 {
                                     id = bischool.admin,
-                                    code = $"Teacher-{bischool.id}",
+                                    code = $"Teacher-{createSchoolInfo.id}",
                                     roles = new List<string> { "admin", "teacher" },
                                     job = "管理员",
                                     name = bischool.admin,
@@ -1200,10 +1228,6 @@ namespace TEAMModeBI.Controllers.BISchool
         /// </summary>
         public record BISchool()
         {
-            /// <summary>
-            /// 学校ID
-            /// </summary>
-            public string id { get; set; }
             /// <summary>
             /// 学校名称
             /// </summary>

+ 160 - 0
TEAMModeBI/Controllers/BISchool/SchoolController.cs

@@ -0,0 +1,160 @@
+using Azure.Cosmos;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Options;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text.Json;
+using System.Threading.Tasks;
+using TEAMModelOS.Models;
+using TEAMModelOS.SDK.DI;
+using TEAMModelOS.SDK.Extension;
+using TEAMModelOS.SDK.Models;
+using TEAMModelOS.SDK.Models.Cosmos.BI;
+
+namespace TEAMModeBI.Controllers.BISchool
+{
+    [Route("schoolcheck")]
+    [ApiController]
+    public class SchoolController : ControllerBase
+    {
+        private readonly AzureCosmosFactory _azureCosmos;
+        private readonly DingDing _dingDing;
+        private readonly Option _option;
+        private readonly AzureStorageFactory _azureStorage;
+
+        public SchoolController(AzureCosmosFactory azureCosmos, DingDing dingDing, AzureStorageFactory azureStorage, IOptionsSnapshot<Option> option) 
+        {
+            _azureCosmos = azureCosmos;
+            _dingDing = dingDing;
+            _azureStorage = azureStorage;
+            _option = option?.Value;
+        }
+
+        /// <summary>
+        /// 查询未加入区域的学校
+        /// </summary>
+        /// <returns></returns>
+        [ProducesDefaultResponseType]
+        [HttpPost("get-notarea")]
+        public async Task<IActionResult> GetNotAreaSchool() 
+        {
+            try
+            {
+                var cosmosClient = _azureCosmos.GetCosmosClient();
+                string sqltxt = $"SELECT c.id,c.name,c.schoolCode,c.province,c.city,c.dist FROM c WHERE c.standard=null";
+                List<NotAreaSchool> notAreaSchools = new List<NotAreaSchool>();
+                await foreach (var item in cosmosClient.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryStreamIterator(queryText: sqltxt, 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())
+                        {
+                            NotAreaSchool notAreaSchool = new NotAreaSchool()
+                            {
+                                id = obj.GetProperty("id").GetString(),
+                                name = obj.GetProperty("name").GetString(),
+                                schoolCode = obj.GetProperty("schoolCode").GetString(),
+                                province = obj.GetProperty("province").GetString(),
+                                city = obj.GetProperty("city").GetString(),
+                                dist = obj.GetProperty("dist").GetString(),
+                            };
+                            notAreaSchools.Add(notAreaSchool);
+                        }
+                    }
+                }
+
+                return Ok(new { state = 200, notAreaSchools });
+            }
+            catch (Exception ex)
+            {
+                await _dingDing.SendBotMsg($"BI,{_option.Location}  /schoolcheck/get-notarea   \n    {ex.Message}{ex.StackTrace}", GroupNames.醍摩豆服務運維群組);
+                return BadRequest();
+            }
+        }
+
+        /// <summary>
+        /// 学校加入区
+        /// </summary>
+        /// <param name="jsonElement"></param>
+        /// <returns></returns>
+        [ProducesDefaultResponseType]
+        [HttpPost("set-schooljoinarea")]
+        public async Task<IActionResult> SetSchoolJoinArea(JsonElement jsonElement) 
+        {
+            try
+            {
+                if (!jsonElement.TryGetProperty("tmdId", out JsonElement _tmdId)) return BadRequest();   //醍摩豆账户
+                if (!jsonElement.TryGetProperty("tmdName", out JsonElement _tmdName)) return BadRequest(); //醍摩豆账号名称
+                if (!jsonElement.TryGetProperty("standard", out JsonElement standard)) return BadRequest();
+                if (!jsonElement.TryGetProperty("schoolCode", out JsonElement _schoolCode)) return BadRequest();
+
+                List<string> schoolCodes = _schoolCode.ToObject<List<string>>();
+
+                var cosmosCliet = _azureCosmos.GetCosmosClient();
+                //操作记录
+                string blobOrTable = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString();
+                OperateLog operateLog = new OperateLog
+                {
+                    PartitionKey = "OperateLog-BI",
+                    RowKey = blobOrTable,
+                    recordID = blobOrTable,
+                    platformSource = "BI",
+                    tmdId = $"{_tmdId}",
+                    tmdName = $"{_tmdName}",
+                    visitApi = "/schoolcheck/set-schooljoinarea",
+                    operateTime = DateTime.Now,
+                    operateDescribe = $"{_tmdName}【{_tmdId}】已操作学校加入区域功能,加入的区域:{standard}"
+                };
+
+                if (schoolCodes.Count > 0) 
+                {
+                    foreach (var tempCode in schoolCodes) 
+                    {
+                        School school = await cosmosCliet.GetContainer(Constant.TEAMModelOS, "School").ReadItemAsync<School>(tempCode,new PartitionKey("Base"));
+                        if (school != null) 
+                        {
+                            school.standard = $"{standard}";
+                            await cosmosCliet.GetContainer(Constant.TEAMModelOS, "School").ReplaceItemAsync<School>(school, school.id, new PartitionKey(school.code));
+                        }
+                    }
+                }
+
+                await _azureStorage.Save<OperateLog>(operateLog);   //保存操作记录
+
+                return Ok(new { state = 200 });
+            }
+            catch (Exception ex)
+            {
+                await _dingDing.SendBotMsg($"BI,{_option.Location}  /schoolcheck/set-schooljoinarea   \n    {ex.Message}{ex.StackTrace}", GroupNames.醍摩豆服務運維群組);
+                return BadRequest();
+            }
+        }
+
+
+
+
+        /// <summary>
+        /// 未加入区域的学校
+        /// </summary>
+        public record NotAreaSchool 
+        {
+            public string id { get; set; }
+
+            public string name { get; set; }
+
+            public string schoolCode { get; set; }
+
+            public string province { get; set; }
+
+            public string city { get; set; }
+
+            public string dist { get; set; }
+
+
+        }
+
+    }
+}

+ 136 - 0
TEAMModeBI/Controllers/OperateRecord/OperateLogController.cs

@@ -0,0 +1,136 @@
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Azure.Cosmos.Table;
+using Microsoft.Extensions.Options;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text.Json;
+using System.Threading.Tasks;
+using TEAMModelOS.Models;
+using TEAMModelOS.SDK.DI;
+using TEAMModelOS.SDK.Models.Cosmos.BI;
+using System.Text;
+
+namespace TEAMModeBI.Controllers.OperateRecord
+{
+    [Route("operatelog")]
+    [ApiController]
+    public class OperateLogController : ControllerBase
+    {
+        private readonly AzureStorageFactory _azureStorage;
+        private readonly DingDing _dingDing;
+        private readonly Option _option;
+
+        public OperateLogController(AzureStorageFactory azureStorage, DingDing dingDing, IOptionsSnapshot<Option> option)
+        {
+            _azureStorage = azureStorage;
+            _dingDing = dingDing;
+            _option = option?.Value;
+        }
+
+        /// <summary>
+        /// 查询BI操作记录
+        /// </summary>
+        /// <param name="jsonElement"></param>
+        /// <returns></returns>
+        [HttpPost("get-operatelogbydate")]
+        public async Task<IActionResult> GetOperateLogByDate(JsonElement jsonElement) 
+        {
+            try
+            {
+                jsonElement.TryGetProperty("startDate", out JsonElement startDate);
+                jsonElement.TryGetProperty("endDate", out JsonElement endDate);
+
+                List<OperateLog> operateLogs = null;
+
+                StringBuilder tableSql = new StringBuilder();
+
+                if (!string.IsNullOrEmpty($"{startDate}"))
+                {
+                    operateLogs = await _azureStorage.QueryWhereString<OperateLog>($"RowKey {QueryComparisons.GreaterThanOrEqual} '{startDate}'");
+                }
+                else if (!string.IsNullOrEmpty($"{startDate}") && !string.IsNullOrEmpty($"{endDate}"))
+                {
+                    operateLogs = await _azureStorage.QueryWhereString<OperateLog>($"RowKey {QueryComparisons.GreaterThanOrEqual} '{startDate}' {TableOperators.And} RowKey {QueryComparisons.LessThanOrEqual} '{endDate}'");
+                }
+                else
+                {
+                    operateLogs = await _azureStorage.QueryWhereString<OperateLog>();
+                    //operateLogs = await _azureStorage.FindListByDict<OperateLog>(dic);
+                }
+
+                return Ok(new { state = 200, operateLogs });
+            }
+            catch (Exception ex)
+            {
+                await _dingDing.SendBotMsg($"BI,{_option.Location}   /operatelog/get-operatelogbydate    {ex.Message}{ex.StackTrace}", GroupNames.醍摩豆服務運維群組);
+                return BadRequest();
+            }
+        }
+
+        /// <summary>
+        /// 删除操作记录
+        /// </summary>
+        /// <param name="jsonElement"></param>
+        /// <returns></returns>
+        [HttpPost("del-operatelogbydate")]
+        public async Task<IActionResult> DelOperateLogByDate(JsonElement jsonElement) 
+        {
+            try
+            {
+                if (!jsonElement.TryGetProperty("tmdId", out JsonElement _tmdId)) return BadRequest();   //醍摩豆账户
+                if (!jsonElement.TryGetProperty("tmdName", out JsonElement _tmdName)) return BadRequest(); //醍摩豆账号名称                
+                jsonElement.TryGetProperty("startDate", out JsonElement startDate);
+                jsonElement.TryGetProperty("endDate", out JsonElement endDate);
+                jsonElement.TryGetProperty("rowKey", out JsonElement rowKey);
+
+                //操作记录
+                OperateLog operateLog = new OperateLog();
+                string blobOrTable = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString();
+                operateLog.PartitionKey = "OperateLog-BI";
+                operateLog.RowKey = blobOrTable;
+                operateLog.recordID = blobOrTable;
+                operateLog.platformSource = "BI";
+                operateLog.tmdId = $"{_tmdId}";
+                operateLog.tmdName = $"{_tmdName}";
+                operateLog.visitApi = "/operatelog/del-operatelogbydate";
+                operateLog.operateTime = DateTime.Now;
+                operateLog.operateDescribe = $"{_tmdName}【{_tmdId}】账户删除操作记录,开始-结束时间戳:{startDate}-{endDate}";
+
+                //var temp = await _azureStorage.Delete<OperateLog>(partitionKey: "OperateLog-BI", rowKey: $"{startDate}");  //删除单个
+                StringBuilder operateStr = new StringBuilder($"{_tmdName}【{_tmdId}】账户删除操作记录,");
+                StringBuilder tableStrWhere = new StringBuilder();
+                if (!string.IsNullOrEmpty($"{rowKey}"))
+                {
+                    tableStrWhere.Append($"RowKey {QueryComparisons.Equal} '{rowKey}'");
+                    operateStr.Append($"删除的时间戳:{rowKey}");
+                }
+                else
+                {
+                    tableStrWhere.Append($"RowKey {QueryComparisons.GreaterThanOrEqual} '{startDate}'{TableOperators.And} RowKey {QueryComparisons.LessThanOrEqual} '{endDate}'");
+                    operateStr.Append($"删除的时间戳,开始——结束时间戳:{startDate}-{endDate}");
+                }
+                var temp = await _azureStorage.DeleteStringWhere<OperateLog>(rowKey: tableStrWhere.ToString());
+
+                await _azureStorage.Save<OperateLog>(operateLog); //保存操作记录
+                if (temp.Count > 0)
+                {
+                    return Ok(new { state = 200 });
+                }
+                else return Ok(new { state = 400 });
+            }
+            catch (Exception ex)
+            {
+                await _dingDing.SendBotMsg($"BI, {_option.Location} /operatelog/del-operatelogbydate  {ex.Message}{ex.StackTrace}", GroupNames.醍摩豆服務運維群組);
+                return BadRequest();
+            }
+
+        }
+
+
+
+
+
+    }
+}

Разница между файлами не показана из-за своего большого размера
+ 15172 - 0
TEAMModeBI/JsonFile/Region/region.json