|
@@ -1342,6 +1342,7 @@ namespace TEAMModelOS.Controllers
|
|
|
{
|
|
|
inviteEnrollTeacher.uploadContestId=activityEnroll.upload.uploadId;
|
|
|
inviteEnrollTeacher.uploadContestType=activityEnroll.upload.type;
|
|
|
+ inviteEnrollTeacher.uploadContestTypes= activityEnroll.upload.uploadType;
|
|
|
inviteEnrollTeacher.uploadContestStatus=1;
|
|
|
inviteEnrollTeacher.uploadContestTime= activityEnroll.upload.uploadTime;
|
|
|
inviteEnrollTeacher.uploadContestScore=activityEnroll.upload.score;
|
|
@@ -2205,11 +2206,17 @@ namespace TEAMModelOS.Controllers
|
|
|
{
|
|
|
count += leader.upload.lessons.Count;
|
|
|
}
|
|
|
+
|
|
|
+ if (leader?.upload!=null && leader.upload.complexes.IsNotEmpty())
|
|
|
+ {
|
|
|
+ count+= leader.upload.complexes.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.uploadTypes=new List<string> { leader.upload?.type };
|
|
|
+ contestTask.uploadTypes =leader.upload!=null ? new HashSet<string>() { leader.upload.type } : leader.upload.uploadType;
|
|
|
contestTask.count=count;
|
|
|
contestTask.cipher=leader.contest?.cipher;
|
|
|
contestTask.type=leader.contest.type;
|
|
@@ -2244,7 +2251,7 @@ namespace TEAMModelOS.Controllers
|
|
|
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.uploadTypes=leader.upload!=null ? new HashSet<string>() { leader.upload.type } : leader.upload.uploadType;
|
|
|
contestTask.count=count;
|
|
|
contestTask.type=leader.contest.type;
|
|
|
contestTask.tmdid=leader.id;
|
|
@@ -4081,6 +4088,109 @@ namespace TEAMModelOS.Controllers
|
|
|
}
|
|
|
if (check==1)
|
|
|
{
|
|
|
+ if (uploadContest.complexes.IsNotEmpty())
|
|
|
+ {
|
|
|
+ if (contest.upload.limit>0)
|
|
|
+ {
|
|
|
+ if (contest.upload.limit<contest.upload.uploadType.Count())
|
|
|
+ {
|
|
|
+ ///上传类型数量限制小于文件类型数量,表示可以上传任意N种类型的文件。
|
|
|
+ if (uploadContest.complexes.Count>=contest.upload.limit && uploadContest.complexes.Count<= contest.upload.uploadType.Count())
|
|
|
+ {
|
|
|
+ var types = uploadContest.complexes.Select(x => x.type).ToHashSet();
|
|
|
+ foreach (var type in types)
|
|
|
+ {
|
|
|
+ if (!contest.upload.uploadType.Contains(type))
|
|
|
+ {
|
|
|
+ return Ok(new { code = 7, msg = "上传的文件类型与活动要求的文件类型不符!" });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ return Ok(new { code = 10, msg = "文件上传数量不满足活动要求上传的文件类型数量!" });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ ///上传类型数量限制大于等于则表示需要上传所有类型的文件。
|
|
|
+ if (uploadContest.complexes.Count== contest.upload.uploadType.Count())
|
|
|
+ {
|
|
|
+ var types = uploadContest.complexes.Select(x => x.type).ToHashSet();
|
|
|
+ bool hasError = false;
|
|
|
+ foreach (var type in contest.upload.uploadType)
|
|
|
+ {
|
|
|
+ if (!contest.upload.uploadType.Contains(type))
|
|
|
+ {
|
|
|
+ hasError=true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (hasError)
|
|
|
+ {
|
|
|
+ return Ok(new { code = 7, msg = "上传的文件类型与活动要求的文件类型不符!" });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ return Ok(new { code = 10, msg = "文件上传数量不满足活动要求上传的文件类型数量!" });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ ///在上传类型范围内,不限制上传文件的种类和类型的数量。
|
|
|
+ var types = uploadContest.complexes.Select(x => x.type).ToHashSet();
|
|
|
+ foreach (var type in types)
|
|
|
+ {
|
|
|
+ if (!contest.upload.uploadType.Contains(type))
|
|
|
+ {
|
|
|
+ return Ok(new { code = 7, msg = "上传的文件类型与活动要求的文件类型不符!" });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ///检查必须上传的类型
|
|
|
+ if (contest.upload.uploadTypeNecessary!=null && contest.upload.uploadTypeNecessary.Count>0)
|
|
|
+ {
|
|
|
+
|
|
|
+ var types = uploadContest.complexes.Select(x => x.type).ToHashSet();
|
|
|
+ foreach (var type in contest.upload.uploadTypeNecessary)
|
|
|
+ {
|
|
|
+ if (!types.Contains(type))
|
|
|
+ {
|
|
|
+ return Ok(new { code = 9, msg = "没有上传活动要求必须上传的文件类型!" });
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //覆盖更新
|
|
|
+ enroll.upload= new EnrollUpload
|
|
|
+ {
|
|
|
+ uploadTime=now,
|
|
|
+ complexes=uploadContest.complexes,
|
|
|
+ uploadType=uploadContest.complexes.Select(x=>x.type).ToHashSet(),
|
|
|
+ uploadId=Guid.NewGuid().ToString(),
|
|
|
+ name=uploadContest.name,
|
|
|
+ };
|
|
|
+ await client.GetContainer(Constant.TEAMModelOS, Constant.Teacher).UpsertItemAsync(enroll, new PartitionKey($"ActivityEnroll-{_activityId.GetString()}"));
|
|
|
+ if (captainUpload==1&& !string.IsNullOrWhiteSpace(enroll.contest.cipher))
|
|
|
+ {
|
|
|
+ //获取队员报名信息
|
|
|
+ string cipherSQL = $"select value c from c where c.contest!=null and c.activityId='{_activityId.GetString()}' and c.contest.type=1 and c.contest.cipher='{enroll.contest.cipher}' ";
|
|
|
+ var cipherResult = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).GetList<ActivityEnroll>(cipherSQL, $"ActivityEnroll-{_activityId}");
|
|
|
+ //队长统一上传
|
|
|
+ cipherResult.list.RemoveAll(z => z.contest.leader==1);
|
|
|
+ foreach (var z in cipherResult.list)
|
|
|
+ {
|
|
|
+ z.upload=enroll.upload;
|
|
|
+ //队长统一上传的作品不需要单独生成作品id.
|
|
|
+ // z.upload.uploadId=Guid.NewGuid().ToString();
|
|
|
+ await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).UpsertItemAsync(z, new PartitionKey(z.code));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return Ok(new { code = 200, });
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
if (contest.upload.type.Equals(uploadContest.type))
|
|
|
{
|
|
|
if (uploadContest.type.Equals("sokrates"))
|