Procházet zdrojové kódy

調整成績統計API 加上Createtime欄位 / 加上一些防呆機制

upon před 1 rokem
rodič
revize
8620c3974b
1 změnil soubory, kde provedl 107 přidání a 9 odebrání
  1. 107 9
      TEAMModelOS/Controllers/Both/ScoreCalcController.cs

+ 107 - 9
TEAMModelOS/Controllers/Both/ScoreCalcController.cs

@@ -369,6 +369,7 @@ namespace TEAMModelOS.Controllers
                     SubActLsRecord subActLsRecord = new SubActLsRecord();
                     subActLsRecord.id = scoreCalcLsRecord[0].items[i].id;
                     subActLsRecord.name = scoreCalcLsRecord[0].items[i].name;
+                    subActLsRecord.startTime = scoreCalcLsRecord[0].items[i].createTime;
                     // 子項目比重由外層取得
                     subActLsRecord.rate = scoreCalcLsRecord[0].itemRates[i];
                     subActLsRecord.use = scoreCalcLsRecord[0].items[i].use;
@@ -402,6 +403,7 @@ namespace TEAMModelOS.Controllers
                         SubActActivity subActActivity = new SubActActivity();
                         subActActivity.id = scoreCalcActivity[i].items[j].id;
                         subActActivity.name = scoreCalcActivity[i].items[j].name;
+                        subActActivity.startTime = scoreCalcActivity[i].items[j].createTime;
                         // 子項目比重由外層取得
                         subActActivity.rate = scoreCalcActivity[i].itemRates[j];
                         subActActivity.use = scoreCalcActivity[i].items[j].use;
@@ -867,7 +869,12 @@ namespace TEAMModelOS.Controllers
                 }
 
                 // 取公式表的 id
-                string sql_Formula = $"SELECT c.id  FROM c where  c.scorecalcActId in  ({sb.ToString().Remove(sb.Length - 1, 1)}) ";
+                string scorecalcActIdstr = "''";
+                if (sb.Length > 0) 
+                {
+                    scorecalcActIdstr = sb.ToString().Remove(sb.Length - 1, 1);                    
+                }
+                string sql_Formula = $"SELECT c.id  FROM c where  c.scorecalcActId in  ({scorecalcActIdstr}) ";
                 await foreach (var item in clientTeacher.GetItemQueryIterator<ItemId>(queryText: sql_Formula))
                 {
                     formulaIdslist.Add(item.id);
@@ -1046,6 +1053,7 @@ namespace TEAMModelOS.Controllers
                 scoreCalcActivityItems.use = true;
                 scoreCalcActivityItems.sort = 1;
                 scoreCalcActivityItems.custom = true;
+                scoreCalcActivityItems.createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
                 scoreCalcActivity.items.Add(scoreCalcActivityItems);
                 // 根據學生數量設定預設值
                 List<double> zeroScores = new List<double>();
@@ -1137,6 +1145,7 @@ namespace TEAMModelOS.Controllers
                 scoreCalcActivityItems.name = ishaveName ? (name + "") : "子項目";
                 scoreCalcActivityItems.use = true;
                 scoreCalcActivityItems.custom = true;
+                scoreCalcActivityItems.createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
 
                 // 先判斷是否為課堂紀錄 根據項目的類別寫入的欄位需要調整
                 if (scoreCalcActivityBase.type == "lessonrecord")
@@ -1643,7 +1652,7 @@ namespace TEAMModelOS.Controllers
             //評量資料
             List<ExamItem> examItem = new List<ExamItem>();
             //評量名稱
-            List<ExamItem> examItemName = new List<ExamItem>();
+            List<ExamItem> examItemNameStartTime = new List<ExamItem>();
             //作業資料
             List<HomeworkItem> homeworkItems = new List<HomeworkItem>();
             //作業分數
@@ -1970,6 +1979,14 @@ namespace TEAMModelOS.Controllers
                 // 補上寫進DB的子項目名稱欄位
                 scoreCalcLsRecord.items[i].name = lessonBasesCalcList[i].summary.meterialName;
 
+                for (int j = 0; j < lessonRecords.Count; j++)
+                {
+                    if (scoreCalcLsRecord.items[i].id == lessonRecords[j].id) 
+                    {
+                        scoreCalcLsRecord.items[i].createTime = lessonRecords[j].startTime;
+                    }
+                }                    
+
                 List<double> stuActAttendScores = new List<double>();
                 List<double> stuActPointScores = new List<double>();
                 List<double> stuActItactScores = new List<double>();
@@ -2021,11 +2038,11 @@ namespace TEAMModelOS.Controllers
                 sb_examIds.Append($"'{examItem[i].examId}',");
             }
             // 取評量名稱
-            string sql_examName = $"SELECT c.name FROM c where c.pk = 'Exam' and c.id in ({sb_examIds.ToString().Remove(sb_examIds.Length - 1, 1)})";
+            string sql_examName = $"SELECT c.name, c.startTime FROM c where c.pk = 'Exam' and c.id in ({sb_examIds.ToString().Remove(sb_examIds.Length - 1, 1)})";
             //string sql_examName = $"SELECT c.id as examId, c.name FROM c where c.pk = 'Exam' and c.id in ({sb_examIds.ToString().Remove(sb_examIds.Length - 1, 1)})";
             await foreach (var item in clientCommon.GetItemQueryIterator<ExamItem>(queryText: sql_examName))
             {
-                examItemName.Add(item);
+                examItemNameStartTime.Add(item);
             }
 
             List<ExamItem> examItemCalcList = new List<ExamItem>();
