CrazyIter_Bin vor 1 Jahr
Ursprung
Commit
7f13aee5c5

+ 57 - 16
TEAMModelOS.SDK/Models/Cosmos/Common/Activity.cs

@@ -300,7 +300,7 @@ namespace TEAMModelOS.SDK.Models
         /// <summary>
         /// 一个作品需要被评审多少次,作品被分配给多少个专家评审
         /// </summary>
-        public int taskInt { get; set; }
+        public int taskCount { get; set; }
         /// <summary>
         /// 统分规则 
         /// only        分配一次的情况直接获取分数=1
@@ -660,9 +660,9 @@ namespace TEAMModelOS.SDK.Models
         public string cipher { get; set; }
 
         /// <summary>
-        /// 是否是团队队长0,队员,1 队长
+        ///-1个人组的默认值, 是否是团队队长0,队员,1 队长
         /// </summary>
-        public int leader { get; set; }
+        public int leader { get; set; } = -1;
         public string teamName { get; set; }
         /// <summary>
         /// 表单填报信息
@@ -691,7 +691,10 @@ namespace TEAMModelOS.SDK.Models
         [Required(ErrorMessage = "Required")]
         public int type { get; set; }
         public string cipher { get; set; }
-        public int leader { get; set; }
+        /// <summary>
+        /// -1个人组的默认值, 是否是团队队长0,队员,1 队长
+        /// </summary>
+        public int leader { get; set; } = -1;
         public string teamName { get; set; }
         /// <summary>
         /// 表单填报信息
@@ -735,31 +738,69 @@ namespace TEAMModelOS.SDK.Models
     /// <summary>
     /// 专家分配的任务
     /// </summary>
-    public class ActivityExpertTask:CosmosEntity
+    public class ActivityExpertTask : CosmosEntity
     {
-        //id  教师id,
+        //id  专家id ,
         //code  ActivityExpertTask-活动id
-
-      
+        /// <summary>
+        /// 专家在优课评选中的评审任务
+        /// </summary>
+        public List<ExpertContestTask>  contestTasks{ get; set; }
     }
     /// <summary>
     /// 专家在优课评选模块的任务分配
     /// </summary>
-    public class ExpertContestTask { 
-        public List<ContestExpert> experts { get; set; }
+    public class ExpertContestTask {
+        /// <summary>
+        /// 作品id
+        /// </summary>
+        public string uploadId { get; set; }
+        /// <summary>
+        /// 组队口令
+        /// </summary>
+        public string cipher { get; set; }
+        /// <summary>
+        /// 参赛类型 0个人,1 团队
+        /// </summary>
+        public string type { get; set; }
 
-    
-    }
-    public class ContestExpert {
+        /// <summary>
+        /// -1 个人组的默认值, 0 队员,1队长
+        /// </summary>
+        public int leader { get; set; } = -1;
+        /// <summary>
+        /// 队员醍摩豆id ,包含队长,id,name(填报信息的name,真实姓名),code ,nickname 醍摩豆名称
+        /// </summary>
+        public List<IdNameCode> members { get; set; }
+        /// <summary>
+        /// 如果是个人组,则是个人的tmdid, 如果是团队组,则是队长的tmdid
+        /// </summary>
         public string tmdid { get; set; }
-        public string name { get; set; }
-        public string picture { get; set; }
+        //public string name { get; set; }
+        //public string picture { get; set; }
+        //public string nickname { get; set; }
+        /// <summary>
+        /// 评分状态
+        /// </summary>
         public int status { get; set; } = -1;
         public double score { get; set; } = -1;
-    }
 
+    }
+    
     public class ExpertDto : Expert
     {
+        /// <summary>
+        /// 任务数量
+        /// </summary>
+        public int taskCount {  get; set; }
+        /// <summary>
+        /// 完成数量
+        /// </summary>
+        public int completeCount {  get; set; }
+        /// <summary>
+        /// 
+        /// </summary>
+        public int completeCount { get; set; }
 
     }
 

+ 19 - 4
TEAMModelOS/Controllers/Common/ActivityController.cs

