CrazyIter_Bin 1 anno fa
parent
commit
ae1a6599c9

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

@@ -32,7 +32,7 @@ namespace TEAMModelOS.SDK.Models
         /// <summary>
         /// 免责声明
         /// </summary>
-        public string mzsm { get; set; } 
+        public string mzsm { get; set; }
         /// <summary>
         /// "hbcn/区级id,areaId",
         /// </summary>
@@ -71,7 +71,7 @@ namespace TEAMModelOS.SDK.Models
         [Required(ErrorMessage = "模块不能为空")]
         [MinLength(1, ErrorMessage = "模块不能为空")]
         public List<string> modules { get; set; } = new List<string>();
-      
+
         /// <summary>
         /// 所属年份
         /// </summary>
@@ -79,7 +79,7 @@ namespace TEAMModelOS.SDK.Models
         /// <summary>
         /// 创建时间
         /// </summary>
-        public long createTime {  get; set; }
+        public long createTime { get; set; }
         /// <summary>
         /// 创建者
         /// </summary>
@@ -88,9 +88,12 @@ namespace TEAMModelOS.SDK.Models
         /// 0未发布,1已发布,2.已结束
         /// </summary>
         public int publish { get; set; }
+
+    }
+    public class ActivityDto : Activity
+    {
         public string sas { get; set; }
     }
-   
 
     public class ActivityWebsite : CosmosEntity {
         // id(区级id,校级id)
@@ -118,7 +121,26 @@ namespace TEAMModelOS.SDK.Models
         /// </summary>
         public int allowPublic { get; set; } = 0;
 
+
+
     }
+    public class ActivityWebsiteDto :ActivityWebsite
+    {
+        public string sas { get; set; }
+
+        public ActivityWebsiteDto(ActivityWebsite website) { 
+            this.allowPublic = website.allowPublic;
+            this.route = website.route;
+            this.scope = website.scope;
+            this.name = website.name;
+            this.logo = website.logo;
+            this.pk = website.pk;
+            this.code = website.code;
+            this.banners = website.banners;
+            this.id = website.id;
+        }
+    }
+
     public class ActivityBanner { 
         public string title { get; set; }
         public string subtitle { get; set; }
@@ -546,7 +568,7 @@ namespace TEAMModelOS.SDK.Models
         /// </summary>
         public string period { get; set; }
     }
-    public class TeacherActivityDto : Activity
+    public class TeacherActivityDto : ActivityDto
     {
         /// <summary>
         /// 0未报名,1已报名

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

@@ -89,7 +89,7 @@ namespace TEAMModelOS.SDK
 
             activities.ForEach(z =>
             {
-                var (blob_uri, blob_sas) = _azureStorage.GetBlobContainerSAS(z.owner, BlobContainerSasPermissions.Read | BlobContainerSasPermissions.List);
+                var (blob_uri, blob_sas) = _azureStorage.GetBlobContainerSAS(z.owner, BlobContainerSasPermissions.Read);
                 z.sas=blob_sas;
             });
             if (activities.IsNotEmpty())

+ 55 - 24
TEAMModelOS/Controllers/Common/ActivityController.cs

@@ -113,6 +113,7 @@ namespace TEAMModelOS.Controllers
                                 }
                             }
                             await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Normal).UpsertItemAsync(website ,new PartitionKey("ActivityWebsite"));
+                           
                             return Ok(new { website,code =200});
                         }
                     case bool when $"{grant_type}".Equals("list", StringComparison.OrdinalIgnoreCase):
@@ -267,7 +268,6 @@ namespace TEAMModelOS.Controllers
                                         }
                                     }
                                 }
-                             
                             }
                             return Ok(new { code = 200, websites });
                         }
@@ -550,7 +550,7 @@ namespace TEAMModelOS.Controllers
                                 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<Activity>(sql, "Activity");
+                            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;
@@ -562,7 +562,7 @@ namespace TEAMModelOS.Controllers
                         {
                             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>();
+                                List<ActivityDto> activities = new List<ActivityDto>();
                                 string yearSql = $" and c.year={DateTimeOffset.Now.Year}";
 
                                 if (request.TryGetProperty("year", out JsonElement _year))
@@ -574,11 +574,11 @@ namespace TEAMModelOS.Controllers
 
                                     //完全开放 所有的学校
                                     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");
+                                    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<Activity>(sqlSchool, "Activity");
+                                    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)
@@ -600,7 +600,7 @@ namespace TEAMModelOS.Controllers
                                     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");
+                                        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)
@@ -617,7 +617,7 @@ namespace TEAMModelOS.Controllers
                                         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");