@@ -2062,9 +2079,9 @@ namespace TEAMModelOS.Controllers
             for (int i = 0; i < examItemCalcList.Count; i++)
             {
                 bool isDataOk = false;
-                for (int j = 0; j < examItemName.Count; j++)
+                for (int j = 0; j < examItemNameStartTime.Count; j++)
                 {
-                    if (examItemCalcList[i].examId == examItemName[j].examId)
+                    if (examItemCalcList[i].examId == examItemNameStartTime[j].examId)
                     {
                         isDataOk = true;
                     }
@@ -2082,7 +2099,8 @@ namespace TEAMModelOS.Controllers
             {
                 ScoreCalcActivityItems scoreCalcActivityItems = new ScoreCalcActivityItems();
                 scoreCalcActivityItems.id = examItemCalcList[i].examId;
-                scoreCalcActivityItems.name = examItemName[i].name;
+                scoreCalcActivityItems.name = examItemNameStartTime[i].name;
+                scoreCalcActivityItems.createTime = examItemNameStartTime[i].startTime;
                 scoreCalcActivityItems.use = true;
                 scoreCalcActivity_eaxm.items.Add(scoreCalcActivityItems);
                 scoreCalcActivity_eaxm.stuActScores.Add(examItemCalcList[i].sum);
@@ -2099,11 +2117,11 @@ namespace TEAMModelOS.Controllers
             // 由classId判斷是取甚麼班級
             if (ishaveClassId)
             {
-                sql_homeworkIds = $"SELECT c.id, c.name FROM c WHERE c.pk = 'Homework' AND ARRAY_CONTAINS(c.classes, \"{classId}\", true)";
+                sql_homeworkIds = $"SELECT c.id, c.name, c.startTime FROM c WHERE c.pk = 'Homework' AND ARRAY_CONTAINS(c.classes, \"{classId}\", true)";
             }
             else
             {
-                sql_homeworkIds = $"SELECT c.id, c.name FROM c WHERE c.pk = \"Homework\" AND ARRAY_CONTAINS(c.stuLists, \"{grouplistId}\", true)";
+                sql_homeworkIds = $"SELECT c.id, c.name, c.startTime FROM c WHERE c.pk = \"Homework\" AND ARRAY_CONTAINS(c.stuLists, \"{grouplistId}\", true)";
             }
 
             await foreach (var item in clientCommon.GetItemQueryIterator<HomeworkItem>(queryText: sql_homeworkIds))
@@ -2125,6 +2143,7 @@ namespace TEAMModelOS.Controllers
                 ScoreCalcActivityItems scoreCalcActivityItems = new ScoreCalcActivityItems();
                 scoreCalcActivityItems.id = homeworkItems[i].id;
                 scoreCalcActivityItems.name = homeworkItems[i].name;
+                scoreCalcActivityItems.createTime = homeworkItems[i].startTime;
                 scoreCalcActivityItems.use = true;
 
                 scoreCalcActivity_homework.items.Add(scoreCalcActivityItems);
@@ -2337,5 +2356,84 @@ namespace TEAMModelOS.Controllers
             }
             return scoreCalcActivityItems;
         }
+
+        /// <summary>
+        /// (十七)查詢項目屬性資料
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        [ProducesDefaultResponseType]
+        [Authorize(Roles = "IES")]
+        [HttpPost("get-itemprops")]
+        public async Task<IActionResult> GetItemProps(JsonElement request)
+        {
+            try
+            {
+                if (!request.TryGetProperty("ids", out JsonElement ids)) return BadRequest();
+                if (!request.TryGetProperty("type", out JsonElement type)) return BadRequest();
+                string[] idsarr = ids.ToString().Split(',');
+                StringBuilder idssb = new StringBuilder();
+                if (idsarr.Length > 0) 
+                {
+                    foreach (var id in idsarr)
+                    {
+                        idssb.Append("'");
+                        idssb.Append(id);
+                        idssb.Append("'");
+                        idssb.Append(",");
+                    }
+                    if (idssb.Length > 0)
+                    {
+                        idssb.Remove(idssb.Length - 1, 1);
+                    }
+                }
+                string sql = "";
+                List<ItemProps> ItemPropsList = new List<ItemProps>();
+                
+                var clientCommon = _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Common);
+                var clientSchool = _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School);
+                
+                switch (type.ToString()) 
+                {
+                    case "lessonrecord": 
+                        sql = $"SELECT c.id, c.name, c.startTime FROM c where c.id in ({idssb}) and c.pk = 'LessonRecord'";
+                        await foreach (var item in clientSchool.GetItemQueryIterator<ItemProps>(queryText: sql))
+                        {
+                            ItemPropsList.Add(item);
+                        }
+                        break;
+                    case "exam":
+                        sql = $"SELECT c.id, c.name, c.startTime, c.source FROM c where c.id in ({idssb}) and c.pk = 'Exam'";
+                        await foreach (var item in clientCommon.GetItemQueryIterator<ItemProps>(queryText: sql))
+                        {
+                            ItemPropsList.Add(item);
+                        }
+                        break;
+                    case "homework":
+                        sql = $"SELECT c.id, c.name, c.startTime FROM c where c.id in ({idssb}) and c.pk = 'Homework'";
+                        await foreach (var item in clientCommon.GetItemQueryIterator<ItemProps>(queryText: sql))
+                        {
+                            ItemPropsList.Add(item);
+                        }
+                        break;
+                }
+                
+
+
+
+              
+
+                
+
+              
+
+                return Ok(ItemPropsList);
+            }
+            catch (Exception e)
+            {
+                //await _dingDing.SendBotMsg($"OS,{_option.Location},open-api/upsert()\n{e.Message}\n{e.StackTrace}\n{e.StackTrace}", GroupNames.醍摩豆服務運維群組);
+                return BadRequest();
+            }
+        }
     }
 }