瀏覽代碼

Merge branch 'PL/develop-BI' into develop

Li 2 年之前
父節點
當前提交
3732fc2bf5

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

@@ -117,7 +117,7 @@ namespace TEAMModelBI.Controllers.BIHome
                     if (tempCode != null)
                     {
                         string sqlSc = $"select c.id from c where c.standard='{itemStandard.standard}'";
-                        List<string> schoolIds = await CommonFind.FindSchoolIds(cosmosClient, sqlSc, "Base");
+                        List<string> schoolIds = await CommonFind.FindScIds(cosmosClient, sqlSc, "Base");
                         tempCode.schoolCount += schoolIds.Count;
 
                         if (schoolIds.Count > 0)
@@ -150,7 +150,7 @@ namespace TEAMModelBI.Controllers.BIHome
                         tempProvinceStics.standardCount += 1;
 
                         string sqlSc = $"select c.id from c where c.standard='{itemStandard.standard}'";
-                        List<string> schoolIds = await CommonFind.FindSchoolIds(cosmosClient, sqlSc, "Base");
+                        List<string> schoolIds = await CommonFind.FindScIds(cosmosClient, sqlSc, "Base");
                         tempProvinceStics.schoolCount += schoolIds.Count;
                         
                         if (schoolIds.Count > 0)
@@ -293,7 +293,7 @@ namespace TEAMModelBI.Controllers.BIHome
 
                     //string sqlTxt = $"select c.id from c where c.standard='{itemStandrd.standard}'";
                     string sqlTxt = $"select c.id from c where c.areaId='{itemStandrd.id}' and c.standard='{itemStandrd.standard}'";
-                    List<string> schoolIds = await CommonFind.FindSchoolIds(cosmosClient,sqlTxt, "Base");
+                    List<string> schoolIds = await CommonFind.FindScIds(cosmosClient,sqlTxt, "Base");
                     districtStics.schoolCount += schoolIds.Count;
 
                     if (schoolIds.Count > 0) 
@@ -361,7 +361,7 @@ namespace TEAMModelBI.Controllers.BIHome
                     if (tempCode != null)
                     {
                         //List<string> schoolIds = await CommonFind.FindSchoolIds(cosmosClient, $"select c.id from c where c.standard='{itemStandrd.standard}'", "Base");
-                        List<string> schoolIds = await CommonFind.FindSchoolIds(cosmosClient, $"select c.id from c where c.areaId='{itemStandrd.id}' and c.standard='{itemStandrd.standard}'", "Base");
+                        List<string> schoolIds = await CommonFind.FindScIds(cosmosClient, $"select c.id from c where c.areaId='{itemStandrd.id}' and c.standard='{itemStandrd.standard}'", "Base");
                         tempCode.schoolCount += schoolIds.Count;
 
                         var tempModel = sticsCitys.Where(x => x.cityCode == tempCode.cityCode).FirstOrDefault();
@@ -400,7 +400,7 @@ namespace TEAMModelBI.Controllers.BIHome
                         citySchool.cityCode = itemStandrd.cityCode;
                         citySchool.cityName = itemStandrd.cityName;
 
-                        List<string> schoolIds = await CommonFind.FindSchoolIds(cosmosClient, $"select c.id from c where c.standard='{itemStandrd.standard}'","Base");
+                        List<string> schoolIds = await CommonFind.FindScIds(cosmosClient, $"select c.id from c where c.standard='{itemStandrd.standard}'","Base");
                         citySchool.schoolCount += schoolIds.Count;
 
                         List<DistrictStics> tempDistrictStics = new();
@@ -468,7 +468,7 @@ namespace TEAMModelBI.Controllers.BIHome
 
                 //查询学校空间和学校Id
                 totalSize = await CommonFind.GetSqlValueCount(cosmosClient, "School", "select value(sum(c.size)) from c", "Base");
-                schoolId = await CommonFind.FindSchoolIds(cosmosClient, "select c.id,c.size from c", "Base");
+                schoolId = await CommonFind.FindScIds(cosmosClient, "select c.id,c.size from c", "Base");
 
                 //查询学校已使用空间大小
                 foreach (var itemId in schoolId)

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

@@ -930,7 +930,7 @@ namespace TEAMModelBI.Controllers.BINormal
                         await cosmosClient.GetContainer("TEAMModelOS", "Teacher").ReplaceItemAsync<Teacher>(item, item.id, new PartitionKey("Base"));
                     }
 
-                    List<string> scIds = await CommonFind.FindSchoolIds(cosmosClient, $"select c.id from c where c.areaId='{area.id}' and c.standard ='{area.standard}'", "Base");
+                    List<string> scIds = await CommonFind.FindScIds(cosmosClient, $"select c.id from c where c.areaId='{area.id}' and c.standard ='{area.standard}'", "Base");
 
                     foreach (var item in scIds)
                     {

+ 129 - 3
TEAMModelBI/Controllers/BISchool/BatchSchoolController.cs

@@ -34,6 +34,9 @@ using Microsoft.Identity.Client;
 using TEAMModelOS.SDK.Models.Dtos;
 using DocumentFormat.OpenXml.Spreadsheet;
 using DocumentFormat.OpenXml.Wordprocessing;
+using static TEAMModelBI.Controllers.BISchool.BatchSchoolController;
+using DocumentFormat.OpenXml.Bibliography;
+using HTEXLib;
 
 namespace TEAMModelBI.Controllers.BISchool
 {
@@ -1248,7 +1251,7 @@ namespace TEAMModelBI.Controllers.BISchool
                                     tempTeacher = await cosmosClient.GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync<Teacher>(tempTeacher, msId, new PartitionKey("Base"));
                                 }
 
-                                //添加学校学校顾问
+                                //添加学校学校管理员
                                 await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").CreateItemAsync<SchoolTeacher>(addSchoolTeacher, new PartitionKey($"Teacher-{scId}"));
                             }
                         }
