|
@@ -40,6 +40,7 @@ using Microsoft.IdentityModel.Tokens;
|
|
|
using TEAMModelOS.SDK.Models.Dtos;
|
|
|
using System.Net.Http;
|
|
|
using Newtonsoft.Json.Linq;
|
|
|
+using System.ComponentModel.DataAnnotations;
|
|
|
|
|
|
namespace TEAMModelOS.Controllers
|
|
|
{
|
|
@@ -651,7 +652,7 @@ namespace TEAMModelOS.Controllers
|
|
|
//教师活动列表
|
|
|
case bool when $"{grant_type}".Equals("list-teacher", StringComparison.OrdinalIgnoreCase):
|
|
|
{
|
|
|
- List<TeacherActivityDto> activities = await TeacherActivityList(request, tmdid);
|
|
|
+ List<TeacherActivityDto> activities = await ActivityService. TeacherActivityList( _azureCosmos,_azureStorage, request, tmdid);
|
|
|
return Ok(new { activities = activities.OrderByDescending(z => z.stime) });
|
|
|
}
|
|
|
//读取优课评选模块及评审规则
|
|
@@ -1292,104 +1293,7 @@ namespace TEAMModelOS.Controllers
|
|
|
return Ok();
|
|
|
}
|
|
|
|
|
|
- private async Task<List<TeacherActivityDto>> TeacherActivityList(JsonElement request, string tmdid)
|
|
|
- {
|
|
|
- List<TeacherActivityDto> activities = new List<TeacherActivityDto>();
|
|
|
- HashSet<string> inviteActivityIds = new HashSet<string>();
|
|
|
- string yearSql = $" and c.year={DateTimeOffset.Now.Year}";
|
|
|
- if (request.TryGetProperty("year", out JsonElement _year))
|
|
|
- {
|
|
|
- yearSql = $" and c.year={_year}";
|
|
|
- }
|
|
|
- //先获取邀请制的
|
|
|
- string sqlInvite = $"select value c from c join t in c.inviteTeachers where t.id='{tmdid}'";
|
|
|
- var result = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Common).GetList<ActivityTeacher>(sqlInvite, "ActivityTeacher");
|
|
|
- inviteActivityIds= result.list.Select(z => z.id).ToHashSet();
|
|
|
- if (inviteActivityIds.Count>0)
|
|
|
- {
|
|
|
- string sqlActivity = $"select value c from c where c.id in ({string.Join(",", inviteActivityIds.Select(z => $"'{z}'"))}) {yearSql} ";
|
|
|
- var resultActivity = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Common).GetList<TeacherActivityDto>(sqlInvite, "Activity");
|
|
|
- if (resultActivity.list.IsNotEmpty())
|
|
|
- {
|
|
|
- activities.AddRange(resultActivity.list);
|
|
|
- }
|
|
|
- }
|
|
|
- Teacher teacher = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).ReadItemAsync<Teacher>(tmdid, new PartitionKey("Base"));
|
|
|
- string schoolOwnerIn = string.Empty;
|
|
|
- string schoolIdIn = string.Empty;
|
|
|
- if (teacher.schools.IsNotEmpty())
|
|
|
- {
|
|
|
- schoolIdIn = $"and i.id in ({string.Join(",", teacher.schools.Select(z => $"'{z.schoolId}'"))})";
|
|
|
- schoolOwnerIn= $"and c.owner in ({string.Join(",", teacher.schools.Select(z => $"'{z.schoolId}'"))})";
|
|
|
- }
|
|
|
- //获取开放的
|
|
|
- {
|
|
|
- //完全开放 所有的学校
|
|
|
- string sqlOpen = $"select value c from c where c.scope='public' and (c.publish=1 or c.publish=2 ) and( ARRAY_LENGTH(c.invitedSchools)=0 or IS_DEFINED(c.invitedSchools) = false ) {yearSql} ";
|
|
|
- var resultOpen = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Common).GetList<TeacherActivityDto>(sqlOpen, "Activity");
|
|
|
- activities.AddRange(resultOpen.list);
|
|
|
-
|
|
|
- if (!string.IsNullOrWhiteSpace(schoolIdIn))
|
|
|
- { //部分学校
|
|
|
- string sqlSchool = $"select value c from c join i in c.confirmedSchools where c.scope='public' and c.joinMode='enroll' and (c.publish=1 or c.publish=2 ) and i.status=1 {yearSql} {schoolIdIn} ";
|
|
|
- var resultSchool = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Common).GetList<TeacherActivityDto>(sqlSchool, "Activity");
|
|
|
- activities.AddRange(resultSchool.list);
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
- string areaOwnerIn = string.Empty;
|
|
|
- var hasAreaSchools = teacher.schools.FindAll(z => !string.IsNullOrWhiteSpace(z.areaId));
|
|
|
- if (hasAreaSchools.IsNotEmpty())
|
|
|
- {
|
|
|
- areaOwnerIn = $"and c.owner in ({string.Join(",", hasAreaSchools.Select(z => $"'{z.areaId}'"))})";
|
|
|
- schoolIdIn = $"and i.id in ({string.Join(",", hasAreaSchools.Select(z => $"'{z.schoolId}'"))})";
|
|
|
- }
|
|
|
- //获取所有区级的
|
|
|
- if (!string.IsNullOrWhiteSpace(areaOwnerIn) && !string.IsNullOrEmpty(schoolIdIn))
|
|
|
- {
|
|
|
-
|
|
|
- string sqlOpen = $"select value c from c join i in c.confirmedSchools where c.scope='area' and c.joinMode='enroll' and (c.publish=1 or c.publish=2 ) and i.status=1 {yearSql} {areaOwnerIn} {schoolIdIn} ";
|
|
|
- var resultOpen = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Common).GetList<TeacherActivityDto>(sqlOpen, "Activity");
|
|
|
- activities.AddRange(resultOpen.list);
|
|
|
- }
|
|
|
-
|
|
|
- //获取所有学校的
|
|
|
- if (!string.IsNullOrWhiteSpace(schoolOwnerIn))
|
|
|
- {
|
|
|
- string sqlSchool = $"select value c from c where c.scope='school' and c.joinMode='enroll' and (c.publish=1 or c.publish=2 ) {yearSql} {schoolOwnerIn} ";
|
|
|
- var resultSchool = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Common).GetList<TeacherActivityDto>(sqlSchool, "Activity");
|
|
|
- activities.AddRange(resultSchool.list);
|
|
|
- }
|
|
|
-
|
|
|
- activities.ForEach(z =>
|
|
|
- {
|
|
|
- var (blob_uri, blob_sas) = _azureStorage.GetBlobContainerSAS(z.owner, BlobContainerSasPermissions.Read | BlobContainerSasPermissions.List);
|
|
|
- z.sas=blob_sas;
|
|
|
- });
|
|
|
- if (activities.IsNotEmpty()) {
|
|
|
- string sql = $"select value c from c where c.pk='ActivityEnroll' and contains(c.code,'ActivityEnroll-') and c.id='{tmdid}' and c.activityId in ({string.Join(",",activities.Select(z=>$"'{z.id}'"))})";
|
|
|
- var resultEnroll = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).GetList<ActivityEnroll>(sql);
|
|
|
- foreach (var enroll in resultEnroll.list)
|
|
|
- {
|
|
|
- var activityDto = activities.Find(z => z.id.Equals(enroll.activityId));
|
|
|
- if (activityDto!=null) {
|
|
|
- if (enroll.contest!=null && !string.IsNullOrWhiteSpace(enroll.contest.type) ) {
|
|
|
- activityDto.contestSign=1;
|
|
|
- activityDto.signTime=enroll.contest.enrollTime;
|
|
|
- activityDto.contestType=enroll.contest.type;
|
|
|
-
|
|
|
- }
|
|
|
- if (enroll.upload!=null && (enroll.upload.files.IsNotEmpty() || enroll.upload.sokrates.IsNotEmpty()))
|
|
|
- {
|
|
|
- activityDto.contestUpload=1;
|
|
|
- activityDto.uploadTime=enroll.upload.uploadTime;
|
|
|
- activityDto.uploadType=enroll.upload.type;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- return activities;
|
|
|
- }
|
|
|
+
|
|
|
|
|
|
/// <summary>
|
|
|
/// portal站的
|
|
@@ -1565,19 +1469,75 @@ namespace TEAMModelOS.Controllers
|
|
|
public async Task<IActionResult> Teacher(JsonElement request) {
|
|
|
(string tmdid, _, _, _) = HttpContext.GetAuthTokenInfo();
|
|
|
if (!request.TryGetProperty("grant_type", out JsonElement grant_type)) return BadRequest();
|
|
|
+ if (!request.TryGetProperty("activityId", out JsonElement _activityId)) return BadRequest();
|
|
|
var client = _azureCosmos.GetCosmosClient();
|
|
|
- switch (true)
|
|
|
+ Azure.Response response = await client.GetContainer(Constant.TEAMModelOS, Constant.Common).ReadItemStreamAsync(_activityId.GetString(), new PartitionKey("Activity"));
|
|
|
+ if (response.Status==200)
|
|
|
{
|
|
|
- //教师活动列表
|
|
|
- case bool when $"{grant_type}".Equals("create", StringComparison.OrdinalIgnoreCase):
|
|
|
- {
|
|
|
- List<TeacherActivityDto> activities= await TeacherActivityList(request, tmdid);
|
|
|
- break;
|
|
|
- }
|
|
|
+ Activity activity= JsonDocument.Parse(response.Content).RootElement.ToObject<Activity>();
|
|
|
+ switch (true)
|
|
|
+ {
|
|
|
+ //教师报名参加
|
|
|
+ case bool when $"{grant_type}".Equals("sign-contest", StringComparison.OrdinalIgnoreCase):
|
|
|
+ {
|
|
|
+ int code = -1;
|
|
|
+ ///检查被报名的活动是是否符合
|
|
|
+ //邀请制
|
|
|
+ if (activity.joinMode.Equals("invite")) {
|
|
|
+
|
|
|
+ Azure.Response responseActivityTeacher = await client.GetContainer(Constant.TEAMModelOS, Constant.Common).ReadItemStreamAsync(_activityId.GetString(), new PartitionKey("ActivityTeacher"));
|
|
|
+ if (responseActivityTeacher.Status==200)
|
|
|
+ {
|
|
|
+ ActivityTeacher activityTeacher = JsonDocument.Parse(responseActivityTeacher.Content).RootElement.ToObject<ActivityTeacher>();
|
|
|
+ var exsit = activityTeacher.inviteTeachers.Exists(z => z.id.Equals(tmdid));
|
|
|
+ if (!exsit)
|
|
|
+ {
|
|
|
+ code=1;
|
|
|
+ return Ok(new { code, msg = "教师未被邀请" });
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ code=200;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ code=1;
|
|
|
+ return Ok(new { code, msg = "教师未被邀请" });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //如果邀请制没有检查通过,则检查其他模式
|
|
|
+ if (code!=200)
|
|
|
+ {
|
|
|
+
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
return Ok();
|
|
|
}
|
|
|
+ class TeacherEnrollContestDto {
|
|
|
+ //[Required(ErrorMessage = "Required")]
|
|
|
+ //public string activityId { get; set; }
|
|
|
+ [Required(ErrorMessage = "Required")]
|
|
|
+ public string tmdid { get; set; }
|
|
|
+ public string tmdName { get; set; }
|
|
|
+ [Required(ErrorMessage = "Required")]
|
|
|
+ public string schoolId { get; set; }
|
|
|
+ public string schoolName { get; set; }
|
|
|
+ public string tmdPicture { get; set; }
|
|
|
+ public string schoolPicture { get; set; }
|
|
|
+ public long enrollTime { get; set; }
|
|
|
+ [Required(ErrorMessage = "Required")]
|
|
|
+ public string type { get; set; }
|
|
|
+ public string cipher { get; set; }
|
|
|
+ public int leader { get; set; }
|
|
|
+ public string teamName { get; set; }
|
|
|
+ /// <summary>
|
|
|
+ /// 表单填报信息
|
|
|
+ /// </summary>
|
|
|
+ public List<EnrollInfo> enrollInfos { get; set; } = new List<EnrollInfo>();
|
|
|
|
|
|
+ }
|
|
|
/// <summary>
|
|
|
/// portal站的
|
|
|
/// </summary>
|
|
@@ -1649,7 +1609,11 @@ namespace TEAMModelOS.Controllers
|
|
|
activities.AddRange(resultOpen.list);
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+ activities.ForEach(z =>
|
|
|
+ {
|
|
|
+ var (blob_uri, blob_sas) = _azureStorage.GetBlobContainerSAS(z.owner, BlobContainerSasPermissions.Read | BlobContainerSasPermissions.List);
|
|
|
+ z.sas=blob_sas;
|
|
|
+ });
|
|
|
return Ok(new { activities, website });
|
|
|
}
|
|
|
}
|