|
@@ -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
|