瀏覽代碼

Merge branch 'develop3.0' of http://106.12.23.251:10080/TEAMMODEL/TEAMModelOS into develop3.0

李思淳 5 年之前
父節點
當前提交
5be0c79c8e

+ 20 - 3
TEAMModelOS.Service/Models/Exam/Models/ExamPaper.cs

@@ -11,9 +11,8 @@ namespace TEAMModelOS.Service.Models.Exam.Models
     /// 试卷信息
     /// </summary>
     [CosmosDB(RU = 400, Name = "ExamPaper")]
-    public class ExamPaper :ID
+    public class ExamPaper : ID
     {
-
         public ExamPaper() {
             item = new List<ExamItem>();
         }
@@ -25,8 +24,26 @@ namespace TEAMModelOS.Service.Models.Exam.Models
         /// 考试活动code
         /// </summary>
        // public string examCode { get; set; }
-        public List<ExamItem> item { get; set; }       
+        public List<ExamItem> item { get; set; }
         public string subjectCode { get; set; }
         public string periodCode { get; set; }
+        public string gradeCode { get; set; }
+        public string name { get; set; }
+        public int itemCount { get; set; }
+        public double level { get; set; }
+        public double score { get; set; }
+        /// <summary>
+        /// type:{
+        ///     pointkey:[num1,num2....]
+        /// }
+        /// </summary>
+        public Dictionary<string, Dictionary<string, List<int>>> pointItem { get; set; }
+        /// <summary>
+        /// pointkey:{
+        ///     
+        /// }
+        /// </summary>
+        public Dictionary<string, double> pointScore { get; set; }
+
     }
 }

+ 14 - 0
TEAMModelOS/ClientApp/src/components/learnactivity/QuestionList.less

@@ -80,4 +80,18 @@
 }
 .choose-question-btn:hover {
   color: cyan;
+}
+.question-control-wrap {
+  width: 100%;
+  margin: 15px 0px;
+  text-align: right;
+
+  .question-control-btn {
+    margin-left: 30px;
+    cursor: pointer;
+  }
+
+  .question-control-btn:hover{
+    color:aqua;
+  }
 }

+ 13 - 1
TEAMModelOS/ClientApp/src/components/learnactivity/QuestionList.vue

@@ -22,7 +22,14 @@
         <p class="answer-detail">
           <span v-for="(answerItem,index) in item.answer" v-html='answerItem'></span>
         </p>
+        <div class="question-control-wrap">
+          <!--<Button class="question-control-btn" type="warning" size="small">补救资源</Button>
+          <Button class="question-control-btn" type="warning" size="small">删除</Button>-->
+          <Icon type="md-trash" class="question-control-btn" size="25" title="删除" v-if="config.showDelete" @click="deleteQuestion(index)"/>
+          <Icon type="ios-link" class="question-control-btn" size="25" title="补救资源" v-if="config.showRemedy"/>
+        </div>
       </div>
+
     </div>
   </div>
 </template>
@@ -40,7 +47,9 @@
         default: () => {
           return {
             showSelect: false,
-            showScore:false
+            showScore: false,
+            showDelete: false,
+            showRemedy: false
           }
         }
       },
@@ -57,6 +66,9 @@
       }
     },
     methods: {
+      deleteQuestion(index) {
+        this.$emit('deleteQuestion',this.questions[index])
+      },
       selectQuestion(data) {
         this.$emit('seleteQuestion', data)
       },

+ 6 - 0
TEAMModelOS/ClientApp/src/css/dark-iview-form.less

@@ -19,4 +19,10 @@
     color: white;
     border-color: #606060;
   }
+}
+.dark-iview-inputnumber {
+  .ivu-input-number{
+    background:none;
+    border-color:#606060;
+  }
 }

+ 17 - 1
TEAMModelOS/ClientApp/src/view/Home.vue

@@ -142,7 +142,20 @@
       //this.getSchoolBaseInfo()
     },
     methods: {
-      
+      getSchoolBaseInfo() {
+        this.$store.dispatch('schoolBaseInfo/getSchoolBaseData').then(
+          (res) => {
+            if (res.code == 2) {
+              alert('数据为空!')
+            } else {
+              
+            }
+          },
+          (err) => {
+            alert('API error!')
+          }
+        )
+      },
       closeMenu() {
         this.isOpenDrawer = false
       },
@@ -153,6 +166,9 @@
           })
         }
       }
