CrazyIter_Bin 2 년 전
부모
커밋
95cc638fde

+ 2 - 2
TEAMModelBI/Controllers/BINormal/BusinessConfigController.cs

@@ -65,7 +65,7 @@ namespace TEAMModelBI.Controllers.BINormal
                 bizConfig.code = "BizConfig";
                 bizConfig.pk = "BizConfig";
                 bizConfig.createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
-                var auth_token = JwtAuthExtension.CreateBusinessApiToken(_option.Location, bizConfig.id, _option.JwtSecretKey, "business");
+                var auth_token = JwtAuthExtension.CreateBusinessApiToken(_option.Location, bizConfig.id, _option.JwtSecretKey);
                 bizConfig.jti = auth_token.jti;
                 bizConfig.token = auth_token.jwt;
 
@@ -188,7 +188,7 @@ namespace TEAMModelBI.Controllers.BINormal
             {
                 using var json = await JsonDocument.ParseAsync(response.ContentStream);
                 bizConfig = json.ToObject<BizConfig>();
-                var auth_token = JwtAuthExtension.CreateBusinessApiToken(_option.Location, bizConfig.id, _option.JwtSecretKey, "business");
+                var auth_token = JwtAuthExtension.CreateBusinessApiToken(_option.Location, bizConfig.id, _option.JwtSecretKey);
                 bizConfig.jti = auth_token.jti;
                 bizConfig.token = auth_token.jwt;
 

+ 3 - 3
TEAMModelBI/Controllers/BITable/CompanyController.cs

@@ -133,7 +133,7 @@ namespace TEAMModelBI.Controllers.BITable
                     company.RowKey = Guid.NewGuid().ToString();
                     company.PartitionKey = "BusinessConfig";
                     company.createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
-                    var auth_token = JwtAuthExtension.CreateBusinessApiToken(_option.Location, company.RowKey, _option.JwtSecretKey, "business");
+                    var auth_token = JwtAuthExtension.CreateBusinessApiToken(_option.Location, company.RowKey, _option.JwtSecretKey);
                     company.jti = auth_token.jti;
                     company.token = auth_token.jwt;
                     company = await table.SaveOrUpdate<BusinessConfig>(company);
@@ -171,7 +171,7 @@ namespace TEAMModelBI.Controllers.BITable
                         company.RowKey = Guid.NewGuid().ToString();
                         company.PartitionKey = "BusinessConfig";
                          company.createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
-                        var auth_token = JwtAuthExtension.CreateBusinessApiToken(_option.Location, company.RowKey, _option.JwtSecretKey, "business");
+                        var auth_token = JwtAuthExtension.CreateBusinessApiToken(_option.Location, company.RowKey, _option.JwtSecretKey);
                         company.jti = auth_token.jti;
                         company.token = auth_token.jwt;
                         company = await table.SaveOrUpdate<BusinessConfig>(company);
@@ -377,7 +377,7 @@ namespace TEAMModelBI.Controllers.BITable
                 {
                     if ($"{resetType}".Equals("token"))
                     {
-                        var auth_token = JwtAuthExtension.CreateBusinessApiToken(_option.Location, busConfig.RowKey, _option.JwtSecretKey, "business");
+                        var auth_token = JwtAuthExtension.CreateBusinessApiToken(_option.Location, busConfig.RowKey, _option.JwtSecretKey);
                         busConfig.jti = auth_token.jti;
                         busConfig.token = auth_token.jwt;
                     }

+ 2 - 1
TEAMModelOS.FunctionV4/ServiceBus/ActiveTaskTopic.cs

@@ -1706,8 +1706,9 @@ namespace TEAMModelOS.FunctionV4.ServiceBus
                                             {
                                                 LessonRecord lessonRecordExpire = null;
                                                 //获取一条最新的 且没有被收藏,且没有被标记为过期的记录,且不是当前触发的id 。
+                                                //220712 讨论,将desc去掉,获取最旧的那一笔数据。删除最旧的
                                                 string sql = $"SELECT top 1 value(c)  FROM c  where  ( c.expire<=0 or IS_DEFINED(c.expire) = false  ) and  c.tmdid='{tmdid}' " +
-                                                    $"and  c.favorite<=0  and c.id<>'{lessonRecord.id}' order by c.startTime desc ";
+                                                    $"and  c.favorite<=0  and c.id<>'{lessonRecord.id}' and c.status<>404  order by c.startTime   ";
                                                 await foreach (var item in client.GetContainer(Constant.TEAMModelOS, Constant.Teacher).GetItemQueryIterator<LessonRecord>(
                                                     queryText: sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey($"{code}") }))
                                                 {

+ 5 - 5
TEAMModelOS.SDK/Extension/JwtAuthExtension.cs

@@ -56,9 +56,9 @@ namespace TEAMModelOS.SDK.Extension
         /// <param name="salt"></param>
         /// <param name="expire"></param>
         /// <returns></returns>
-        public static (string jwt , string jti) CreateBusinessApiToken(string location, string id, string salt  ,string scope)
+        public static (string jwt , string jti) CreateBusinessApiToken(string location, string id, string salt )
         {
-
+            string scope = "business";
             var keys = OpenApiJtwIssuer.OpenApiJtw签发者.GetDescriptionText().Split(',');
             string issuer = "";
             if (location.Equals("China-Dep"))
@@ -91,7 +91,7 @@ namespace TEAMModelOS.SDK.Extension
                 { JwtRegisteredClaimNames.Iss, issuer }, //發行者 iss: jwt签发者
                 { JwtRegisteredClaimNames.Sub, id }, // APPID sub: jwt所面向的用户
                 {JwtRegisteredClaimNames.Jti, jti},
-                { "scope",scope}
+                { "scope",scope}  
             };
 
             // 建立一組對稱式加密的金鑰,主要用於 JWT 簽章之用
@@ -115,9 +115,9 @@ namespace TEAMModelOS.SDK.Extension
         /// <param name="salt"></param>
         /// <param name="expire"></param>
         /// <returns></returns>
-        public static (string jwt, string jti) CreateSchoolApiToken(string location, string id, string salt, string scope, List<int> auth, string schoolID = "")
+        public static (string jwt, string jti) CreateSchoolApiToken(string location, string id, string salt,List<int> auth, string schoolID = "")
         {
-
+            string scope = "school";
             var keys = OpenApiJtwIssuer.OpenApiJtw签发者.GetDescriptionText().Split(',');
             string issuer = "";
             if (location.Equals("China-Dep"))

+ 29 - 4
TEAMModelOS/Controllers/Client/HiTeachController.cs

@@ -173,7 +173,6 @@ namespace TEAMModelOS.Controllers.Client
                 int tsize = 0; //學校分配給老師的總空間
                 double usize = 0; //學校或個人已使用空間
                 string timezone = string.Empty;
-
                 if (sp)
                 {
                     //取得學校資訊
@@ -216,7 +215,6 @@ namespace TEAMModelOS.Controllers.Client
                     messageBlob.ApplicationProperties.Add("name", "BlobRoot");
                     sbm.Add(messageBlob);
                 }
-
                 //取得學校或個人名單
                 (List<RMember> students, _) = await GroupListService.GetStutmdidListids(_coreAPIHttpService, db, _dingDing, new List<string>() { request.sid }, request.school);
                 //觸發IMEI更新消息
@@ -240,15 +238,42 @@ namespace TEAMModelOS.Controllers.Client
                     startTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()
                 };
                 await db.GetContainer(Constant.TEAMModelOS, request.sp.Equals("school") ? "School" : "Teacher").CreateItemAsync(lr, new PartitionKey(lr.code));
-
                 //觸發開課統計                
                 var messageChange = new ServiceBusMessage(lr.ToJsonString());
                 messageChange.ApplicationProperties.Add("name", "LessonRecordEvent");
                 sbm.Add(messageChange);
-
                 //批量發送消息
                 await _serviceBus.GetServiceBusClient().SendBatchMessageAsync(_configuration.GetValue<string>("Azure:ServiceBus:ActiveTask"), sbm);
+               
+                if (sp && usize>size)
+                {
+                    ////处理学校开课,空间不足时。检查是否有  当前教师tid,强制保存save<>1,没有标记未删除status<>404,没有被收藏favorite<=0 ,时间最旧的一条记录startTime
+                    LessonRecord lessonRecord = null;
+                    string sql = $"SELECT top 1 value(c)  FROM c  where  ( c.expire<=0 or IS_DEFINED(c.expire) = false  ) and  c.tmdid='{tid}' and c.save<>1 and c.status<>404   and  c.favorite<=0  order by c.startTime   ";
+                    await foreach (var item in db.GetContainer(Constant.TEAMModelOS, Constant.School).GetItemQueryIterator<LessonRecord>(
+                                                        queryText: sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey($"LessonRecord-{request.school}") }))
+                    {
+                        lessonRecord = item;
+                        break;
+                    }
 
+                    if (lessonRecord != null)
+                    {
+                        lessonRecord.status = 404;
+                        await db.GetContainer(Constant.TEAMModelOS, Constant.School).ReplaceItemAsync(lessonRecord, lessonRecord.id, new PartitionKey(lessonRecord.code));
+                        var ActiveTask = _configuration.GetValue<string>("Azure:ServiceBus:ActiveTask");
+                        var messageChangeEvent = new ServiceBusMessage(request.ToJsonString());
+                        messageChangeEvent.ApplicationProperties.Add("name", "LessonRecordEvent");
+                        await _serviceBus.GetServiceBusClient().SendMessageAsync(ActiveTask, messageChangeEvent);
+                        //保证客户端可以正常开课。
+                        usize -= 1;
+                    }
+                    else
+                    {  //没有找到匹配当前 教师tid,save<>1,status<>404,没有被收藏,时间最旧的一条记录。无法手动再继续 usize -= 1;,则不能继续开课。
+                       
+                    }
+                }
+                 
                 return Ok(new { status = 200, lr.id, students, size, usize });
             }
             catch (Exception ex)

+ 27 - 0
TEAMModelOS/Controllers/Client/HiTeachccControlller.cs

@@ -235,7 +235,34 @@ namespace TEAMModelOS.Controllers.Client
 
                 //批量發送消息
                 var s = await _serviceBus.GetServiceBusClient().SendBatchMessageAsync(_configuration.GetValue<string>("Azure:ServiceBus:ActiveTask"), sbm);
+                if (sp && usize > size)
+                {
+                    ////处理学校开课,空间不足时。检查是否有  当前教师tid,强制保存save<>1,没有标记未删除status<>404,没有被收藏favorite<=0 ,时间最旧的一条记录startTime
+                    LessonRecord lessonRecord = null;
+                    string sql = $"SELECT top 1 value(c)  FROM c  where  ( c.expire<=0 or IS_DEFINED(c.expire) = false  ) and  c.tmdid='{tid}' and c.save<>1 and c.status<>404   and  c.favorite<=0  order by c.startTime   ";
+                    await foreach (var item in db.GetContainer(Constant.TEAMModelOS, Constant.School).GetItemQueryIterator<LessonRecord>(
+                                                        queryText: sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey($"LessonRecord-{request.school}") }))
+                    {
+                        lessonRecord = item;
+                        break;
+                    }
 
+                    if (lessonRecord != null)
+                    {
+                        lessonRecord.status = 404;
+                        await db.GetContainer(Constant.TEAMModelOS, Constant.School).ReplaceItemAsync(lessonRecord, lessonRecord.id, new PartitionKey(lessonRecord.code));
+                        var ActiveTask = _configuration.GetValue<string>("Azure:ServiceBus:ActiveTask");
+                        var messageChangeEvent = new ServiceBusMessage(request.ToJsonString());
+                        messageChangeEvent.ApplicationProperties.Add("name", "LessonRecordEvent");
+                        await _serviceBus.GetServiceBusClient().SendMessageAsync(ActiveTask, messageChangeEvent);
+                        //保证客户端可以正常开课。
+                        usize -= 1;
+                    }
+                    else
+                    {  //没有找到匹配当前 教师tid,save<>1,status<>404,没有被收藏,时间最旧的一条记录。无法手动再继续 usize -= 1;,则不能继续开课。
+
+                    }
+                }
                 return Ok(new { status = 200, lr.id, client, students, res, size, usize, uri, sas });
             }
             catch (Exception ex)