@@ -1279,7 +1282,7 @@ namespace TEAMModelBI.Controllers.BISchool
                                 createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()
                             };
 
-                            //添加学校学校顾问
+                            //添加学校学校管理员
                             await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").CreateItemAsync<SchoolTeacher>(addSchoolTeacher, new PartitionKey($"Teacher-{scId}"));
                         }
                     }
@@ -1298,13 +1301,126 @@ namespace TEAMModelBI.Controllers.BISchool
         /// <param name="jsonElement"></param>
         /// <returns></returns>
         [ProducesDefaultResponseType]
+        [AuthToken(Roles = "admin")]
         [HttpPost("batch-scmanage")]
         public async Task<IActionResult> BatchScManage(JsonElement jsonElement) 
         {
+            if (!jsonElement.TryGetProperty("scManages", out JsonElement _scManages)) return BadRequest();
+            var cosmosClient = _azureCosmos.GetCosmosClient();
+            List<ScManages> scManages = _scManages.ToObject<List<ScManages>>();
 
+            List<ScManages> error = new();  //异常数据
 
+            foreach (var item in scManages)
+            {
+                School school = new();
+                var resSc = await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").ReadItemStreamAsync($"{item.id}", new PartitionKey("Base"));
+                if (resSc.Status == 200)
+                {
+                    using var sJson = await JsonDocument.ParseAsync(resSc.ContentStream);
+                    school = sJson.ToObject<School>();
+                    //CoreUser coreUser = await _coreAPIHttpService.GetUserInfo(new Dictionary<string, string> { { "key", $"19940828843" } }, _option.Location, _configuration);
+                    var content = new StringContent(item.mobiles.ToArray().ToJsonString(), Encoding.UTF8, "application/json");
+                    string json = await _coreAPIHttpService.GetUserInfos(content);
+                    List<TmdUserinfo> tmdInfos = json.ToObject<List<TmdUserinfo>>();
+                    Teacher teacher = new();
+                    foreach (var tmd in tmdInfos)
+                    {
+                        var respone = await cosmosClient.GetContainer(Constant.TEAMModelOS, "Teacher").ReadItemStreamAsync($"{tmd.id}", new PartitionKey("Base"));
+                        if (respone.Status == 200)
+                        {
+                            using var tchJson = await JsonDocument.ParseAsync(respone.ContentStream);
+                            teacher = tchJson.ToObject<Teacher>();
+                            var response = await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").ReadItemStreamAsync($"{tmd.id}", new PartitionKey($"Teacher-{item.id}"));
+                            if (response.Status == 200)
+                            {
+                                using var scTchJson = await JsonDocument.ParseAsync(response.ContentStream);
+                                SchoolTeacher tchSc = scTchJson.ToObject<SchoolTeacher>();
+                                if (tchSc.roles.Contains("admin"))
+                                {
+                                    tchSc.roles.Add("admin");
+                                    //添加顾问权限
+                                    await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").ReplaceItemAsync<SchoolTeacher>(tchSc, tchSc.id, new PartitionKey($"Teacher-{item.id}"));
+                                }
+                                else
+                                {
+                                    var exsitI = error.Find(f => f.id.Equals(item.id));
+                                    if (exsitI != null)
+                                    {
+                                        var replacts = error.Where(w => w.id.Equals(item.id)).FirstOrDefault();
+                                        replacts.mobiles.Add($"{item.id}");
+                                    }
+                                    else
+                                        error.Add(new ScManages { id = item.id, name = item.name, mobiles = new List<string>() { $"{tmd.id}" } });
+                                }
+                            }
+                            else
+                            {
+                                SchoolTeacher addSchoolTeacher = new()
+                                {
+                                    id = tmd.id,
+                                    code = $"Teacher-{item.id}",
+                                    pk = "Teacher",
+                                    status = "join",
+                                    roles = new List<string>() { "admin" },
+                                    name = tmd.name,
+                                    job = $"管理员",
+                                    size = 0,
+                                    createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()
+                                };
 
-            return Ok(new { state = RespondCode.Ok });
+                                var haveTeacher = teacher.schools.Find(x => x.schoolId.Equals($"{item.id}"));
+                                if (haveTeacher == null)
+                                {
+                                    //教师存在,在该教师信息中添加要管理的学校信息
+                                    teacher.schools.Add(new Teacher.TeacherSchool { areaId = string.IsNullOrEmpty(school.areaId) ? "" : school.areaId, schoolId = school.id, name = school.name, status = "join", time = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() });
+
+                                    teacher = await cosmosClient.GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync<Teacher>(teacher, teacher.id, new PartitionKey("Base"));
+                                }
+
+                                //添加学校学校顾问
+                                await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").CreateItemAsync<SchoolTeacher>(addSchoolTeacher, new PartitionKey($"Teacher-{item.id}"));
+                            }
+                        }
+                        else
+                        {
+                            teacher = new()
+                            {
+                                id = $"{tmd.id}",
+                                name = $"{tmd.name}",
+                                picture = $"{tmd.picture}",
+                                pk = "Base",
+                                code = "Base",
+                                size = 1,
+                                createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
+                                schools = new List<Teacher.TeacherSchool>() { new Teacher.TeacherSchool { schoolId = $"{school.id}", name = $"{school.name}", status = "join", time = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(), picture = school.province, areaId = school.areaId } }
+                            };
+
+                            teacher = await cosmosClient.GetContainer(Constant.TEAMModelOS, "Teacher").CreateItemAsync<Teacher>(teacher, new PartitionKey("Base"));
+
+                            SchoolTeacher addSchoolTeacher = new()
+                            {
+                                id = tmd.id,
+                                code = $"Teacher-{item.id}",
+                                pk = "Teacher",
+                                status = "join",
+                                roles = new List<string>() { "admin" },
+                                name = tmd.name,
+                                job = $"管理员",
+                                size = 0,
+                                createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()
+                            };
+
+                            //添加学校学校管理员
+                            await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").CreateItemAsync<SchoolTeacher>(addSchoolTeacher, new PartitionKey($"Teacher-{item.id}"));
+                        }
+                    }
+                }
+                else
+                    error.Add(new ScManages { id = item.id, name = item.name, mobiles = new List<string>() });
+            }
+
+            return Ok(new { state = RespondCode.Ok, error });
         }
 
         #region   预设学校基础信息 多语言
