CrazyIter_Bin 1 рік тому
батько
коміт
d6b02b704b

+ 124 - 309
TEAMModelOS.SDK/Models/Service/Common/ActivityService.cs

@@ -25,311 +25,7 @@ namespace TEAMModelOS.SDK
 {
     public static class ActivityService
     {
-
-        /*
-        /// <summary>
-        /// 分配作品
-        /// </summary>
-        /// <param name="_azureCosmos"></param>
-        /// <param name="activity"></param>
-        /// <returns></returns>
-
-        public static async Task<(List<ExpertContestTaskDto> expertContestTasks, List<ExpertContestTaskDto   > activityEnrollsInvalid, List<ExpertContestTaskDto> expertContestTasksDB)> AllocationTask(AzureCosmosFactory _azureCosmos, IEnumerable<ExpertPeriodSubjectDto> experts, Contest activity,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-{activity.id}");
-            List<ExpertContestTaskDto  > activityEnrollsInvalid = new List<ExpertContestTaskDto>();
-            Dictionary<string, List<ActivityEnroll>>  uploads = new  Dictionary<string, List<ActivityEnroll>>();
-            foreach (ActivityEnroll enroll in resultActivityEnroll.list)
-            {
-                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;
-                int count = 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;
-                }
-                //学段学科不匹配
-                var taskDto = new ExpertContestTaskDto
-                {
-                    uploadId = enroll.upload?.uploadId,
-                    name = $"{enroll?.schoolName}-{enroll?.tmdName}",
-                    uploadTypes = new List<string> { enroll?.upload.type },
-                    count = count,
-                    cipher = enroll.contest?.cipher,
-                    type = enroll.contest != null ? enroll.contest.type : 0,
-                    leader = enroll.contest != null ? enroll.contest.type : 0,
-                    tmdid = enroll.id,
-                    status = -1,
-                    score = -1,
-                    //detailScore=new List<RuleConfig>()
-                    members = new List<IdNameCode>(),
-                    periodSubjectKey = periodSubjectKey,
-                    period = period?.val,
-                    subject = subject?.val,
-                   
-                };
-                if (distribute.Equals("period"))
-                {
-                    if (period != null)
-                    {
-                        periodSubjectKey = $"{period.val}-";
-                    }
-                    else {
-                        taskDto.available = 2;
-                        activityEnrollsInvalid.Add(taskDto);
-                        break;
-                    }
-                }
-                else if (distribute.Equals("subject"))
-                {
-                    
-                    if (subject != null)
-                    {
-                        periodSubjectKey = $"-{subject.val}";
-                    }
-                    else {
-                        taskDto.available = 3;
-                        activityEnrollsInvalid.Add(taskDto);
-                        break;
-                    }
-                }
-                else if (distribute.Equals("periodAndSubject"))
-                {
-                   
-                    if (period != null && subject != null)
-                    {
-                        periodSubjectKey = $"{period.val}-{subject.val}";
-                    }
-                    else {
-                        taskDto.available = 4;
-                        activityEnrollsInvalid.Add(taskDto);
-                        break;
-                    }
-                }
-                //else if (distribute.Equals("none"))
-                //{
-                   
-                //}
-                else {
-                  periodSubjectKey = "-";
-                }
-             
-                if (periodSubjectKeys.Contains(periodSubjectKey))
-                {
-                    if (!string.IsNullOrWhiteSpace(enroll.upload?.uploadId))
-                    {
-                        if (uploads.ContainsKey(enroll.upload.uploadId))
-                        {
-                            uploads[enroll.upload.uploadId].Add(enroll);
-                        }
-                        else
-                        {
-                            uploads[enroll.upload.uploadId]= new List<ActivityEnroll>() { enroll};
-                        }
-                    }
-                    else {
-                        taskDto.available = 5;
-                        activityEnrollsInvalid.Add(taskDto);
-                        //未上传作品
-                        //activityEnrollsInvalid.Add((enroll, 2));
-                    }
-                }
-                else {
-                    taskDto.available =6;
-                    activityEnrollsInvalid.Add(taskDto);
-                    //学段学科不匹配
-                    //activityEnrollsInvalid.Add((enroll, 1));
-                }
-            }
-            List<ExpertContestTaskDto> expertContestTasks = new List<ExpertContestTaskDto>();
-            List<ExpertContestTaskDto> expertContestTasksDB = new List<ExpertContestTaskDto>();
-            foreach (var upload in  uploads.Keys) 
-            {
-               
-                var team = uploads[upload].FindAll(z => z.contest?.type==1);
-                if (team.IsNotEmpty())
-                {
-                    var leader = team.FindAll(z => z.contest?.leader==1);
-                    //有队长,说明是作品是一个人的队伍的作品。或者是由队长统一上传的作品。
-                    if (leader.IsNotEmpty())
-                    {
-                        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 enroll = leader?.First();
-                        if (enroll!= null)
-                        {
-                            string name = enroll.contest?.teamName;
-                            var period = enroll.contest?.enrollInfos?.Find(z => z.code.Equals("period"));
-                            var subject = enroll.contest?.enrollInfos?.Find(z => z.code.Equals("subject"));
-                            string periodSubjectKey = $"{period?.val}-{subject?.val}";
-                            if (string.IsNullOrEmpty(name))
-                            {
-                                name=$"{enroll.contest?.enrollInfos?.Find(z => z.code.Equals("name"))?.val}({team.Count})";
-                            }
-                            int count = 0;
-                            if (enroll.upload.sokrates.IsNotEmpty())
-                            {
-                                count+=enroll.upload.sokrates.Count;
-                            }
-                            if (enroll.upload.files.IsNotEmpty())
-                            {
-                                count+=enroll.upload.files.Count;
-                            }
-                            expertContestTasks.Add(new ExpertContestTaskDto
-                            {
-                                uploadId = upload,
-                                name = $"{uploads[upload].First()?.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,
-                                //detailScore=new List<RuleConfig>()
-                                members = members,
-                                periodSubjectKey = periodSubjectKey,
-                                period = period?.val,
-                                subject = subject?.val
-                            }) ;
-                        }
-                    }
-                    //没有队长,则是队员上传的作品(队员自己上传,不是队长统一上传的)、
-                    else {
-                        if (team.Count==1) {
-                            var enroll = team?.First();
-                            if (enroll!= null)
-                            {
-                                var period = enroll.contest?.enrollInfos?.Find(z => z.code.Equals("period"));
-                                var subject = enroll.contest?.enrollInfos?.Find(z => z.code.Equals("subject"));
-                                string periodSubjectKey = $"{period?.val}-{subject?.val}";
-                                string name = enroll.contest?.teamName;
-                                if (string.IsNullOrEmpty(name))
-                                {
-                                    name=$"{enroll.contest?.enrollInfos?.Find(z => z.code.Equals("name"))?.val}({team.Count})";
-                                }
-                                int count = 0;
-                                if (enroll.upload.sokrates.IsNotEmpty())
-                                {
-                                    count+=enroll.upload.sokrates.Count;
-                                }
-                                if (enroll.upload.files.IsNotEmpty())
-                                {
-                                    count+=enroll.upload.files.Count;
-                                }
-                                expertContestTasks.Add(new ExpertContestTaskDto
-                                {
-                                    uploadId = upload,
-                                    name=$"{uploads[upload].First()?.schoolName}-{name}",
-                                    uploadTypes=new List<string> { enroll?.upload.type },
-                                    count=count,
-                                    cipher=enroll.contest?.cipher,
-                                    type=1,
-                                    leader=0,
-                                    tmdid=enroll.id,
-                                    status=-1,
-                                    score=-1,
-                                    //detailScore=new List<RuleConfig>()
-                                  //  members= new List<IdNameCode>()
-                                    periodSubjectKey=periodSubjectKey,
-                                    period = period?.val,
-                                    subject = subject?.val
-                                }) ; 
-                            }
-                        }
-                    }
-                }
-                else {
-                    //个人
-                    var enroll = uploads[upload]?.First();
-                    if (enroll!= null) {
-                        var period = enroll.contest?.enrollInfos?.Find(z => z.code.Equals("period"));
-                        var subject = enroll.contest?.enrollInfos?.Find(z => z.code.Equals("subject"));
-                        string periodSubjectKey = $"{period?.val}-{subject?.val}";
-                        string name = enroll.contest?.enrollInfos?.Find(z => z.code.Equals("name"))?.val;
-                        if (!string.IsNullOrEmpty(name))
-                        {
-                            name=$"({name})";
-                        }
-                        else
-                        {
-                            name=string.Empty;
-                        }
-                        int count = 0;
-                        if (enroll.upload.sokrates.IsNotEmpty()) {
-                            count+=enroll.upload.sokrates.Count;
-                        }
-                        if (enroll.upload.files.IsNotEmpty())
-                        {
-                            count+=enroll.upload.files.Count;
-                        }
-                        expertContestTasks.Add(new ExpertContestTaskDto
-                        {
-                            uploadId = upload,
-                            name=$"{uploads[upload].First()?.schoolName}-{uploads[upload].First()?.tmdName}{name}",
-                            uploadTypes=new List<string> { enroll?.upload.type },
-                            count=count,
-                            cipher=null,
-                            type=0,
-                            leader=-1,
-                            tmdid=enroll.id,
-                            status=-1,
-                            score=-1,
-                            //detailScore=new List<RuleConfig>()
-                            //members= new List<IdNameCode>()
-                            periodSubjectKey=periodSubjectKey,
-                            period = period?.val,
-                            subject = subject?.val
-                        }); 
-                    }
-                }
-            }
-            if (expertContestTasks.IsNotEmpty() && experts!=null  && experts.Count()>0 && taskCount > 0) {
-
-                string taskSQL = $"select value c from c where c.pk='ActivityExpertTask'";
-                List<ExpertContestTaskDto> worksDB= new List<ExpertContestTaskDto>();
-                var result = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).GetList<ActivityExpertTask>(taskSQL, $"ActivityExpertTask-{activity.id}") ;
-                if (result.list.IsNotEmpty()) {
-                   foreach(var item in result.list) 
-                    {
-                        worksDB.AddRange(item.contestTasks.Select(z => 
-                        new ExpertContestTaskDto 
-                        {
-                            expertId = item.id,
-                            available = 1,
-                            uploadId = z.uploadId,
-                            name = z.name,
-                            uploadTypes = z.uploadTypes,
-                            count = z.count,
-                            cipher=z.cipher,type=z.type,
-                            leader=z.leader,members=z.members,
-                            tmdid=z.tmdid,
-                            score=z.score,
-                            status=z.status,
-                            detailScore=z.detailScore
-                        }));
-                    }
-                }
-                var data = AssignWorksToExperts(expertContestTasks, worksDB, experts, taskCount);
-                expertContestTasks = data.assignmentsAdd;
-                expertContestTasksDB = worksDB;
-                activityEnrollsInvalid.AddRange(data.assignmentsInvalid);
-            }
-            return (expertContestTasks, activityEnrollsInvalid, expertContestTasksDB);
-        }
-
-        */
-
-
+ 
         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)
         {
@@ -735,15 +431,134 @@ namespace TEAMModelOS.SDK
             }
             return no;
         }
