فهرست منبع

1. 取得當前所有學校名單:(1)輸入值追加學校ID、是否有管理者、是否有管理模組(2)回傳值追加是否有管理者、管理者列表、是否有管理模組
2. HiTeach 上傳評測紀錄API 追加是否搬運Blob流程判斷

jeff 3 سال پیش
والد
کامیت
eaba960b5d

+ 0 - 1
TEAMModelOS.SDK/Models/Cosmos/Common/ExamClassResult.cs

@@ -15,7 +15,6 @@ namespace TEAMModelOS.SDK.Models
             studentScores = new List<List<double>>();
             info = new ClassInfo();
             studentIds = new List<string>();
-            studentScores = new List<List<double>>();
             sum = new List<double>();
             mark = new List<List<List<Details>>>();
             ans = new List<List<List<string>>>();

+ 3 - 2
TEAMModelOS/ClientApp/src/api/index.js

@@ -295,7 +295,8 @@ export default {
     /**
      * 數據中心當前所有學校名單
      */
-    getSchoolList: function () {
-        return post('/teacher/init/get-school-list')
+    getSchoolList: function (data) {
+        data = (data == null) ? {} : data
+        return post('/teacher/init/get-school-list', data)
     },
 }

+ 1 - 0
TEAMModelOS/ClientApp/src/api/schoolSetting.js

@@ -42,6 +42,7 @@ export default {
 
     // 取得數據中心當前所有學校名單
     getSchoolList: function (data) {
+        data = (data == null) ? {} : data
         return post('/teacher/init/get-school-list', data)
     },
 

+ 2 - 0
TEAMModelOS/ClientApp/src/locale/lang/en-US/settings.js

@@ -28,6 +28,8 @@ export default {
 	undoJoin: 'Withdrawal request',
 	requestJoin: 'Request to join',
 	inputSearch: 'Enter the name of the school you want to search for',
+	hasManager: 'System administrator exists',
+	hasBaseModule: 'Management system',
 	modalTip1: 'Notice',
 	modalTip2: "This action will cause you to leave your current school's IES 5 platform and go to",
 	modalTip3: 'Any unsaved information on the current page will be lost, do you agree to this action?',

+ 2 - 1
TEAMModelOS/ClientApp/src/locale/lang/zh-CN/settings.js

@@ -28,7 +28,8 @@ export default {
 	undoJoin:'撤销申请',
 	requestJoin:'申请加入',
 	inputSearch:'输入要搜索的学校名称',
-	hasManager:'有管理者',
+	hasManager: '有管理者',
+	hasBaseModule: '管理模组',
 	modalTip1:'注意',
 	modalTip2:'此举动将使您离开当前学校的 IES5 站台,并前往',
 	modalTip3:'当前页面未保存的资料将会丢失,是否同意此操作?',

+ 2 - 0
TEAMModelOS/ClientApp/src/locale/lang/zh-TW/settings.js

@@ -28,6 +28,8 @@ export default {
     undoJoin: '撤銷申請',
     requestJoin: '申請加入',
     inputSearch: '輸入要搜尋的學校名稱',
+    hasManager: '有管理者',
+    hasBaseModule: '管理模組',
     modalTip1: '注意',
     modalTip2: '此舉動將使您離開當前學校的IES 5網站,並前往',
     modalTip3: '當前頁面未儲存的資料將會遺失,是否同意此操作?',

+ 4 - 2
TEAMModelOS/ClientApp/src/view/settings/SchoolMgmt.vue

@@ -96,9 +96,11 @@
 						<Option v-for="(item,index) in originSchoolList" :value="item.name" :key="index">
 							<span>{{ item.name }} <span style="color:#838383;">( {{ item.id }} )</span></span>
 							<span :class="['select-tool',canJoin(item.id) ? 'select-tool-join' : '']"
-								@click="onSelectSchool(canJoin(item.id),item)">{{ tbStatusFilter(item.id) }}</span>
+								  @click="onSelectSchool(canJoin(item.id),item)">{{ tbStatusFilter(item.id) }}</span>
 							<span style="color:#838383;margin-left: 20px;">{{ item.region }}-{{ item.province }}-{{ item.city }}</span>
-							<span class="icon iconfont" style="margin-left: 20px;" :title="$t('settings.hasManager')" v-show="item.manager">&#xe637;</span>
+							<span class="icon iconfont" style="margin-left: 20px;" :title="$t('settings.hasManager')" v-show="item.hasManager || item.hasBaseModule"></span>
+							<span class="icon iconfont" style="margin-left: 5px;" :title="$t('settings.hasManager')" v-show="item.hasManager">&#xe637;</span>
+							<span class="icon iconfont" style="margin-left: 5px;" :title="$t('settings.hasBaseModule')" v-show="item.hasBaseModule">&#xe69d;</span>
 						</Option>
 					</Select>
 					<p class="errorMsg">{{searchIdErrorMsg}}</p>

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 254 - 130
TEAMModelOS/Controllers/Client/HiTeachController.cs


+ 1 - 1
TEAMModelOS/Controllers/School/SchoolController.cs

@@ -316,7 +316,7 @@ namespace TEAMModelOS.Controllers
                 }
 
                 //服務
-                if (json.RootElement.TryGetProperty("service", out JsonElement serviceJobj))
+                if (json.RootElement.TryGetProperty("service", out JsonElement serviceJobj) && serviceJobj.ValueKind != JsonValueKind.Null)
                 {
                     //取得active的主週期、所有主週期歷史
                     List<ServiceMainPeriod> activeMainPeriod = new List<ServiceMainPeriod>();

+ 72 - 12
TEAMModelOS/Controllers/Teacher/InitController.cs

@@ -386,32 +386,68 @@ namespace TEAMModelOS.Controllers
             }
         }
 
+        /// <summary>
+        /// 取得學校所有列表
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
         [ProducesDefaultResponseType]
         //[AuthToken(Roles = "teacher")]
         [HttpPost("get-school-list")]
-        public async Task<IActionResult> GetSchoolList()
+        public async Task<IActionResult> GetSchoolList(JsonElement request)
         {
             try
             {
-                var client = _azureCosmos.GetCosmosClient();
+                //輸入值
+                string sqlSchoolId = (request.TryGetProperty("schoolId", out JsonElement reqSchoolId)) ? reqSchoolId.GetString() : string.Empty;
+                bool sqlHasManager = (request.TryGetProperty("manager", out JsonElement reqHasManager)) ? reqHasManager.GetBoolean() : false;
+                bool sqlHasMBaseModule = (request.TryGetProperty("base", out JsonElement reqHasBaseModule)) ? reqHasBaseModule.GetBoolean() : false;
 
+                var client = _azureCosmos.GetCosmosClient();
                 //有管理者的學校
-                List<string> managerSchList = new List<string>();
-                await foreach (var item in client.GetContainer("TEAMModelOS", "School").GetItemQueryStreamIterator(queryText: $"SELECT DISTINCT REPLACE(c.code, 'Teacher-', '') AS schoolId FROM c WHERE ARRAY_CONTAINS(c.roles, 'admin', true) AND c.pk = 'Teacher' AND c.status = 'join'", requestOptions: new QueryRequestOptions() {} ))
+                Dictionary<string, List<Dictionary<string, string>>> managerSchDic = new Dictionary<string, List<Dictionary<string, string>>>();
+                string managerWhereOption = (!string.IsNullOrWhiteSpace(sqlSchoolId)) ? $" AND c.code = 'Teacher-{sqlSchoolId}'" : string.Empty;
+                string managerSql = $"SELECT DISTINCT REPLACE(c.code, 'Teacher-', '') AS schoolId, c.id, c.name FROM c WHERE ARRAY_CONTAINS(c.roles, 'admin', true) AND c.pk = 'Teacher' AND c.status = 'join'{managerWhereOption}";
+                await foreach (var item in client.GetContainer("TEAMModelOS", "School").GetItemQueryStreamIterator(queryText: managerSql, requestOptions: new QueryRequestOptions() {} ))
                 {
                     using var json = await JsonDocument.ParseAsync(item.ContentStream);
                     foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
                     {
-                        if(obj.TryGetProperty("schoolId", out JsonElement schoolId))
+                        string id =  obj.GetProperty("id").GetString(); //管理者ID
+                        string name = obj.GetProperty("name").GetString(); //管理者姓名
+                        string schoolId = obj.GetProperty("schoolId").GetString(); //學校ID
+                        Dictionary<string, string> managerDic = new Dictionary<string, string>();
+                        managerDic.Add("id", id);
+                        managerDic.Add("name", name);
+                        if (managerSchDic.ContainsKey(schoolId))
+                        {
+                            managerSchDic[schoolId].Add(managerDic);
+                        }
+                        else
                         {
-                            managerSchList.Add(schoolId.GetString());
+                            List<Dictionary<string, string>> managerList = new List<Dictionary<string, string>>();
+                            managerList.Add(managerDic);
+                            managerSchDic.Add(schoolId, managerList);
                         }
                     }
                 }
+                //有管理模組的學校
+                List<string> baseModuleSchList = new List<string>();
+                string baseModuleWhereOption = (!string.IsNullOrWhiteSpace(sqlSchoolId)) ? $" AND c.id = '{sqlSchoolId}'" : string.Empty;
+                await foreach (var item in client.GetContainer("TEAMModelOS", "School").GetItemQueryStreamIterator(queryText: $"SELECT c.id FROM c JOIN serviceProduct IN c.service.product WHERE serviceProduct.prodCode = 'IPDYZYLC'{baseModuleWhereOption}", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("Product") }))
+                {
+                    using var json = await JsonDocument.ParseAsync(item.ContentStream);
+                    foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
+                    {
+                        string schoolId = obj.GetProperty("id").GetString(); //學校ID
+                        baseModuleSchList.Add(schoolId);
+                    }
+                }
 
                 //學校資料
                 List<object> schools = new List<object>();
-                await foreach (var item in client.GetContainer("TEAMModelOS", "School").GetItemQueryStreamIterator(queryText: $"SELECT c.id, c.name, c.region, c.province, c.city, c.picture FROM c ", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("Base") }))
+                string schoolWhereOption = (!string.IsNullOrWhiteSpace(sqlSchoolId)) ? $" WHERE c.id = '{sqlSchoolId}'" : string.Empty;
+                await foreach (var item in client.GetContainer("TEAMModelOS", "School").GetItemQueryStreamIterator(queryText: $"SELECT c.id, c.name, c.region, c.province, c.city, c.picture FROM c {schoolWhereOption}", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("Base") }))
                 {
                     var jsons = await JsonDocument.ParseAsync(item.ContentStream);
                     if (jsons.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
@@ -419,15 +455,40 @@ namespace TEAMModelOS.Controllers
                         foreach (var obj in jsons.RootElement.GetProperty("Documents").EnumerateArray())
                         {
                             dynamic schoolExtobj = new ExpandoObject();
-                            schoolExtobj.id = obj.GetProperty("id").GetString();
+                            schoolExtobj.id = obj.GetProperty("id").GetString(); //學校ID
                             schoolExtobj.name = obj.GetProperty("name");
                             schoolExtobj.region = obj.GetProperty("region");
                             schoolExtobj.province = obj.GetProperty("province");
                             schoolExtobj.city = obj.GetProperty("city");
                             schoolExtobj.picture = obj.GetProperty("picture");
-                            var match = managerSchList.FirstOrDefault(x => x.Contains(schoolExtobj.id));
-                            schoolExtobj.manager = (match != null) ? true : false;
-                            schools.Add(schoolExtobj);
+                            if (managerSchDic.ContainsKey(schoolExtobj.id))
+                            {
+                                schoolExtobj.hasManager = true;
+                                schoolExtobj.managers = managerSchDic[schoolExtobj.id];
+                            }
+                            else
+                            {
+                                schoolExtobj.hasManager = false;
+                                schoolExtobj.managers = new List<object>();
+                            }
+                            schoolExtobj.hasBaseModule = (baseModuleSchList.Contains(schoolExtobj.id)) ? true : false;
+                            //學校輸出結果加入篩選
+                            if( (sqlHasManager && sqlHasMBaseModule) && (schoolExtobj.hasManager && schoolExtobj.hasBaseModule) )
+                            {
+                                schools.Add(schoolExtobj);
+                            }
+                            else if(sqlHasManager && schoolExtobj.hasManager)
+                            {
+                                schools.Add(schoolExtobj);
+                            }
+                            else if(sqlHasMBaseModule && schoolExtobj.hasBaseModule)
+                            {
+                                schools.Add(schoolExtobj);
+                            }
+                            else if(!sqlHasManager && !sqlHasMBaseModule)
+                            {
+                                schools.Add(schoolExtobj);
+                            }
                         }
                     }
                 }
@@ -440,7 +501,6 @@ namespace TEAMModelOS.Controllers
             }
         }
 
-
         /// <summary>
         /// 申請或同意邀請加入學校
         /// </summary>

+ 2 - 1
TEAMModelOS/TEAMModelOS.csproj

@@ -49,7 +49,8 @@
     <Description>版本号</Description>
     <PackageReleaseNotes>* HiTeach API 變更
 1. 取得老師所在學校相關數據:追加學校blob寫入權限
-2. 上傳評測結果:不再執行Blob搬運及Blob路徑資料變更</PackageReleaseNotes>
+2. 上傳評測結果:追加搬運Blob及Blob路徑資料變更判斷
+* 取得當前所有學校名單:追加是否有管理者、管理者列表、是否有管理模組</PackageReleaseNotes>
   </PropertyGroup>
   <Target Name="DebugEnsureNodeEnv" BeforeTargets="Build">
     <!-- Build Target:  Ensure Node.js is installed -->