소스 검색

1、增加新增 或 修改投票活动、查询投票活动、 删除投票活动、 撤消投票、查询 投票 学生关联、学生投票接口
2、作业活动增加啊protobuf相关注释

李思淳 5 년 전
부모
커밋
fe3d52c62e

+ 110 - 0
TEAMModelGrpc/Protos/HomeWorkService.proto

@@ -19,9 +19,23 @@ service HomeWorkService {
 
 
 message HomeWorkCommentDto {
+   string id = 1;
+   string homeWorkId = 2;
+   string commentid = 3;
+   string fromId = 4;
+   string toId = 5;
+   string identity = 6;
+   string comment = 7;
+   double score = 8;
 }
 
 message HomeWorkScoringDto {
+   string id = 1;
+   string homeWorkId = 2;
+   double score = 3;
+   string comments = 4;
+   string TEAMModelId = 5;
+   double start = 6;
 }
 
 //请求参数Dict
@@ -64,8 +78,104 @@ message LSMap {
    repeated string Value = 2;
 }
 
+message ClassroomItem {
+   string name = 1;
+   string code = 2;
+}
+
+//作业评论
+message HomeWorkComment {
+   //评论者身份 教师 学生
+   string identity = 1;
+   //评语
+   string comment = 2;
+   //评论时间
+   int64 createTime = 3;
+   //醍摩豆id 或者学生id
+   string TEAMModelId = 4;
+}
+
+//作业内容
+message HomeWorkContent {
+   //作答记录
+   string answers = 1;
+   //其他模式url 及name
+   repeated ProcessRes resource = 2;
+}
+
 //作业数据
 message HomeWorkStudent {
+   string id = 1;
+   string homeWorkId = 2;
+   //姓名
+   string name = 3;
+   //醍摩豆id
+   string TEAMModelId = 4;
+   //上课班级
+   ClassroomItem classroom = 5;
+   //原生班级
+   ClassroomItem nativeroom = 6;
+   //学号
+   string studentId = 7;
+   //是否提交
+   bool submissionBool = 8;
+   //提交时间
+   int64 submissionTime = 9;
+   //分数
+   double score = 10;
+   //作业内容
+   repeated HomeWorkContent content = 11;
+   //作业评论 (同学互评)
+   repeated StudentComment studentComments = 12;
+   //教师评语
+   HomeWorkComment teacherComments = 13;
+}
+
+//作业附件
+message ProcessRes {
+   //文件名字
+   string fileName = 1;
+   string blobUrl = 2;
+   int32 order = 3;
+   //文件大小
+   int64 size = 4;
+   //缩略图链接  图片视频有 文件没有
+   string compressUrl = 5;
+   //文件类型
+   string type = 6;
+   //唯一编码
+   string sha1Code = 7;
+}
+
+//评论回复
+message Reply {
+   //评论者id 醍摩豆或studenId
+   string fromId = 1;
+   //被评论者id 醍摩豆或studenId
+   string toId = 2;
+   //评论者身份 教师 学生
+   string identity = 3;
+   //评语
+   string comment = 4;
+   int64 createTime = 5;
+}
+
+message StudentComment {
+   //评论id
+   string commentid = 1;
+   //评论者id 醍摩豆或studenId
+   string fromId = 2;
+   //被评论者id 醍摩豆或studenId
+   string toId = 3;
+   //学生打分
+   double score = 4;
+   //评论者身份 教师 学生
+   string identity = 5;
+   //评语
+   string comment = 6;
+   //评论时间
+   int64 createTime = 7;
+   repeated Reply reply = 8;
 }
 
 message Comment {

+ 350 - 0
TEAMModelGrpc/TEAMModelOS.GRPC.xml

@@ -1160,6 +1160,48 @@
         <member name="P:TMDGrpc.HomeWorkService.HomeWorkServiceReflection.Descriptor">
             <summary>File descriptor for Protos/HomeWorkService.proto</summary>
         </member>
+        <member name="F:TMDGrpc.HomeWorkService.HomeWorkCommentDto.IdFieldNumber">
+            <summary>Field number for the "id" field.</summary>
+        </member>
+        <member name="F:TMDGrpc.HomeWorkService.HomeWorkCommentDto.HomeWorkIdFieldNumber">
+            <summary>Field number for the "homeWorkId" field.</summary>
+        </member>
+        <member name="F:TMDGrpc.HomeWorkService.HomeWorkCommentDto.CommentidFieldNumber">
+            <summary>Field number for the "commentid" field.</summary>
+        </member>
+        <member name="F:TMDGrpc.HomeWorkService.HomeWorkCommentDto.FromIdFieldNumber">
+            <summary>Field number for the "fromId" field.</summary>
+        </member>
+        <member name="F:TMDGrpc.HomeWorkService.HomeWorkCommentDto.ToIdFieldNumber">
+            <summary>Field number for the "toId" field.</summary>
+        </member>
+        <member name="F:TMDGrpc.HomeWorkService.HomeWorkCommentDto.IdentityFieldNumber">
+            <summary>Field number for the "identity" field.</summary>
+        </member>
+        <member name="F:TMDGrpc.HomeWorkService.HomeWorkCommentDto.CommentFieldNumber">
+            <summary>Field number for the "comment" field.</summary>
+        </member>
+        <member name="F:TMDGrpc.HomeWorkService.HomeWorkCommentDto.ScoreFieldNumber">
+            <summary>Field number for the "score" field.</summary>
+        </member>
+        <member name="F:TMDGrpc.HomeWorkService.HomeWorkScoringDto.IdFieldNumber">
+            <summary>Field number for the "id" field.</summary>
+        </member>
+        <member name="F:TMDGrpc.HomeWorkService.HomeWorkScoringDto.HomeWorkIdFieldNumber">
+            <summary>Field number for the "homeWorkId" field.</summary>
+        </member>
+        <member name="F:TMDGrpc.HomeWorkService.HomeWorkScoringDto.ScoreFieldNumber">
+            <summary>Field number for the "score" field.</summary>
+        </member>
+        <member name="F:TMDGrpc.HomeWorkService.HomeWorkScoringDto.CommentsFieldNumber">
+            <summary>Field number for the "comments" field.</summary>
+        </member>
+        <member name="F:TMDGrpc.HomeWorkService.HomeWorkScoringDto.TEAMModelIdFieldNumber">
+            <summary>Field number for the "TEAMModelId" field.</summary>
+        </member>
+        <member name="F:TMDGrpc.HomeWorkService.HomeWorkScoringDto.StartFieldNumber">
+            <summary>Field number for the "start" field.</summary>
+        </member>
         <member name="T:TMDGrpc.HomeWorkService.Dict">
              <summary>
             请求参数Dict
@@ -1276,11 +1318,319 @@
             字符串数组
              </summary>
         </member>
+        <member name="F:TMDGrpc.HomeWorkService.ClassroomItem.NameFieldNumber">
+            <summary>Field number for the "name" field.</summary>
+        </member>
+        <member name="F:TMDGrpc.HomeWorkService.ClassroomItem.CodeFieldNumber">
+            <summary>Field number for the "code" field.</summary>
+        </member>
+        <member name="T:TMDGrpc.HomeWorkService.HomeWorkComment">
+             <summary>
+            作业评论
+             </summary>
+        </member>
+        <member name="F:TMDGrpc.HomeWorkService.HomeWorkComment.IdentityFieldNumber">
+            <summary>Field number for the "identity" field.</summary>
+        </member>
+        <member name="P:TMDGrpc.HomeWorkService.HomeWorkComment.Identity">
+             <summary>
+            评论者身份 教师 学生
+             </summary>
+        </member>
+        <member name="F:TMDGrpc.HomeWorkService.HomeWorkComment.CommentFieldNumber">
+            <summary>Field number for the "comment" field.</summary>
+        </member>
+        <member name="P:TMDGrpc.HomeWorkService.HomeWorkComment.Comment">
+             <summary>
+            评语
+             </summary>
+        </member>
+        <member name="F:TMDGrpc.HomeWorkService.HomeWorkComment.CreateTimeFieldNumber">
+            <summary>Field number for the "createTime" field.</summary>
+        </member>
+        <member name="P:TMDGrpc.HomeWorkService.HomeWorkComment.CreateTime">
+             <summary>
+            评论时间
+             </summary>
+        </member>
+        <member name="F:TMDGrpc.HomeWorkService.HomeWorkComment.TEAMModelIdFieldNumber">
+            <summary>Field number for the "TEAMModelId" field.</summary>
+        </member>
+        <member name="P:TMDGrpc.HomeWorkService.HomeWorkComment.TEAMModelId">
+             <summary>
+            醍摩豆id 或者学生id
+             </summary>
+        </member>
+        <member name="T:TMDGrpc.HomeWorkService.HomeWorkContent">
+             <summary>
+            作业内容
+             </summary>
+        </member>
+        <member name="F:TMDGrpc.HomeWorkService.HomeWorkContent.AnswersFieldNumber">
+            <summary>Field number for the "answers" field.</summary>
+        </member>
+        <member name="P:TMDGrpc.HomeWorkService.HomeWorkContent.Answers">
+             <summary>
+            作答记录
+             </summary>
+        </member>
+        <member name="F:TMDGrpc.HomeWorkService.HomeWorkContent.ResourceFieldNumber">
+            <summary>Field number for the "resource" field.</summary>
+        </member>
+        <member name="P:TMDGrpc.HomeWorkService.HomeWorkContent.Resource">
+             <summary>
+            其他模式url 及name
+             </summary>
+        </member>
         <member name="T:TMDGrpc.HomeWorkService.HomeWorkStudent">
              <summary>
             作业数据
              </summary>
         </member>
+        <member name="F:TMDGrpc.HomeWorkService.HomeWorkStudent.IdFieldNumber">
+            <summary>Field number for the "id" field.</summary>
+        </member>
+        <member name="F:TMDGrpc.HomeWorkService.HomeWorkStudent.HomeWorkIdFieldNumber">
+            <summary>Field number for the "homeWorkId" field.</summary>
+        </member>
+        <member name="F:TMDGrpc.HomeWorkService.HomeWorkStudent.NameFieldNumber">
+            <summary>Field number for the "name" field.</summary>
+        </member>
+        <member name="P:TMDGrpc.HomeWorkService.HomeWorkStudent.Name">
+             <summary>
+            姓名
+             </summary>
+        </member>
+        <member name="F:TMDGrpc.HomeWorkService.HomeWorkStudent.TEAMModelIdFieldNumber">
+            <summary>Field number for the "TEAMModelId" field.</summary>
+        </member>
+        <member name="P:TMDGrpc.HomeWorkService.HomeWorkStudent.TEAMModelId">
+             <summary>
+            醍摩豆id
+             </summary>
+        </member>
+        <member name="F:TMDGrpc.HomeWorkService.HomeWorkStudent.ClassroomFieldNumber">
+            <summary>Field number for the "classroom" field.</summary>
+        </member>
+        <member name="P:TMDGrpc.HomeWorkService.HomeWorkStudent.Classroom">
+             <summary>
+            上课班级
+             </summary>
+        </member>
+        <member name="F:TMDGrpc.HomeWorkService.HomeWorkStudent.NativeroomFieldNumber">
+            <summary>Field number for the "nativeroom" field.</summary>
+        </member>
+        <member name="P:TMDGrpc.HomeWorkService.HomeWorkStudent.Nativeroom">
+             <summary>
+            原生班级
+             </summary>
+        </member>
+        <member name="F:TMDGrpc.HomeWorkService.HomeWorkStudent.StudentIdFieldNumber">
+            <summary>Field number for the "studentId" field.</summary>
+        </member>
+        <member name="P:TMDGrpc.HomeWorkService.HomeWorkStudent.StudentId">
+             <summary>
+            学号
+             </summary>
+        </member>
+        <member name="F:TMDGrpc.HomeWorkService.HomeWorkStudent.SubmissionBoolFieldNumber">
+            <summary>Field number for the "submissionBool" field.</summary>
+        </member>
+        <member name="P:TMDGrpc.HomeWorkService.HomeWorkStudent.SubmissionBool">
+             <summary>
+            是否提交
+             </summary>
+        </member>
+        <member name="F:TMDGrpc.HomeWorkService.HomeWorkStudent.SubmissionTimeFieldNumber">
+            <summary>Field number for the "submissionTime" field.</summary>
+        </member>
+        <member name="P:TMDGrpc.HomeWorkService.HomeWorkStudent.SubmissionTime">
+             <summary>
+            提交时间
+             </summary>
+        </member>
+        <member name="F:TMDGrpc.HomeWorkService.HomeWorkStudent.ScoreFieldNumber">
+            <summary>Field number for the "score" field.</summary>
+        </member>
+        <member name="P:TMDGrpc.HomeWorkService.HomeWorkStudent.Score">
+             <summary>
+            分数
+             </summary>
+        </member>
+        <member name="F:TMDGrpc.HomeWorkService.HomeWorkStudent.ContentFieldNumber">
+            <summary>Field number for the "content" field.</summary>
+        </member>
+        <member name="P:TMDGrpc.HomeWorkService.HomeWorkStudent.Content">
+             <summary>
+            作业内容
+             </summary>
+        </member>
+        <member name="F:TMDGrpc.HomeWorkService.HomeWorkStudent.StudentCommentsFieldNumber">
+            <summary>Field number for the "studentComments" field.</summary>
+        </member>
+        <member name="P:TMDGrpc.HomeWorkService.HomeWorkStudent.StudentComments">
+             <summary>
+            作业评论 (同学互评)
+             </summary>
+        </member>
+        <member name="F:TMDGrpc.HomeWorkService.HomeWorkStudent.TeacherCommentsFieldNumber">
+            <summary>Field number for the "teacherComments" field.</summary>
+        </member>
+        <member name="P:TMDGrpc.HomeWorkService.HomeWorkStudent.TeacherComments">
+             <summary>
+            教师评语
+             </summary>
+        </member>
+        <member name="T:TMDGrpc.HomeWorkService.ProcessRes">
+             <summary>
+            作业附件
+             </summary>
+        </member>
+        <member name="F:TMDGrpc.HomeWorkService.ProcessRes.FileNameFieldNumber">
+            <summary>Field number for the "fileName" field.</summary>
+        </member>
+        <member name="P:TMDGrpc.HomeWorkService.ProcessRes.FileName">
+             <summary>
+            文件名字
+             </summary>
+        </member>
+        <member name="F:TMDGrpc.HomeWorkService.ProcessRes.BlobUrlFieldNumber">
+            <summary>Field number for the "blobUrl" field.</summary>
+        </member>
+        <member name="F:TMDGrpc.HomeWorkService.ProcessRes.OrderFieldNumber">
+            <summary>Field number for the "order" field.</summary>
+        </member>
+        <member name="F:TMDGrpc.HomeWorkService.ProcessRes.SizeFieldNumber">
+            <summary>Field number for the "size" field.</summary>
+        </member>
+        <member name="P:TMDGrpc.HomeWorkService.ProcessRes.Size">
+             <summary>
+            文件大小
+             </summary>
+        </member>
+        <member name="F:TMDGrpc.HomeWorkService.ProcessRes.CompressUrlFieldNumber">
+            <summary>Field number for the "compressUrl" field.</summary>
+        </member>
+        <member name="P:TMDGrpc.HomeWorkService.ProcessRes.CompressUrl">
+             <summary>
+            缩略图链接  图片视频有 文件没有
+             </summary>
+        </member>
+        <member name="F:TMDGrpc.HomeWorkService.ProcessRes.TypeFieldNumber">
+            <summary>Field number for the "type" field.</summary>
+        </member>
+        <member name="P:TMDGrpc.HomeWorkService.ProcessRes.Type">
+             <summary>
+            文件类型
+             </summary>
+        </member>
+        <member name="F:TMDGrpc.HomeWorkService.ProcessRes.Sha1CodeFieldNumber">
+            <summary>Field number for the "sha1Code" field.</summary>
+        </member>
+        <member name="P:TMDGrpc.HomeWorkService.ProcessRes.Sha1Code">
+             <summary>
+            唯一编码
+             </summary>
+        </member>
+        <member name="T:TMDGrpc.HomeWorkService.Reply">
+             <summary>
+            评论回复
+             </summary>
+        </member>
+        <member name="F:TMDGrpc.HomeWorkService.Reply.FromIdFieldNumber">
+            <summary>Field number for the "fromId" field.</summary>
+        </member>
+        <member name="P:TMDGrpc.HomeWorkService.Reply.FromId">
+             <summary>
+            评论者id 醍摩豆或studenId
+             </summary>
+        </member>
+        <member name="F:TMDGrpc.HomeWorkService.Reply.ToIdFieldNumber">
+            <summary>Field number for the "toId" field.</summary>
+        </member>
+        <member name="P:TMDGrpc.HomeWorkService.Reply.ToId">
+             <summary>
+            被评论者id 醍摩豆或studenId
+             </summary>
+        </member>
+        <member name="F:TMDGrpc.HomeWorkService.Reply.IdentityFieldNumber">
+            <summary>Field number for the "identity" field.</summary>
+        </member>
+        <member name="P:TMDGrpc.HomeWorkService.Reply.Identity">
+             <summary>
+            评论者身份 教师 学生
+             </summary>
+        </member>
+        <member name="F:TMDGrpc.HomeWorkService.Reply.CommentFieldNumber">
+            <summary>Field number for the "comment" field.</summary>
+        </member>
+        <member name="P:TMDGrpc.HomeWorkService.Reply.Comment">
+             <summary>
+            评语
+             </summary>
+        </member>
+        <member name="F:TMDGrpc.HomeWorkService.Reply.CreateTimeFieldNumber">
+            <summary>Field number for the "createTime" field.</summary>
+        </member>
+        <member name="F:TMDGrpc.HomeWorkService.StudentComment.CommentidFieldNumber">
+            <summary>Field number for the "commentid" field.</summary>
+        </member>
+        <member name="P:TMDGrpc.HomeWorkService.StudentComment.Commentid">
+             <summary>
+            评论id
+             </summary>
+        </member>
+        <member name="F:TMDGrpc.HomeWorkService.StudentComment.FromIdFieldNumber">
+            <summary>Field number for the "fromId" field.</summary>
+        </member>
+        <member name="P:TMDGrpc.HomeWorkService.StudentComment.FromId">
+             <summary>
+            评论者id 醍摩豆或studenId
+             </summary>
+        </member>
+        <member name="F:TMDGrpc.HomeWorkService.StudentComment.ToIdFieldNumber">
+            <summary>Field number for the "toId" field.</summary>
+        </member>
+        <member name="P:TMDGrpc.HomeWorkService.StudentComment.ToId">
+             <summary>
+            被评论者id 醍摩豆或studenId
+             </summary>
+        </member>
+        <member name="F:TMDGrpc.HomeWorkService.StudentComment.ScoreFieldNumber">
+            <summary>Field number for the "score" field.</summary>
+        </member>
+        <member name="P:TMDGrpc.HomeWorkService.StudentComment.Score">
+             <summary>
+            学生打分
+             </summary>
+        </member>
+        <member name="F:TMDGrpc.HomeWorkService.StudentComment.IdentityFieldNumber">
+            <summary>Field number for the "identity" field.</summary>
+        </member>
+        <member name="P:TMDGrpc.HomeWorkService.StudentComment.Identity">
+             <summary>
+            评论者身份 教师 学生
+             </summary>
+        </member>
+        <member name="F:TMDGrpc.HomeWorkService.StudentComment.CommentFieldNumber">
+            <summary>Field number for the "comment" field.</summary>
+        </member>
+        <member name="P:TMDGrpc.HomeWorkService.StudentComment.Comment">
+             <summary>
+            评语
+             </summary>
+        </member>
+        <member name="F:TMDGrpc.HomeWorkService.StudentComment.CreateTimeFieldNumber">
+            <summary>Field number for the "createTime" field.</summary>
+        </member>
+        <member name="P:TMDGrpc.HomeWorkService.StudentComment.CreateTime">
+             <summary>
+            评论时间
+             </summary>
+        </member>
+        <member name="F:TMDGrpc.HomeWorkService.StudentComment.ReplyFieldNumber">
+            <summary>Field number for the "reply" field.</summary>
+        </member>
         <member name="F:TMDGrpc.HomeWorkService.Comment.Comment_FieldNumber">
             <summary>Field number for the "comment" field.</summary>
         </member>

+ 1 - 1
TEAMModelGrpc/appsettings.Development.json

@@ -12,7 +12,7 @@
     //用于grpc启动后注册到服务发现的ip地址段
     "ServiceAddress": "*.*.*.*:",
     //是否启用服务注册和服务发现,默认是true
-    "EnableDiscovery": true,
+    "EnableDiscovery": false,
     //服务发现服务器地址
     "DiscoveryUrl": "http://106.12.23.251:8500",
     //注册到服务发现的服务名称

+ 14 - 1
TEAMModelOS.Service/Models/Learn/HomeWork.cs

@@ -1,4 +1,5 @@
-using System;
+using ProtoBuf;
+using System;
 using System.Collections.Generic;
 using System.ComponentModel.DataAnnotations;
 using System.Text;
@@ -11,6 +12,7 @@ namespace TEAMModelOS.Service.Models.Learn
     /// <summary>
     /// 作业
     /// </summary>
+    [ProtoContract]
     [CosmosDB(RU = 400, Name = "HomeWork")]
     public class HomeWork:ID
     {
@@ -20,36 +22,43 @@ namespace TEAMModelOS.Service.Models.Learn
             resource = new List<ProcessRes>();
         }
 
+        [ProtoMember(1)]
         public string id { get; set; }
 
         [PartitionKey]
         [Required(ErrorMessage = "{0} 必须填写")]
+        [ProtoMember(2)]
         public string scopeCode { get; set; }
 
 
         /// <summary>
         /// 作业名称
         /// </summary>
+        [ProtoMember(3)]
         public string name { get; set; }
 
         /// <summary>
         /// 作业发布对象
         /// </summary>
+        [ProtoMember(4)]
         public List<Target> target { get; set; }
 
         /// <summary>
         /// 发布模式 0 立即发布 1 定时
         /// </summary>
+        [ProtoMember(5)]
         public string publishModel { get; set; }
 
         /// <summary>
         /// 开始时间
         /// </summary>
+        [ProtoMember(6)]
         public long startTime { get; set; }
 
         /// <summary>
         /// 结束时间
         /// </summary>
+        [ProtoMember(7)]
         public long endTime { get; set; }
 
         /// <summary>
@@ -67,18 +76,21 @@ namespace TEAMModelOS.Service.Models.Learn
         /// <summary>
         /// 作业描述
         /// </summary>
+        [ProtoMember(8)]
         public string description { get; set; }
 
   
         /// <summary>
         /// 作业附件
         /// </summary>
+        [ProtoMember(9)]
         public List<ProcessRes> resource { get; set; }
 
 
         /// <summary>
         /// 状态 
         /// </summary>
+        [ProtoMember(10)]
         public int state { get; set; }
 
         //public Subdto subdto { get; set; }
@@ -86,6 +98,7 @@ namespace TEAMModelOS.Service.Models.Learn
         /// <summary>
         /// 学生 是否互评 是否可见 
         /// </summary>
+        [ProtoMember(11)]
         public List<string> other { get; set; }
 
         //public class Subdto {

+ 42 - 3
TEAMModelOS.Service/Models/Learn/HomeWorkStudent.cs

@@ -1,4 +1,5 @@
-using System;
+using ProtoBuf;
+using System;
 using System.Collections.Generic;
 using System.Text;
 using TEAMModelOS.SDK.Context.Attributes.Azure;
@@ -11,6 +12,7 @@ namespace TEAMModelOS.Service.Models.Learn
     /// <summary>
     /// 作业数据
     /// </summary>
+    [ProtoContract]
     [CosmosDB(RU = 400, Name = "HomeWorkStudent")]
     public class HomeWorkStudent : ID
     {
@@ -21,8 +23,10 @@ namespace TEAMModelOS.Service.Models.Learn
             nativeroom = new ClassroomItem();
             teacherComments = new HomeWorkComment();
         }
+        [ProtoMember(1)]
         public string id { get; set; }
 
+        [ProtoMember(2)]
         [PartitionKey]
         public string homeWorkId { get; set; }
 
@@ -30,65 +34,78 @@ namespace TEAMModelOS.Service.Models.Learn
         /// <summary>
         /// 姓名
         /// </summary>
+        [ProtoMember(3)]
         public string name { get; set; }
 
 
         /// <summary>
         /// 醍摩豆id
         /// </summary>
+        [ProtoMember(4)]
         public string TEAMModelId { get; set; }
 
         /// <summary>
         /// 上课班级
         /// </summary>
+        [ProtoMember(5)]
         public ClassroomItem classroom { get; set; }
 
         /// <summary>
         /// 原生班级
         /// </summary>
+        [ProtoMember(6)]
         public ClassroomItem nativeroom{ get; set; }
 
 
         /// <summary>
         /// 学号
         /// </summary>
+        [ProtoMember(7)]
         public string studentId { get; set; }
 
         /// <summary>
         /// 是否提交
         /// </summary>
+        [ProtoMember(8)]
         public bool submissionBool { get; set; } = false;
 
         /// <summary>
         /// 提交时间
         /// </summary>
+        [ProtoMember(9)]
         public long submissionTime { get; set; }
 
         /// <summary>
         /// 分数
         /// </summary>
+        [ProtoMember(10)]
         public double score { get; set; }
 
         /// <summary>
         /// 作业内容
         /// </summary>
+        [ProtoMember(11)]
         public List<HomeWorkContent> content { get; set; }
 
 
         /// <summary>
         /// 作业评论 (同学互评)
         /// </summary>
+        [ProtoMember(12)]
         public List<StudentComment> studentComments { get; set; }
 
 
         /// <summary>
         /// 教师评语
         /// </summary>
+        [ProtoMember(13)]
         public HomeWorkComment teacherComments { get; set; }
     }
-
+    [ProtoContract]
     public class ClassroomItem {
+        [ProtoMember(1)]
         public string name { get; set; }
+        [ProtoMember(2)]
         public string code { get; set; }
 
     }
@@ -96,6 +113,7 @@ namespace TEAMModelOS.Service.Models.Learn
     /// <summary>
     /// 作业内容
     /// </summary>
+    [ProtoContract]
     public class HomeWorkContent {
 
         /// <summary>
@@ -111,11 +129,13 @@ namespace TEAMModelOS.Service.Models.Learn
         /// <summary>
         /// 作答记录
         /// </summary>
+        [ProtoMember(1)]
         public string answers { get; set; }
 
         /// <summary>
         ///  其他模式url 及name
         /// </summary>
+        [ProtoMember(2)]
         public List<ProcessRes> resource { get; set; }
 
     }
@@ -151,7 +171,7 @@ namespace TEAMModelOS.Service.Models.Learn
     //    public int order { get; set; }
 
     //}
-
+    [ProtoContract]
     public class StudentComment
     {
         public StudentComment()
@@ -162,41 +182,49 @@ namespace TEAMModelOS.Service.Models.Learn
         /// <summary>
         /// 评论id
         /// </summary>
+        [ProtoMember(1)]
         public string commentid { get; set; }
 
         /// <summary>
         /// 评论者id 醍摩豆或studenId
         /// </summary>
+        [ProtoMember(2)]
         public string fromId { get; set; }
 
         /// <summary>
         /// 被评论者id 醍摩豆或studenId
         /// </summary>
+        [ProtoMember(3)]
         public string toId { get; set; }
 
         /// <summary>
         /// 学生打分
         /// </summary>
+        [ProtoMember(4)]
         public double? score { get; set; }
 
         /// <summary>
         /// 评论者身份 教师 学生
         /// </summary>
+        [ProtoMember(5)]
         public string identity { get; set; }
 
         /// <summary>
         /// 评语
         /// </summary>
+        [ProtoMember(6)]
         public string comment { get; set; }
 
         /// <summary>
         /// 评论时间
         /// </summary>
+        [ProtoMember(7)]
         public long createTime { get; set; }
 
         ///// <summary>
         ///// 评论回复
         ///// </summary>
+        [ProtoMember(8)]
         public List<Reply>  reply { get; set; }
 
     }
@@ -206,28 +234,33 @@ namespace TEAMModelOS.Service.Models.Learn
     /// <summary>
     /// 作业评论
     /// </summary>
+    [ProtoContract]
     public class HomeWorkComment {
        
 
         /// <summary>
         /// 评论者身份 教师 学生
         /// </summary>
+        [ProtoMember(1)]
         public string identity { get; set; }
 
         /// <summary>
         /// 评语
         /// </summary>
+        [ProtoMember(2)]
         public string comment { get; set; }
 
         /// <summary>
         /// 评论时间
         /// </summary>
+        [ProtoMember(3)]
         public long createTime { get; set; }
 
 
         /// <summary>
         /// 醍摩豆id 或者学生id
         /// </summary>
+        [ProtoMember(4)]
         public string TEAMModelId { get; set; }
 
         ///// <summary>
@@ -240,28 +273,34 @@ namespace TEAMModelOS.Service.Models.Learn
     /// <summary>
     /// 评论回复
     /// </summary>
+    [ProtoContract]
     public class Reply
     {
         /// <summary>
         /// 评论者id 醍摩豆或studenId
         /// </summary>
+        [ProtoMember(1)]
         public string fromId { get; set; }
 
         /// <summary>
         /// 被评论者id 醍摩豆或studenId
         /// </summary>
+        [ProtoMember(2)]
         public string toId { get; set; }
 
         /// <summary>
         /// 评论者身份 教师 学生
         /// </summary>
+        [ProtoMember(3)]
         public string identity { get; set; }
 
         /// <summary>
         /// 评语
         /// </summary>
+        [ProtoMember(4)]
         public string comment { get; set; }
 
+        [ProtoMember(5)]
         public long createTime { get; set; }
 
     }

+ 10 - 1
TEAMModelOS.Service/Models/Learn/ProcessRes.cs

@@ -1,4 +1,5 @@
-using System;
+using ProtoBuf;
+using System;
 using System.Collections.Generic;
 using System.ComponentModel.DataAnnotations;
 using System.Text;
@@ -8,35 +9,43 @@ namespace TEAMModelOS.Service.Models.Learn
     /// <summary>
     /// 作业附件
     /// </summary>
+    [ProtoContract]
     public class ProcessRes
     {
         /// <summary>
         /// 文件名字
         /// </summary>
         [Required(ErrorMessage = "{0} 必须填写")]
+        [ProtoMember(1)]
         public string fileName { get; set; }
         /// <summary>
         /// 
         /// </summary>
         [Required(ErrorMessage = "{0} 必须填写")]
+        [ProtoMember(2)]
         public string blobUrl { get; set; }
+        [ProtoMember(3)]
         public int order { get; set; }
         /// <summary>
         /// 文件大小
         /// </summary>
+        [ProtoMember(4)]
         public long size { get; set; }
         /// <summary>
         /// 缩略图链接  图片视频有 文件没有
         /// </summary>
+        [ProtoMember(5)]
         public string compressUrl { get; set; }
         /// <summary>
         /// 文件类型
         /// </summary>
+        [ProtoMember(6)]
         public string type { get; set; }
 
         /// <summary>
         /// 唯一编码
         /// </summary>
+        [ProtoMember(7)]
         public string sha1Code { get; set; }
 
     }

+ 6 - 1
TEAMModelOS.Service/Models/Learn/Target.cs

@@ -1,4 +1,5 @@
-using System;
+using ProtoBuf;
+using System;
 using System.Collections.Generic;
 using System.ComponentModel.DataAnnotations;
 using System.Text;
@@ -8,12 +9,16 @@ namespace TEAMModelOS.Service.Models.Learn
     /// <summary>
     /// 发布对象
     /// </summary>
+    [ProtoContract]
     public class Target
     {
         [Required(ErrorMessage = "{0} 必须填写")]
+        [ProtoMember(1)]
         public string classroomCode { get; set; }
         [Required(ErrorMessage = "{0} 必须填写")]
+        [ProtoMember(2)]
         public string scopeCode { get; set; }
+        [ProtoMember(3)]
         public string classroomName { get; set; }
 
     }

+ 121 - 0
TEAMModelOS.Service/Models/Learn/Vote.cs

@@ -0,0 +1,121 @@
+using ProtoBuf;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Text;
+using TEAMModelOS.SDK.Context.Attributes.Azure;
+using TEAMModelOS.SDK.Module.AzureCosmosDBV3;
+
+namespace TEAMModelOS.Service.Models.Learn
+{
+    /// <summary>
+    /// 投票
+    /// </summary>
+    [ProtoContract]
+    [CosmosDB(RU = 400, Name = "Vote")]
+    public class Vote : ID
+    {
+
+        public Vote()
+        {
+            target = new List<Target>();
+            resource = new List<ProcessRes>();
+            option = new List<Option>();
+
+        }
+
+        [ProtoMember(1)]
+        public string id { get; set; }
+
+        [PartitionKey]
+        [Required(ErrorMessage = "{0} 必须填写")]
+        [ProtoMember(2)]
+        public string scopeCode { get; set; }
+
+
+        /// <summary>
+        /// 投票名称
+        /// </summary>
+        [ProtoMember(3)]
+        public string name { get; set; }
+
+        /// <summary>
+        /// 作业发布对象
+        /// </summary>
+        [ProtoMember(4)]
+        public List<Target> target { get; set; }
+
+        /// <summary>
+        /// 发布模式 0 立即发布 1 定时
+        /// </summary>
+        [ProtoMember(5)]
+        public string publishModel { get; set; }
+
+        /// <summary>
+        /// 开始时间
+        /// </summary>
+        [ProtoMember(6)]
+        public long startTime { get; set; }
+
+        /// <summary>
+        /// 结束时间
+        /// </summary>
+        [ProtoMember(7)]
+        public long endTime { get; set; }
+
+        /// <summary>
+        /// 作业反馈类型
+        /// </summary>
+        //public string feedbackType { get; set; }
+
+        /// <summary>
+        /// 题目
+        /// </summary>
+        //public List<ExamItem> ExamItem { get; set; }
+
+
+
+        /// <summary>
+        /// 投票描述
+        /// </summary>
+        [ProtoMember(8)]
+        public string description { get; set; }
+
+
+        /// <summary>
+        /// 投票附件
+        /// </summary>
+        [ProtoMember(9)]
+        public List<ProcessRes> resource { get; set; }
+
+
+        /// <summary>
+        /// 状态 
+        /// </summary>
+        [ProtoMember(10)]
+        public int state { get; set; }
+
+
+        /// <summary>
+        /// 模式
+        /// </summary>
+        [ProtoMember(11)]
+        public List<string> other { get; set; }
+
+
+        /// <summary>
+        /// 选项
+        /// </summary>
+        [ProtoMember(12)]
+        public List<Option> option { get; set; }
+
+        [ProtoContract]
+        public class Option{
+            [ProtoMember(1)]
+            public string code { get; set; }
+
+            [ProtoMember(2)]
+            public string value { get; set; }
+        }
+    }
+}

+ 77 - 0
TEAMModelOS.Service/Models/Learn/VoteStudent.cs

@@ -0,0 +1,77 @@
+using ProtoBuf;
+using System;
+using System.Collections.Generic;
+using System.Text;
+using TEAMModelOS.SDK.Context.Attributes.Azure;
+using TEAMModelOS.SDK.Module.AzureCosmosDBV3;
+
+namespace TEAMModelOS.Service.Models.Learn
+{
+    [CosmosDB(RU = 400, Name = "VoteStudent")]
+    public class VoteStudent:ID
+    {
+
+        public VoteStudent() {
+            classroom = new ClassroomItem();
+            nativeroom = new ClassroomItem();
+        }
+
+        [ProtoMember(1)]
+        public string id { get; set; }
+
+        [ProtoMember(2)]
+        [PartitionKey]
+        public string voteWorkId { get; set; }
+
+
+        /// <summary>
+        /// 姓名
+        /// </summary>
+        [ProtoMember(3)]
+        public string name { get; set; }
+
+
+        /// <summary>
+        /// 醍摩豆id
+        /// </summary>
+        [ProtoMember(4)]
+        public string TEAMModelId { get; set; }
+
+        /// <summary>
+        /// 上课班级
+        /// </summary>
+        [ProtoMember(5)]
+        public ClassroomItem classroom { get; set; }
+
+        /// <summary>
+        /// 原生班级
+        /// </summary>
+        [ProtoMember(6)]
+        public ClassroomItem nativeroom { get; set; }
+
+        /// <summary>
+        /// 学号
+        /// </summary>
+        [ProtoMember(7)]
+        public string studentId { get; set; }
+
+        /// <summary>
+        /// 是否提交
+        /// </summary>
+        [ProtoMember(8)]
+        public bool submissionBool { get; set; } = false;
+
+        /// <summary>
+        /// 提交时间
+        /// </summary>
+        [ProtoMember(9)]
+        public long submissionTime { get; set; }
+
+
+        /// <summary>
+        /// 选项
+        /// </summary>
+        [ProtoMember(10)]
+        public string option { get; set; } = "-1";
+    }
+}

+ 95 - 0
TEAMModelOS.Service/TEAMModelOS.Model.xml

@@ -695,6 +695,101 @@
             评论时间
             </summary>
         </member>
+        <member name="T:TEAMModelOS.Service.Models.Learn.Vote">
+            <summary>
+            投票
+            </summary>
+        </member>
+        <member name="P:TEAMModelOS.Service.Models.Learn.Vote.name">
+            <summary>
+            投票名称
+            </summary>
+        </member>
+        <member name="P:TEAMModelOS.Service.Models.Learn.Vote.target">
+            <summary>
+            作业发布对象
+            </summary>
+        </member>
+        <member name="P:TEAMModelOS.Service.Models.Learn.Vote.publishModel">
+            <summary>
+            发布模式 0 立即发布 1 定时
+            </summary>
+        </member>
+        <member name="P:TEAMModelOS.Service.Models.Learn.Vote.startTime">
+            <summary>
+            开始时间
+            </summary>
+        </member>
+        <member name="P:TEAMModelOS.Service.Models.Learn.Vote.endTime">
+            <summary>
+            结束时间
+            </summary>
+        </member>
+        <member name="P:TEAMModelOS.Service.Models.Learn.Vote.description">
+            <summary>
+            投票描述
+            </summary>
+        </member>
+        <member name="P:TEAMModelOS.Service.Models.Learn.Vote.resource">
+            <summary>
+            投票附件
+            </summary>
+        </member>
+        <member name="P:TEAMModelOS.Service.Models.Learn.Vote.state">
+            <summary>
+            状态 
+            </summary>
+        </member>
+        <member name="P:TEAMModelOS.Service.Models.Learn.Vote.other">
+            <summary>
+            模式
+            </summary>
+        </member>
+        <member name="P:TEAMModelOS.Service.Models.Learn.Vote.option">
+            <summary>
+            选项
+            </summary>
+        </member>
+        <member name="P:TEAMModelOS.Service.Models.Learn.VoteStudent.name">
+            <summary>
+            姓名
+            </summary>
+        </member>
+        <member name="P:TEAMModelOS.Service.Models.Learn.VoteStudent.TEAMModelId">
+            <summary>
+            醍摩豆id
+            </summary>
+        </member>
+        <member name="P:TEAMModelOS.Service.Models.Learn.VoteStudent.classroom">
+            <summary>
+            上课班级
+            </summary>
+        </member>
+        <member name="P:TEAMModelOS.Service.Models.Learn.VoteStudent.nativeroom">
+            <summary>
+            原生班级
+            </summary>
+        </member>
+        <member name="P:TEAMModelOS.Service.Models.Learn.VoteStudent.studentId">
+            <summary>
+            学号
+            </summary>
+        </member>
+        <member name="P:TEAMModelOS.Service.Models.Learn.VoteStudent.submissionBool">
+            <summary>
+            是否提交
+            </summary>
+        </member>
+        <member name="P:TEAMModelOS.Service.Models.Learn.VoteStudent.submissionTime">
+            <summary>
+            提交时间
+            </summary>
+        </member>
+        <member name="P:TEAMModelOS.Service.Models.Learn.VoteStudent.option">
+            <summary>
+            选项
+            </summary>
+        </member>
         <member name="T:TEAMModelOS.Service.Models.Syllabus.Knowledge">
             <summary>
             知识点

+ 8 - 1
TEAMModelOS/Controllers/Learn/HomeWorkController.cs

@@ -15,6 +15,9 @@ using TEAMModelOS.Service.Models.Learn;
 
 namespace TEAMModelOS.Controllers.Learn
 {
+    /// <summary>
+    /// 作业活动
+    /// </summary>
     [Route("api/[controller]")]
     [ApiController]
     public class HomeWorkController : ControllerBase
@@ -403,7 +406,11 @@ namespace TEAMModelOS.Controllers.Learn
             }
             return builder.Data(data.OrderBy(m => m.comment.OrderBy(c => c.order))).Extend(new Dictionary<string, object> { { "count", data.Count } }).build();
         }
-
+        /// <summary>
+        /// 删除教师评语罐头
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
         [HttpPost("DeleteTeacherComments")]
         public async Task<BaseJosnRPCResponse> DeleteTeacherComments(JosnRPCRequest<Dictionary<string, object>> request)
         {

+ 3 - 0
TEAMModelOS/Controllers/Learn/LearnController.cs

@@ -13,6 +13,9 @@ using TEAMModelOS.Service.Models.Syllabus;
 
 namespace TEAMModelOS.Controllers.Learn
 {
+    /// <summary>
+    /// 学习活动
+    /// </summary>
     [Route("api/[controller]")]
     [ApiController]
     public class LearnController: BaseController

+ 229 - 0
TEAMModelOS/Controllers/Learn/VoteController.cs

@@ -0,0 +1,229 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using TEAMModelOS.Models;
+using TEAMModelOS.SDK.Context.Exception;
+using TEAMModelOS.SDK.Extension.DataResult.JsonRpcRequest;
+using TEAMModelOS.SDK.Extension.DataResult.JsonRpcResponse;
+using TEAMModelOS.SDK.Helper.Common.CollectionHelper;
+using TEAMModelOS.SDK.Module.AzureCosmosDBV3;
+using TEAMModelOS.Service.Models.Core;
+using TEAMModelOS.Service.Models.Learn;
+
+namespace TEAMModelOS.Controllers.Learn
+{
+    /// <summary>
+    /// 投票活动
+    /// </summary>
+    [Route("api/[controller]")]
+    [ApiController]
+    public class VoteController : ControllerBase
+    {
+
+        private readonly IAzureCosmosDBV3Repository _cosmos;
+
+        public VoteController(IAzureCosmosDBV3Repository cosmos)
+        {
+            _cosmos = cosmos;
+        }
+
+        /// <summary>
+        /// 新增 或 修改投票活动
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        [HttpPost("SaveorUpdataVote")]
+        public async Task<BaseJosnRPCResponse> SaveorUpdataVote(JosnRPCRequest<VoteDto> request)
+        {
+            JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
+            //新增
+            if (string.IsNullOrEmpty(request.@params.vote.id))
+            {
+                request.@params.vote.id = Guid.NewGuid().ToString();
+                request.@params.vote.state = 100;
+            }
+            if (request.@params.vote.publishModel.Equals("0"))
+            {
+                request.@params.vote.startTime = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeMilliseconds();
+                request.@params.vote.state = 200;
+            }
+            Vote homeWork = await _cosmos.SaveOrUpdate<Vote>(request.@params.vote);
+            if (!request.@params.reset)
+            {
+                //根据作业发布对象查找到每一个具体学生生成关联关系表 HomeWorkStudent
+                List<Target> targets = request.@params.vote.target;
+                List<VoteStudent> votekStudents = new List<VoteStudent>();
+                foreach (Target target in targets)
+                {
+                    //查询之前是否有 关联关系表 HomeWorkStudent 有则删除
+                    List<VoteStudent> homeWorks = await _cosmos.FindByDict<VoteStudent>(new Dictionary<string, object> { { "voteWorkId", request.@params.vote.id } });
+
+                    if (homeWorks.IsNotEmpty())
+                    {
+                        await _cosmos.DeleteAll(homeWorks);
+                    }
+                    List<ClassroomStudent> classroom = await _cosmos.FindByDict<ClassroomStudent>(new Dictionary<string, object> { { "id", target.classroomCode }, { "scopeCode", target.scopeCode } });
+                    if (classroom.IsNotEmpty())
+                    {
+                        foreach (string studentid in classroom[0].studentId)
+                        {
+                            VoteStudent voteStudent = new VoteStudent();
+                            voteStudent.id = studentid;
+                            voteStudent.voteWorkId = request.@params.vote.id;
+                            voteStudent.studentId = studentid;
+                            voteStudent.classroom.code = target.classroomCode;
+                            voteStudent.classroom.name = target.classroomName;
+                            votekStudents.Add(voteStudent);
+                        }
+                    }
+                }
+                if (votekStudents.IsNotEmpty())
+                {
+                    foreach (VoteStudent homeWorkStudents1 in votekStudents)
+                    {
+                        Student student = await _cosmos.FindById<Student>(homeWorkStudents1.studentId);
+                        if (student != null)
+                        {
+                            homeWorkStudents1.name = student.name;
+                            homeWorkStudents1.TEAMModelId = student.TEAMModelId;
+                            homeWorkStudents1.nativeroom.code = student.classroomCode;
+                        }
+                    }
+                    await _cosmos.SaveOrUpdateAll(votekStudents);
+                }
+            }
+            return builder.Data(homeWork).build();
+        }
+
+        /// <summary>
+        /// 查询投票活动
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        [HttpPost("FindVote")]
+        public async Task<BaseJosnRPCResponse> FindHomeWork(JosnRPCRequest<Dictionary<string, object>> request)
+        {
+
+            JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
+            List<Vote> data = new List<Vote>();
+            if (request.@params.IsNotEmpty())
+            {
+                data = await _cosmos.FindByDict<Vote>(request.@params);
+            }
+            else
+            {
+                throw new BizException("参数异常", ResponseCode.PARAMS_ERROR);
+                //builder.Error(false,ResponseCode.PARAMS_ERROR,"参数异常");
+            }
+            return builder.Data(data).Extend(new Dictionary<string, object> { { "count", data.Count } }).build();
+        }
+
+        /// <summary>
+        /// 删除投票活动
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        [HttpPost("DeleteVote")]
+        public async Task<BaseJosnRPCResponse> DeleteVote(JosnRPCRequest<List<IdPk>> request)
+        {
+            JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
+            List<IdPk> dict = request.@params;
+            List<IdPk> idPks = await _cosmos.DeleteAll<Vote>(dict);
+            if (idPks.IsNotEmpty())
+            {
+                foreach (IdPk idPk in idPks) 
+                { 
+                    List<VoteStudent> votes =  await _cosmos.FindByDict<VoteStudent>(new Dictionary<string, object> {  { "voteWorkId", idPk.id } });
+                    await _cosmos.DeleteAll(votes);
+                }
+                builder.Data("删除成功");
+            }
+            else
+            {
+                builder.Error(false, ResponseCode.FAILED, "删除失败");
+            }
+            return builder.build();
+        }
+
+        /// <summary>
+        /// 撤消投票
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        [HttpPost("RevokeVote")]
+        public async Task<BaseJosnRPCResponse> RevokeHomeWork(JosnRPCRequest<string> voteId)
+        {
+            JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
+            List<Vote> votes = await _cosmos.FindByDict<Vote>(new Dictionary<string, object> { { "id", voteId.@params } });
+
+            foreach (Vote vote in votes)
+            {
+                vote.state = 100;
+            }
+            List<Vote> vote1 = await _cosmos.UpdateAll<Vote>(votes);
+
+            //查询之前是否有 关联关系表 HomeWorkStudent 有则删除
+            List<VoteStudent> voteStudents = await _cosmos.FindByDict<VoteStudent>(new Dictionary<string, object> { { "voteWorkId", voteId.@params } });
+            if (voteStudents.IsNotEmpty())
+            {
+                await _cosmos.DeleteAll(voteStudents);
+            }
+            return builder.Data(vote1).build();
+        }
+
+        /// <summary>
+        /// 查询 投票 学生关联
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        [HttpPost("FindStudent")]
+        public async Task<BaseJosnRPCResponse> FindStudent(JosnRPCRequest<Dictionary<string, object>> request)
+        {
+            JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
+            List<VoteStudent> data = new List<VoteStudent>();
+            Dictionary<string, object> dict = new Dictionary<string, object>();
+            if (request.@params.IsNotEmpty())
+            {
+                data = await _cosmos.FindByDict<VoteStudent>(request.@params);
+                foreach (IGrouping<string, VoteStudent> voteStudents in data.GroupBy(x => x.option)) {
+                    List<VoteStudent> votes = new List<VoteStudent>();
+                    foreach (VoteStudent voteStudent in voteStudents) {
+                        votes.Add(voteStudent);
+                    }
+                    dict.Add(voteStudents.Key, votes);
+                }
+            }
+            else
+            {
+                throw new BizException("参数异常", ResponseCode.PARAMS_ERROR);
+            }
+            //data.GroupBy(x => x.option)
+            return builder.Data(dict).Extend(new Dictionary<string, object> { { "count", data.Count } }).build();
+        }
+
+        /// <summary>
+        /// 学生投票
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        [HttpPost("StudentVote")]
+        public async Task<BaseJosnRPCResponse> TeacherScoring(JosnRPCRequest<VoteStudentDto> request)
+        {
+            JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
+            List<VoteStudent> vote = await _cosmos.FindByDict<VoteStudent>(new Dictionary<string, object> { { "id", request.@params.id }, { "voteWorkId", request.@params.voteWorkId } });
+            VoteStudent response = new VoteStudent();
+            if (vote.IsNotEmpty())
+            {
+                vote[0].option = request.@params.option;
+                vote[0].submissionTime = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeMilliseconds();
+                vote[0].submissionBool = true;
+                response = await _cosmos.SaveOrUpdate(vote[0]);
+            }
+            return builder.Data(response).build();
+        }
+
+    }
+}

+ 12 - 1
TEAMModelOS/Models/HomeWorkCommentDto.cs

@@ -1,4 +1,5 @@
-using System;
+using ProtoBuf;
+using System;
 using System.Collections.Generic;
 using System.ComponentModel.DataAnnotations;
 using System.Linq;
@@ -6,42 +7,52 @@ using System.Threading.Tasks;
 
 namespace TEAMModelOS.Models
 {
+    [ProtoContract]
     public class HomeWorkCommentDto
     {
+        [ProtoMember(1)]
         [Required(ErrorMessage = "{0} 必须填写")]
         public string id { get; set; }
+
+        [ProtoMember(2)]
         [Required(ErrorMessage = "{0} 必须填写")]
         public string homeWorkId { get; set; }
 
         /// <summary>
         /// 评论id 不带是评论 带是评论的回复
         /// </summary>
+        [ProtoMember(3)]
         public string commentid { get; set; }
 
         /// <summary>
         /// 评论者id
         /// </summary>
+        [ProtoMember(4)]
         public string fromId { get; set; }
         
         /// <summary>
         /// 被评论者id 醍摩豆或studenId
         /// </summary>
+        [ProtoMember(5)]
         public string toId { get; set; }
 
         /// <summary>
         /// 评论者身份 教师 学生
         /// </summary>
+        [ProtoMember(6)]
         public string identity { get; set; }
 
         /// <summary>
         /// 评语
         /// </summary>
+        [ProtoMember(7)]
         public string comment { get; set; }
 
 
         /// <summary>
         /// 学生分数
         /// </summary>
+        [ProtoMember(8)]
         public double? score { get; set; }
     }
 }

+ 9 - 1
TEAMModelOS/Models/HomeWorkScoringDto.cs

@@ -1,4 +1,5 @@
-using System;
+using ProtoBuf;
+using System;
 using System.Collections.Generic;
 using System.ComponentModel.DataAnnotations;
 using System.Linq;
@@ -7,37 +8,44 @@ using TEAMModelOS.Service.Models.Learn;
 
 namespace TEAMModelOS.Models
 {
+    [ProtoContract]
     public class HomeWorkScoringDto
     {
         /// <summary>
         /// 学生作业关联id
         /// </summary>
+        [ProtoMember(1)]
         [Required(ErrorMessage = "{0} 必须填写")]
         public string id { get; set; }
         
         /// <summary>
         /// 作业id
         /// </summary>
+        [ProtoMember(2)]
         [Required(ErrorMessage = "{0} 必须填写")]
         public string homeWorkId { get; set; }
 
         /// <summary>
         /// 教师打分
         /// </summary>
+        [ProtoMember(3)]
         public double? score { get; set; }
 
+        [ProtoMember(4)]
         [Required(ErrorMessage = "{0} 必须填写")]
         public string comments { get; set; }
 
         /// <summary>
         ///  醍摩豆id 或者学生id
         /// </summary>
+        [ProtoMember(5)]
         [Required(ErrorMessage = "{0} 必须填写")]
         public string TEAMModelId { get; set; }
 
         /// <summary>
         /// 学生打星星
         /// </summary>
+        [ProtoMember(6)]
         public double start { get; set; } = -1;
     }
 }

+ 18 - 0
TEAMModelOS/Models/VoteDto.cs

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

+ 28 - 0
TEAMModelOS/Models/VoteStudentDto.cs

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

+ 17 - 0
TEAMModelOS/Models/VoteStudentResponse.cs

@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace TEAMModelOS.Models
+{
+    public class VoteStudentResponse
+    {
+
+
+        public string key { get; set; }
+
+        public string name { get; set; }
+
+    }
+}