|
@@ -2118,22 +2118,200 @@ namespace TEAMModelOS.Controllers
|
|
|
if (!request.TryGetProperty("activityId", out JsonElement _activityId)) return BadRequest();
|
|
|
if (!request.TryGetProperty("uploadId", out JsonElement _uploadId)) return BadRequest();
|
|
|
if (!request.TryGetProperty("expertId", out JsonElement _expertId)) return BadRequest();
|
|
|
- // if (!request.TryGetProperty("expertId", out JsonElement _expertId)) return BadRequest();
|
|
|
+ request.TryGetProperty("expertIdOld", out JsonElement _expertIdOld);
|
|
|
string sql = $"select value c from c where c.upload.uploadId='{_uploadId}' and c.pk='ActivityEnroll'";
|
|
|
var result = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).GetList<ActivityEnroll>(sql, $"ActivityEnroll-{_activityId}");
|
|
|
if (result.list.IsNotEmpty())
|
|
|
{
|
|
|
+ ActivityExpertTask expertTask = null;
|
|
|
+
|
|
|
+ ExpertContestTask contestTask = new ExpertContestTask
|
|
|
+ {
|
|
|
+ uploadId=_uploadId.GetString(),
|
|
|
+
|
|
|
+ };
|
|
|
+ string name = string.Empty;
|
|
|
+ int count = 0;
|
|
|
+ if (result.list.Count>1)
|
|
|
+ {
|
|
|
+ var leaders = result.list.FindAll(z => z.contest.leader == 1);
|
|
|
+ var leader = leaders?.First();
|
|
|
+ if (leader!=null)
|
|
|
+ {
|
|
|
+ name = leader?.contest?.teamName;
|
|
|
+ if (string.IsNullOrEmpty(name))
|
|
|
+ {
|
|
|
+ name = $"{leader?.contest?.enrollInfos?.Find(z => z.code.Equals("name"))?.val}({result.list.Count})";
|
|
|
+ }
|
|
|
+ if (leader?.upload != null && leader.upload.sokrates.IsNotEmpty())
|
|
|
+ {
|
|
|
+ count += leader.upload.sokrates.Count;
|
|
|
+ }
|
|
|
+ if (leader?.upload != null && leader.upload.files.IsNotEmpty())
|
|
|
+ {
|
|
|
+ count += leader.upload.files.Count;
|
|
|
+ }
|
|
|
+ List<IdNameCode> members = result.list.Select(z => new IdNameCode { id = z.id, code = z.schoolId, picture = z.tmdPicture, nickname = z.tmdName, name = z.contest?.enrollInfos?.Find(e => e.code.Equals("name")).val }).ToList();
|
|
|
+ var period = leader?.contest?.enrollInfos?.Find(z => z.code.Equals("period"));
|
|
|
+ var subject = leader?.contest?.enrollInfos?.Find(z => z.code.Equals("subject"));
|
|
|
+ contestTask.name= $"{leader?.schoolName}-{name}";
|
|
|
+ contestTask.uploadTypes=new List<string> { leader.upload?.type };
|
|
|
+ contestTask.count=count;
|
|
|
+ contestTask.cipher=leader.contest?.cipher;
|
|
|
+ contestTask.type=leader.contest.type;
|
|
|
+ contestTask.leader=leader.contest.leader;
|
|
|
+ contestTask.members= members;
|
|
|
+ contestTask.tmdid=leader.id;
|
|
|
+ contestTask.period=period?.val;
|
|
|
+ contestTask.subject=subject?.val;
|
|
|
+
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ return Ok(new { code = 3, msg = "该队伍没有队长!" });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if (result.list.Count==1)
|
|
|
+ {
|
|
|
+ var leader = result.list[0];
|
|
|
+ name = leader?.contest?.enrollInfos?.Find(z => z.code.Equals("name"))?.val;
|
|
|
+ if (leader?.upload != null && leader.upload.sokrates.IsNotEmpty())
|
|
|
+ {
|
|
|
+ count += leader.upload.sokrates.Count;
|
|
|
+ }
|
|
|
+ if (leader?.upload != null && leader.upload.files.IsNotEmpty())
|
|
|
+ {
|
|
|
+ count += leader.upload.files.Count;
|
|
|
+ }
|
|
|
+ var period = leader?.contest?.enrollInfos?.Find(z => z.code.Equals("period"));
|
|
|
+ var subject = leader?.contest?.enrollInfos?.Find(z => z.code.Equals("subject"));
|
|
|
+ contestTask.name= $"{leader?.schoolName}-{name}";
|
|
|
+ contestTask.uploadTypes=new List<string> { leader.upload?.type };
|
|
|
+ contestTask.count=count;
|
|
|
+ contestTask.type=leader.contest.type;
|
|
|
+ contestTask.tmdid=leader.id;
|
|
|
+ contestTask.period=period?.val;
|
|
|
+ contestTask.subject=subject?.val;
|
|
|
+ }
|
|
|
+
|
|
|
ActivityExpert activityExpert = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).ReadItemAsync<ActivityExpert>(_activityId.GetString(), new PartitionKey("ActivityExpert"));
|
|
|
Expert expert= activityExpert.experts.Find(z => !string.IsNullOrWhiteSpace(z.id) && z.id.Equals(_expertId.GetString()));
|
|
|
- if (expert!=null) {
|
|
|
-
|
|
|
- }
|
|
|
+ if (expert!=null) {
|
|
|
+ //作品是否有分配过
|
|
|
+ string taskSQL = $"select value c from c join b in c.contestTasks where b.uploadId='{_uploadId}' and c.pk='ActivityExpertTask' " ;
|
|
|
+ var resultTask = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).GetList<ActivityExpertTask>(taskSQL, $"ActivityExpertTask-{_activityId}");
|
|
|
+ if (resultTask.list.IsNotEmpty())
|
|
|
+ {
|
|
|
+ if (!string.IsNullOrWhiteSpace($"{_expertIdOld}")) {
|
|
|
|
|
|
+ if (!expert.id.Equals(_expertIdOld.GetString()))
|
|
|
+ {
|
|
|
+ //从旧的分配中移除
|
|
|
+ var oldTaskExpert = resultTask.list.Find(z => z.id.Equals(_expertIdOld.GetString()));
|
|
|
+ if (oldTaskExpert!=null)
|
|
|
+ {
|
|
|
+ var changeCount = oldTaskExpert.contestTasks.RemoveAll(z => z.uploadId.Equals(_uploadId.GetString()));
|
|
|
+ if (changeCount>0)
|
|
|
+ {
|
|
|
+ await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).UpsertItemAsync(oldTaskExpert, new PartitionKey(oldTaskExpert.code));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ return Ok(new { code = 2, msg = "未找到该作品已经分配的专家!" });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ return Ok(new { code = 4, msg = "作品变更评审专家,调整后的专家不能与已分配的专家相同!" });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 除去被调整的专家(oldExpert),(resultTask)可能还有别的专家已分配的,但是不影响该作品继续被分配到新的专家, 可以理解为,作品分配次数+1,
|
|
|
+ //作品未被分配的情况、
|
|
|
+ string expTaskSQL = $"select value c from c where c.id='{expert.id}' and c.pk='ActivityExpertTask' ";
|
|
|
+ var resultExpTask = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).GetList<ActivityExpertTask>(expTaskSQL, $"ActivityExpertTask-{_activityId}");
|
|
|
+
|
|
|
+ if (resultExpTask.list.IsNotEmpty())
|
|
|
+ {
|
|
|
+ var task = resultExpTask.list[0].contestTasks.Find(z => z.uploadId.Equals(_uploadId.GetString()));
|
|
|
+ if (task!=null)
|
|
|
+ {
|
|
|
+ task=contestTask;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ resultExpTask.list[0].contestTasks.Add(contestTask);
|
|
|
+ }
|
|
|
+ expertTask=resultExpTask.list[0];
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ //专家没有任何被分配的作品
|
|
|
+ expertTask = new ActivityExpertTask()
|
|
|
+ {
|
|
|
+ id= expert.id,
|
|
|
+ code=$"ActivityExpertTask-{_activityId}",
|
|
|
+ pk="ActivityExpertTask",
|
|
|
+ ttl=-1,
|
|
|
+ name=expert.iname,
|
|
|
+ tmdname=expert.name,
|
|
|
+ picture=expert.picture,
|
|
|
+ contestTasks= new List<ExpertContestTask> { contestTask }
|
|
|
+ };
|
|
|
+ }
|
|
|
+ if (expertTask!=null) {
|
|
|
+ await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).UpsertItemAsync(expertTask, new PartitionKey(expertTask.code));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ //旧专家,和作品没有匹配的情况,未分配过,不能调整。
|
|
|
+ if (!string.IsNullOrWhiteSpace($"{_expertIdOld}"))
|
|
|
+ {
|
|
|
+ return Ok(new { code = 2, msg = "未找到该作品已经分配的专家!" });
|
|
|
+ }
|
|
|
+
|
|
|
+ //作品未被分配的情况、
|
|
|
+ string expTaskSQL = $"select value c from c where c.id='{expert.id}' and c.pk='ActivityExpertTask' ";
|
|
|
+ var resultExpTask = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).GetList<ActivityExpertTask>(expTaskSQL, $"ActivityExpertTask-{_activityId}");
|
|
|
+
|
|
|
+ if (resultExpTask.list.IsNotEmpty())
|
|
|
+ {
|
|
|
+ var task = resultExpTask.list[0].contestTasks.Find(z => z.uploadId.Equals(_uploadId.GetString()));
|
|
|
+ if (task!=null)
|
|
|
+ {
|
|
|
+ task=contestTask;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ resultExpTask.list[0].contestTasks.Add(contestTask);
|
|
|
+ }
|
|
|
+ expertTask=resultExpTask.list[0];
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ //专家没有任何被分配的作品
|
|
|
+
|
|
|
+ expertTask = new ActivityExpertTask()
|
|
|
+ {
|
|
|
+ id= expert.id,
|
|
|
+ code=$"ActivityExpertTask-{_activityId}",
|
|
|
+ pk="ActivityExpertTask",
|
|
|
+ ttl=-1,
|
|
|
+ name=expert.iname,
|
|
|
+ tmdname=expert.name,
|
|
|
+ picture=expert.picture,
|
|
|
+ contestTasks= new List<ExpertContestTask> { contestTask }
|
|
|
+ };
|
|
|
+ }
|
|
|
+ if (expertTask!=null)
|
|
|
+ {
|
|
|
+ await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).UpsertItemAsync(expertTask, new PartitionKey(expertTask.code));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return Ok(new { code = 200, expertTask });
|
|
|
}
|
|
|
else {
|
|
|
return Ok(new { code=1,msg ="作品不存在!"});
|
|
|
}
|
|
|
- break;
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
}
|