Jelajahi Sumber

作业活动提交方式,。

CrazyIter_Bin 3 tahun lalu
induk
melakukan
a9262e49d8

+ 3 - 5
TEAMModelOS.SDK/Models/Cosmos/Common/Homework.cs

@@ -26,7 +26,7 @@ namespace TEAMModelOS.SDK.Models
         /// <summary>
         /// 学校编码或教室tmdid
         /// </summary>
-        [Required(ErrorMessage = "owner 必须设置")]
+      
         public string owner { get; set; }
       
         public string school { get; set; }
@@ -39,10 +39,8 @@ namespace TEAMModelOS.SDK.Models
         ///  作业内容
         /// </summary>
         public string description { get; set; }
-        /// <summary>
-        /// 创建者的id 
-        /// </summary>
-        [Required(ErrorMessage = "creatorId 必须设置")]
+       
+       
         public string creatorId { get; set; }
         // public int year { get; set; }
         /// <summary>

+ 202 - 179
TEAMModelOS/Controllers/Common/HomeworkController.cs

@@ -69,78 +69,21 @@ namespace TEAMModelOS.Controllers.Learn
         [AuthToken(Roles = "teacher,admin", Permissions = "schoolAc-upd")]
         public async Task<IActionResult> Upsert(Homework homework)
         {
-            var (userid, _, _, school) = HttpContext.GetAuthTokenInfo();
-            var client = _azureCosmos.GetCosmosClient();
-            homework.pk = "Homework";
-            long now = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
-            if (!homework.code.StartsWith("Homework-"))
-            {
-                homework.code = $"Homework-{homework.code}";
-            }
-            homework.creatorId = userid;
-            homework.createTime = now;
-            homework.ttl = -1;
-            if (string.IsNullOrEmpty(homework.id))
-            {
-                homework.id = Guid.NewGuid().ToString();
-                if (homework.startTime > now)
-                {
-                    homework.progress = "pending";
-                }
-                else
-                {
-                    homework.progress = "going";
-                }
-                var messageBlob = new ServiceBusMessage();
-                string blobcntr = null;
-                if (homework.scope.Equals("school"))
-                {
-                    blobcntr = homework.school;
-                    homework.size = await _azureStorage.GetBlobContainerClient(homework.school).GetBlobsSize($"homework/{homework.id}");
-                    messageBlob = new ServiceBusMessage(new { id = Guid.NewGuid().ToString(), progress = "insert", root = $"homework/{homework.id}", name = $"{homework.school}" }.ToJsonString());
-                }
-                else
+            try {
+                var (userid, _, _, school) = HttpContext.GetAuthTokenInfo();
+                var client = _azureCosmos.GetCosmosClient();
+                homework.pk = "Homework";
+                long now = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
+                if (!homework.code.StartsWith("Homework-"))
                 {
-                    blobcntr = homework.creatorId;
-                    homework.size = await _azureStorage.GetBlobContainerClient(homework.creatorId).GetBlobsSize($"homework/{homework.id}");
-                    messageBlob = new ServiceBusMessage(new { id = Guid.NewGuid().ToString(), progress = "insert", root = $"homework/{homework.id}", name = $"{homework.creatorId}" }.ToJsonString());
+                    homework.code = $"Homework-{homework.code}";
                 }
-                messageBlob.ApplicationProperties.Add("name", "BlobRoot");
-                var ActiveTask = _configuration.GetValue<string>("Azure:ServiceBus:ActiveTask");
-                await _serviceBus.GetServiceBusClient().SendMessageAsync(ActiveTask, messageBlob);
-                homework.recordUrl = $"/homework/{homework.id}/record.json";
-                var cods = new { records = new List<string>(), userids = new List<string>(), question = new List<QuestionRecord>() };
-                await _azureStorage.UploadFileByContainer(blobcntr, cods.ToJsonString(), "homework", $"{homework.id}/record.json");
-                homework = await client.GetContainer(Constant.TEAMModelOS, "Common").CreateItemAsync(homework, new PartitionKey($"{homework.code}"));
-            }
-            else
-            {
-                string blobcntr = null;
-                var response = await client.GetContainer(Constant.TEAMModelOS, "Common").ReadItemStreamAsync(homework.id, new PartitionKey($"{homework.code}"));
-                var messageBlob = new ServiceBusMessage();
-                if (homework.scope.Equals("school"))
-                {
-                    blobcntr = homework.school;
-                    homework.size = await _azureStorage.GetBlobContainerClient(homework.school).GetBlobsSize($"homework/{homework.id}");
-                    messageBlob = new ServiceBusMessage(new { id = Guid.NewGuid().ToString(), progress = "update", root = $"homework/{homework.id}", name = $"{homework.school}" }.ToJsonString());
-                }
-                else
-                {
-                    blobcntr = homework.creatorId;
-                    homework.size = await _azureStorage.GetBlobContainerClient(homework.creatorId).GetBlobsSize($"homework/{homework.id}");
-                    messageBlob = new ServiceBusMessage(new { id = Guid.NewGuid().ToString(), progress = "update", root = $"homework/{homework.id}", name = $"{homework.creatorId}" }.ToJsonString());
-                }
-                messageBlob.ApplicationProperties.Add("name", "BlobRoot");
-                var ActiveTask = _configuration.GetValue<string>("Azure:ServiceBus:ActiveTask");
-                await _serviceBus.GetServiceBusClient().SendMessageAsync(ActiveTask, messageBlob);
-                if (response.Status == 200)
+                homework.creatorId = userid;
+                homework.createTime = now;
+                homework.ttl = -1;
+                if (string.IsNullOrEmpty(homework.id))
                 {
-                    using var json = await JsonDocument.ParseAsync(response.ContentStream);
-                    var info = json.ToObject<Homework>();
-                    if (info.progress.Equals("going"))
-                    {
-                        return Ok(new { v = "活动正在进行中" });
-                    }
+                    homework.id = Guid.NewGuid().ToString();
                     if (homework.startTime > now)
                     {
                         homework.progress = "pending";
@@ -149,27 +92,92 @@ namespace TEAMModelOS.Controllers.Learn
                     {
                         homework.progress = "going";
                     }
-                    homework.progress = info.progress;
-                    homework.recordUrl = $"/homework/{homework.id}/record.json";
-                    homework = await client.GetContainer(Constant.TEAMModelOS, "Common").ReplaceItemAsync(homework, info.id, new PartitionKey($"{info.code}"));
-                }
-                else
-                {
-                    if (homework.startTime > now)
+                    var messageBlob = new ServiceBusMessage();
+                    string blobcntr = null;
+                    if (homework.scope.Equals("school"))
                     {
-                        homework.progress = "pending";
+                        blobcntr = homework.school;
+                        homework.size = await _azureStorage.GetBlobContainerClient(homework.school).GetBlobsSize($"homework/{homework.id}");
+                        messageBlob = new ServiceBusMessage(new { id = Guid.NewGuid().ToString(), progress = "insert", root = $"homework/{homework.id}", name = $"{homework.school}" }.ToJsonString());
                     }
                     else
                     {
-                        homework.progress = "going";
+                        blobcntr = homework.creatorId;
+                        homework.size = await _azureStorage.GetBlobContainerClient(homework.creatorId).GetBlobsSize($"homework/{homework.id}");
+                        messageBlob = new ServiceBusMessage(new { id = Guid.NewGuid().ToString(), progress = "insert", root = $"homework/{homework.id}", name = $"{homework.creatorId}" }.ToJsonString());
                     }
+                    messageBlob.ApplicationProperties.Add("name", "BlobRoot");
+                    var ActiveTask = _configuration.GetValue<string>("Azure:ServiceBus:ActiveTask");
+                    await _serviceBus.GetServiceBusClient().SendMessageAsync(ActiveTask, messageBlob);
                     homework.recordUrl = $"/homework/{homework.id}/record.json";
                     var cods = new { records = new List<string>(), userids = new List<string>(), question = new List<QuestionRecord>() };
                     await _azureStorage.UploadFileByContainer(blobcntr, cods.ToJsonString(), "homework", $"{homework.id}/record.json");
                     homework = await client.GetContainer(Constant.TEAMModelOS, "Common").CreateItemAsync(homework, new PartitionKey($"{homework.code}"));
                 }
+                else
+                {
+                    string blobcntr = null;
+                    var response = await client.GetContainer(Constant.TEAMModelOS, "Common").ReadItemStreamAsync(homework.id, new PartitionKey($"{homework.code}"));
+                    var messageBlob = new ServiceBusMessage();
+                    if (homework.scope.Equals("school"))
+                    {
+                        blobcntr = homework.school;
+                        homework.size = await _azureStorage.GetBlobContainerClient(homework.school).GetBlobsSize($"homework/{homework.id}");
+                        messageBlob = new ServiceBusMessage(new { id = Guid.NewGuid().ToString(), progress = "update", root = $"homework/{homework.id}", name = $"{homework.school}" }.ToJsonString());
+                    }
+                    else
+                    {
+                        blobcntr = homework.creatorId;
+                        homework.size = await _azureStorage.GetBlobContainerClient(homework.creatorId).GetBlobsSize($"homework/{homework.id}");
+                        messageBlob = new ServiceBusMessage(new { id = Guid.NewGuid().ToString(), progress = "update", root = $"homework/{homework.id}", name = $"{homework.creatorId}" }.ToJsonString());
+                    }
+                    messageBlob.ApplicationProperties.Add("name", "BlobRoot");
+                    var ActiveTask = _configuration.GetValue<string>("Azure:ServiceBus:ActiveTask");
+                    await _serviceBus.GetServiceBusClient().SendMessageAsync(ActiveTask, messageBlob);
+                    if (response.Status == 200)
+                    {
+                        using var json = await JsonDocument.ParseAsync(response.ContentStream);
+                        var info = json.ToObject<Homework>();
+                        if (info.progress.Equals("going"))
+                        {
+                            return Ok(new { v = "活动正在进行中" });
+                        }
+                        if (homework.startTime > now)
+                        {
+                            homework.progress = "pending";
+                        }
+                        else
+                        {
+                            homework.progress = "going";
+                        }
+                        homework.progress = info.progress;
+                        homework.recordUrl = $"/homework/{homework.id}/record.json";
+                        homework = await client.GetContainer(Constant.TEAMModelOS, "Common").ReplaceItemAsync(homework, info.id, new PartitionKey($"{info.code}"));
+                    }
+                    else
+                    {
+                        if (homework.startTime > now)
+                        {
+                            homework.progress = "pending";
+                        }
+                        else
+                        {
+                            homework.progress = "going";
+                        }
+                        homework.recordUrl = $"/homework/{homework.id}/record.json";
+                        var cods = new { records = new List<string>(), userids = new List<string>(), question = new List<QuestionRecord>() };
+                        await _azureStorage.UploadFileByContainer(blobcntr, cods.ToJsonString(), "homework", $"{homework.id}/record.json");
+                        homework = await client.GetContainer(Constant.TEAMModelOS, "Common").CreateItemAsync(homework, new PartitionKey($"{homework.code}"));
+                    }
+                }
+                return Ok(new { homework });
+            } catch (CosmosException ex) {
+                return Ok(new { error=ex.Status });
+            }
+            catch (Exception ex)
+            {
+                return Ok(new { error = 400 });
             }
-            return Ok(new { homework });
         }
 
 
@@ -190,88 +198,98 @@ namespace TEAMModelOS.Controllers.Learn
         [HttpPost("find")]
         [AuthToken(Roles = "teacher,admin,student", Permissions = "schoolAc-read,schoolAc-upd")]
         public async Task<IActionResult> Find(JsonElement request) {
-            var client = _azureCosmos.GetCosmosClient();
-            var (userid, _, _, school) = HttpContext.GetAuthTokenInfo();
-            //必须有学校或者教师编码
-            if (!request.TryGetProperty("code", out JsonElement code)) return BadRequest();
-            //开始时间,默认最近三十天
-            var stimestamp = DateTimeOffset.UtcNow.AddDays(-30).ToUnixTimeMilliseconds();
-            if (request.TryGetProperty("stime", out JsonElement stime))
+            try
             {
-                if (long.TryParse($"{stime}", out long data))
+                var client = _azureCosmos.GetCosmosClient();
+                var (userid, _, _, school) = HttpContext.GetAuthTokenInfo();
+                //必须有学校或者教师编码
+                if (!request.TryGetProperty("code", out JsonElement code)) return BadRequest();
+                //开始时间,默认最近三十天
+                var stimestamp = DateTimeOffset.UtcNow.AddDays(-30).ToUnixTimeMilliseconds();
+                if (request.TryGetProperty("stime", out JsonElement stime))
                 {
-                    stimestamp = data;
+                    if (long.TryParse($"{stime}", out long data))
+                    {
+                        stimestamp = data;
+                    };
                 };
-            };
-            //默认当前时间
-            var etimestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
-            if (request.TryGetProperty("etime", out JsonElement etime))
-            {
-                if (long.TryParse($"{etime}", out long data))
+                //默认当前时间
+                var etimestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
+                if (request.TryGetProperty("etime", out JsonElement etime))
                 {
-                    etimestamp = data;
-                };
-
-            };
-            var progresssql = "";
-            if (request.TryGetProperty("progress", out JsonElement progress))
-            {
+                    if (long.TryParse($"{etime}", out long data))
+                    {
+                        etimestamp = data;
+                    };
 
-                if (!progress.ValueKind.Equals(JsonValueKind.Undefined) && !progress.ValueKind.Equals(JsonValueKind.Null) && progress.ValueKind.Equals(JsonValueKind.String))
+                };
+                var progresssql = "";
+                if (request.TryGetProperty("progress", out JsonElement progress))
                 {
-                    progresssql = $" and c.progress='{progress}' ";
+
+                    if (!progress.ValueKind.Equals(JsonValueKind.Undefined) && !progress.ValueKind.Equals(JsonValueKind.Null) && progress.ValueKind.Equals(JsonValueKind.String))
+                    {
+                        progresssql = $" and c.progress='{progress}' ";
+                    }
                 }
-            }
-            string continuationToken = null;
-            //默认不指定返回大小
-            int? topcout = null;
-            if (request.TryGetProperty("count", out JsonElement jcount))
-            {
-                if (int.TryParse($"{jcount}", out int data))
+                string continuationToken = null;
+                //默认不指定返回大小
+                int? topcout = null;
+                if (request.TryGetProperty("count", out JsonElement jcount))
                 {
-                    topcout = data;
-                }
-            };
-            //是否需要进行分页查询,默认不分页
-            bool iscontinuation = false;
-            //如果指定了返回大小
-            if (request.TryGetProperty("continuationToken", out JsonElement continuation))
-            {
-                //指定了cancellationToken 表示需要进行分页
-                if (!continuation.ValueKind.Equals(JsonValueKind.Null) && !continuation.ValueKind.Equals(JsonValueKind.Undefined))
+                    if (int.TryParse($"{jcount}", out int data))
+                    {
+                        topcout = data;
+                    }
+                };
+                //是否需要进行分页查询,默认不分页
+                bool iscontinuation = false;
+                //如果指定了返回大小
+                if (request.TryGetProperty("continuationToken", out JsonElement continuation))
+                {
+                    //指定了cancellationToken 表示需要进行分页
+                    if (!continuation.ValueKind.Equals(JsonValueKind.Null) && !continuation.ValueKind.Equals(JsonValueKind.Undefined))
+                    {
+                        continuationToken = continuation.GetString();
+                        iscontinuation = true;
+                    }
+                };
+                List<Homework> homeworks = new List<Homework>();
+                var query = $"select c.owner, c.id,c.name,c.code,c.startTime,c.endTime,c.progress,c.classes,c.scope,c.school from c where  c.createTime >= {stimestamp} and c.createTime <= {etimestamp}  {progresssql } and c.ttl=-1 ";
+                if (string.IsNullOrEmpty(school))
                 {
-                    continuationToken = continuation.GetString();
-                    iscontinuation = true;
+                    query = $"{query} and c.scope='private' ";
                 }
-            };
-            List<Homework> homeworks = new List<Homework>();
-            var query = $"select c.owner, c.id,c.name,c.code,c.startTime,c.endTime,c.progress,c.classes,c.scope,c.school from c where  c.createTime >= {stimestamp} and c.createTime <= {etimestamp}  {progresssql } and c.ttl=-1 ";
-            if (string.IsNullOrEmpty(school))
-            {
-                query = $"{query} and c.scope='private' ";
-            }
-            await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Common").GetItemQueryIterator<Homework>(queryText: query,
-                requestOptions: new QueryRequestOptions() { MaxItemCount = topcout, PartitionKey = new PartitionKey($"Homework-{code}") }))
-            {
-                if (!string.IsNullOrEmpty(school))
+                await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Common").GetItemQueryIterator<Homework>(queryText: query,
+                    requestOptions: new QueryRequestOptions() { MaxItemCount = topcout, PartitionKey = new PartitionKey($"Homework-{code}") }))
                 {
-                    //只能查出相关学校的
-                    if (!item.scope.Equals("private") && !string.IsNullOrEmpty(item.school) && item.school.Equals(school))
+                    if (!string.IsNullOrEmpty(school))
                     {
-                        homeworks.Add(item);
+                        //只能查出相关学校的
+                        if (!item.scope.Equals("private") && !string.IsNullOrEmpty(item.school) && item.school.Equals(school))
+                        {
+                            homeworks.Add(item);
+                        }
+                        //和自己私人发布的 
+                        if (item.scope.Equals("private"))
+                        {
+                            homeworks.Add(item);
+                        }
                     }
-                    //和自己私人发布的 
-                    if (item.scope.Equals("private"))
+                    else
                     {
                         homeworks.Add(item);
                     }
                 }