+    },
+    mounted() {
+      this.getSchoolBaseInfo()
     }
   }
 </script>

+ 4 - 2
TEAMModelOS/ClientApp/src/view/learnactivity/CreateEvaluation.vue

@@ -67,7 +67,7 @@
               <ImportCreate @importedQuestions="getImportQuestions" @goToPreview="goToPreview"></ImportCreate>
             </TabPane>
             <TabPane label="试题预览" name="preview" :index="4" tab="createTest">
-              <TeacherPreview :testPaper="evaluationInfo.testPaper[currentSubjectIndex]"></TeacherPreview>
+              <TeacherPreview :testPaper="evaluationInfo.testPaper[currentSubjectIndex]" :paperName="evaluationInfo.name"></TeacherPreview>
             </TabPane>
             <TabPane label="学生作答预览" name="student" :index="5" tab="createTest">
               <StudentPreview></StudentPreview>
@@ -193,6 +193,8 @@
     },
     methods: {
       getDate(value, date) {
+        console.log(value)
+        console.log(date)
       },
       getImportQuestions(questions) {
         if (this.evaluationInfo.testPaper[this.currentSubjectIndex].questions != undefined) {
@@ -357,7 +359,7 @@
         } else {
           let requestData = {
             id: testPaper.id == undefined ? null : testPaper.id,
-            examCode: this.examInfo.id,
+            scopeCode: this.examInfo.id,
             schoolCode: this.demoLoginInfo.schoolCode,
             subjectCode: testPaper.subjectCode,
             periodCode: testPaper.periodCode,

+ 5 - 0
TEAMModelOS/ClientApp/src/view/learnactivity/ImportCreate.vue

@@ -72,6 +72,11 @@
           if (res.error === null) {
             for (let i = 0; i < res.result.data.length; i++) {
               res.result.data[i].scopeCode = 'personal'
+              if (res.result.data[i].children.length > 0) {
+                for (let j = 0; j < res.result.data[i].children.length; j++) {
+                  res.result.data[i].children[j].scopeCode = 'personal'
+                }
+              }
             }
             this.importQuestions = res.result.data
             this.$emit('importedQuestions', this.importQuestions)

+ 51 - 4
TEAMModelOS/ClientApp/src/view/learnactivity/ManageEvaluation.less

@@ -49,7 +49,6 @@
       }
 
       .evaluation-type {
-        margin-top: 8px;
         color: @second-textColor;
       }
     }
@@ -68,6 +67,17 @@
     border-bottom: 1px solid @borderColor;
     color: @second-textColor;
 
+    .edit-evaluation {
+      float: right;
+      margin-right: 45px;
+      display: inline-block;
+      cursor: pointer;
+      color:white;
+    }
+
+    .edit-evaluation:hover{
+      color:aqua;
+    }
     .evalustion-bar-item {
       margin-right: 30px;
       display: inline-block;
@@ -100,9 +110,9 @@
         margin-bottom: 25px;
       }
 
-      .evaluation-attr-form{
-        margin-right:15px;
-        color:white;
+      .evaluation-attr-form {
+        margin-right: 15px;
+        color: white;
       }
     }
 
@@ -120,3 +130,40 @@
     }
   }
 }
+
+.subject-item {
+  display: inline-block;
+  margin-right: 15px;
+  color: @second-textColor;
+  cursor: pointer;
+  line-height: 40px;
+  min-width: 50px;
+  font-size: 15px;
+  text-align: center;
+  margin-left:15px;
+
+}
+
+.subject-item-active {
+  color: @primary-textColor;
+  border-bottom: 2px solid white;
+  font-weight: 500;
+
+}
+.test-paper-detail {
+  width: 100%;
+  height: ~"calc(100% - 45px)";
+  color: white;
+  padding-top: 15px;
+
+  .test-paper-info {
+    margin-bottom: 15px;
+  }
+}
+.question-type-count {
+  color: white;
+  font-size: 16px;
+  display: inline-block;
+  margin-top:15px;
+  margin-bottom:5px;
+}

+ 152 - 3
TEAMModelOS/ClientApp/src/view/learnactivity/ManageEvaluation.vue