+                                        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)
@@ -637,7 +637,7 @@ namespace TEAMModelOS.Controllers
                                 //获取学校自己的
                                 {
                                     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");
+                                    var resultSchool = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Common).GetList<ActivityDto>(sqlSchool, "Activity");
                                     activities.AddRange(resultSchool.list);
                                 }
                                 activities.ForEach(z => {
@@ -1424,8 +1424,8 @@ namespace TEAMModelOS.Controllers
         public async Task<IActionResult> GetWebsite(JsonElement request) {
             if (!request.TryGetProperty("route", out JsonElement _route)) return BadRequest();
             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;
+            var result = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Normal).GetList<ActivityWebsiteDto>(sql, "ActivityWebsite");
+            ActivityWebsiteDto website = null;
             if (result.list.Count>1)
             {
                 return Ok(new { code = 1, msg = "路由匹配多个区校" });
@@ -1439,13 +1439,27 @@ namespace TEAMModelOS.Controllers
             }
             if (website!= null)
             {
-                List<ActivityWebsite> websites = new List<ActivityWebsite>();
+                List<ActivityWebsiteDto> websites = new List<ActivityWebsiteDto>();
                 if (website.route.Equals("teammodel") )
                 {
                     string sqlAll = $"select value c from c where IS_DEFINED(c.route) = true  and c.route<> null  and  c.route<>'' ";
-                    var resultAll = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Normal).GetList<ActivityWebsite>(sqlAll, "ActivityWebsite");
+                    var resultAll = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Normal).GetList<ActivityWebsiteDto>(sqlAll, "ActivityWebsite");
                     websites=resultAll.list;
                 }
+                websites.ForEach(z => {
+                    string cnt = z.id;
+                    if (z.id.Equals("teammodel"))
+                    {
+                        cnt="02944f32-f534-3397-ea56-e6f1fc6c3714";
+                    }
+                    z.sas= _azureStorage.GetBlobContainerSAS(cnt ,BlobContainerSasPermissions.Read).sas;
+                });
+                string cnt = website.id;
+                if (website.id.Equals("teammodel"))
+                {
+                    cnt="02944f32-f534-3397-ea56-e6f1fc6c3714";
+                }
+                website.sas= _azureStorage.GetBlobContainerSAS(cnt, BlobContainerSasPermissions.Read).sas;
                 return Ok(new { code = 200, website ,websites });
             }
             else {
@@ -1472,16 +1486,16 @@ namespace TEAMModelOS.Controllers
             if (!request.TryGetProperty("activityId", out JsonElement _activityId)) return BadRequest();
             var client = _azureCosmos.GetCosmosClient();
             Azure.Response response = await client.GetContainer(Constant.TEAMModelOS, Constant.Common).ReadItemStreamAsync(_activityId.GetString(), new PartitionKey("Activity"));
-            if (response.Status==200) 
+            if (response.Status==200)
             {
+                int code = -1;
                 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")) {
 
@@ -1507,7 +1521,24 @@ namespace TEAMModelOS.Controllers
                             //如果邀请制没有检查通过,则检查其他模式
                             if (code!=200) 
                             {
-
+                                if (activity.invitedSchools.IsNotEmpty() && activity.confirmedSchools.IsNotEmpty()) { 
+                                
+                                }
+                            }
+                            if (code==200) {
+                                ///检查被报名的活动是是否符合
+                                if (activity.publish==1  && activity.modules.Contains("Contest"))
+                                {
+                                    Azure.Response responseContest = await client.GetContainer(Constant.TEAMModelOS, Constant.Common).ReadItemStreamAsync(_activityId.GetString(), new PartitionKey("Contest"));
+                                    if (responseContest.Status==200)
+                                    {
+                                        Contest contest = JsonDocument.Parse(responseContest.Content).RootElement.ToObject<Contest>();
+                                        if (contest.modules.Contains("sign") && contest.sign!=null)
+                                        {
+                                            long now = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
+                                        }
+                                    }
+                                }
                             }
                             break;
                         }
@@ -1556,7 +1587,7 @@ namespace TEAMModelOS.Controllers
             //    jwt.Payload.TryGetValue("azp", out schoolid);
             //}
             if (!request.TryGetProperty("route", out JsonElement _route)) return BadRequest();
-            List<Activity> activities = new List<Activity>();
+            List<ActivityDto> activities = new List<ActivityDto>();
             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;
@@ -1576,7 +1607,7 @@ namespace TEAMModelOS.Controllers
                 {
                     //区级所有学校
                     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");
+                    var resultOpen = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Common).GetList<ActivityDto>(sqlOpen, "Activity");
                     activities.AddRange(resultOpen.list);
                 }
                 if (website.scope.Equals("school"))
@@ -1587,17 +1618,17 @@ namespace TEAMModelOS.Controllers
                     {
                         //区级所有学校
                         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");
+                        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 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");
+                        var resultSchool = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Common).GetList<ActivityDto>(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");
+                        var resultSchool = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Common).GetList<ActivityDto>(sqlSchool, "Activity");
                         activities.AddRange(resultSchool.list);
                     }
                 }
@@ -1605,13 +1636,13 @@ namespace TEAMModelOS.Controllers
                 {
                     //完全开放 所有的学校
                     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");
+                    var resultOpen = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Common).GetList<ActivityDto>(sqlOpen, "Activity");
                     activities.AddRange(resultOpen.list);
                 }
             }
             activities.ForEach(z =>
             {
-                var (blob_uri, blob_sas) = _azureStorage.GetBlobContainerSAS(z.owner, BlobContainerSasPermissions.Read | BlobContainerSasPermissions.List);
+                var (blob_uri, blob_sas) = _azureStorage.GetBlobContainerSAS(z.owner, BlobContainerSasPermissions.Read);
                 z.sas=blob_sas;
             });
             return Ok(new { activities, website });