@@ -1652,7 +1652,7 @@ namespace TEAMModelOS.Controllers
             Azure.Response response = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Common).ReadItemStreamAsync(_activityId.GetString(), new PartitionKey("Activity"));
             if (response.Status==200)
             {
-                Activity activity = JsonDocument.Parse(response.Content).RootElement.ToObject<Activity>();
+                ActivityDto activity = JsonDocument.Parse(response.Content).RootElement.ToObject<ActivityDto>();
                 if (activity.publish!=1  && activity.publish!=2)
                 {
                     return Ok(new { code = 1, msg = "活动未发布!" });
@@ -1684,6 +1684,8 @@ namespace TEAMModelOS.Controllers
                 }
                 Training training = null;
                 TEAMModelOS.SDK.Models.Research research = null;
+                var (blob_uri, blob_sas) = _azureStorage.GetBlobContainerSAS(activity.owner, BlobContainerSasPermissions.Read | BlobContainerSasPermissions.List);
+                activity.sas=blob_sas;
                 return Ok(new {code =200, activity,contest,reviewRule, training,  research});
             }
             else
@@ -1930,7 +1932,14 @@ namespace TEAMModelOS.Controllers
                                         enroll= JsonDocument.Parse(responseActivityEnroll.Content).RootElement.ToObject<ActivityEnroll>();
                                         if (enroll.contest!=null  && enroll.contest.leader==1)
                                         {
-                                            return Ok(new { code = 3, msg = "请移交队长后再退出参赛!" });
+                                            // 如果没有其他队员,则可以直接退出
+                                            //检查是否还有其他成员
+                                            string cipherSQL = $"select value  c.id  from c where c.contest!=null  and c.activityId='{_activityId.GetString()}' and c.contest.type=1 and  c.contest.cipher='{enroll.contest.cipher}' and c.id<>'{tmdid}' ";
+                                            var cipherResult = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).GetList<string>(cipherSQL, $"ActivityEnroll-{_activityId}");
+                                            if (cipherResult.list.Count>0)
+                                            {
+                                                return Ok(new { code = 3, msg = "队伍中还有其他参赛队员,请移交队长后或移除队员后再退出参赛!" });
+                                            }
                                         }
                                         Azure.Response responseActivityEnrollDel = await client.GetContainer(Constant.TEAMModelOS, Constant.Teacher).DeleteItemStreamAsync(enroll.id, new PartitionKey($"ActivityEnroll-{_activityId.GetString()}"));
                                         if (responseActivityEnrollDel.Status==201)
@@ -2166,7 +2175,7 @@ namespace TEAMModelOS.Controllers
                                                                 //队长
                                                                 if (cipherResult.list.IsNotEmpty())
                                                                 {
-                                                                    //组队口令已被其他团队使用
+                                                                    //组队口令已被其他团队使用,此处已顺便处理成员篡位的逻辑
                                                                     var otherTeam = cipherResult.list.FindAll(z => !z.id.Equals(tmdid));
                                                                     if (otherTeam.IsNotEmpty())
                                                                     {
@@ -2196,6 +2205,11 @@ namespace TEAMModelOS.Controllers
                                                             }
                                                             else
                                                             {
+                                                                //队长跑路
+                                                                if (enroll!=null  && enroll.contest!=null && enroll.contest.leader==1 && enrollData.leader==0) {
+                                                                    return Ok(new { code = 17, msg = "你是队长,不能变更身份!" });
+                                                                }
+
                                                                 //队员
                                                                 if (cipherResult.list.IsNotEmpty())
                                                                 {
@@ -2494,7 +2508,8 @@ namespace TEAMModelOS.Controllers
                                                             foreach (var z in cipherResult.list)
                                                             {
                                                                 z.upload=enroll.upload;
-                                                                z.upload.uploadId=Guid.NewGuid().ToString();
+                                                                //队长统一上传的作品不需要单独生成作品id.
+                                                                // z.upload.uploadId=Guid.NewGuid().ToString();
                                                                 await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).UpsertItemAsync(z, new PartitionKey(z.code));
                                                             }
                                                         }