CrazyIter_Bin 1 year ago
parent
commit
00407b83c8

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

@@ -670,7 +670,6 @@ namespace TEAMModelOS.SDK.Models
         /// 表单填报信息
         /// </summary>
         public List<EnrollInfo> enrollInfos { get; set; } = new List<EnrollInfo>();
-
     }
     public class EnrollUpload 
     {

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

@@ -17,7 +17,45 @@ namespace TEAMModelOS.SDK
 {
     public static class ActivityService
     {
-
+        /// <summary>
+        /// 生成组队口令
+        /// </summary>
+        /// <param name="client"></param>
+        /// <param name="_dingDing"></param>
+        /// <param name="_option"></param>
+        /// <param name="_activityId"></param>
+        /// <returns></returns>
+        /// <exception cref="Exception"></exception>
+        public static async Task<string> GenCipher(CosmosClient client, DingDing _dingDing, TEAMModelOS.Models.Option _option, string _activityId)
+        {
+            string _num09 = "123456789";
+            string no = $"{Utils.CreatSaltString(7, _num09)}";
+            for (int i = 0; i < 10; i++)
+            {
+                List<SheetConfig> sheets = new List<SheetConfig>();
+                bool hasCurrFrom = false;
+                string cipherSQL = $"select value  c.id from c where c.contest!=null  and c.activityId='{_activityId}' and c.contest.type=1 and  c.contest.cipher='{no}' ";
+                var cipherResult = await client.GetContainer(Constant.TEAMModelOS, Constant.Teacher).GetList<string>(cipherSQL, $"ActivityEnroll-{_activityId}");
+                if (cipherResult.list.IsNotEmpty()  && cipherResult.list.Count>0) {
+                    hasCurrFrom = true;
+                }
+                if (hasCurrFrom)
+                {
+                    if (i == 9)
+                    {
+                        string msg = $"{_option.Location},ActivityService/GenCipher\n 组队口令生成异常,重复生成次数超过10次";
+                        await _dingDing.SendBotMsg($"OS,{_option.Location},{msg}", GroupNames.醍摩豆服務運維群組);
+                        throw new Exception(msg);
+                    }
+                    else
+                    {
+                        no = $"{Utils.CreatSaltString(7, _num09)}";
+                    }
+                }
+                else { break; }
+            }
+            return no;
+        }
         public  static async Task<List<TeacherActivityDto>> TeacherActivityList(AzureCosmosFactory _azureCosmos,AzureStorageFactory _azureStorage,  JsonElement request, string tmdid)
         {
             List<TeacherActivityDto> activities = new List<TeacherActivityDto>();

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

@@ -1634,16 +1634,102 @@ namespace TEAMModelOS.Controllers
                 Activity activity= JsonDocument.Parse(response.Content).RootElement.ToObject<Activity>();
                 if (activity.publish==1) {
                     switch (true)
-                    { 
+                    {
+                        case bool when $"{grant_type}".Equals("cancel-enroll", StringComparison.OrdinalIgnoreCase):
+                            {
+                                ActivityEnroll enroll = null;
+                                Azure.Response responseActivityEnroll = await client.GetContainer(Constant.TEAMModelOS, Constant.Teacher).ReadItemStreamAsync(tmdid, new PartitionKey($"ActivityEnroll-{_activityId.GetString()}"));
+                                if (responseActivityEnroll.Status==200)
+                                {
+                                    enroll= JsonDocument.Parse(responseActivityEnroll.Content).RootElement.ToObject<ActivityEnroll>();
+                                    if (enroll.contest!=null  && enroll.contest.leader==1) {
+                                        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)
+                                    {
+                                        return Ok(new { code = 201, });
+                                    }
+                                    else {
+                                        return Ok(new { code = 2,msg="取消失败!" });
+                                    }
+                                }
+                                return Ok(new { code = 1, msg = "暂无报名数据!", });
+                               
+
+                            }
+                        case bool when $"{grant_type}".Equals("get-enroll", StringComparison.OrdinalIgnoreCase):
+                            {
+                                ActivityEnroll enroll = null;
+                                Azure.Response responseActivityEnroll = await client.GetContainer(Constant.TEAMModelOS, Constant.Teacher).ReadItemStreamAsync(tmdid, new PartitionKey($"ActivityEnroll-{_activityId.GetString()}"));
+                                if (responseActivityEnroll.Status==200)
+                                {
+                                    enroll= JsonDocument.Parse(responseActivityEnroll.Content).RootElement.ToObject<ActivityEnroll>();
+                                    return Ok(new { code = 200, enroll });
+                                }
+                                return Ok(new { code = 1, msg= "暂无报名数据!", });
+
+                            }
                         //生成组队口令
                         case bool when $"{grant_type}".Equals("gen-cipher", StringComparison.OrdinalIgnoreCase):
                             {
-                                break;
+                                Azure.Response responseContest = await client.GetContainer(Constant.TEAMModelOS, Constant.Common).ReadItemStreamAsync(_activityId.GetString(), new PartitionKey("Contest"));
+                                if (responseContest.Status==200   && activity.modules.Contains("Contest"))
+                                {
+                                    Contest contest = JsonDocument.Parse(responseContest.Content).RootElement.ToObject<Contest>();
+                                    if (contest.modules.Contains("sign") && contest.sign!=null  && contest.sign.type==1)
+                                    {
+                                        string cipher = await ActivityService.GenCipher(client, _dingDing, _option, _activityId.GetString());
+                                        return Ok(new { code = 200, cipher });
+                                    }
+                                }
+                                return Ok(new { code = 1, msg = "组队口令生成失败!" }); 
                             }
                         //根据口令获取团队和队员信息
-                        case bool when $"{grant_type}".Equals("get-team-by-cipher", StringComparison.OrdinalIgnoreCase):
-                            { 
-                                break; 
+                        case bool when $"{grant_type}".Equals("search-team-by-cipher", StringComparison.OrdinalIgnoreCase):
+                            {
+                                if (!request.TryGetProperty("cipher", out JsonElement _cipher)) return BadRequest();
+                              
+                                Azure.Response responseContest = await client.GetContainer(Constant.TEAMModelOS, Constant.Common).ReadItemStreamAsync(_activityId.GetString(), new PartitionKey("Contest"));
+                                if (responseContest.Status==200   && activity.modules.Contains("Contest"))
+                                {
+                                    Contest contest = JsonDocument.Parse(responseContest.Content).RootElement.ToObject<Contest>();
+                                    if (contest.modules.Contains("sign") && contest.sign!=null  && contest.sign.type==1)
+                                    {
+                                        string cipherSQL = $"select value  c from c where c.contest!=null  and c.activityId='{_activityId}' and c.contest.type=1 and  c.contest.cipher='{_cipher}' ";
+                                        var cipherResult = await client.GetContainer(Constant.TEAMModelOS, Constant.Teacher).GetList<ActivityEnroll>(cipherSQL, $"ActivityEnroll-{_activityId}");
+                                        List<TeacherEnrollContestDto> teamMembers = new List<TeacherEnrollContestDto>();
+                                        teamMembers= cipherResult.list.Select(z => new TeacherEnrollContestDto
+                                        {
+                                            tmdid= z.id,
+                                            tmdPicture= z.tmdPicture,
+                                            tmdName= z.tmdName,
+                                            schoolName=z.schoolName,
+                                            schoolPicture= z.schoolPicture,
+                                            schoolId= z.schoolId,
+                                            cipher= z.contest.cipher,
+                                            enrollTime= z.contest.enrollTime,
+                                            leader= z.contest.leader,
+                                            teamName= z.contest.teamName,
+                                            type=z.contest.type
+                                        }).ToList();
+                                        return Ok(new { code=200, teamMembers = teamMembers.Select(z => new {
+                                            z.tmdid,
+                                            z.tmdPicture,
+                                            z.tmdName,
+                                            z.schoolName,
+                                            z.schoolPicture,
+                                            z.schoolId,
+                                            z.cipher,
+                                            z.enrollTime,
+                                            z.leader,
+                                            z.teamName,
+                                            z.type
+                                        })
+                                        });
+                                    }
+                                }
+                                return Ok(new { code = 1, msg = "未找到团队!" });
                             }
                         //教师报名参加
                         case bool when $"{grant_type}".Equals("sign-contest", StringComparison.OrdinalIgnoreCase):
@@ -1764,9 +1850,10 @@ namespace TEAMModelOS.Controllers
                                                 }
                                                 //检查团队组,检查口令
                                                 int checkTeam = -1;
+                                                int cipherChange = -1;
                                                 if (contest.sign.type==1)
                                                 {
-                                                    if (enrollData.type==1)
+                                                    if (enrollData.type==1  && !string.IsNullOrWhiteSpace(enrollData.cipher))
                                                     {
 
                                                         //检查组队口令
@@ -1786,11 +1873,22 @@ namespace TEAMModelOS.Controllers
                                                                 }
                                                                 else
                                                                 {
+                                                                    //队长更改信息。
+                                                                    //检查 更新信息的 组队口令是否有变化,如果有变化则队员的组队口令也跟着变化
+                                                                    if (!string.IsNullOrWhiteSpace(enroll?.contest?.cipher)  && !enroll.contest.cipher.Equals(enrollData.cipher)) {
+                                                                        cipherChange=1;
+                                                                    }
                                                                     checkTeam=1;
                                                                 }
                                                             }
                                                             else
-                                                            {
+                                                            { 
+                                                                //队长更改信息。
+                                                                //检查 更新信息的 组队口令是否有变化,如果有变化则队员的组队口令也跟着变化
+                                                                if (!string.IsNullOrWhiteSpace(enroll?.contest?.cipher)  &&    !enroll.contest.cipher.Equals(enrollData.cipher))
+                                                                {
+                                                                    cipherChange=1;
+                                                                }
                                                                 checkTeam=1;
                                                             }
                                                         }
@@ -1875,7 +1973,50 @@ namespace TEAMModelOS.Controllers
                                                         };
                                                     }
                                                     await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).UpsertItemAsync(enroll, new PartitionKey(enroll.code));
-                                                    return Ok(new { code = 200, enroll });
+                                                    List<TeacherEnrollContestDto> teamMembers = new List<TeacherEnrollContestDto>();
+                                                    //获取组队队员信息
+                                                    if (enrollData.type==1  && !string.IsNullOrWhiteSpace(enrollData.cipher)) {
+                                                        //获取队员报名信息
+                                                        string cipherSQL = $"select value  c  from c where c.contest!=null  and c.activityId='{_activityId.GetString()}' and c.contest.type=1 and  c.contest.cipher='{enrollData.cipher}' ";
+                                                        var cipherResult = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).GetList<ActivityEnroll>(cipherSQL, $"ActivityEnroll-{_activityId}");
+                                                        if (cipherChange==1)
+                                                        {
+                                                            //队长更新其他队员的组队口令
+                                                            cipherResult.list.RemoveAll(z => z.contest.leader==1);
+                                                            foreach (var z in cipherResult.list)
+                                                            {
+                                                                z.contest.cipher=enrollData.cipher;
+                                                                await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).UpsertItemAsync(z, new PartitionKey(z.code));
+                                                            }
+                                                        }
+                                                        teamMembers= cipherResult.list.Select(z => new TeacherEnrollContestDto
+                                                        {
+                                                            tmdid= z.id,
+                                                            tmdPicture= z.tmdPicture,
+                                                            tmdName= z.tmdName,
+                                                            schoolName=z.schoolName,
+                                                            schoolPicture= z.schoolPicture,
+                                                            schoolId= z.schoolId,
+                                                            cipher= z.contest.cipher,
+                                                            enrollTime= z.contest.enrollTime,
+                                                            leader= z.contest.leader,
+                                                            teamName= z.contest.teamName,
+                                                            type=z.contest.type
+                                                        }).ToList();
+                                                    }
+                                                    return Ok(new { code = 200, enroll , teamMembers= teamMembers.Select(z => new {
+                                                        z.tmdid  ,
+                                                        z.tmdPicture  ,
+                                                        z.tmdName ,
+                                                        z.schoolName,
+                                                        z.schoolPicture,
+                                                        z.schoolId,
+                                                        z.cipher ,
+                                                        z.enrollTime,
+                                                        z.leader,
+                                                        z.teamName,
+                                                        z.type
+                                                    })});
                                                 }
                                                 else
                                                 {