|
@@ -903,7 +903,51 @@ namespace TEAMModelOS.Controllers
|
|
|
List<TeacherActivityDto> activities = await ActivityService. TeacherActivityList( _azureCosmos,_azureStorage, request, tmdid);
|
|
|
return Ok(new { activities = activities.OrderByDescending(z => z.stime) });
|
|
|
}
|
|
|
- //读取优课评选模块及评审规则
|
|
|
+
|
|
|
+ case bool when $"{grant_type}".Equals("read-activity", StringComparison.OrdinalIgnoreCase):
|
|
|
+ {
|
|
|
+ if (!request.TryGetProperty("activityId", out JsonElement _activityId)) return BadRequest();
|
|
|
+ Azure.Response response = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Common).ReadItemStreamAsync(_activityId.GetString(), new PartitionKey("Activity"));
|
|
|
+ if (response.Status==200)
|
|
|
+ {
|
|
|
+ ActivityDto activity = JsonDocument.Parse(response.Content).RootElement.ToObject<ActivityDto>();
|
|
|
+ Contest contest = null;
|
|
|
+ ReviewRuleTree reviewRule = null;
|
|
|
+ Azure.Response responseContest = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Common).ReadItemStreamAsync(_activityId.GetString(), new PartitionKey("Contest"));
|
|
|
+ if (responseContest.Status==200)
|
|
|
+ {
|
|
|
+ contest= JsonDocument.Parse(responseContest.Content).RootElement.ToObject<Contest>();
|
|
|
+ if (contest.modules.Contains("review"))
|
|
|
+ {
|
|
|
+ Azure.Response reviewRuleResponse = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Normal).ReadItemStreamAsync(_activityId.GetString(), new PartitionKey("ReviewRule-disposable"));
|
|
|
+ if (reviewRuleResponse.Status==200)
|
|
|
+ {
|
|
|
+ ReviewRule reviewRuleDB = JsonDocument.Parse(reviewRuleResponse.Content).RootElement.ToObject<ReviewRule>();
|
|
|
+ var tree = ActivityService.ListToTree(reviewRuleDB.configs);
|
|
|
+ reviewRule=new ReviewRuleTree
|
|
|
+ {
|
|
|
+ id=reviewRuleDB.id,
|
|
|
+ name= reviewRuleDB.name,
|
|
|
+ owner= reviewRuleDB.owner,
|
|
|
+ sourceName= reviewRuleDB.sourceName,
|
|
|
+ trees=tree,
|
|
|
+ desc=reviewRuleDB.desc
|
|
|
+ };
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ Training training = null;
|
|
|
+ TEAMModelOS.SDK.Models.Research research = null;
|
|
|
+ var (blob_uri, blob_sas) = _azureStorage.GetBlobContainerSAS(activity.owner, BlobContainerSasPermissions.Read | BlobContainerSasPermissions.List);
|
|
|
+ activity.sas=blob_sas;
|
|
|
+ return Ok(new { code = 200, activity, contest, reviewRule, training, research });
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ return Ok(new { code = 2, msg = "活动不存在" });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //读取优课评选模块及评审规则
|
|
|
case bool when $"{grant_type}".Equals("read-Contest", StringComparison.OrdinalIgnoreCase):
|
|
|
{
|
|
|
Contest contest = null;
|
|
@@ -1743,7 +1787,8 @@ namespace TEAMModelOS.Controllers
|
|
|
{
|
|
|
ActivityExpert activityExpert = JsonDocument.Parse(responseActivityExpert.Content).RootElement.ToObject<ActivityExpert>();
|
|
|
|
|
|
- IEnumerable<ExpertPeriodSubjectDto> experts = activityExpert.experts.Select(z => new ExpertPeriodSubjectDto { expertId = z.id, periodSubjects = z.subjects.Select(v => $"{v.period}-{v.subject}") });
|
|
|
+ IEnumerable<ExpertPeriodSubjectDto> experts = activityExpert.experts.Where(z=>!string.IsNullOrWhiteSpace(z.id))//处理
|
|
|
+ .Select(z => new ExpertPeriodSubjectDto { expertId = z.id, periodSubjects = z.subjects.Select(v => $"{v.period}-{v.subject}") });
|
|
|
HashSet<string> periodSubjectKey = new HashSet<string>();
|
|
|
List<dynamic> distributeInvalid = new List<dynamic>();
|
|
|
string allocationTaskKey = $"Contest:Allocation:{_activityId}";
|
|
@@ -1977,6 +2022,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();
|
|
|
+ if (!request.TryGetProperty("uploadId", out JsonElement _uploadId)) return BadRequest();
|
|
|
+ if (!request.TryGetProperty("expertId", out JsonElement _expertId)) return BadRequest();
|
|
|
|
|
|
break;
|
|
|
}
|
|
@@ -1988,59 +2035,7 @@ namespace TEAMModelOS.Controllers
|
|
|
}
|
|
|
return Ok();
|
|
|
}
|
|
|
- /// <summary>
|
|
|
- /// 教师的邀请和报名状态数据
|
|
|
- /// </summary>
|
|
|
- public class InviteEnrollTeacherDto {
|
|
|
- public string id { get; set; }
|
|
|
- public string name { get; set; }
|
|
|
- public string picture { get; set; }
|
|
|
- public string school { get; set; }
|
|
|
- public string schoolName { get; set; }
|
|
|
- /// <summary>
|
|
|
- ///-1表示非邀请制的默认状态, 0 未报名,1已报名,用于区级发布, publish=1,joinMode=invite,学校可以去进行邀请某一些教师。
|
|
|
- /// </summary>
|
|
|
- public int inviteStatus { get; set; } = -1;
|
|
|
- /// <summary>
|
|
|
- /// -1表示没有报名模块的默认状态,-2 表示时间未到,0未报名,1已报名
|
|
|
- /// </summary>
|
|
|
- public int signContestStatus { get; set; } = -1;
|
|
|
- public long signContestTime { get; set; }
|
|
|
- /// <summary>
|
|
|
- /// -1表示没有报名模块的默认状态,0个人,1 团队组
|
|
|
- /// </summary>
|
|
|
- public int signContestType { get; set; } = -1;
|
|
|
- /// <summary>
|
|
|
- /// -1 表示没有上传模块的默认状态 0未上传,1已上传,-2 表示时间未到
|
|
|
- /// </summary>
|
|
|
- public int uploadContestStatus { get; set; } = -1;
|
|
|
- public long uploadContestTime { get; set; }
|
|
|
- /// <summary>
|
|
|
- /// null没有上传模块的默认状态,file文件 sokrates 苏格拉底
|
|
|
- /// </summary>
|
|
|
- public string uploadContestType { get; set; }
|
|
|
- /// <summary>
|
|
|
- /// 作品分数
|
|
|
- /// </summary>
|
|
|
- public double uploadContestScore { get; set; } = -1;
|
|
|
- /// <summary>
|
|
|
- ///作品id
|
|
|
- /// </summary>
|
|
|
- public string uploadContestId { get; set; }
|
|
|
- /// <summary>
|
|
|
- /// 团队名称
|
|
|
- /// </summary>
|
|
|
- public string teamNameContest { get; set; }
|
|
|
- /// <summary>
|
|
|
- /// 团队队长0队员,1队长
|
|
|
- /// </summary>
|
|
|
- public int teamLeaderContest { get; set; }
|
|
|
- /// <summary>
|
|
|
- /// 组队口令
|
|
|
- /// </summary>
|
|
|
- public string teamCipherContest { get; set; }
|
|
|
- }
|
|
|
-
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// portal站的
|
|
|
/// </summary>
|
|
@@ -3199,177 +3194,7 @@ 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);
|
|
|
- }
|
|
|
+
|
|
|
|
|
|
|
|
|
|