CrazyIter_Bin 1 year ago
parent
commit
a343be1cb8

+ 5 - 1
TEAMModelOS.SDK/Models/Cosmos/Common/Activity.cs

@@ -572,7 +572,11 @@ namespace TEAMModelOS.SDK.Models
         //id  教师id,
         //code ActivityEnroll-ActivityId
         //pk ActivityEnroll
-        public string school { get; set; }
+        public string schoolId { get; set; }
+        public string schoolName {  get; set; }
+        public string tmdName {  get; set; }
+        public string tmdPicture { get; set; }
+        public string schoolPicture { get; set; }
         public EnrollContest contest { get; set; }
         public EnrollUpload upload { get; set; }
 

+ 1 - 1
TEAMModelOS.SDK/Models/Service/BI/BIStats.cs

@@ -908,7 +908,7 @@ namespace TEAMModelOS.SDK.Models.Service.BI
                     str = "定时清理学校统计成功";
                 }
 
-                await _dingDing.SendBotMsg($"BI,{Environment.GetEnvironmentVariable("Option:Location")},SetStatsZeroPoint() {str}\n  ", GroupNames.醍摩豆服務運維群組);
+                //await _dingDing.SendBotMsg($"BI,{Environment.GetEnvironmentVariable("Option:Location")},SetStatsZeroPoint() {str}\n  ", GroupNames.醍摩豆服務運維群組);
             }
             catch (Exception ex)
             {

+ 107 - 1
TEAMModelOS.SDK/Models/Service/Common/ActivityService.cs

@@ -1,9 +1,12 @@
-using Azure.Storage.Blobs.Models;
+using Azure.Cosmos;
+using Azure.Storage.Blobs.Models;
+using Azure.Storage.Sas;
 using HTEXLib.COMM.Helpers;
 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
+using System.Text.Json;
 using System.Threading.Tasks;
 using TEAMModelOS.SDK.DI;
 using TEAMModelOS.SDK.Extension;
@@ -14,6 +17,109 @@ namespace TEAMModelOS.SDK
 {
     public static class ActivityService
     {
+
+        public  static async Task<List<TeacherActivityDto>> TeacherActivityList(AzureCosmosFactory _azureCosmos,AzureStorageFactory _azureStorage,  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;
+        }
+
         public static async Task<ReviewRule> UpsertReviewRule(ReviewRuleTree reviewRuleTree,Activity activity,AzureCosmosFactory _azureCosmos) 
         {
             var nodes = new List<RuleConfig>();

+ 71 - 107
TEAMModelOS/Controllers/Common/ActivityController.cs

@@ -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 });
         }
     }