CrazyIter_Bin 1 năm trước cách đây
mục cha
commit
3d2be8d52a

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

@@ -29,6 +29,7 @@ namespace TEAMModelOS.SDK.Models
         public List<Attachment> attachment { get; set; } = new List<Attachment>();
         public List<string> zb { get; set; } = new List<string>();
         public List<string> cb { get; set; } = new List<string>();
+        public string mzsm { get; set; } 
         /// <summary>
         /// "hbcn/区级id,areaId",
         /// </summary>
@@ -276,7 +277,7 @@ namespace TEAMModelOS.SDK.Models
         /// </summary>
         public int upsertAsTemplate { get; set; } = 0;
         public string sourceName { get; set; }
-        public RuleConfigTree tree{ get; set; }
+        public List<RuleConfigTree> trees{ get; set; }
 
     }
     public class RuleConfigTree: RuleConfig

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

@@ -15,7 +15,7 @@ namespace TEAMModelOS.SDK
         public static async Task<ReviewRule> UpsertReviewRule(ReviewRuleTree reviewRuleTree,Activity activity,AzureCosmosFactory _azureCosmos) 
         {
             var nodes = new List<RuleConfig>();
-            nodes= TreeToList(new List<RuleConfigTree> { reviewRuleTree.tree }, nodes);
+            nodes= TreeToList(reviewRuleTree.trees, nodes);
             ReviewRule reviewRule = new ReviewRule() {
                 id= activity.id,
                 code="ReviewRule-disposable",
@@ -67,7 +67,7 @@ namespace TEAMModelOS.SDK
             return nodes;
         }
 
-        public static List<RuleConfigTree> ListToTree(List<RuleConfigTree> noes)
+        public static List<RuleConfigTree> ListToTree(List<RuleConfig> noes)
         {
             List<RuleConfigTree> list = noes.ToJsonString().ToObject<List<RuleConfigTree>>();
             var res = from r in list group r by r.id into g select g;

+ 6 - 1
TEAMModelOS.SDK/Models/Service/Common/TeacherService.cs

@@ -109,11 +109,14 @@ namespace TEAMModelOS.Services
                         {
                             access = 1;
                         }
+                        var container = _azureStorage.GetBlobContainerClient(area?.id);
+                        await container.CreateIfNotExistsAsync(PublicAccessType.None); //嘗試創建Teacher私有容器,如存在則不做任何事,保障容器一定存在
+                        var blobArea=  _azureStorage.GetBlobContainerSAS(area?.id, blobContainerSasPermissions: BlobContainerSasPermissions.All);
                         //if (setting != null)
                         //{
                         //    setting.accessConfig = null;
                         //}
-                        areas.Add(new AreaDto { areaId = area?.id, name = area?.name, standard = area?.standard, standardName = area?.standardName, setting = setting, access = access ,shortCode=area.shortCode});
+                        areas.Add(new AreaDto { sas= blobArea.sas,url =blobArea.uri ,areaId = area?.id, name = area?.name, standard = area?.standard, standardName = area?.standardName, setting = setting, access = access ,shortCode=area.shortCode});
                     }
                 }
                 //处理导入时,在学校名单有该教师加入的,但是基本信息没有的 
@@ -351,6 +354,8 @@ namespace TEAMModelOS.Services
         public AreaSetting setting { get; set; }
         public int access { get; set; } = 0;
         public string shortCode { get; set; }
+        public string sas { get; set; }
+        public string url { get; set; }
     }
     public record TeacherInfo
     {

+ 4 - 1
TEAMModelOS/Controllers/Client/AClassONEController.cs

@@ -251,7 +251,10 @@ namespace TEAMModelOS.Controllers
                     //{
                     //    setting.accessConfig = null;
                     //}
-                    areas.Add(new AreaDto { shortCode=area?.shortCode, areaId = area?.id, name = area?.name, standard = area?.standard, standardName = area?.standardName, setting = setting, access = access });
+                    var containerArea = _azureStorage.GetBlobContainerClient(area?.id);
+                    await containerArea.CreateIfNotExistsAsync(PublicAccessType.None); //嘗試創建Teacher私有容器,如存在則不做任何事,保障容器一定存在
+                    var blobArea = _azureStorage.GetBlobContainerSAS(area?.id, blobContainerSasPermissions: BlobContainerSasPermissions.All);
+                    areas.Add(new AreaDto {sas= blobArea.sas, url= blobArea.uri, shortCode=area?.shortCode, areaId = area?.id, name = area?.name, standard = area?.standard, standardName = area?.standardName, setting = setting, access = access });
                 }
             }
             if (school_code.Equals(teacher.defaultSchool) && teacher.schools.IsNotEmpty() && !teacher.schools.Select(x => x.schoolId).Contains(school_code))