@@ -25,6 +25,8 @@
       <div class="evaluation-detail-bar">
         <span :class="currentBraIndex == 0 ? 'evalustion-bar-item evalustion-bar-item-active':'evalustion-bar-item'" @click="selectBar(0)">评测信息</span>
         <span :class="currentBraIndex == 1 ? 'evalustion-bar-item evalustion-bar-item-active':'evalustion-bar-item'" @click="selectBar(1)">活动数据</span>
+        <span class="edit-evaluation"><Icon type="ios-create-outline" size="20"/>编辑信息</span>
+        <span class="edit-evaluation"><Icon type="ios-send" size="20"/>发布评测</span>
       </div>
       <div class="evaluation-base-info">
         <div class="evalustion-base-attr drak-iview-input dark-iview-select">
@@ -60,21 +62,75 @@
             <span>测试科目</span>
             <span v-if="examPaperList.length > 0" v-for="(item,index) in examPaperList" :class="index == currentSubjectIndex ? 'subject-item subject-item-active':'subject-item'" @click="selectSubject(index)">
               {{jsFn.getPeriod($store.state.schoolBaseInfo.schoolBaseInfo, item.periodCode).periodName}}
-              <span style="margin:0px 5px;">·</span>
-              {{item.getSubjectName($store.state.schoolBaseInfo.schoolBaseInfo, item.subjectCode)}}
+              <span style="margin:0px 2px;">·</span>
+              {{jsFn.getSubjectName(jsFn.getPeriod($store.state.schoolBaseInfo.schoolBaseInfo, item.periodCode), item.subjectCode)}}
             </span>
           </div>
+          <div class="test-paper-detail">
+            <vuescroll>
+              <div class="test-paper-info" v-if="examPaperList.length > 0">
+                <h3 style="text-align:center;margin-bottom:15px;">{{evaluationList[avtiveEvaluationIndex].name}}<span style="color:aqua;">{{ '   (' + jsFn.getSubjectName($store.state.schoolBaseInfo.schoolBaseInfo, examPaperList[currentSubjectIndex].subjectCode)+ ')'}}</span></h3>
+                <Row class="dark-iview-inputnumber">
+                  <Col :xs="24" :sm="24" :md="12" :lg="6">
+                  <span>总分:</span>
+                  <InputNumber :max="1000" :min="1" v-model="evaluationList[avtiveEvaluationIndex].score" size="small"></InputNumber>
+                  </Col>
+                  <Col :xs="24" :sm="24" :md="12" :lg="6">
+                  <span>整体难度:</span>
+                  <span>0.6</span>
+                  </Col>
+                  <Col :xs="24" :sm="24" :md="12" :lg="6">
+                  <span>题量:</span>
+                  <span>{{examPaperList[currentSubjectIndex].item.length}}</span>
+                  </Col>
+                </Row>
+              </div>
+              <div class="question-type-scope" v-if="groupQuestion.Single != undefined">
+                <span class="question-type-count">{{getOrder('Single')}}单选题(共{{groupQuestion.Single.length}}题)</span>
+                <QuestionList :questions="groupQuestion.Single" :config="questionConfig"></QuestionList>
+              </div>
+              <div class="question-type-scope" v-if="groupQuestion.Multiple != undefined">
+                <span class="question-type-count">{{getOrder('Multiple')}}多选题(共{{groupQuestion.Multiple.length}}题)</span>
+                <QuestionList :questions="groupQuestion.Multiple" :config="questionConfig"></QuestionList>
+              </div>
+              <div class="question-type-scope" v-if="groupQuestion.Complete != undefined">
+                <span class="question-type-count">{{getOrder('Complete')}}填空题(共{{groupQuestion.Complete.length}}题)</span>
+                <QuestionList :questions="groupQuestion.Complete" :config="questionConfig"></QuestionList>
+              </div>
+              <div class="question-type-scope" v-if="groupQuestion.Judge != undefined">
+                <span class="question-type-count">{{getOrder('Judge')}}判断题(共{{groupQuestion.Judge.length}}题)</span>
+                <QuestionList :questions="groupQuestion.Judge" :config="questionConfig"></QuestionList>
+              </div>
+              <div class="question-type-scope" v-if="groupQuestion.Subjective != undefined">
+                <span class="question-type-count">{{getOrder('Subjective')}}问答题(共{{groupQuestion.Subjective.length}}题)</span>
+                <QuestionList :questions="groupQuestion.Subjective" :config="questionConfig"></QuestionList>
+              </div>
+              <div class="question-type-scope" v-if="groupQuestion.Compose != undefined">
+                <span class="question-type-count">{{getOrder('Compose')}}综合题(共{{groupQuestion.Compose.length}}题)</span>
+                <QuestionList :questions="groupQuestion.Compose" :config="questionConfig"></QuestionList>
+              </div>
+              <NoData v-if="examPaperList.length == 0" style="margin-top:50px;"></NoData>
+            </vuescroll>
+          </div>
         </div>
       </div>
     </div>
   </div>
 </template>
 <script>