@@ -1527,5 +1643,15 @@ namespace TEAMModelBI.Controllers.BISchool
             public string tmdId { get; set; }
         }
 
+
+        /// <summary>
+        /// 管理员
+        /// </summary>
+        public record ScManages 
+        {
+            public string id { get; set; }
+            public string name { get; set; }
+            public List<string> mobiles { get; set; }
+        }
     }
 }

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

@@ -35,7 +35,6 @@ using TEAMModelOS.SDK.Models;
 using TEAMModelOS.SDK.Models.Cosmos.BI;
 using TEAMModelOS.SDK.Models.Cosmos.Common;
 using TEAMModelOS.SDK.Models.Service.BI;
-using static TEAMModelBI.Controllers.BISchool.SchoolController;
 
 namespace TEAMModelBI.Controllers.BISchool
 {
@@ -258,14 +257,16 @@ namespace TEAMModelBI.Controllers.BISchool
                             foreach (var item in teachers)
                             {
                                 msg.Append($"{item.name}[{item.id}]");
-                                var tchSchool = item.schools.Find(f => f.schoolId.Equals($"{school.id}"));
+                                var tchSchool = item.schools.Where(f => f.schoolId.Equals($"{school.id}")).FirstOrDefault();
                                 if (tchSchool == null)
                                 {
                                     Teacher.TeacherSchool teacherSchool = new() { schoolId = school.id, name = school.name, status = "join", time = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(), picture = school.picture, areaId = school.areaId };
                                     item.schools.Add(teacherSchool);
-                                    await cosmosClient.GetContainer("TEAMModelOS", "Teacher").ReplaceItemAsync<Teacher>(item, item.id, new PartitionKey("Base"));
                                 }
+                                else
+                                    tchSchool.areaId = school.areaId;
 
+                                await cosmosClient.GetContainer("TEAMModelOS", "Teacher").ReplaceItemAsync<Teacher>(item, item.id, new PartitionKey("Base"));
                             }
                             await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").ReplaceItemAsync<School>(school, school.id, new PartitionKey(school.code));
                         }