-        public  static async Task<List<TeacherActivityDto>> TeacherActivityList(AzureCosmosFactory _azureCosmos,AzureStorageFactory _azureStorage,  JsonElement request, string tmdid)
+        public static async Task<IEnumerable<ActivityDto>> AreaActivityList(AzureCosmosFactory _azureCosmos, AzureStorageFactory _azureStorage, JsonElement request, string _areaId, int isCount = 0) 
+        {
+            string yearSql = string.Empty;
+            if (isCount==0) {
+                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.owner='{_areaId}' {yearSql}  ";
+            var result = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Common).GetList<ActivityDto>(sql, "Activity");
+            result.list.ForEach(z => {
+                var (blob_uri, blob_sas) = _azureStorage.GetBlobContainerSAS(z.owner, BlobContainerSasPermissions.Read | BlobContainerSasPermissions.List);
+                z.sas=blob_sas;
+            });
+            return result.list.OrderByDescending(z => z.stime);
+        }
+
+        public static async Task<List<ActivityDto>> SchoolActivityList(AzureCosmosFactory _azureCosmos, AzureStorageFactory _azureStorage, JsonElement request, string school, int isCount = 0) {
+            School schoolbase = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).ReadItemAsync<School>(school, new PartitionKey("Base"));
+            List<ActivityDto> activities = new List<ActivityDto>();
+            string yearSql = string.Empty;
+            if (isCount==0)
+            {
+                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<ActivityDto>(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<ActivityDto>(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<ActivityDto>(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<ActivityDto>(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<ActivityDto>(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;
+            });
+
+            return activities;
+        }
+        public  static async Task<List<TeacherActivityDto>> TeacherActivityList(AzureCosmosFactory _azureCosmos,AzureStorageFactory _azureStorage,  JsonElement request, string tmdid, int isCount = 0)
         {
             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) &&  int.TryParse($"{_year}",out int year ))
+            string yearSql = string.Empty;
+            if (isCount==0)
             {
-                yearSql = $" and c.year={year}";
+                yearSql = $" and c.year={DateTimeOffset.Now.Year}";
+                if (request.TryGetProperty("year", out JsonElement _year) &&  int.TryParse($"{_year}", out int year))
+                {
+                    yearSql = $" and c.year={year}";
+                }
             }
+              
             //先获取邀请制的
             string sqlInvite = $"select value c from c join t in c.inviteTeachers where   t.id='{tmdid}' and c.pk='ActivityTeacher'";
             var result = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Common).GetList<ActivityTeacher>(sqlInvite);

+ 30 - 103
TEAMModelOS/Controllers/Common/ActivityController.cs

@@ -784,118 +784,20 @@ namespace TEAMModelOS.Controllers
                     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.owner='{_areaId}' {yearSql}  ";
-                            var result = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Common).GetList<ActivityDto>(sql, "Activity");
-                            result.list.ForEach(z => {
-                                var (blob_uri, blob_sas) = _azureStorage.GetBlobContainerSAS(z.owner, BlobContainerSasPermissions.Read | BlobContainerSasPermissions.List);
-                                z.sas=blob_sas;
-                            });
-                            return Ok(new { activities = result.list.OrderByDescending(z => z.stime) });
+                            var activities = await ActivityService.AreaActivityList(_azureCosmos, _azureStorage, request, _areaId.GetString());
+                            return Ok(new { activities = activities });
                         }
                     //校级活动列表
                     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<ActivityDto> activities = new List<ActivityDto>();
