CrazyIter_Bin 4 years ago
parent
commit
c2b81c36b2

+ 13 - 37
TEAMModelOS.SDK/Models/Cosmos/School/Vote.cs

@@ -24,72 +24,48 @@ namespace TEAMModelOS.SDK.Models
         /// 投票名称
         /// </summary>
         public string name { get; set; }
-        public string school { get; set; }
         public string creatorId { get; set; }
-        public int year { get; set; }
         public string progress { get; set; }
         public List<OptionsVote> options { get; set; }
         public bool secret { get; set; }
-        public int selectMax { get; set; }
-        public int stuCount { get; set; }
-        public string scope { get; set; }
-        public List<string> targetClassIds { get; set; }
         /// <summary>
-        /// 发布模式 0 立即发布 1 定时
+        /// 投票周期/once一次,day天,week周,month月,年year等
         /// </summary>
-        public string publishModel { get; set; }
-
+        public string times { get; set; }
+        //周期内可投票数
+        public int voteNum { get; set; }
+        public string scope { get; set; }
+        public TeacherRange teacher { get; set; }
+        public TeacherRange student { get; set; }
         /// <summary>
         /// 开始时间
         /// </summary>
         public long startTime { get; set; }
         public long createTime { get; set; }
-
         /// <summary>
         /// 结束时间
         /// </summary>
         public long endTime { get; set; }
 
-
         /// <summary>
         /// 投票描述
         /// </summary>
         public string description { get; set; }
-
-
-/*        /// <summary>
-        /// 投票附件
-        /// </summary>
-        [ProtoMember(9)]
-        public List<ProcessRes> resource { get; set; }
-*/
-
         /// <summary>
-        /// 状态 (100:待发布 200:已发布 300:已结束)
+        /// (100:待发布 200:已发布 300:已结束)
         /// </summary>
         public int status { get; set; }
 
 
-/*        /// <summary>
-        /// 模式
-        /// </summary>
-        [ProtoMember(11)]
-        public List<string> other { get; set; }*/
-
-/*
-        public string url { get; set; }
-
-        /// <summary>
-        /// 选项
-        /// </summary>
-        [ProtoMember(12)]
-        public List<Option> option { get; set; }*/
-
-        //public long sequenceNumber { get; set; }
     }
     public class OptionsVote { 
         public string code { get; set; }
         public string value { get; set; }
         public string desc { get; set; }
     }
+    public class TeacherRange
+    {
+        public bool all { get; set; }
+        public string target { get; set; }
+    }
 }

+ 1 - 1
TEAMModelOS/Controllers/Common/ExamController.cs