@@ -741,6 +742,7 @@ namespace TEAMModelBI.Controllers.BISchool
                         if (!schoolTeacher.roles.Contains("admin"))
                         {
                             schoolTeacher.roles.Add("admin");
+                            schoolTeacher.status = "join";
                             schoolTeacher = await cosmosClient.GetContainer("TEAMModelOS", "School").ReplaceItemAsync<SchoolTeacher>(schoolTeacher, schoolTeacher.id, new PartitionKey($"Teacher-{schoolId}"));
                             strMsg.Append($"并设置管理员,学校信息{schoolName}【{schoolId}】");
                         }
@@ -1852,7 +1854,7 @@ namespace TEAMModelBI.Controllers.BISchool
             if (!string.IsNullOrEmpty($"{areaId}"))
             {
                 List<string> schools = new();
-                schools = await CommonFind.FindSchoolIds(cosmosClient, $"select c.id from c where c.areaId='{areaId}'", "Base");
+                schools = await CommonFind.FindScIds(cosmosClient, $"select c.id from c where c.areaId='{areaId}'", "Base");
 
                 allSize = await CommonFind.GetSqlValueCount(cosmosClient, "School", $"select value(sum(c.size)) from c where c.areaId='{areaId}'", "Base"); //区域所有学校空间
 
@@ -2061,6 +2063,7 @@ namespace TEAMModelBI.Controllers.BISchool
         /// </summary>
         /// <param name="jsonElement"></param>
         /// <returns></returns>
+        [ProducesDefaultResponseType]
         [HttpPost("get-managescs")]
         public async Task<IActionResult> GetManageSclist(JsonElement jsonElement)
         {
@@ -2092,7 +2095,32 @@ namespace TEAMModelBI.Controllers.BISchool
 
             return Ok(new { state = RespondCode.Ok, mScInfos });
         }
+        
+        /// <summary>
+        /// 查询学校简单信息
+        /// </summary>
+        /// <param name="jsonElement"></param>
+        /// <returns></returns>
+        [ProducesDefaultResponseType]
+        [HttpPost("get-scsimple")]
+        public async Task<IActionResult> GetScSimple(JsonElement jsonElement)
+        {
+            var cosmosClient = _azureCosmos.GetCosmosClient();
+            jsonElement.TryGetProperty("scName", out JsonElement scName);
 
+            StringBuilder scSql = new("select c.id,c.name,c.picture,c.createTime from c");
+            if (!string.IsNullOrEmpty($"{scName}")) 
+                scSql.Append($" where c.name='{scName}'");
+
+            List<ScSimple> scSimple = new();
+
+            await foreach (var itemSchool in cosmosClient.GetContainer("TEAMModelOS", "School").GetItemQueryIterator<ScSimple>(queryText: scSql.ToString(), requestOptions: new QueryRequestOptions() {  PartitionKey = new PartitionKey("Base") }))
+            {
+                scSimple.Add(itemSchool);
+            }
+
+            return Ok(new { state = RespondCode.Ok, scSimple });
+        }
 
         #region 购买记录
 
@@ -2224,6 +2252,14 @@ namespace TEAMModelBI.Controllers.BISchool
             public Dictionary<string, double?> catalogSize { get; set; }
         }
 