+ 1 - 1
TEAMModelOS/Controllers/OpenApi/Init/BizUsersController.cs

@@ -218,7 +218,7 @@ namespace TEAMModelOS.Controllers
                 {
                     using var json = await JsonDocument.ParseAsync(response.ContentStream);
                     bizConfig = json.ToObject<BizConfig>();
-                    var auth_token = JwtAuthExtension.CreateBusinessApiToken(_option.Location, bizConfig.id, _option.JwtSecretKey, "business");
+                    var auth_token = JwtAuthExtension.CreateBusinessApiToken(_option.Location, bizConfig.id, _option.JwtSecretKey );
                     bizConfig.jti = auth_token.jti;
                     bizConfig.token = auth_token.jwt;
 

+ 1 - 1
TEAMModelOS/Controllers/OpenApi/Init/OpenApiConfigController.cs

@@ -56,7 +56,7 @@ namespace TEAMModelOS.Controllers
                
                 BizConfig bizConfig = await _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", "Normal").ReadItemAsync<BizConfig>($"{_id}", new PartitionKey("BizConfig"));
                 string jwt = "";
-                var auth_token = JwtAuthExtension.CreateBusinessApiToken(_option.Location, bizConfig.id, _option.JwtSecretKey, "business");
+                var auth_token = JwtAuthExtension.CreateBusinessApiToken(_option.Location, bizConfig.id, _option.JwtSecretKey);
                 jwt = auth_token.jwt;
                 bizConfig.jti = auth_token.jti;
                 bizConfig.token = auth_token.jwt;

+ 1 - 1
TEAMModelOS/Controllers/School/SchoolTeacherController.cs

@@ -245,7 +245,7 @@ namespace TEAMModelOS.Controllers
                             }
                             if (!string.IsNullOrWhiteSpace(t.id))
                             {
-                                var tch = teachers.Find(x => x.id.Equals(t.id));
+                                var tch = teachers.Find(x => !string.IsNullOrWhiteSpace(x.id) &&   x.id.Equals(t.id));
                                 if (tch == null)
                                 {
                                     tch = new ScTeacher

+ 1 - 1
TEAMModelOS/Controllers/System/OpenApiController.cs

@@ -192,7 +192,7 @@ namespace TEAMModelOS.Controllers
                     var info = json.ToObject<OpenApp>();
                     //创建Token
                     //域名  应用的id, jwtkey  学校编码
-                    var auth_token = JwtAuthExtension.CreateSchoolApiToken(_option.Location, info.id, _option.JwtSecretKey,info.name, info.auths, info.school);
+                    var auth_token = JwtAuthExtension.CreateSchoolApiToken(_option.Location, info.id, _option.JwtSecretKey, info.auths, info.school);
                     info.token = auth_token.jwt;
                     info.jti = auth_token.jti;
                     info = await client.GetContainer(Constant.TEAMModelOS, "School").ReplaceItemAsync(info, info.id, new PartitionKey($"{info.code}"));