-                else
-                {
-                    homeworks.Add(item);
-                }
+                return Ok(new { homeworks });
+            }
+            catch (CosmosException ex)
+            {
+                return Ok(new { error = ex.Status });
+            }
+            catch (Exception ex) {
+                return Ok(new { error = 400 });
             }
-            return Ok(new { homeworks });
         }
 
         ///<summary>
@@ -297,7 +315,7 @@ namespace TEAMModelOS.Controllers.Learn
             try
             {
 
-                work = await client.GetContainer(Constant.TEAMModelOS, "Common").ReadItemAsync<Homework>(id.GetString(), new PartitionKey($"{_code}"));
+                work = await client.GetContainer(Constant.TEAMModelOS, "Common").ReadItemAsync<Homework>(id.GetString(), new PartitionKey($"Homework-{_code}"));
                 return Ok(new { work, status = 200 });
             }
             catch (CosmosException ex)
@@ -321,44 +339,49 @@ namespace TEAMModelOS.Controllers.Learn
         [HttpPost("delete")]
         [AuthToken(Roles = "teacher,admin", Permissions = "schoolAc-upd")]
         public async Task<IActionResult> Delete(JsonElement request) {
-            var client = _azureCosmos.GetCosmosClient();
-            var (userid, _, _, school) = HttpContext.GetAuthTokenInfo();
-            if (!request.TryGetProperty("id", out JsonElement _id)) return BadRequest();
-            if (!request.TryGetProperty("code", out JsonElement __code)) return BadRequest();
-            Homework homeworkd = await client.GetContainer(Constant.TEAMModelOS, "Common").ReadItemAsync<Homework>(_id.GetString(), new PartitionKey($"{__code}"));
-            bool flag = false;
-            //必须是本人或者这个学校的管理者才能删除
-            if (homeworkd.creatorId == userid)
-            {
-                flag = true;
-            }
-            else
-            {
-                if (homeworkd.scope.Equals("school") && homeworkd.school.Equals(school))
+            try {
+                var client = _azureCosmos.GetCosmosClient();
+                var (userid, _, _, school) = HttpContext.GetAuthTokenInfo();
+                if (!request.TryGetProperty("id", out JsonElement _id)) return BadRequest();
+                if (!request.TryGetProperty("code", out JsonElement __code)) return BadRequest();
+                Homework homeworkd = await client.GetContainer(Constant.TEAMModelOS, "Common").ReadItemAsync<Homework>(_id.GetString(), new PartitionKey($"Homework-{__code}"));
+                bool flag = false;
+                //必须是本人或者这个学校的管理者才能删除
+                if (homeworkd.creatorId == userid)
                 {
                     flag = true;
                 }
-            }
-            if (flag)
-            {
-                //使用ttl删除,并处理相关事务逻辑
-                homeworkd.ttl = 1;
-                homeworkd.status = 404;
-                homeworkd = await client.GetContainer(Constant.TEAMModelOS, "Common").ReplaceItemAsync(homeworkd, homeworkd.id, new PartitionKey($"{homeworkd.code}"));
-
-                //删除blob 相关资料
-                await _azureStorage.GetBlobServiceClient().DeleteBlobs(_dingDing, $"{__code}".Replace("Homework-", ""), new List<string> { Path.Combine("homework", homeworkd.id) + "/" });
-                //通知删除信息
-                var messageBlob = new ServiceBusMessage(new { id = Guid.NewGuid().ToString(), progress = "delete", root = $"homework/{homeworkd.id}", name = $"{__code}" }.ToJsonString());
-                messageBlob.ApplicationProperties.Add("name", "BlobRoot");
-                var ActiveTask = _configuration.GetValue<string>("Azure:ServiceBus:ActiveTask");
-                await _serviceBus.GetServiceBusClient().SendMessageAsync(ActiveTask, messageBlob);
-                await _dingDing.SendBotMsg($"{_option.Location}-作业活动【{homeworkd.name}-{homeworkd.id}】被删除", GroupNames.成都开发測試群組);
-                return Ok(new { flag });
-            }
-            else
-            {
-                return Ok(new { flag });
+                else
+                {
+                    if (homeworkd.scope.Equals("school") && homeworkd.school.Equals(school))
+                    {
+                        flag = true;
+                    }
+                }
+                if (flag)
+                {
+                    //使用ttl删除,并处理相关事务逻辑
+                    homeworkd.ttl = 1;
+                    homeworkd.status = 404;
+                    homeworkd = await client.GetContainer(Constant.TEAMModelOS, "Common").ReplaceItemAsync(homeworkd, homeworkd.id, new PartitionKey($"{homeworkd.code}"));
+
+                    //删除blob 相关资料
+                    await _azureStorage.GetBlobServiceClient().DeleteBlobs(_dingDing, $"{__code}".Replace("Homework-", ""), new List<string> { Path.Combine("homework", homeworkd.id) + "/" });
+                    //通知删除信息
+                    var messageBlob = new ServiceBusMessage(new { id = Guid.NewGuid().ToString(), progress = "delete", root = $"homework/{homeworkd.id}", name = $"{__code}" }.ToJsonString());
+                    messageBlob.ApplicationProperties.Add("name", "BlobRoot");
+                    var ActiveTask = _configuration.GetValue<string>("Azure:ServiceBus:ActiveTask");
+                    await _serviceBus.GetServiceBusClient().SendMessageAsync(ActiveTask, messageBlob);
+                    await _dingDing.SendBotMsg($"{_option.Location}-作业活动【{homeworkd.name}-{homeworkd.id}】被删除", GroupNames.成都开发測試群組);
+                    return Ok(new { flag });
+                }
+                else
+                {
+                    return Ok(new { flag });
+                }
+
+            } catch (CosmosException ex) {
+                return Ok(new { flag=false,error=404 });
             }
         }
         /// <summary>