|
@@ -34,6 +34,8 @@ using Microsoft.Azure.Amqp.Framing;
|
|
|
using Microsoft.AspNetCore.Authorization;
|
|
|
using DocumentFormat.OpenXml.Drawing.Charts;
|
|
|
using static SKIT.FlurlHttpClient.Wechat.TenpayV3.Models.CreateApplyForSubjectApplymentRequest.Types;
|
|
|
+using static TEAMModelOS.Controllers.FixDataController;
|
|
|
+using DocumentFormat.OpenXml.Spreadsheet;
|
|
|
namespace TEAMModelOS.Controllers
|
|
|
{
|
|
|
|
|
@@ -949,7 +951,11 @@ namespace TEAMModelOS.Controllers
|
|
|
owner= item.owner,
|
|
|
sourceName= item.sourceName,
|
|
|
trees=tree,
|
|
|
- upsertAsTemplate=1
|
|
|
+ upsertAsTemplate=1,
|
|
|
+ taskCount=item.taskCount,
|
|
|
+ scoreRule=item.scoreRule,
|
|
|
+ distribute=item.distribute,
|
|
|
+ scoreDetail=item.scoreDetail
|
|
|
};
|
|
|
reviewRules.Add(reviewRule);
|
|
|
}
|
|
@@ -1959,7 +1965,8 @@ namespace TEAMModelOS.Controllers
|
|
|
responses.Add(_azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).UpsertItemAsync(contestTask, new PartitionKey($"ActivityExpertTask-{_activityId}")));
|
|
|
}
|
|
|
if (responses.IsNotEmpty()) {
|
|
|
- await Task.WhenAll(responses);
|
|
|
+ await responses.TaskPage(10);
|
|
|
+ //await Task.WhenAll(responses);
|
|
|
}
|
|
|
await _azureRedis.GetRedisClient(8).KeyDeleteAsync(_taskKey.GetString());
|
|
|
return Ok(new { code=200});
|
|
@@ -1969,6 +1976,8 @@ namespace TEAMModelOS.Controllers
|
|
|
//分配评审作品任务-手动
|
|
|
case bool when $"{grant_type}".Equals("allocation-task-manual-save", StringComparison.OrdinalIgnoreCase):
|
|
|
{
|
|
|
+ if (!request.TryGetProperty("activityId", out JsonElement _activityId)) return BadRequest();
|
|
|
+
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
@@ -3190,7 +3199,182 @@ namespace TEAMModelOS.Controllers
|
|
|
}
|
|
|
return Ok();
|
|
|
}
|
|
|
-
|
|
|
+ public static async Task<(List<ExpertContestTaskDto> expertContestTasks, List<ExpertContestTaskDto> activityEnrollsInvalid, List<ExpertContestTaskDto> expertContestTasksDB)> AllocationTask(AzureCosmosFactory _azureCosmos, IEnumerable<ExpertPeriodSubjectDto> experts, Contest contest, HashSet<string> periodSubjectKeys, string distribute, int taskCount)
|
|
|
+ {
|
|
|
+ //检查报名,学段和科目是否匹配
|
|
|
+ string enrollSQL = "select value c from c where c.pk='ActivityEnroll'";
|
|
|
+ var resultActivityEnroll = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).GetList<ActivityEnroll>(enrollSQL, $"ActivityEnroll-{contest.id}");
|
|
|
+ List<ExpertContestTaskDto> expertContestTasks = new List<ExpertContestTaskDto>();
|
|
|
+ foreach (ActivityEnroll enroll in resultActivityEnroll.list) {
|
|
|
+
|
|
|
+ //如果是队长统一上传
|
|
|
+ if (contest.upload.captainUpload == 1 && !string.IsNullOrWhiteSpace(enroll.contest?.cipher))
|
|
|
+ {
|
|
|
+ var team = resultActivityEnroll.list.FindAll(z => z.contest != null && z.contest.type == 1 && enroll.contest?.type == 1 && z.contest.cipher.Equals(enroll.contest.cipher));
|
|
|
+ //获取队长信息
|
|
|
+ var leaders = team.FindAll(z => z.contest.leader == 1);
|
|
|
+ if (leaders .IsNotEmpty())
|
|
|
+ {
|
|
|
+ leaders = new List<ActivityEnroll>() { enroll};
|
|
|
+ }
|
|
|
+ List<IdNameCode> members = team.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 leader = leaders?.First();
|
|
|
+ string name = leader.contest?.teamName;
|
|
|
+ var period = leader.contest?.enrollInfos?.Find(z => z.code.Equals("period"));
|
|
|
+ var subject = leader.contest?.enrollInfos?.Find(z => z.code.Equals("subject"));
|
|
|
+ string uploadId = string.Empty;
|
|
|
+ if (string.IsNullOrEmpty(name))
|
|
|
+ {
|
|
|
+ name = $"{leader.contest?.enrollInfos?.Find(z => z.code.Equals("name"))?.val}({team.Count})";
|
|
|
+ }
|
|
|
+ int count = 0;
|
|
|
+ int available = -1;
|
|
|
+
|
|
|
+ var checkResult = ActivityService.CheckPeriodSubject(distribute, period, subject, periodSubjectKeys);
|
|
|
+ if (checkResult.available == 0)
|
|
|
+ {
|
|
|
+
|
|
|
+ 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;
|
|
|
+ }
|
|
|
+ if (count <= 0)
|
|
|
+ {
|
|
|
+ uploadId = enroll.contest.cipher;
|
|
|
+ available = 5;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ uploadId = leader.upload?.uploadId;
|
|
|
+ available = checkResult.available;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ uploadId = enroll.contest.cipher;
|
|
|
+ available = checkResult.available;
|
|
|
+ }
|
|
|
+ ExpertContestTaskDto expertContestTask = expertContestTasks.Find(z => !string.IsNullOrWhiteSpace(z.uploadId) && z.uploadId.Equals(leader.upload));
|
|
|
+ if (expertContestTask == null)
|
|
|
+ {
|
|
|
+ expertContestTasks.Add(new ExpertContestTaskDto
|
|
|
+ {
|
|
|
+ uploadId = leader.upload?.uploadId,
|
|
|
+ name = $"{leader.schoolName}-{name}",
|
|
|
+ uploadTypes = new List<string> { leader?.upload.type },
|
|
|
+ count = count,
|
|
|
+ cipher = leader.contest?.cipher,
|
|
|
+ type = 1,
|
|
|
+ leader = 1,
|
|
|
+ tmdid = leader.id,
|
|
|
+ status = -1,
|
|
|
+ score = -1,
|
|
|
+ //detailScore=new List<RuleConfig>()
|
|
|
+ members = members,
|
|
|
+ periodSubjectKey = checkResult.periodSubjectKey,
|
|
|
+ period = period?.val,
|
|
|
+ subject = subject?.val,
|
|
|
+ available = available
|
|
|
+ });
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ expertContestTask.available = available;
|
|
|
+ expertContestTask.name = name;
|
|
|
+ expertContestTask.count = count;
|
|
|
+ expertContestTask.members = members;
|
|
|
+ expertContestTask.periodSubjectKey = checkResult.periodSubjectKey;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ //如果不是队长统一上传
|
|
|
+ //学段
|
|
|
+ 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;
|
|
|
+ string name = enroll.contest?.enrollInfos?.Find(z => z.code.Equals("name"))?.val;
|
|
|
+ string uploadId = string.Empty;
|
|
|
+ if (!string.IsNullOrEmpty(name))
|
|
|
+ {
|
|
|
+ name = $"({name})";
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ name = string.Empty;
|
|
|
+ }
|
|
|
+ int count = 0;
|
|
|
+ int available = -1;
|
|
|
+
|
|
|
+ var checkResult = ActivityService.CheckPeriodSubject(distribute, period, subject, periodSubjectKeys);
|
|
|
+ if (checkResult.available == 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;
|
|
|
+ }
|
|
|
+ if (count <= 0)
|
|
|
+ {
|
|
|
+ available = 5;
|
|
|
+ uploadId = enroll.id;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ available = checkResult.available;
|
|
|
+ uploadId = enroll.upload.uploadId;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ uploadId = enroll.id;
|
|
|
+ available = checkResult.available;
|
|
|
+ }
|
|
|
+ ExpertContestTaskDto expertContestTask = expertContestTasks.Find(z => !string.IsNullOrWhiteSpace(z.uploadId) && z.uploadId.Equals(enroll.upload));
|
|
|
+ if (expertContestTask == null)
|
|
|
+ {
|
|
|
+ expertContestTasks.Add(new ExpertContestTaskDto
|
|
|
+ {
|
|
|
+ uploadId = uploadId,
|
|
|
+ name = $"{enroll.schoolName}-{name}",
|
|
|
+ uploadTypes = new List<string> { enroll.upload?.type },
|
|
|
+ count = count,
|
|
|
+ cipher = enroll.contest?.cipher,
|
|
|
+ type = 1,
|
|
|
+ leader = 1,
|
|
|
+ tmdid = enroll.id,
|
|
|
+ status = -1,
|
|
|
+ score = -1,
|
|
|
+ periodSubjectKey = checkResult.periodSubjectKey,
|
|
|
+ period = period?.val,
|
|
|
+ subject = subject?.val,
|
|
|
+ available = available
|
|
|
+ });
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ expertContestTask.available = available;
|
|
|
+ expertContestTask.name = name;
|
|
|
+ expertContestTask.count = count;
|
|
|
+ expertContestTask.periodSubjectKey = checkResult.periodSubjectKey;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return (null, null, null);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// portal站的
|
|
|
/// </summary>
|