123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696 |
- using Azure.Cosmos;
- using Microsoft.AspNetCore.Http;
- using Microsoft.AspNetCore.Mvc;
- using Microsoft.Extensions.Options;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Text.Json;
- using System.Threading.Tasks;
- using TEAMModelOS.Models;
- using TEAMModelOS.SDK.Models;
- using TEAMModelOS.SDK.DI;
- using TEAMModelOS.SDK.Extension;
- using Azure;
- using Microsoft.Extensions.Configuration;
- using TEAMModelOS.Filter;
- using HTEXLib.COMM.Helpers;
- using TEAMModelOS.SDK;
- using StackExchange.Redis;
- using System.Text.RegularExpressions;
- using Microsoft.AspNetCore.Authorization;
- using OpenXmlPowerTools;
- using System.IdentityModel.Tokens.Jwt;
- using Microsoft.AspNetCore.Routing;
- namespace TEAMModelOS.Controllers
- {
- [ProducesResponseType(StatusCodes.Status200OK)]
- [ProducesResponseType(StatusCodes.Status400BadRequest)]
- [Route("activity")]
- [ApiController]
- public class ActivityController : ControllerBase
- {
- private AzureCosmosFactory _azureCosmos;
- private readonly DingDing _dingDing;
- private readonly CoreAPIHttpService _coreAPIHttpService;
- private readonly Option _option;
- private readonly AzureServiceBusFactory _serviceBus;
- private readonly AzureStorageFactory _azureStorage;
- private readonly AzureRedisFactory _azureRedis;
- public IConfiguration _configuration { get; set; }
- public ActivityController(AzureRedisFactory azureRedis, AzureCosmosFactory azureCosmos, DingDing dingDing, IOptionsSnapshot<Option> option, CoreAPIHttpService coreAPIHttpService, AzureServiceBusFactory serviceBus, AzureStorageFactory azureStorage, IConfiguration configuration)
- {
- _azureCosmos = azureCosmos;
- _dingDing = dingDing;
- _option = option?.Value;
- _serviceBus = serviceBus;
- _configuration = configuration;
- _azureStorage = azureStorage;
- _azureRedis = azureRedis;
- _coreAPIHttpService = coreAPIHttpService;
- }
- /// <summary>
- /// 路由管理
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [ProducesDefaultResponseType]
- [AuthToken(Roles = "admin,area")]
- [HttpPost("website-manage")]
- [Authorize(Roles = "IES")]
- public async Task<IActionResult> WebsiteManage(JsonElement request) {
- (string tmdid, _, _, string school) = HttpContext.GetAuthTokenInfo();
- if (!request.TryGetProperty("grant_type", out JsonElement grant_type)) return BadRequest();
- {
- switch (true)
- {
- case bool when $"{grant_type}".Equals("update", StringComparison.OrdinalIgnoreCase):
- {
- break;
- }
- case bool when $"{grant_type}".Equals("list", StringComparison.OrdinalIgnoreCase):
- {
- List<ActivityWebsite> websites = new List<ActivityWebsite>();
- if (!request.TryGetProperty("websiteId", out JsonElement _websiteId)) return BadRequest();
- if (!request.TryGetProperty("scope", out JsonElement _scope)) return BadRequest();
- string websiteId = _websiteId.GetString();
- if (websiteId.Equals("02944f32-f534-3397-ea56-e6f1fc6c3714", StringComparison.OrdinalIgnoreCase) )
- {
- Azure.Response teammodelResponse = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Normal).ReadItemStreamAsync("teammodel", new PartitionKey("ActivityWebsite"));
- if (teammodelResponse.Status == 200)
- {
- ActivityWebsite activityWebsite = JsonDocument.Parse(teammodelResponse.Content).RootElement.ToObject<ActivityWebsite>();
- websites.Add(activityWebsite);
- }
- else {
- ActivityWebsite website = new ActivityWebsite
- {
- id="teammodel",
- pk="ActivityWebsite",
- code="ActivityWebsite",
- route="teammodel",
- scope="public",
- };
- await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Normal).UpsertItemAsync(website, new PartitionKey(website.code));
- websites.Add(website);
- }
- }
- Azure.Response activityWebsiteResponse = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Normal).ReadItemStreamAsync(websiteId, new PartitionKey("ActivityWebsite"));
- if (activityWebsiteResponse.Status == 200)
- {
- ActivityWebsite activityWebsite = JsonDocument.Parse(activityWebsiteResponse.Content).RootElement.ToObject<ActivityWebsite>();
- websites.Add(activityWebsite);
- }
- else {
- string route = string.Empty;
- if (_scope.GetString().Equals("area", StringComparison.OrdinalIgnoreCase))
- {
- Area area = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Normal).ReadItemAsync<Area>(websiteId, new PartitionKey("Base-Area"));
- if (!string.IsNullOrWhiteSpace(area.shortCode))
- {
- route=area.shortCode;
- }
- }
- if (_scope.GetString().Equals("school", StringComparison.OrdinalIgnoreCase))
- {
- route=websiteId;
- }
- if (!string.IsNullOrWhiteSpace(route))
- {
- ActivityWebsite website = new ActivityWebsite
- {
- id=websiteId,
- pk="ActivityWebsite",
- code="ActivityWebsite",
- route=route,
- scope=_scope.GetString(),
- };
- await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Normal).UpsertItemAsync(website, new PartitionKey(website.code));
- websites.Add(website);
- }
- else {
- return Ok(new { code = 1, msg = "区级简码未设置" });
- }
- return Ok(new { code = 200, websites });
- }
- break;
- }
- }
- }
- return Ok();
- }
- /// <summary>
- /// 添加活动参与对象,学校,教师
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [ProducesDefaultResponseType]
- [AuthToken(Roles = "admin,area")]
- [HttpPost("invite-target")]
- #if !DEBUG
- [Authorize(Roles = "IES")]
- #endif
- public async Task<IActionResult> InviteTarget(JsonElement request)
- {
- (string tmdid, _, _, string school) = HttpContext.GetAuthTokenInfo();
- if (!request.TryGetProperty("grant_type", out JsonElement grant_type)) return BadRequest();
- switch (true)
- {
- case bool when $"{grant_type}".Equals("schools", StringComparison.OrdinalIgnoreCase):
- {
- if (!request.TryGetProperty("scope", out JsonElement _scope)) return BadRequest();
- if (!request.TryGetProperty("areaId", out JsonElement _areaId)) return BadRequest();
- string sql = string.Empty;
- if (_scope.GetString().Equals("public", StringComparison.OrdinalIgnoreCase) && _areaId.GetString().Equals( "02944f32-f534-3397-ea56-e6f1fc6c3714"))
- {
- sql = "select c.id,c.name ,c.picture,c.region,c.province,c.city,c.areaId from c where c.code='Base' ";
- }
- else {
-
- sql = $"select c.id,c.name ,c.picture,c.region,c.province,c.city,c.areaId from c where c.code='Base' and c.areaId='{_areaId}' ";
- }
- var result = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).GetList<School>(sql, "Base");
- var sc = result.list.FindAll(z => !string.IsNullOrWhiteSpace(z.areaId));
- List<dynamic> schools = new List<dynamic>();
- if (sc.IsNotEmpty()) {
- string areaSql = $"select value c from c where c.id in ({string.Join(",", sc.Select(z => $"'{z.areaId}'").ToHashSet())})";
- var areaResult = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Normal).GetList<Area>(areaSql, "Base-Area");
- if (areaResult.list.IsNotEmpty()) {
-
- foreach (var item in result.list) {
- if (!string.IsNullOrWhiteSpace(item.areaId))
- {
- var area = areaResult.list.Find(z => z.id.Equals(item.areaId));
- schools.Add(new { item.id, item.name, item.picture, item.region, item.province, item.city, item.areaId, areaName = area?.name });
- }
- else {
- schools.Add(new { item.id, item.name, item.picture, item.region, item.province, item.city, item.areaId, areaName = string.Empty });
- }
- }
- }
- }
- return Ok(new { code = 200, schools });
- }
- case bool when $"{grant_type}".Equals("teachers", StringComparison.OrdinalIgnoreCase):
- {
- if (!string.IsNullOrWhiteSpace(school)) {
- School schoolbase = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).ReadItemAsync<School>(school, new PartitionKey("Base"));
- string sql = $"select c.id,c.name ,c.picture from c where c.code='Teacher-{school}' ";
- var result = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).GetList<SchoolTeacher>(sql, $"Teacher-{school}");
- return Ok(new { code = 200, teachers = result.list.Select(z => new { z.id, z.name, z.picture, school, schooName = schoolbase.name }) });
- }
- break;
- }
- }
- return Ok(new { code = 400 });
- }
- /// <summary>
- /// 管理
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [ProducesDefaultResponseType]
- [AuthToken(Roles = "teacher,admin,area")]
- [HttpPost("manage")]
- #if !DEBUG
- [Authorize(Roles = "IES")]
- #endif
- public async Task<IActionResult> Manage(JsonElement request)
- {
- try
- {
- (string tmdid, _, _, string school) = HttpContext.GetAuthTokenInfo();
- if (!request.TryGetProperty("grant_type", out JsonElement grant_type)) return BadRequest();
- var client = _azureCosmos.GetCosmosClient();
- switch (true)
- {
- case bool when $"{grant_type}".Equals("create", StringComparison.OrdinalIgnoreCase):
- {
- if (!request.TryGetProperty("Activity", out JsonElement _activity)) return Ok(new { code = 1, msg = "活动信息参数错误" });
- Activity activity = _activity.ToObject<Activity>();
- activity.id=!string.IsNullOrWhiteSpace(activity.id) ? activity.id : Guid.NewGuid().ToString();
- activity.code="Activity";
- activity.pk="Activity";
- //如果是区级活动,enroll报名制,则学校的确认状态默认为1 。
- //if (activity.scope.Equals("area", StringComparison.OrdinalIgnoreCase) && activity.joinMode.Equals("enroll", StringComparison.OrdinalIgnoreCase))
- //{
- // activity.schools.ForEach(z => z.status=1);
- //}
- //醍摩豆智慧学区
- if (!activity.owner.Equals("02944f32-f534-3397-ea56-e6f1fc6c3714", StringComparison.OrdinalIgnoreCase) && activity.scope.Equals("public", StringComparison.OrdinalIgnoreCase))
- {
- return Ok(new { code = 2, msg = "公开的活动只能由醍摩豆智慧学区发布!" });
- }
- {
- string websiteId = activity.owner;
- string route = string.Empty;
- if (activity.owner.Equals("02944f32-f534-3397-ea56-e6f1fc6c3714", StringComparison.OrdinalIgnoreCase) && activity.scope.Equals("public", StringComparison.OrdinalIgnoreCase)) {
- websiteId="teammodel";
- route="teammodel";
- }
- Azure.Response activityWebsiteResponse = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Normal).ReadItemStreamAsync(websiteId, new PartitionKey("ActivityWebsite"));
- if (activityWebsiteResponse.Status!=200) {
- if (activity.scope.Equals("area", StringComparison.OrdinalIgnoreCase)) {
- Area area = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Normal).ReadItemAsync<Area>(activity.owner, new PartitionKey("Base-Area"));
- if (!string.IsNullOrWhiteSpace(area.shortCode)) {
- route=area.shortCode;
- }
- }
- if (activity.scope.Equals("school", StringComparison.OrdinalIgnoreCase))
- {
- route=activity.owner;
- }
- if (!string.IsNullOrWhiteSpace(route))
- {
- ActivityWebsite website = new ActivityWebsite
- {
- id=websiteId,
- pk="ActivityWebsite",
- code="ActivityWebsite",
- route=route,
- scope=activity.scope,
- };
- await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Normal).UpsertItemAsync(website, new PartitionKey(website.code));
- }
- }
- }
- Contest contest = null;
- ValidResult validResult = activity.Valid();
- if (validResult.isVaild)
- {
- activity.creatorId=tmdid;
- activity.createTime= DateTimeOffset.Now.ToUnixTimeMilliseconds();
- activity.year=DateTimeOffset.Now.Year;
- foreach (var module in activity.modules) {
- switch (true)
- {
- //赛课
- case bool when module.Equals("Contest"):
- {
- if (!request.TryGetProperty("Contest", out JsonElement _contest))
- {
- return Ok(new { code =3, msg = "赛课信息参数错误" });
- }
- contest = _contest.ToObject<Contest>();
- if (contest!=null) {
- contest.id=activity.id;
- contest.code="Contest";
- contest.pk="Contest";
- ValidResult validResultContest = contest.Valid();
- if (validResultContest.isVaild)
- {
- if (contest.modules.Contains("review")) {
- if (!request.TryGetProperty("reviewConfig", out JsonElement _reviewConfig))
- {
- return Ok(new { code = 4, msg = "评审未配置" });
- }
- if (contest.review== null) {
- return Ok(new { code = 4, msg = "评审未配置" });
- }
- ReviewRuleTree ruleTree = _reviewConfig.ToObject<ReviewRuleTree>();
- var reviewRule = await ActivityService.UpsertReviewRule(ruleTree, activity, _azureCosmos);
- contest.review.ruleId = reviewRule.id;
- contest.review.ruleName = reviewRule.name;
- }
- await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Common).UpsertItemAsync(contest, new PartitionKey(contest.code));
- }
- else {
- return Ok(validResult);
- }
- }
- break;
- }
- //培训
- case bool when module.Equals("Training"):
- {
- break;
- }
- //教研
- case bool when module.Equals("Research"):
- {
- break;
- }
- }
- }
- //保存活动基础信息
- await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Common).UpsertItemAsync(activity, new PartitionKey(activity.code));
- return Ok(new { activity, contest ,code=200});
- }
- else
- {
- return Ok(validResult);
- }
- break;
- }
- case bool when $"{grant_type}".Equals("list-area", StringComparison.OrdinalIgnoreCase):
- {
- if (!request.TryGetProperty("areaId", out JsonElement _areaId)) return BadRequest();
- string yearSql = $" and c.year={DateTimeOffset.Now.Year}";
- if (request.TryGetProperty("year", out JsonElement _year)) {
- yearSql = $" and c.year={_year}";
- }
- string sql = $"select value c from c where c.scope='area' and c.owner='{_areaId}' {yearSql} ";
- //醍摩豆智慧学区
- if (_areaId.GetString().Equals("02944f32-f534-3397-ea56-e6f1fc6c3714", StringComparison.OrdinalIgnoreCase)) {
- sql = $"select value c from c where c.owner='{_areaId}' {yearSql} and ( c.scope='area' or c.scope='public' ) ";
- }
- var result = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Common).GetList<Activity>(sql, "Activity");
- return Ok(new { activities = result.list.OrderByDescending(z => z.stime) });
- }
- case bool when $"{grant_type}".Equals("list-school", StringComparison.OrdinalIgnoreCase):
- {
- if (!string.IsNullOrWhiteSpace(school)) {
- School schoolbase = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).ReadItemAsync<School>(school, new PartitionKey("Base"));
- List<Activity> activities = new List<Activity>();
- string yearSql = $" and c.year={DateTimeOffset.Now.Year}";
- if (request.TryGetProperty("year", out JsonElement _year))
- {
- yearSql = $" and c.year={_year}";
- }
- //获取开放的
- {
- //完全开放 所有的学校
- string sqlOpen = $"select value c from c where c.scope='public' {yearSql} and (c.publish=1 or c.publish=2 ) and( ARRAY_LENGTH(c.invitedSchools)=0 or IS_DEFINED(c.invitedSchools) = false ) ";
- var resultOpen = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Common).GetList<Activity>(sqlOpen, "Activity");
- activities.AddRange(resultOpen.list);
- //部分学校
- string sqlSchool = $"select value c from c join s in c.invitedSchools where c.scope='public' {yearSql} and (c.publish=1 or c.publish=2 ) and s.id='{school}' ";
- var resultSchool = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Common).GetList<Activity>(sqlSchool, "Activity");
- resultSchool.list.ForEach(z => {
- var confirmedSchool = z.confirmedSchools.Find(z => z.id.Equals(school));
- if (confirmedSchool==null)
- {
- z.confirmedSchools.Add(new ActivityConfirmedSchool
- {
- id=schoolbase.id,
- name=schoolbase.name,
- picture=schoolbase.picture,
- status=0
- });
- }
- });
- activities.AddRange(resultSchool.list);
- }
- //获取区级下放的
- {
- if (!string.IsNullOrWhiteSpace(schoolbase.areaId)) {
- //区级所有学校
- string sqlOpen = $"select value c from c where c.scope='area'{yearSql} and (c.publish=1 or c.publish=2 ) and c.owner='{schoolbase.areaId}' and( ARRAY_LENGTH(c.invitedSchools)=0 or IS_DEFINED(c.invitedSchools) = false) ";
- var resultOpen = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Common).GetList<Activity>(sqlOpen, "Activity");
- resultOpen.list.ForEach(z => {
- var confirmedSchool = z.confirmedSchools.Find(z => z.id.Equals(school));
- if (confirmedSchool==null)
- {
- z.confirmedSchools.Add(new ActivityConfirmedSchool
- {
- id=schoolbase.id,
- name=schoolbase.name,
- picture=schoolbase.picture,
- status=0
- });
- }
- });
- activities.AddRange(resultOpen.list);
- //区级部分学校
- string sqlSchool = $"select value c from c join s in c.invitedSchools where c.scope='area'{yearSql} and (c.publish=1 or c.publish=2 ) and c.owner='{schoolbase.areaId}' and s.id='{school}' ";
- var resultSchool = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Common).GetList<Activity>(sqlSchool, "Activity");
- resultSchool.list.ForEach(z => {
- var confirmedSchool = z.confirmedSchools.Find(z => z.id.Equals(school));
- if (confirmedSchool==null)
- {
- z.confirmedSchools.Add(new ActivityConfirmedSchool
- {
- id=schoolbase.id,
- name=schoolbase.name,
- picture=schoolbase.picture,
- status=0
- });
- }
- });
- activities.AddRange(resultSchool.list);
- }
- }
- //获取学校自己的
- {
- string sqlSchool = $"select value c from c where c.scope='school'{yearSql} and c.owner='{school}' ";
- var resultSchool = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Common).GetList<Activity>(sqlSchool, "Activity");
- activities.AddRange(resultSchool.list);
- }
- return Ok(new { activities = activities.OrderByDescending(z => z.stime) });
- }
- break;
- }
- case bool when $"{grant_type}".Equals("list-teacher", StringComparison.OrdinalIgnoreCase):
- {
- List<Activity> activities = new List<Activity>();
- string yearSql = $" and c.year={DateTimeOffset.Now.Year}";
- if (request.TryGetProperty("year", out JsonElement _year))
- {
- yearSql = $" and c.year={_year}";
- }
- if (!string.IsNullOrWhiteSpace(school)) {
- School schoolbase = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).ReadItemAsync<School>(school, new PartitionKey("Base"));
- //获取区级下放的
- {
- if (!string.IsNullOrWhiteSpace(schoolbase.areaId))
- {
- //区级所有学校
- string sqlOpen = $"select value c from c join s in c.confirmedSchools where c.scope='area'{yearSql} and (c.publish=1 or c.publish=2 ) and c.owner='{schoolbase.areaId}' and( ARRAY_LENGTH(c.invitedSchools)=0 or IS_DEFINED(c.invitedSchools) = false) and s.id='{school}' and s.status=1 ";
- var resultOpen = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Common).GetList<Activity>(sqlOpen, "Activity");
- resultOpen.list.ForEach(z => {
- //处理是否是邀请制
- if (z.joinMode.Equals("invite"))
- {
- var inviteTeacher = z.inviteTeachers.Find(t => t.id.Equals(tmdid));
- if (inviteTeacher!=null) {
- activities.Add(z);
- }
- }
- else
- {
- activities.Add(z);
- }
- });
- //区级部分学校
- string sqlSchool = $"select value c from c join i in c.invitedSchools join s in c.confirmedSchools where c.scope='area'{yearSql} and (c.publish=1 or c.publish=2 ) and c.owner='{schoolbase.areaId}' and i.id='{school}' and s.id='{school}' and s.status=1 ";
- var resultSchool = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Common).GetList<Activity>(sqlSchool, "Activity");
- resultSchool.list.ForEach(z => {
- //处理是否是邀请制
- if (z.joinMode.Equals("invite"))
- {
- var inviteTeacher = z.inviteTeachers.Find(t => t.id.Equals(tmdid));
- if (inviteTeacher!=null)
- {
- activities.Add(z);
- }
- }
- else
- {
- activities.Add(z);
- }
- });
- }
- }
- //获取学校自己的
- {
- string sqlSchool = $"select value c from c where c.scope='school'{yearSql} and (c.publish=1 or c.publish=2 ) and c.owner='{school}' ";
- var resultSchool = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Common).GetList<Activity>(sqlSchool, "Activity");
- resultSchool.list.ForEach(z => {
- //处理是否是邀请制
- if (z.joinMode.Equals("invite"))
- {
- var inviteTeacher = z.inviteTeachers.Find(t => t.id.Equals(tmdid));
- if (inviteTeacher!=null)
- {
- activities.Add(z);
- }
- }
- else {
- activities.Add(z);
- }
- });
- }
- }
- //获取开放的
- {
- //完全开放 所有的学校
- string sqlOpen = $"select value c from c where c.scope='public'{yearSql} and (c.publish=1 or c.publish=2 ) and( ARRAY_LENGTH(c.invitedSchools)=0 or IS_DEFINED(c.invitedSchools) = false ) ";
- var resultOpen = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Common).GetList<Activity>(sqlOpen, "Activity");
- activities.AddRange(resultOpen.list);
- //部分学校
- string sqlSchool = $"select value c from c join i in c.invitedSchools join s in c.confirmedSchools where c.scope='public'{yearSql} and (c.publish=1 or c.publish=2 ) and i.id='{school}' and s.id='{school}' and s.status=1 ";
- var resultSchool = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Common).GetList<Activity>(sqlSchool, "Activity");
- resultSchool.list.ForEach(z => {
- //处理是否是邀请制
- if (z.joinMode.Equals("invite"))
- {
- var inviteTeacher = z.inviteTeachers.Find(t => t.id.Equals(tmdid));
- if (inviteTeacher!=null)
- {
- activities.Add(z);
- }
- }
- else
- {
- activities.Add(z);
- }
- });
- }
- return Ok(new { activities = activities.OrderByDescending(z => z.stime) });
- }
- case bool when $"{grant_type}".Equals("read-contest", StringComparison.OrdinalIgnoreCase):
- {
- Contest contest = null;
- ReviewRuleTree reviewRule = null;
- 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("Contest"));
- if (response.Status==200) {
- contest= JsonDocument.Parse(response.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
- {
- name= reviewRuleDB.name,
- owner= reviewRuleDB.owner,
- sourceName= reviewRuleDB.sourceName,
- trees=tree
- };
- }
- }
- }
- return Ok(new { code = 200, contest, reviewRule });
- }
- //获取评审的模板列表
- case bool when $"{grant_type}".Equals("rule-list", StringComparison.OrdinalIgnoreCase):
- {
- if (!request.TryGetProperty("owner", out JsonElement _owner)) return BadRequest();
- var result = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Normal).GetList<ReviewRule>($"select value c from c where c.owner='{_owner}'", "ReviewRule-template");
- List<ReviewRuleTree> reviewRules = new List<ReviewRuleTree>();
- foreach (var item in result.list)
- {
- var tree = ActivityService.ListToTree(item.configs);
- ReviewRuleTree reviewRule=new ReviewRuleTree
- {
- name= item.name,
- owner= item.owner,
- sourceName= item.sourceName,
- trees=tree,
- upsertAsTemplate=1
- };
- reviewRules.Add(reviewRule);
- }
- return Ok(new { reviewRules });
- }
- }
- } catch (Exception ex)
- {
- }
- return Ok();
- }
- /// <summary>
- /// portal站的
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [ProducesDefaultResponseType]
- [HttpPost("list-portal")]
- public async Task<IActionResult> ListPortal(JsonElement request) {
- //var authtoken = HttpContext.GetXAuth("AuthToken");
- //string userid = string.Empty;
- //object schoolid = null;
- //if (!string.IsNullOrWhiteSpace(authtoken)) {
- // var jwt = new JwtSecurityToken(authtoken);
- // //TODO 此驗證IdToken先簡單檢查,後面需向Core ID新API,驗證Token
- // userid= jwt.Payload.Sub;
- // jwt.Payload.TryGetValue("azp", out schoolid);
- //}
- if (!request.TryGetProperty("route", out JsonElement _route)) return BadRequest();
- List<Activity> activities = new List<Activity>();
- string sql = $"select value c from c where c.route='{_route}'";
- var result= await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Normal).GetList<ActivityWebsite>(sql, "ActivityWebsite");
- ActivityWebsite website = null;
- if (result.list.Count>1)
- {
- return Ok(new { code = 1, msg = "路由匹配多个区校" });
- }
- else {
- if (result.list.Count==1) {
- website= result.list[0];
- }
- }
-
- if (website!=null)
- {
- if (website.scope.Equals("area"))
- {
- //区级所有学校
- string sqlOpen = $"select value c from c where c.scope='area' and (c.publish=1 or c.publish=2 ) and c.owner='{website.id}' ";
- var resultOpen = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Common).GetList<Activity>(sqlOpen, "Activity");
- activities.AddRange(resultOpen.list);
- }
- if (website.scope.Equals("school"))
- {
- School schoolbase = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).ReadItemAsync<School>(website.id, new PartitionKey("Base"));
- //区级下放的
- if (!string.IsNullOrWhiteSpace(schoolbase.areaId))
- {
- //区级所有学校
- string sqlOpen = $"select value c from c join s in c.confirmedSchools where c.scope='area' and (c.publish=1 or c.publish=2 ) and c.owner='{schoolbase.areaId}' and( ARRAY_LENGTH(c.invitedSchools)=0 or IS_DEFINED(c.invitedSchools) = false) and s.id='{schoolbase.id}' and s.status=1 ";
- var resultOpen = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Common).GetList<Activity>(sqlOpen, "Activity");
- activities.AddRange(resultOpen.list);
- //区级部分学校
- string sqlSchool = $"select value c from c join i in c.invitedSchools join s in c.confirmedSchools where c.scope='area'and (c.publish=1 or c.publish=2 ) and c.owner='{schoolbase.areaId}' and i.id='{schoolbase.id}' and s.id='{schoolbase.id}' and s.status=1 ";
- var resultSchool = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Common).GetList<Activity>(sqlSchool, "Activity");
- activities.AddRange(resultSchool.list);
- }
- {
- ///学校自己的
- string sqlSchool = $"select value c from c where c.scope='school' and (c.publish=1 or c.publish=2 ) and c.owner='{schoolbase.id}' ";
- var resultSchool = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Common).GetList<Activity>(sqlSchool, "Activity");
- activities.AddRange(resultSchool.list);
- }
- }
- //获取开放的
- {
- //完全开放 所有的学校
- string sqlOpen = $"select value c from c where c.scope='public' and (c.publish=1 or c.publish=2 ) ";
- var resultOpen = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Common).GetList<Activity>(sqlOpen, "Activity");
- activities.AddRange(resultOpen.list);
- }
- }
-
- return Ok(new { activities, website });
- }
- }
- }
|