@@ -234,7 +234,7 @@ namespace TEAMModelOS.Controllers
         public async Task<IActionResult> FindSummary(JsonElement requert)
         {
             try
-            {
+            { 
                 //ResponseBuilder builder = ResponseBuilder.custom();
                 //if (!requert.TryGetProperty("id_token", out JsonElement id_token)) return BadRequest();
                 if (!requert.TryGetProperty("id", out JsonElement id)) return BadRequest();

+ 101 - 128
TEAMModelOS/Controllers/Common/VoteController.cs

@@ -17,6 +17,8 @@ using TEAMModelOS.SDK.DI.AzureCosmos.Inner;
 using TEAMModelOS.SDK.Extension;
 using TEAMModelOS.SDK.Helper.Common.CollectionHelper;
 using TEAMModelOS.SDK.Helper.Common.StringHelper;
+using TEAMModelOS.Models;
+using Microsoft.Extensions.Options;
 
 namespace TEAMModelOS.Controllers.Learn
 {
@@ -30,15 +32,19 @@ namespace TEAMModelOS.Controllers.Learn
     [ApiController]
     public class VoteController : ControllerBase
     {
+        private readonly AzureCosmosFactory _azureCosmos;
         private readonly SnowflakeId _snowflakeId;
-        private readonly AzureCosmosFactory _azureCosmos;       
         private readonly AzureServiceBusFactory _serviceBus;
+        private readonly DingDing _dingDing;
+        private readonly Option _option;
 
-        public VoteController(AzureCosmosFactory azureCosmos, AzureServiceBusFactory serviceBus, SnowflakeId snowflakeId)
+        public VoteController(AzureCosmosFactory azureCosmos, AzureServiceBusFactory serviceBus, SnowflakeId snowflakeId, DingDing dingDing, IOptionsSnapshot<Option> option)
         {
-            _snowflakeId = snowflakeId;
             _azureCosmos = azureCosmos;
             _serviceBus = serviceBus;
+            _snowflakeId = snowflakeId;
+            _dingDing = dingDing;
+            _option = option?.Value;
         }
 
 
@@ -48,153 +54,120 @@ namespace TEAMModelOS.Controllers.Learn
         /// <param name="request"></param>
         /// <returns></returns>
         [ProducesDefaultResponseType]
-        [HttpPost("upsert")]
-        public async Task<IActionResult> Upsert(VoteDto request)
+        [HttpPost("save")]
+        public async Task<IActionResult> Save(Vote request)
         {
-            /*ResponseBuilder builder = ResponseBuilder.custom();
-            //新增
-            if (string.IsNullOrEmpty(request.vote.id))
-            {
-                request.vote.id = _snowflakeId.NextId()+"";
-                request.vote.status = 100;
-                request.vote.code = typeof(Vote).Name + "-" + request.vote.code;
-            }
-            if (request.vote.publishModel.Equals("0"))
-            {
-                request.vote.startTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
-                request.vote.status = 200;
-                
-            } else if (request.vote.publishModel.Equals("1")) {
-
-                string msgId = _snowflakeId.NextId() + "";
-                long SequenceNumber = await _serviceBus.GetServiceBusClient().SendLeamMessage<Vote>(Constants.TopicName, request.vote.id, request.vote.code, request.vote.startTime, 200, msgId);
-                request.vote.sequenceNumber = SequenceNumber;
-            }*/
-
-
-            //新增ote
-            //string code = request.vote.code;
-            var client = _azureCosmos.GetCosmosClient();
-            Vote vote = new Vote();            
-            request.vote.school = request.vote.code;
-            request.vote.code = request.vote.pk+ "-" + request.vote.code;
-            request.vote.createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
-            /*if (request.vote.publishModel.Equals("0"))
-            {
-                //request.vote.startTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
-                request.vote.progress = "going";
-            }
-            else if (request.vote.publishModel.Equals("1"))
-            {
-
-                string msgId = _snowflakeId.NextId() + "";
-                long SequenceNumber = await _serviceBus.GetServiceBusClient().SendLeamMessage<Survey>(Constants.TopicName, request.vote.id, request.vote.code, request.vote.startTime, "going", msgId);
-                request.vote.sequenceNumber = SequenceNumber;
+            try {
+                //新增Vote
+                var client = _azureCosmos.GetCosmosClient();
+                request.code = request.pk + "-" + request.code;
+                request.createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
 
-            }*/
-            if (string.IsNullOrEmpty(request.vote.id))
-            {
-                request.vote.id = Guid.NewGuid().ToString();
-                //request.survey.status = 100;
-                request.vote.progress = "pending";
-               /* long SequenceNumber = await _serviceBus.GetServiceBusClient().SendLeamMessage<Vote>(Constants.TopicName, request.vote.id, request.vote.code, request.vote.startTime);
-                request.vote.sequenceNumber = SequenceNumber;*/
-                vote = await client.GetContainer("TEAMModelOS", "Common").CreateItemAsync(request.vote, new PartitionKey($"{request.vote.code}"));
-                /*if (request.vote.scope.Equals("school"))
+                if (string.IsNullOrEmpty(request.id))
                 {
-                    vote = await client.GetContainer("TEAMModelOS", "School").CreateItemAsync(request.vote, new PartitionKey($"Vote-{code}"));
+                    request.id = Guid.NewGuid().ToString();
+                    request.progress = "pending";
+                    request = await client.GetContainer("TEAMModelOS", "Common").CreateItemAsync(request, new PartitionKey($"{request.code}"));
                 }
                 else
                 {
-                    vote = await client.GetContainer("TEAMModelOS", "Teacher").CreateItemAsync(request.vote, new PartitionKey($"Vote-{code}"));
-                }*/               
+                    Vote info = await client.GetContainer("TEAMModelOS", "Common").ReadItemAsync<Vote>(request.id, new PartitionKey($"{request.code}"));
+                    if (info.progress.Equals("going"))
+                    {
+                        return Ok(new { v = "活动正在进行中" });
+                    }
+                    request.progress = info.progress;
+                    request = await client.GetContainer("TEAMModelOS", "Common").ReplaceItemAsync(request, info.id, new PartitionKey($"{info.code}"));
+                }
+                return Ok(new { request });
+            } catch (Exception e) {
+                await _dingDing.SendBotMsg($"OS,{_option.Location},common/vote/save()\n{e.Message}", GroupNames.醍摩豆服務運維群組);
+                return BadRequest(e.StackTrace);
             }
-            else
-            {
-                Vote info = await client.GetContainer("TEAMModelOS", "Common").ReadItemAsync<Vote>(request.vote.id, new PartitionKey($"{request.vote.code}"));
-                if (info.progress.Equals("going"))
+        }
+        /// <summary>
+        /// 查询投票活动,用于列表,编辑,查看
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        [ProducesDefaultResponseType]
+        [HttpPost("find")]
+        public async Task<IActionResult> Find(JsonElement requert) {
+            try {
+                if (!requert.TryGetProperty("code", out JsonElement code)) return BadRequest();
+                List<object> votes = new List<object>();
+                var client = _azureCosmos.GetCosmosClient();
+                var query = $"select c.id,c.name,c.code,c.startTime,c.progress, from c ";
+                await foreach (var item in client.GetContainer("TEAMModelOS", "Common").GetItemQueryStreamIterator(queryText: query, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Vote-{code}") }))
                 {
-                    return Ok(new { v = "活动正在进行中" });
+                    using var json = await JsonDocument.ParseAsync(item.ContentStream);
+                    if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
+                    {
+                        foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
+                        {
+                            votes.Add(obj);
+                        }
+                    }
+                }
+                return Ok(votes);
+            } catch (Exception ex) {
+                await _dingDing.SendBotMsg($"OS,{_option.Location},common/vote/find()\n{ex.Message}", GroupNames.醍摩豆服務運維群組);
+                return BadRequest(ex.StackTrace);
+            }
+        }
+
+        /// 查询投票活动,用于列表,编辑,查看
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        [ProducesDefaultResponseType]
+        [HttpPost("find-id")]
+        public async Task<IActionResult> FindById(JsonElement requert) {
+            try {
+                var client = _azureCosmos.GetCosmosClient();
+                if (!requert.TryGetProperty("id", out JsonElement id)) return BadRequest();
+                if (!requert.TryGetProperty("code", out JsonElement code)) return BadRequest();
+                Vote vote = null;
+                await foreach (var item in client.GetContainer("TEAMModelOS", "Common").GetItemQueryIterator<Vote>(queryText: $"select value(c) from c where c.id = '{id}'", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"{code}") }))
+                {
+                    vote = item;
+                    break;
                 }
-                //request.vote.code = info.code;
-                request.vote.progress = info.progress;
-               /* await _serviceBus.GetServiceBusClient().cancelMessage(Constants.TopicName,info.sequenceNumber);
-                long SequenceNumber = await _serviceBus.GetServiceBusClient().SendLeamMessage<Vote>(Constants.TopicName, request.vote.id, request.vote.code, request.vote.startTime);
-                request.vote.sequenceNumber = SequenceNumber;*/
-                vote = await client.GetContainer("TEAMModelOS", "Common").ReplaceItemAsync(request.vote, info.id, new PartitionKey($"{info.code}"));
-                /*if (request.vote.scope.Equals("school"))
+                if (vote != null)
                 {
-                    vote = await client.GetContainer("TEAMModelOS", "School").ReplaceItemAsync(request.vote, request.vote.id, new PartitionKey($"{request.vote.code}"));
+                    return Ok(vote);
                 }
                 else
                 {
-                    vote = await client.GetContainer("TEAMModelOS", "Teacher").ReplaceItemAsync(request.vote, request.vote.id, new PartitionKey($"{request.vote.code}"));
-                }*/
+                    return BadRequest("id,code不存在!");
+                }
+            } catch (Exception ex) {
+                await _dingDing.SendBotMsg($"OS,{_option.Location},common/vote/find-id()\n{ex.Message}", GroupNames.醍摩豆服務運維群組);
+                return BadRequest(ex.StackTrace);
             }
-            //Vote homeWork = await _azureCosmos.SaveOrUpdate<Vote>(request.vote);
-
-            //设定结束时间
-            //_timerWorkService.TimerWork<Vote>(request.vote.endTime, 300, new Dictionary<string, object> { { "id", request.vote.id } });
-            //设定结束时间
-            //await _serviceBus.GetServiceBusClient().SendLeamMessage<Vote>(Constants.TopicName, request.vote.id, request.vote.code, request.vote.endTime);
-            //清除作业
-          /*  if (!request.reset)
-            {
-                //根据作业发布对象查找到每一个具体学生生成关联关系表 HomeWorkStudent
-
-                List<VoteRecord> voteRecords = await _azureCosmos.FindByDict<VoteRecord>(new Dictionary<string, object> { { "id", request.vote.id } });
+            
+        }
+        /// <summary>
+        /// 查询投票活动,用于学生可以投票的列表
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        [ProducesDefaultResponseType]
+        [HttpPost("find-stu")]
+        public async Task<IActionResult> FindStu(JsonElement requert) {
+            var(id,name,_,school) = HttpContext.GetAuthTokenInfo();
 
-                if (voteRecords.IsNotEmpty())
-                {
-                    await _azureCosmos.DeleteAll(voteRecords);
-                }*/
-                //List<Target> targets = request.@params.vote.target;
-                //List<VoteRecord> votekStudents = new List<VoteRecord>();
-                //foreach (Target target in targets)
-                //{
-                //    //查询之前是否有 关联关系表 HomeWorkStudent 有则删除
-                    
-                //    List<ClassStudent> classroom = await _cosmos.FindByDict<ClassStudent>(new Dictionary<string, object> { { "id", target.classroomCode } });
-                //    if (classroom.IsNotEmpty() && classroom[0].code!=null)
-                //    {
-                //        foreach (ClassStudent student in classroom)
-                //        {
-                //            VoteRecord voteStudent = new VoteRecord();
-                //            voteStudent.id = request.@params.vote.id;
-                //            voteStudent.code = student.code;
-                //            voteStudent.classroom.code = target.classroomCode;
-                //            voteStudent.classroom.name = target.classroomName;
-                //            votekStudents.Add(voteStudent);
-                //        }
-                //    }
-                //}
-                //if (votekStudents.IsNotEmpty())
-                //{
-                //    foreach (VoteRecord voteRecord in votekStudents)
-                //    {
-                //        List<Student> student = await _cosmos.FindByDict<Student>(new Dictionary<string, object> { { "studentId", voteRecord.code } });
-                //        if (student.IsNotEmpty())
-                //        {
-                //            voteRecord.name = student[0].name;
-                //            voteRecord.code = student[0].studentId;
-                //        }
-                //    }
-                //    await _cosmos.SaveOrUpdateAll(votekStudents);
-                //}
-/*            }*/
-            //return builder.Data(homeWork).build();
-            return Ok(new { vote });
+            return Ok();
         }
 
         /// <summary>
-        /// 查询投票活动
+        /// 查询投票活动,用于教师投票的列表
         /// </summary>
         /// <param name="request"></param>
         /// <returns></returns>
-
         [ProducesDefaultResponseType]
-        [HttpPost("find")]
-        public async Task<IActionResult> Find(JsonElement requert)
+        [HttpPost("find-tch")]
+        public async Task<IActionResult> FindTch(JsonElement requert)
         {
 
             var client = _azureCosmos.GetCosmosClient();

+ 11 - 6
TEAMModelOS/Controllers/Item/ItemController.cs

@@ -289,12 +289,17 @@ namespace TEAMModelOS.Controllers
                 {
                     dict.Add("gradeIds[*]", gradeIds);
                 }
-                //if (requert.TryGetProperty("pid",))
-                //{
-                //    dict.Add("pid", pid);
-                //}
-                dict.Add("pid", null);
-                
+                if (requert.TryGetProperty("pid",out JsonElement pd))
+                {
+                    if (pd.ValueKind != JsonValueKind.Null)
+                    {
+                        dict.Add("pid", pd.ToString());
+                    }
+                    else {
+                        dict.Add("pid", null);
+                    }
+                    
+                }
                 AzureCosmosQuery cosmosDbQuery = SQLHelper.GetSQL(dict, sql);
                 List<object> items = new List<object>();
                 if (scope.ToString().Equals("private"))

+ 0 - 19
TEAMModelOS/Models/Dto/VoteDto.cs

@@ -1,19 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
-using TEAMModelOS.Models;
-using TEAMModelOS.SDK.Models;
-
-namespace TEAMModelOS.Models.Dto
-{
-    public class VoteDto
-    {
-        public Vote vote { get; set; }
-
-        /// <summary>
-        /// 是否重置学生作业关联表数据
-        /// </summary>
-        public bool reset { get; set; }
-    }
-}

+ 0 - 37
TEAMModelOS/Models/Dto/VoteStudentDto.cs

@@ -1,37 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using System.Linq;
-using System.Threading.Tasks;
-
-namespace TEAMModelOS.Models.Dto
-{
-    public class VoteStudentDto
-    {
-        /// <summary>
-        /// 
-        /// </summary>
-        [Required(ErrorMessage = "{0} 必须填写")]
-        public string studentID { get; set; }
-
-        [Required(ErrorMessage = "{0} 必须填写")]
-        public string voteWorkId { get; set; }
-
-        /// <summary>
-        /// 选项
-        /// </summary>
-        [Required(ErrorMessage = "{0} 必须填写")]
-        public string option { get; set; }
-
-
-        //[ProtoContract]
-        //public class Option
-        //{
-        //    [ProtoMember(1)]
-        //    public string code { get; set; }
-
-        //    [ProtoMember(2)]
-        //    public string value { get; set; }
-        //}
-    }
-}

+ 1 - 1
TEAMModelOS/TEAMModelOS.csproj

@@ -6,7 +6,7 @@
   <ItemGroup>
     <PackageReference Include="Caching.CSRedis" Version="3.6.50" />
     <PackageReference Include="CSRedisCore" Version="3.6.5" />
-    <PackageReference Include="HTEXLib" Version="2.1.0" />
+    <PackageReference Include="HTEXLib" Version="2.1.3" />
     <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="3.1.6" />
       <PackageReference Include="VueCliMiddleware" Version="3.1.2" />  </ItemGroup>
   <PropertyGroup>