+        public record ScSimple
+        {
+            public string id { get; set; }
+            public string name { get; set; }
+            public string picture { get; set; }
+            public long createTime { get; set; }
+        }
+
         public record DelSchoolRel
         {
             public string id { get; set; }

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

@@ -64,7 +64,7 @@ namespace TEAMModelBI.Controllers.Census
             {
                 string sqlTxt = $"select c.id from c where c.areaId='{areaId}'";
                 sqlSize.Append($" where c.areaId = '{areaId}'");
-                schoolIds = await CommonFind.FindSchoolIds(cosmosClient, sqlTxt.ToString(), "Base");
+                schoolIds = await CommonFind.FindScIds(cosmosClient, sqlTxt.ToString(), "Base");
                 foreach (var item in StaticValue.fileType)
                 {
                     int fileCnt = 0;

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

@@ -564,7 +564,7 @@ namespace TEAMModelBI.Controllers.Census
                 scSqlTxt.Append($" where c.areaId='{areaId}'");
             }
 
-            schools = await CommonFind.FindSchoolIds(cosmosClient, scSqlTxt.ToString(), "Base");
+            schools = await CommonFind.FindScIds(cosmosClient, scSqlTxt.ToString(), "Base");
 
             //所有的课程记录
             List<LessonRecord> records = new();

+ 3 - 3
TEAMModelBI/Tool/CommonFind.cs

@@ -54,7 +54,7 @@ namespace TEAMModelBI.Tool
         /// <param name="cosmosClient">cosmosDB连接</param>
         /// <param name="tmdId">醍摩豆账户</param>
         /// <returns>返回顾问相关的学校ID集合</returns>
-        public static async Task<List<string>> FindSchoolIds(CosmosClient cosmosClient, string tmdId)
+        public static async Task<List<string>> FindSchoolIds(CosmosClient cosmosClient, string tmdId,string roles= "assist")
         {
             List<string> schoolIds = new();
             //string schoolSql = $"SELECT DISTINCT REPLACE(c.code,'Teacher-','') AS schoolId,c.code,c.roles,c.id,c.name From c where ARRAY_CONTAINS(c.roles,'assist',true) AND c.status = 'join' AND c.id='{tmdId}'";
@@ -67,7 +67,7 @@ namespace TEAMModelBI.Tool
             //    }
             //}
 
-            string schoolSql = $"SELECT value(REPLACE(c.code, 'Teacher-', '')) FROM c where array_contains(c.roles,'assist',true) and c.pk='Teacher' and c.id='{tmdId}'";
+            string schoolSql = $"SELECT value(REPLACE(c.code, 'Teacher-', '')) FROM c where array_contains(c.roles,'{roles}',true) and c.pk='Teacher' and c.id='{tmdId}'";
             await foreach (var item in cosmosClient.GetContainer("TEAMModelOS", "School").GetItemQueryIterator<string>(queryText: schoolSql, requestOptions: new QueryRequestOptions() { }))
             {
                 schoolIds.Add(item);
@@ -126,7 +126,7 @@ namespace TEAMModelBI.Tool
         /// <param name="sqlTxt">sql语句</param>
         /// <param name="code">数据分区键</param>
         /// <returns>返回学校ID的集合</returns>
-        public static async Task<List<string>> FindSchoolIds(CosmosClient cosmosClient, string sqlTxt, string code)
+        public static async Task<List<string>> FindScIds(CosmosClient cosmosClient, string sqlTxt, string code)
         {
             List<string> schoolIds = new();