|
@@ -38,126 +38,75 @@ namespace TEAMModelOS.SDK
|
|
|
var resultActivityEnroll= await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).GetList<ActivityEnroll>(enrollSQL, $"ActivityEnroll-{activity.id}");
|
|
|
List<ExpertContestTaskDto > activityEnrollsInvalid = new List<ExpertContestTaskDto>();
|
|
|
Dictionary<string, List<ActivityEnroll>> uploads = new Dictionary<string, List<ActivityEnroll>>();
|
|
|
- foreach (ActivityEnroll enroll in resultActivityEnroll.list)
|
|
|
+ foreach (ActivityEnroll enroll in resultActivityEnroll.list)
|
|
|
{
|
|
|
+ var period = enroll.contest?.enrollInfos?.Find(z => z.code.Equals("period"));
|
|
|
+ var subject = enroll.contest?.enrollInfos?.Find(z => z.code.Equals("subject"));
|
|
|
string periodSubjectKey =string.Empty;
|
|
|
+ int count = 0;
|
|
|
+ if (enroll.upload != null && enroll.upload.sokrates.IsNotEmpty())
|
|
|
+ {
|
|
|
+ count += enroll.upload.sokrates.Count;
|
|
|
+ }
|
|
|
+ if (enroll.upload != null && enroll.upload.files.IsNotEmpty())
|
|
|
+ {
|
|
|
+ count += enroll.upload.files.Count;
|
|
|
+ }
|
|
|
+ //学段学科不匹配
|
|
|
+ var taskDto = new ExpertContestTaskDto
|
|
|
+ {
|
|
|
+ uploadId = enroll.upload?.uploadId,
|
|
|
+ name = $"{enroll?.schoolName}-{enroll?.tmdName}",
|
|
|
+ uploadTypes = new List<string> { enroll?.upload.type },
|
|
|
+ count = count,
|
|
|
+ cipher = enroll.contest?.cipher,
|
|
|
+ type = enroll.contest != null ? enroll.contest.type : 0,
|
|
|
+ leader = enroll.contest != null ? enroll.contest.type : 0,
|
|
|
+ tmdid = enroll.id,
|
|
|
+ status = -1,
|
|
|
+ score = -1,
|
|
|
+ //detailScore=new List<RuleConfig>()
|
|
|
+ members = new List<IdNameCode>(),
|
|
|
+ periodSubjectKey = periodSubjectKey,
|
|
|
+ period = period?.val,
|
|
|
+ subject = subject?.val,
|
|
|
+
|
|
|
+ };
|
|
|
if (distribute.Equals("period"))
|
|
|
{
|
|
|
- var period = enroll.contest?.enrollInfos?.Find(z => z.code.Equals("period"));
|
|
|
if (period != null)
|
|
|
{
|
|
|
periodSubjectKey = $"{period.val}-";
|
|
|
}
|
|
|
else {
|
|
|
- int count = 0;
|
|
|
- if (enroll.upload!=null && enroll.upload.sokrates.IsNotEmpty())
|
|
|
- {
|
|
|
- count += enroll.upload.sokrates.Count;
|
|
|
- }
|
|
|
- if (enroll.upload != null && enroll.upload.files.IsNotEmpty())
|
|
|
- {
|
|
|
- count += enroll.upload.files.Count;
|
|
|
- }
|
|
|
- //学段学科不匹配
|
|
|
- var invalidTask = new ExpertContestTaskDto
|
|
|
- {
|
|
|
- uploadId = enroll.upload?.uploadId,
|
|
|
- name = $"{enroll?.schoolName}-{enroll?.tmdName}",
|
|
|
- uploadTypes = new List<string> { enroll?.upload.type },
|
|
|
- count = count,
|
|
|
- cipher = enroll.contest?.cipher,
|
|
|
- type = enroll.contest != null ? enroll.contest.type : 0,
|
|
|
- leader = enroll.contest != null ? enroll.contest.type : 0,
|
|
|
- tmdid = enroll.id,
|
|
|
- status = -1,
|
|
|
- score = -1,
|
|
|
- //detailScore=new List<RuleConfig>()
|
|
|
- members = new List<IdNameCode>(),
|
|
|
- periodSubjectKey = periodSubjectKey,
|
|
|
- period = period?.val,
|
|
|
- subject =null,
|
|
|
- available=2
|
|
|
- };
|
|
|
- activityEnrollsInvalid.Add(invalidTask);
|
|
|
+ taskDto.available = 2;
|
|
|
+ activityEnrollsInvalid.Add(taskDto);
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
else if (distribute.Equals("subject"))
|
|
|
{
|
|
|
- var subject = enroll.contest?.enrollInfos?.Find(z => z.code.Equals("subject"));
|
|
|
+
|
|
|
if (subject != null)
|
|
|
{
|
|
|
periodSubjectKey = $"-{subject.val}";
|
|
|
}
|
|
|
else {
|
|
|
- int count = 0;
|
|
|
- if (enroll.upload != null && enroll.upload.sokrates.IsNotEmpty())
|
|
|
- {
|
|
|
- count += enroll.upload.sokrates.Count;
|
|
|
- }
|
|
|
- if (enroll.upload != null && enroll.upload.files.IsNotEmpty())
|
|
|
- {
|
|
|
- count += enroll.upload.files.Count;
|
|
|
- }
|
|
|
- //学段学科不匹配
|
|
|
- var invalidTask = new ExpertContestTaskDto
|
|
|
- {
|
|
|
- uploadId = enroll.upload?.uploadId,
|
|
|
- name = $"{enroll?.schoolName}-{enroll?.tmdName}",
|
|
|
- uploadTypes = new List<string> { enroll?.upload.type },
|
|
|
- count = count,
|
|
|
- cipher = enroll.contest?.cipher,
|
|
|
- type = enroll.contest != null ? enroll.contest.type : 0,
|
|
|
- leader = enroll.contest != null ? enroll.contest.type : 0,
|
|
|
- tmdid = enroll.id,
|
|
|
- status = -1,
|
|
|
- score = -1,
|
|
|
- members = new List<IdNameCode>(),
|
|
|
- periodSubjectKey = periodSubjectKey,
|
|
|
- period = null,
|
|
|
- subject = subject?.val,
|
|
|
- available = 3
|
|
|
- }; activityEnrollsInvalid.Add(invalidTask);
|
|
|
+ taskDto.available = 3;
|
|
|
+ activityEnrollsInvalid.Add(taskDto);
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
else if (distribute.Equals("periodAndSubject"))
|
|
|
{
|
|
|
- var period = enroll.contest?.enrollInfos?.Find(z => z.code.Equals("period"));
|
|
|
- var subject = enroll.contest?.enrollInfos?.Find(z => z.code.Equals("subject"));
|
|
|
+
|
|
|
if (period != null && subject != null)
|
|
|
{
|
|
|
periodSubjectKey = $"{period.val}-{subject.val}";
|
|
|
}
|
|
|
else {
|
|
|
- int count = 0;
|
|
|
- if (enroll.upload != null && enroll.upload.sokrates.IsNotEmpty())
|
|
|
- {
|
|
|
- count += enroll.upload.sokrates.Count;
|
|
|
- }
|
|
|
- if (enroll.upload != null && enroll.upload.files.IsNotEmpty())
|
|
|
- {
|
|
|
- count += enroll.upload.files.Count;
|
|
|
- }
|
|
|
- //学段学科不匹配
|
|
|
- var invalidTask = new ExpertContestTaskDto
|
|
|
- {
|
|
|
- uploadId = enroll.upload?.uploadId,
|
|
|
- name = $"{enroll?.schoolName}-{enroll?.tmdName}",
|
|
|
- uploadTypes = new List<string> { enroll?.upload.type },
|
|
|
- count = count,
|
|
|
- cipher = enroll.contest?.cipher,
|
|
|
- type = enroll.contest != null ? enroll.contest.type : 0,
|
|
|
- leader = enroll.contest != null ? enroll.contest.type : 0,
|
|
|
- tmdid = enroll.id,
|
|
|
- status = -1,
|
|
|
- score = -1,
|
|
|
- members = new List<IdNameCode>(),
|
|
|
- periodSubjectKey = periodSubjectKey,
|
|
|
- period = period?.val,
|
|
|
- subject = subject?.val,
|
|
|
- available = 3
|
|
|
- }; activityEnrollsInvalid.Add(invalidTask);
|
|
|
+ taskDto.available = 4;
|
|
|
+ activityEnrollsInvalid.Add(taskDto);
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
@@ -183,11 +132,15 @@ namespace TEAMModelOS.SDK
|
|
|
}
|
|
|
}
|
|
|
else {
|
|
|
+ taskDto.available = 5;
|
|
|
+ activityEnrollsInvalid.Add(taskDto);
|
|
|
//未上传作品
|
|
|
//activityEnrollsInvalid.Add((enroll, 2));
|
|
|
}
|
|
|
}
|
|
|
else {
|
|
|
+ taskDto.available =6;
|
|
|
+ activityEnrollsInvalid.Add(taskDto);
|
|
|
//学段学科不匹配
|
|
|
//activityEnrollsInvalid.Add((enroll, 1));
|
|
|
}
|
|
@@ -362,9 +315,10 @@ namespace TEAMModelOS.SDK
|
|
|
}));
|
|
|
}
|
|
|
}
|
|
|
- var data = AssignWorksToExperts(expertContestTasks, worksDB, experts, taskCount);
|
|
|
+ var data = AssignWorksToExperts(expertContestTasks, worksDB, experts, taskCount);
|
|
|
expertContestTasks = data.assignmentsAdd;
|
|
|
- expertContestTasksDB = data.worksDB;
|
|
|
+ expertContestTasksDB = worksDB;
|
|
|
+ activityEnrollsInvalid.AddRange(data.assignmentsInvalid);
|
|
|
}
|
|
|
return (expertContestTasks, activityEnrollsInvalid, expertContestTasksDB);
|
|
|
}
|
|
@@ -375,17 +329,20 @@ namespace TEAMModelOS.SDK
|
|
|
/// <param name="experts"></param>
|
|
|
/// <param name="N"></param>
|
|
|
/// <returns></returns>
|
|
|
- static (List<ExpertContestTaskDto> assignmentsAdd, List<ExpertContestTaskDto> worksDB) AssignWorksToExperts(List<ExpertContestTaskDto> works,List<ExpertContestTaskDto> worksDB, IEnumerable<ExpertPeriodSubjectDto> experts, int N)
|
|
|
+ static (List<ExpertContestTaskDto> assignmentsAdd, List<ExpertContestTaskDto> assignmentsInvalid) AssignWorksToExperts(List<ExpertContestTaskDto> works,List<ExpertContestTaskDto> worksDB, IEnumerable<ExpertPeriodSubjectDto> experts, int N)
|
|
|
{
|
|
|
//增加的
|
|
|
var assignmentsAdd = new List<ExpertContestTaskDto>();
|
|
|
+ //未分配到的
|
|
|
+ var assignmentsInvalid = new List<ExpertContestTaskDto>();
|
|
|
var random = new Random();
|
|
|
+ //用于处理数据库和新分配的结果中检查已经分配过的作品和专家
|
|
|
var assignmentsAll = worksDB.ToJsonString().ToObject<List<ExpertContestTaskDto>>();
|
|
|
foreach (var work in works)
|
|
|
{
|
|
|
for (int i = 0; i < N; i++)
|
|
|
{
|
|
|
- //分配次数已经Ok
|
|
|
+ //分配次数已经Ok,分配结果完善的,不需要再去处理
|
|
|
if (assignmentsAll.Count(z => z.uploadId.Equals(work.uploadId))>=N) {
|
|
|
continue;
|
|
|
}
|
|
@@ -407,17 +364,17 @@ namespace TEAMModelOS.SDK
|
|
|
{
|
|
|
var newWork = work.DeepCopy<ExpertContestTaskDto>();
|
|
|
newWork.expertId =null;
|
|
|
- newWork.available = 0;
|
|
|
+ newWork.available = 7;
|
|
|
newWork.turn = i + 1;
|
|
|
//作品在第几轮未匹配到
|
|
|
- assignmentsAdd.Add(newWork);
|
|
|
- assignmentsAll.Add(newWork);
|
|
|
+ assignmentsInvalid.Add(newWork);
|
|
|
//Console.WriteLine($"No available expert for WorkId {work.uploadId} and subject {work.periodSubjectKey} in attempt {i + 1}.");
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- return (assignmentsAdd, worksDB);
|
|
|
+
|
|
|
+ return (assignmentsAdd, assignmentsInvalid);
|
|
|
}
|
|
|
/// <summary>
|
|
|
/// 删除活动关联的数据
|