-                                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<ActivityDto>(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<ActivityDto>(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<ActivityDto>(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<ActivityDto>(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<ActivityDto>(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;
-                                });
+                                var activities = await ActivityService.SchoolActivityList(_azureCosmos, _azureStorage, request,school);
                                 return Ok(new { code=200, activities = activities.OrderByDescending(z => z.stime) });
                             }
                             else {
                                 return Ok(new { code = 1, msg="没有学校信息"});
                             }
-
                         }
                     //教师活动列表
                     case bool when $"{grant_type}".Equals("list-teacher", StringComparison.OrdinalIgnoreCase):
@@ -903,7 +805,32 @@ 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("list-year", StringComparison.OrdinalIgnoreCase): 
+                        {
+                            if (!request.TryGetProperty("type", out JsonElement _type)) return BadRequest();
+                            if (!request.TryGetProperty("ownerId", out JsonElement ownerId)) return BadRequest();
+                            if ($"{_type}".Equals("teacher"))
+                            {
+                                var data = await ActivityService.TeacherActivityList(_azureCosmos, _azureStorage, request, ownerId.GetString());
+                                var countYear = data.GroupBy(z => z.year).Select(z => new { year = z.Key, count = z.ToList().Count() });
+                                return Ok(new { code = 200, countYear });
+                            }
+                            else if ($"{_type}".Equals("school"))
+                            {
+                                var data = await ActivityService.SchoolActivityList(_azureCosmos, _azureStorage, request, ownerId.GetString());
+                                var countYear = data.GroupBy(z => z.year).Select(z => new { year = z.Key, count = z.ToList().Count() });
+                                return Ok(new { code = 200, countYear });
+                            }
+                            else if ($"{_type}".Equals("area"))
+                            {
+                                var data = await ActivityService.AreaActivityList(_azureCosmos, _azureStorage, request, ownerId.GetString());
+                                var countYear = data.GroupBy(z => z.year).Select(z => new { year = z.Key, count = z.ToList().Count() });
+                                return Ok(new {code=200 ,countYear });
+                            }
+                            else {
+                                return BadRequest("类型错误!");
+                            }
+                        }
                     case bool when $"{grant_type}".Equals("read-activity", StringComparison.OrdinalIgnoreCase):
                         {
                             if (!request.TryGetProperty("activityId", out JsonElement _activityId)) return BadRequest();
@@ -1389,7 +1316,7 @@ namespace TEAMModelOS.Controllers
                                                 foreach (var task in item.contestTasks) {
                                                     var  teachers = inviteEnrollTeachers.FindAll(z => z.uploadContestId.Equals(task.uploadId));
                                                     if (teachers!=null) {
-                                                        teachers.ForEach(z => { z.reviewContestAssignCount+=1; z.reviewContestExperts.Add(new IdNameCode { id= item.id, }); });
+                                                        teachers.ForEach(z => { z.reviewContestAssignCount+=1; z.reviewContestExperts.Add(new IdNameCode { id= item.id,name=item.name,nickname=item.tmdname ,picture=item.picture}); });
                                                     }
                                                 }
                                             }