+ 35 - 8
TEAMModelOS/Controllers/Common/ActivityController.cs

@@ -241,7 +241,7 @@ namespace TEAMModelOS.Controllers
                 {
                     case bool when $"{grant_type}".Equals("create", StringComparison.OrdinalIgnoreCase):
                         {
-                            if (!request.TryGetProperty("Activity", out JsonElement _activity)) return Ok(new { error = ResponseCode._400ParamsError, msg = "活动信息参数错误" });
+                            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";
@@ -254,7 +254,7 @@ namespace TEAMModelOS.Controllers
                             //醍摩豆智慧学区
                             if (!activity.owner.Equals("02944f32-f534-3397-ea56-e6f1fc6c3714", StringComparison.OrdinalIgnoreCase)  && activity.scope.Equals("public", StringComparison.OrdinalIgnoreCase))
                             {
-                                return Ok(new { error = ResponseCode._400ParamsError, msg = "公开的活动只能由醍摩豆智慧学区发布!" });
+                                return Ok(new { code = 2, msg = "公开的活动只能由醍摩豆智慧学区发布!" });
                             }
                             {
                                 string websiteId = activity.owner;
@@ -290,6 +290,7 @@ namespace TEAMModelOS.Controllers
                                     }
                                 }
                             }
+                            Contest contest = null;
                             ValidResult validResult = activity.Valid();
                             if (validResult.isVaild)
                             {
@@ -304,9 +305,9 @@ namespace TEAMModelOS.Controllers
                                             {
                                                 if (!request.TryGetProperty("Contest", out JsonElement _contest))
                                                 {
-                                                    return Ok(new { error = ResponseCode._400ParamsError, msg = "赛课信息参数错误" });
+                                                    return Ok(new { code =3, msg = "赛课信息参数错误" });
                                                 }
-                                                Contest contest = _activity.ToObject<Contest>();
+                                                contest = _contest.ToObject<Contest>();
                                                 if (contest!=null) {
                                                     contest.id=activity.id;
                                                     contest.code="Contest";
@@ -318,10 +319,10 @@ namespace TEAMModelOS.Controllers
                                                         if (contest.modules.Contains("review")) {
                                                             if (!request.TryGetProperty("reviewConfig", out JsonElement _reviewConfig))
                                                             {
-                                                                return Ok(new { error = ResponseCode._400ParamsError, msg = "评审未配置" });
+                                                                return Ok(new { code = 4, msg = "评审未配置" });
                                                             }
                                                             if (contest.review== null) {
-                                                                return Ok(new { error = ResponseCode._400ParamsError, msg = "评审未配置" });
+                                                                return Ok(new { code = 4, msg = "评审未配置" });
                                                             }
                                                             ReviewRuleTree ruleTree = _reviewConfig.ToObject<ReviewRuleTree>();
                                                             var reviewRule = await ActivityService.UpsertReviewRule(ruleTree, activity, _azureCosmos);
@@ -350,6 +351,7 @@ namespace TEAMModelOS.Controllers
                                 }
                                 //保存活动基础信息
                                 await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Common).UpsertItemAsync(activity, new PartitionKey(activity.code));
+                                return Ok(new { activity, contest ,code=200});
                             }
                             else
                             {
@@ -388,11 +390,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  ) ";
+                                    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}' ";
+                                    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));
@@ -561,6 +563,31 @@ namespace TEAMModelOS.Controllers
                             }
                             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 });
+                        }
                 }
             } catch (Exception ex)
             {

+ 4 - 1
TEAMModelOS/Controllers/Teacher/InitController.cs

@@ -684,7 +684,10 @@ namespace TEAMModelOS.Controllers
                         //{
                         //    setting.accessConfig = null;
                         //}
-                        areas.Add(new AreaDto {shortCode=area?.shortCode, areaId = area?.id, name = area?.name, standard = area?.standard, standardName = area?.standardName, setting = setting, access = access });
+                        var containerArea= _azureStorage.GetBlobContainerClient(area?.id);
+                        await containerArea.CreateIfNotExistsAsync(PublicAccessType.None); //嘗試創建Teacher私有容器,如存在則不做任何事,保障容器一定存在
+                        var blobArea = _azureStorage.GetBlobContainerSAS(area?.id, blobContainerSasPermissions: BlobContainerSasPermissions.All);
+                        areas.Add(new AreaDto {sas=blobArea.sas, url=blobArea.uri,  shortCode=area?.shortCode, areaId = area?.id, name = area?.name, standard = area?.standard, standardName = area?.standardName, setting = setting, access = access });
                     }
                 }
                 if (school_code.Equals(teacher.defaultSchool) && teacher.schools.IsNotEmpty() && !teacher.schools.Select(x => x.schoolId).Contains(school_code))