CrazyIter_Bin 1 년 전
부모
커밋
e3d5c6259a
2개의 변경된 파일105개의 추가작업 그리고 2개의 파일을 삭제
  1. 9 0
      TEAMModelOS.SDK/Models/Cosmos/Common/Activity.cs
  2. 96 2
      TEAMModelOS/Controllers/Common/ActivityController.cs

+ 9 - 0
TEAMModelOS.SDK/Models/Cosmos/Common/Activity.cs

@@ -680,6 +680,15 @@ namespace TEAMModelOS.SDK.Models
         /// 掩饰分数 -1未评分
         /// </summary>
         public double maskScore { get; set; } = -1;
+
+        public List<ExpertUploadScore> expertScore { get; set; } = new List<ExpertUploadScore>();
+    }
+
+    public class ExpertUploadScore { 
+        public string id { get; set; }
+        public string name { get; set; }
+        public double score { get; set; }
+        public List<RuleConfig> detailScore { get; set; } = new List<RuleConfig>();
     }
     /// <summary>
     /// Teacher表

+ 96 - 2
TEAMModelOS/Controllers/Common/ActivityController.cs

@@ -2755,10 +2755,13 @@ namespace TEAMModelOS.Controllers
                                     ReviewRule reviewRule = JsonDocument.Parse(ruleResponse.Content).RootElement.ToObject<ReviewRule>();
                                     if (reviewRule.scoreDetail==1) {
                                         if (!scoreData.detailScore.IsNotEmpty()) 
-                                        { 
-
+                                        {
+                                            return Ok(new { code = 5, msg = "需要进行细项评分!" });
                                         }
                                     }
+                                    if (scoreData.score<0) {
+                                        return Ok(new { code = 6, msg = "分数不能小于0!" });
+                                    }
                                     if (string.IsNullOrWhiteSpace(scoreData.uploadId))
                                     {
                                         ActivityExpertTask expertTask = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).ReadItemAsync<ActivityExpertTask>(tmdid, new PartitionKey($"ActivityExpertTask-{_activityId}"));
@@ -2767,6 +2770,97 @@ namespace TEAMModelOS.Controllers
                                         task.status=1;
                                         task.detailScore = scoreData.detailScore;
                                         await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).UpsertItemAsync(expertTask, new PartitionKey($"ActivityExpertTask-{_activityId}"));
+                                        //检查作品是否完成评审自动结算
+                                        {
+                                            string sql = $"select distinct  value  c  from c join b in c.contestTasks  where c.activityId='{_activityId}' and b.uploadId='{scoreData.uploadId}'";
+                                            var uploadAllResult = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).GetList<ActivityExpertTask>(sql, $"ActivityExpertTask-{_activityId}");
+                                            if (uploadAllResult.list.IsNotEmpty()) 
+                                            {
+                                                var unfinish = uploadAllResult.list.SelectMany(x=>x.contestTasks).Where(z => z.status==0  && z.uploadId.Equals(scoreData.uploadId));
+                                                if (!(unfinish!=null  && unfinish.Count()>0)) {
+                                                    //没有未完成的评审作品自动结算、
+                                                    string enrollSQL =$"select value c from c where c.upload.uploadId='{scoreData.uploadId}'and c.pk ='ActivityEnroll' ";
+                                                    var enrollResult = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).GetList<ActivityEnroll>(sql, $"ActivityEnroll-{_activityId}");
+                                                    foreach (var item in enrollResult.list) 
+                                                    {
+                                                        bool change = false;
+                                                        foreach (var expertScore  in uploadAllResult.list)
+                                                        {
+                                                            var taskScore = expertScore.contestTasks.Find(z => z.uploadId.Equals(item.upload.uploadId));
+                                                            if (taskScore!= null) {
+                                                                item.upload.expertScore.Add(new ExpertUploadScore {
+                                                                    id= expertScore.id,
+                                                                    name=expertScore.name,
+                                                                    score=taskScore.score,
+                                                                    detailScore=taskScore.detailScore
+                                                                });
+                                                            }
+                                                        }
+                                                        switch (reviewRule.scoreRule) 
+                                                        {
+                                                            case "only":
+                                                                if (item.upload.expertScore.IsNotEmpty() && item.upload.expertScore.Count==1) 
+                                                                { 
+                                                                    item.upload.score= item.upload.expertScore.First().score;
+                                                                    change=true;
+                                                                }
+                                                                break;
+                                                            case "avg":
+                                                                if (item.upload.expertScore.IsNotEmpty()  && item.upload.expertScore.Count>=2)
+                                                                {
+                                                                    item.upload.score= item.upload.expertScore.Average(z => z.score); 
+                                                                    change=true;
+                                                                }
+                                                                break;
+                                                            case "top":
+                                                                if (item.upload.expertScore.IsNotEmpty() && item.upload.expertScore.Count>2) {
+                                                                    item.upload.score= item.upload.expertScore.Max(z => z.score);
+                                                                    change=true;
+                                                                }
+                                                                break;
+                                                            case "rmLowAvg":
+                                                                if (item.upload.expertScore.IsNotEmpty() && item.upload.expertScore.Count>=3) 
+                                                                {
+                                                                    item.upload.expertScore.Remove(item.upload.expertScore.Min());
+                                                                    if (item.upload.expertScore.IsNotEmpty()) {
+                                                                        item.upload.score= item.upload.expertScore.Average(z => z.score);
+                                                                        change=true;
+                                                                    }
+                                                                }
+                                                                break;
+                                                            case "rmTopAvg":
+                                                                if (item.upload.expertScore.IsNotEmpty() && item.upload.expertScore.Count>=3)
+                                                                {
+                                                                    item.upload.expertScore.Remove(item.upload.expertScore.Max());
+                                                                    if (item.upload.expertScore.IsNotEmpty())
+                                                                    {
+                                                                        item.upload.score= item.upload.expertScore.Average(z => z.score);
+                                                                        change=true;
+                                                                    }
+                                                                }
+                                                                break;
+                                                            case "rmLowTopAvg":
+                                                                if (item.upload.expertScore.IsNotEmpty() && item.upload.expertScore.Count>=4)
+                                                                {
+                                                                    item.upload.expertScore.Remove(item.upload.expertScore.Max());
+                                                                    item.upload.expertScore.Remove(item.upload.expertScore.Min());
+                                                                    if (item.upload.expertScore.IsNotEmpty())
+                                                                    {
+                                                                        item.upload.score= item.upload.expertScore.Average(z => z.score);
+                                                                        change=true;
+                                                                    }
+                                                                }
+                                                                break;
+                                                        }
+                                                        if (change)
+                                                        {
+                                                            await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).UpsertItemAsync(item, new PartitionKey($"ActivityEnroll-{_activityId}"));
+                                                        }
+                                                      
+                                                    }
+                                                }
+                                            }
+                                        }
                                         return Ok(new { code = 200, completeCount = expertTask.contestTasks.Where(z => z.status==1).Count(), contestTasks = expertTask.contestTasks });
                                     }
                                     else