+  import QuestionList from '@/components/learnactivity/QuestionList.vue'
+  import NoData from '@/common/NoData.vue'
   import jsFn from '@/utils/js-fn.js'
   export default {
+    components: {
+      QuestionList,
+      NoData
+    },
     data() {
       return {
+        questionConfig: {},
         jsFn,
+        groupQuestion: {},
         currentSubjectIndex:0,
         ruleValidate: {
           name: [
@@ -133,6 +189,14 @@
       }
     },
     methods: {
+      selectSubject(index) {
+        this.currentSubjectIndex = index
+        this.groupQuestion = {}
+        let groupResult = jsFn.groupBy(this.examPaperList[this.currentSubjectIndex].item, 'type')
+        for (let i = 0; i < groupResult.length; i++) {
+          this.groupQuestion[groupResult[i][0].type] = groupResult[i]
+        }
+      },
       getDate() {
 
       },
@@ -170,12 +234,21 @@
       },
       findExamPaper() {
         let requestData = {
-          examCode: this.evaluationList[this.avtiveEvaluationIndex].examCode
+          scopeCode: this.evaluationList[this.avtiveEvaluationIndex].id
         }
         this.$api.learnActivity.FindExamPaper(requestData).then(
           res => {
             if (res.error == null) {
               this.examPaperList = res.result.data
+              if (this.examPaperList.length > 0) {
+                let groupResult = jsFn.groupBy(this.examPaperList[0].item, 'type')
+                for (let i = 0; i < groupResult.length; i++) {
+                  this.groupQuestion[groupResult[i][0].type] = groupResult[i]
+                }
+              } else {
+                this.groupQuestion = {}
+              }
+              
             } else {
               this$Message.error('API ERROR!')
             }
@@ -184,6 +257,82 @@
 
           }
         )
+      },
+      checkCount(count) {
+        switch (count) {
+          case 0:
+            return '一、'
+            break
+          case 1:
+            return '二、'
+            break
+          case 2:
+            return '三、'
+            break
+          case 3:
+            return '四、'
+            break
+          case 4:
+            return '五、'
+            break
+          case 5:
+            return '六、'
+            break
+          default:
+            return ''
+            break
+        }
+      },
+      getOrder(type) {
+        let count = 0
+        switch (type) {
+          case 'Single':
+            return '一、'
+            break
+          case 'Multiple':
+            if (this.groupQuestion.Single != undefined) {
+              return '二、'
+            } else {
+              return '一、'
+            }
+            break
+          case 'Complete':
+            for (let key in this.groupQuestion) {
+              if (key == 'Single' || key == 'Multiple') {
+                count++
+              }
+            }
+            return this.checkCount(count)
+            break
+          case 'Judge':
+            
+            for (let key in this.groupQuestion) {
+              if (key == 'Single' || key == 'Complete' || key == 'Multiple') {
+                count++
+              }
+            }
+            return this.checkCount(count)
+            break
+          case 'Subjective':
+            for (let key in this.groupQuestion) {
+              if (key == 'Single' || key == 'Complete' || key == 'Multiple' || key == 'Judge') {
+                count++
+              }
+            }
+            return this.checkCount(count)
+            break
+          case 'Compose':
+            for (let key in this.groupQuestion) {
+              if (key == 'Single' || key == 'Complete' || key == 'Multiple' || key == 'Judge' || key == 'Subjective') {
+                count++
+              }
+            }
+            return this.checkCount(count)
+            break
+          default:
+            return ''
+            break
+        }
       }
     },
     mounted() {

+ 37 - 12
TEAMModelOS/ClientApp/src/view/learnactivity/TeacherPreview.vue

@@ -4,7 +4,10 @@
     padding: 10px;
     padding-bottom: 30px;">
     <vuescroll>
-      <h2 style="text-align: center; color: white; display: block;">一次函数的性质周末测试</h2>
+      <h2 style="text-align: center; color: white; display: block;">
+        {{paperName == '' ? '暂无信息':paperName}}
+        <span style="color:aqua;">{{'   (' + jsFn.getSubjectName($store.state.schoolBaseInfo.schoolBaseInfo, testPaper.subjectCode)+ ')'}}</span>
+      </h2>
       <div class="test-paper-info">
         <Row>
           <Col :xs="24" :sm="24" :md="12" :lg="6">
@@ -36,27 +39,27 @@
       </div>
       <div class="question-type-scope" v-if="groupQuestion.Single != undefined">
         <span class="question-type-count">{{getOrder('Single')}}单选题(共{{groupQuestion.Single.length}}题)</span>
-        <QuestionList :questions="groupQuestion.Single" :config="questionConfig"></QuestionList>
+        <QuestionList :questions="groupQuestion.Single" :config="questionConfig" @deleteQuestion="deleteQuestion"></QuestionList>
       </div>
       <div class="question-type-scope" v-if="groupQuestion.Multiple != undefined">
         <span class="question-type-count">{{getOrder('Multiple')}}多选题(共{{groupQuestion.Multiple.length}}题)</span>
-        <QuestionList :questions="groupQuestion.Multiple" :config="questionConfig"></QuestionList>
+        <QuestionList :questions="groupQuestion.Multiple" :config="questionConfig" @deleteQuestion="deleteQuestion"></QuestionList>
       </div>
       <div class="question-type-scope" v-if="groupQuestion.Complete != undefined">
         <span class="question-type-count">{{getOrder('Complete')}}填空题(共{{groupQuestion.Complete.length}}题)</span>
-        <QuestionList :questions="groupQuestion.Complete" :config="questionConfig"></QuestionList>
+        <QuestionList :questions="groupQuestion.Complete" :config="questionConfig" @deleteQuestion="deleteQuestion"></QuestionList>
       </div>
       <div class="question-type-scope" v-if="groupQuestion.Judge != undefined">
         <span class="question-type-count">{{getOrder('Judge')}}判断题(共{{groupQuestion.Judge.length}}题)</span>
-        <QuestionList :questions="groupQuestion.Judge" :config="questionConfig"></QuestionList>
+        <QuestionList :questions="groupQuestion.Judge" :config="questionConfig" @deleteQuestion="deleteQuestion"></QuestionList>
       </div>
       <div class="question-type-scope" v-if="groupQuestion.Subjective != undefined">
         <span class="question-type-count">{{getOrder('Subjective')}}问答题(共{{groupQuestion.Subjective.length}}题)</span>
-        <QuestionList :questions="groupQuestion.Subjective" :config="questionConfig"></QuestionList>
+        <QuestionList :questions="groupQuestion.Subjective" :config="questionConfig" @deleteQuestion="deleteQuestion"></QuestionList>
       </div>
       <div class="question-type-scope" v-if="groupQuestion.Compose != undefined">
         <span class="question-type-count">{{getOrder('Compose')}}综合题(共{{groupQuestion.Compose.length}}题)</span>
-        <QuestionList :questions="groupQuestion.Compose" :config="questionConfig"></QuestionList>
+        <QuestionList :questions="groupQuestion.Compose" :config="questionConfig" @deleteQuestion="deleteQuestion"></QuestionList>
       </div>
 
       <div style="text-align:center;margin-top:20px;margin-bottom:30px;">
@@ -73,6 +76,10 @@
       QuestionList
     },
     props: {
+      paperName: {
+        type: String,
+        default:'暂无信息'
+      },
       testPaper: {
         type: Object,
         default: () => {
@@ -84,8 +91,11 @@
     },
     data() {
       return {
+        jsFn,
         questionConfig: {
-          showScore:true
+          showScore: true,
+          showDelete: true,
+          showRemedy: true,
         },
         value1: 100,
         index: -1,
@@ -99,6 +109,25 @@
       }
     },
     methods: {
+      deleteQuestion(question) {
+        let index = this.testPaper.questions.indexOf(question)
+        if (index >= 0) {
+          this.$Modal.confirm({
+            title: '删除题目',
+            content: '确认删除此题吗?',
+            onOk: () => {
+              this.testPaper.questions.splice(index, 1)
+              let groupResult = jsFn.groupBy(this.testPaper.questions, 'type')
+              for (let i = 0; i < groupResult.length; i++) {
+                this.groupQuestion[groupResult[i][0].type] = groupResult[i]
+              }
+            },
+            onCancel: () => {
+
+            },
+          })
+        }
+      },
       saveTestPaper(testPaper, index) {
         if (this.examInfo.id == undefined) {
           this.saveEvaluation()
@@ -126,8 +155,6 @@
         }
       },
       saveTestPaper() {
-        console.log('123456789')
-        console.log(this.groupQuestion)
       },
       checkCount(count) {
         switch (count) {
@@ -212,11 +239,9 @@
       'testPaper.questions': {
         handler(newName, oldName) {
           let groupResult = jsFn.groupBy(this.testPaper.questions, 'type')
-          console.log('45678')
           for (let i = 0; i < groupResult.length; i++) {
             this.groupQuestion[groupResult[i][0].type] = groupResult[i]
           }
-          console.log(this.groupQuestion)
         },
         deep: true
       }

+ 64 - 0
TEAMModelOS/Controllers/Exam/ExamController.cs

@@ -80,6 +80,22 @@ namespace TEAMModelOS.Controllers.Exam
             return builder.Data(items).build();
         }
 
+        /// <summary>
+        /// 查询试卷
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        [HttpPost("FindExamPaperSummary")]
+        public async Task<BaseJosnRPCResponse> FindExamPaperSummary(JosnRPCRequest<Dictionary<string, object>> request)
+        {
+            JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
+            List<string> props = new List<string> {
+                "subjectCode", "id", "scopeCode", "periodCode",
+                "name","itemCount","level","pointItem","pointScore","score","itemCount","gradeCode"
+            };
+            return builder.Data(await cosmosDBV3Repository.FindByDict<ExamPaper>(request.@params , propertys: props)).build();
+        }
+
         /// <summary>
         /// 查询试卷
         /// </summary>
@@ -109,6 +125,54 @@ namespace TEAMModelOS.Controllers.Exam
             {
                 await cosmosDBV3Repository.SaveOrUpdate(request.@params);
             }
+            //Dictionary<string, Dictionary<string, List<int>>> pointItem = new Dictionary<string, Dictionary<string, List<int>>>();
+            //Dictionary<string, double> pointScore = new Dictionary<string, double>();
+            //int levs = 0;
+            ////处理每个题对知识点均分统计情况
+            //foreach (ExamItem item in request.@params.item) {
+            //    levs = levs + item.level;
+            //    if (pointItem.TryGetValue(item.type, out Dictionary<string, List<int>> type))
+            //    {
+            //        item.points.ForEach(x => {
+
+            //            if (type.TryGetValue(x, out List<int> order))
+            //            {
+            //                order.Add(item.order);
+            //            }
+            //            else
+            //            {
+            //                type.Add(x, new List<int>() { item.order });
+            //            }
+            //        });
+            //    }
+            //    else {
+            //        Dictionary<string, List<int>> dict = new Dictionary<string, List<int>>();
+            //        item.points.ForEach(x => {
+
+            //        if (dict.TryGetValue(x, out List<int> order))
+            //        {
+            //                order.Add(item.order);
+            //        }
+            //        else {
+            //                dict.Add(x, new List<int>() { item.order});
+            //            }
+            //        });
+            //    }
+            //    item.points.ForEach(x=> {
+            //        if (pointScore.TryGetValue(x, out double score))
+            //        {
+            //            //覆盖原值
+            //            pointScore[x] = score + item.score * 1.0 / item.points.Count;
+            //        }
+            //        else {
+            //            pointScore.Add(x, item.score * 1.0 / item.points.Count);
+            //        }
+            //    });
+            //}
+            //request.@params.pointItem = pointItem;
+            //request.@params.pointScore = pointScore;
+            //request.@params.itemCount = request.@params.item.Count;
+            //request.@params.level =levs*1.0/ request.@params.item.Count;
             return builder.Data(request.@params).build();
         }