Procházet zdrojové kódy

fix(server): 修复提交题目

Go před 5 roky
rodič
revize
07e8a0a8aa
17 změnil soubory, kde provedl 267 přidání a 144 odebrání
  1. 28 2
      front/project/admin/routes/subject/sentenceQuestion/page.js
  2. 27 26
      front/project/admin/routes/subject/textbookQuestion/page.js
  3. 0 35
      server/data/src/main/java/com/qxgmat/data/dao/entity/SentenceQuestion.java
  4. 0 35
      server/data/src/main/java/com/qxgmat/data/dao/entity/TextbookQuestion.java
  5. 2 3
      server/data/src/main/java/com/qxgmat/data/dao/mapping/SentenceQuestionMapper.xml
  6. 2 3
      server/data/src/main/java/com/qxgmat/data/dao/mapping/TextbookQuestionMapper.xml
  7. 8 7
      server/gateway-api/src/main/java/com/qxgmat/controller/admin/SentenceController.java
  8. 9 11
      server/gateway-api/src/main/java/com/qxgmat/controller/admin/TextbookController.java
  9. 1 1
      server/gateway-api/src/main/java/com/qxgmat/controller/api/QuestionController.java
  10. 3 3
      server/gateway-api/src/main/java/com/qxgmat/controller/api/ShopController.java
  11. 6 6
      server/gateway-api/src/main/java/com/qxgmat/dto/admin/request/QuestionDto.java
  12. 88 0
      server/gateway-api/src/main/java/com/qxgmat/dto/admin/request/SentenceQuestionDto.java
  13. 68 0
      server/gateway-api/src/main/java/com/qxgmat/dto/admin/request/TextbookQuestionDto.java
  14. 3 3
      server/gateway-api/src/main/java/com/qxgmat/dto/request/ExaminationStartDto.java
  15. 3 3
      server/gateway-api/src/main/java/com/qxgmat/dto/request/PayProductDto.java
  16. 6 6
      server/gateway-api/src/main/java/com/qxgmat/dto/request/QuestionSubmitDto.java
  17. 13 0
      server/tools/src/main/java/com/nuliji/tools/Transform.java

+ 28 - 2
front/project/admin/routes/subject/sentenceQuestion/page.js

@@ -41,10 +41,30 @@ export default class extends Page {
     if (id) {
       handler = Preview.get({ id });
     } else {
-      handler = Promise.resolve({ no: 1 });
+      handler = Promise.resolve({ no: 1, question: {} });
     }
     handler
       .then(result => {
+        result.isPaper = !!result.isPaper;
+        result.isTrail = !!result.isTrail;
+        result.question.questionType = 'sentence';
+        form.getFieldDecorator('question.answer.subject');
+        form.getFieldDecorator('question.answer.predicate');
+        form.getFieldDecorator('question.answer.object');
+        form.getFieldDecorator('question.answer.options');
+
+        form.getFieldDecorator('question.qxContent');
+        form.getFieldDecorator('question.stem');
+        form.getFieldDecorator('question.questionType');
+        form.getFieldDecorator('question.place');
+        form.getFieldDecorator('question.id');
+        form.getFieldDecorator('questionId');
+        form.getFieldDecorator('chinese');
+        form.getFieldDecorator('title');
+        form.getFieldDecorator('isPaper');
+        form.getFieldDecorator('isTrail');
+        form.getFieldDecorator('no');
+        form.getFieldDecorator('id');
         form.setFieldsValue(result);
         this.setState({ data: result });
       });
@@ -57,6 +77,7 @@ export default class extends Page {
         const data = form.getFieldsValue();
         data.isTrail = data.isTrail ? 1 : 0;
         data.isPaper = data.isPaper ? 1 : 0;
+        data.question.stem = data.quesiton.stem || '';
         data.question.description = data.question.stem.replace(/<[^>]+>/g, '');
         let handler;
         if (!data.id) {
@@ -64,8 +85,13 @@ export default class extends Page {
         } else {
           handler = Sentence.addQuestion(data);
         }
-        handler.then(() => {
+        handler.then((result) => {
           asyncSMessage('保存成功');
+          if (data.id) {
+            linkTo(`/subject/sentence/question/${data.id}`);
+          } else {
+            linkTo(`/subject/sentence/question/${result.id}`);
+          }
         }).catch((e) => {
           if (e.result) form.setFields(formatFormError(data, e.result));
         });

+ 27 - 26
front/project/admin/routes/subject/textbookQuestion/page.js

@@ -45,14 +45,16 @@ export default class extends Page {
       let { libraryId } = this.state.search;
       libraryId = Number(libraryId || 0);
       handler = Textbook.getNextQuestion({ libraryId }).then(result => {
-        return { libraryId: libraryId || '', no: result, question: { content: { number: 1, type: 'single', typeset: 'one', questions: [], steps: [] } } };
+        return { libraryId: libraryId || '', no: result, question: { content: { number: 1, type: 'single', typeset: 'one', questions: [] } } };
       });
     }
     handler
       .then(result => {
         const { questionNoIds } = result;
-        result.time = [result.startTime, result.endTime];
+        // result.time = [result.startTime, result.endTime];
         this.uuid[0] = -1;
+        let type = result.question.content.type || 'single';
+        if (type === 'inline') type = 'single';
         result.question.content.questions.forEach((row, index) => {
           const keys = [];
           this.uuid[index] = 0;
@@ -60,37 +62,27 @@ export default class extends Page {
             for (; this.uuid[index] < row.select.length; this.uuid[index] += 1) {
               keys.push(this.uuid[index]);
               form.getFieldDecorator(`question.content.questions[${index}].select[${this.uuid}]`);
-              form.getFieldDecorator(`question.content.questions[${index}].answer[${this.uuid}]`);
-            }
-            const answerMap = {};
-            row.answer.forEach(r => {
-              answerMap[r] = true;
-            });
-            row.answer = row.select.map(r => answerMap[r] || false);
-          } else if (row.answer && row.answer.length > 0) {
-            for (; this.uuid[index] < row.answer.length; this.uuid[index] += 1) {
-              keys.push(this.uuid);
-              form.getFieldDecorator(`question.content.questions[${index}].answer[${this.uuid}]`);
+              form.getFieldDecorator(`question.answer.questions[${index}].${type}[${this.uuid}]`);
             }
           }
           form.getFieldDecorator(`question.content.questions[${index}].keys`);
           row.keys = keys;
           return row;
         });
-        result.question.content.steps.forEach((row, index) => {
-          form.getFieldDecorator(`question.content.steps[${index}].title`);
-          form.getFieldDecorator(`question.content.steps[${index}].stem`);
-        });
 
-        form.getFieldDecorator('question.content.step');
         form.getFieldDecorator('question.content.number');
         form.getFieldDecorator('question.content.type');
         form.getFieldDecorator('question.content.typeset');
-        form.getFieldDecorator('libraryId');
-        form.getFieldDecorator('no');
+
+        form.getFieldDecorator('question.stem');
         form.getFieldDecorator('question.questionType');
+        form.getFieldDecorator('question.qxContent');
         form.getFieldDecorator('question.place');
         form.getFieldDecorator('question.id');
+        form.getFieldDecorator('questionId');
+        form.getFieldDecorator('libraryId');
+        form.getFieldDecorator('title');
+        form.getFieldDecorator('no');
         form.getFieldDecorator('id');
         form.setFieldsValue(result);
 
@@ -140,7 +132,11 @@ export default class extends Page {
   addQuestion(index) {
     const { form } = this.props;
     const keys = form.getFieldValue(`question.content.questions[${index}].keys`) || [];
-    this.uuid[index] += 1;
+    if (!this.uuid[index]) {
+      this.uuid[index] = 1;
+    } else {
+      this.uuid[index] += 1;
+    }
     const nextKeys = keys.concat(this.uuid[index]);
     form.setFieldsValue({
       [`question.content.questions[${index}].keys`]: nextKeys,
@@ -160,10 +156,10 @@ export default class extends Page {
 
   changeQuestion(index, k, value) {
     const { form } = this.props;
-    let answer = form.getFieldValue(`question.content.answer[${index}].single`) || [];
+    let answer = form.getFieldValue(`question.answer.questions[${index}].single`) || [];
     answer = answer.map(() => !value);
     answer[k] = !!value;
-    form.setFieldsValue({ [`question.content.answer[${index}].single`]: answer });
+    form.setFieldsValue({ [`question.answer.questions[${index}].single`]: answer });
   }
 
   submit() {
@@ -171,15 +167,20 @@ export default class extends Page {
     form.validateFields((err) => {
       if (!err) {
         const data = form.getFieldsValue();
-        [data.startTime, data.endTime] = data.time;
+        // [data.startTime, data.endTime] = data.time;
         let handler;
         if (!data.id) {
           handler = Textbook.editQuestion(data);
         } else {
           handler = Textbook.addQuestion(data);
         }
-        handler.then(() => {
+        handler.then((result) => {
           asyncSMessage('保存成功');
+          if (data.id) {
+            linkTo(`/subject/textbook/question/${data.id}`);
+          } else {
+            linkTo(`/subject/textbook/question/${result.id}`);
+          }
         }).catch((e) => {
           if (e.result) form.setFields(formatFormError(data, e.result));
         });
@@ -360,7 +361,7 @@ export default class extends Page {
     return <Block flex>
       <Form>
         <Form.Item label='千行解析'>
-          {getFieldDecorator('qxContent', {
+          {getFieldDecorator('question.qxContent', {
           })(
             <Editor placeholder='输入内容' />,
           )}

+ 0 - 35
server/data/src/main/java/com/qxgmat/data/dao/entity/SentenceQuestion.java

@@ -41,12 +41,6 @@ public class SentenceQuestion implements Serializable {
     private Integer questionId;
 
     /**
-     * 题目编号id
-     */
-    @Column(name = "`question_no_id`")
-    private Integer questionNoId;
-
-    /**
      * 总作答时间
      */
     @Column(name = "`total_time`")
@@ -174,24 +168,6 @@ public class SentenceQuestion implements Serializable {
     }
 
     /**
-     * 获取题目编号id
-     *
-     * @return question_no_id - 题目编号id
-     */
-    public Integer getQuestionNoId() {
-        return questionNoId;
-    }
-
-    /**
-     * 设置题目编号id
-     *
-     * @param questionNoId 题目编号id
-     */
-    public void setQuestionNoId(Integer questionNoId) {
-        this.questionNoId = questionNoId;
-    }
-
-    /**
      * 获取总作答时间
      *
      * @return total_time - 总作答时间
@@ -271,7 +247,6 @@ public class SentenceQuestion implements Serializable {
         sb.append(", isPaper=").append(isPaper);
         sb.append(", no=").append(no);
         sb.append(", questionId=").append(questionId);
-        sb.append(", questionNoId=").append(questionNoId);
         sb.append(", totalTime=").append(totalTime);
         sb.append(", totalNumber=").append(totalNumber);
         sb.append(", totalCorrect=").append(totalCorrect);
@@ -350,16 +325,6 @@ public class SentenceQuestion implements Serializable {
         }
 
         /**
-         * 设置题目编号id
-         *
-         * @param questionNoId 题目编号id
-         */
-        public Builder questionNoId(Integer questionNoId) {
-            obj.setQuestionNoId(questionNoId);
-            return this;
-        }
-
-        /**
          * 设置总作答时间
          *
          * @param totalTime 总作答时间

+ 0 - 35
server/data/src/main/java/com/qxgmat/data/dao/entity/TextbookQuestion.java

@@ -35,12 +35,6 @@ public class TextbookQuestion implements Serializable {
     private Integer questionId;
 
     /**
-     * 题目编号id
-     */
-    @Column(name = "`question_no_id`")
-    private Integer questionNoId;
-
-    /**
      * 总做题时间
      */
     @Column(name = "`total_time`")
@@ -153,24 +147,6 @@ public class TextbookQuestion implements Serializable {
     }
 
     /**
-     * 获取题目编号id
-     *
-     * @return question_no_id - 题目编号id
-     */
-    public Integer getQuestionNoId() {
-        return questionNoId;
-    }
-
-    /**
-     * 设置题目编号id
-     *
-     * @param questionNoId 题目编号id
-     */
-    public void setQuestionNoId(Integer questionNoId) {
-        this.questionNoId = questionNoId;
-    }
-
-    /**
      * 获取总做题时间
      *
      * @return total_time - 总做题时间
@@ -253,7 +229,6 @@ public class TextbookQuestion implements Serializable {
         sb.append(", no=").append(no);
         sb.append(", libraryId=").append(libraryId);
         sb.append(", questionId=").append(questionId);
-        sb.append(", questionNoId=").append(questionNoId);
         sb.append(", totalTime=").append(totalTime);
         sb.append(", totalNumber=").append(totalNumber);
         sb.append(", totalCorrect=").append(totalCorrect);
@@ -322,16 +297,6 @@ public class TextbookQuestion implements Serializable {
         }
 
         /**
-         * 设置题目编号id
-         *
-         * @param questionNoId 题目编号id
-         */
-        public Builder questionNoId(Integer questionNoId) {
-            obj.setQuestionNoId(questionNoId);
-            return this;
-        }
-
-        /**
          * 设置总做题时间
          *
          * @param totalTime 总做题时间

+ 2 - 3
server/data/src/main/java/com/qxgmat/data/dao/mapping/SentenceQuestionMapper.xml

@@ -11,7 +11,6 @@
     <result column="is_paper" jdbcType="INTEGER" property="isPaper" />
     <result column="no" jdbcType="INTEGER" property="no" />
     <result column="question_id" jdbcType="INTEGER" property="questionId" />
-    <result column="question_no_id" jdbcType="INTEGER" property="questionNoId" />
     <result column="total_time" jdbcType="INTEGER" property="totalTime" />
     <result column="total_number" jdbcType="INTEGER" property="totalNumber" />
     <result column="total_correct" jdbcType="INTEGER" property="totalCorrect" />
@@ -26,8 +25,8 @@
     <!--
       WARNING - @mbg.generated
     -->
-    `id`, `title`, `is_trail`, `is_paper`, `no`, `question_id`, `question_no_id`, `total_time`, 
-    `total_number`, `total_correct`
+    `id`, `title`, `is_trail`, `is_paper`, `no`, `question_id`, `total_time`, `total_number`, 
+    `total_correct`
   </sql>
   <sql id="Blob_Column_List">
     <!--

+ 2 - 3
server/data/src/main/java/com/qxgmat/data/dao/mapping/TextbookQuestionMapper.xml

@@ -10,7 +10,6 @@
     <result column="no" jdbcType="INTEGER" property="no" />
     <result column="library_id" jdbcType="INTEGER" property="libraryId" />
     <result column="question_id" jdbcType="INTEGER" property="questionId" />
-    <result column="question_no_id" jdbcType="INTEGER" property="questionNoId" />
     <result column="total_time" jdbcType="INTEGER" property="totalTime" />
     <result column="total_number" jdbcType="INTEGER" property="totalNumber" />
     <result column="total_correct" jdbcType="INTEGER" property="totalCorrect" />
@@ -20,7 +19,7 @@
     <!--
       WARNING - @mbg.generated
     -->
-    `id`, `title`, `no`, `library_id`, `question_id`, `question_no_id`, `total_time`, 
-    `total_number`, `total_correct`, `time`
+    `id`, `title`, `no`, `library_id`, `question_id`, `total_time`, `total_number`, `total_correct`, 
+    `time`
   </sql>
 </mapper>

+ 8 - 7
server/gateway-api/src/main/java/com/qxgmat/controller/admin/SentenceController.java

@@ -15,6 +15,7 @@ import com.qxgmat.data.dao.entity.Setting;
 import com.qxgmat.data.relation.entity.SentenceQuestionRelation;
 import com.qxgmat.dto.admin.request.ExerciseStructDto;
 import com.qxgmat.dto.admin.request.ManagerDto;
+import com.qxgmat.dto.admin.request.SentenceQuestionDto;
 import com.qxgmat.dto.admin.response.SentenceQuestionListDto;
 import com.qxgmat.service.SentencePaperService;
 import com.qxgmat.service.inline.*;
@@ -99,17 +100,17 @@ public class SentenceController {
 
     @RequestMapping(value = "/question/add", method = RequestMethod.POST)
     @ApiOperation(value = "添加长难句题目", httpMethod = "POST")
-    public Response<SentenceQuestion> addQuestion(@RequestBody @Validated SentenceQuestionRelation dto, HttpServletRequest request) {
-//        SentenceQuestion entity = Transform.dtoToEntity(dto);
-        SentenceQuestion entity = sentencePaperService.addQuestion(dto);
+    public Response<SentenceQuestion> addQuestion(@RequestBody @Validated SentenceQuestionDto dto, HttpServletRequest request) {
+        SentenceQuestionRelation entity = Transform.dtoToEntity(dto);
+        SentenceQuestion entityNew = sentencePaperService.addQuestion(entity);
         managerLogService.log(request);
-        return ResponseHelp.success(entity);
+        return ResponseHelp.success(entityNew);
     }
     @RequestMapping(value = "/question/edit", method = RequestMethod.PUT)
     @ApiOperation(value = "修改长难句题目", httpMethod = "PUT")
-    public Response<Boolean> editQuestion(@RequestBody @Validated SentenceQuestionRelation dto, HttpServletRequest request) {
-//        SentenceQuestion entity = Transform.dtoToEntity(dto);
-        SentenceQuestion entity = sentencePaperService.editQuestion(dto);
+    public Response<Boolean> editQuestion(@RequestBody @Validated SentenceQuestionDto dto, HttpServletRequest request) {
+        SentenceQuestionRelation entity = Transform.dtoToEntity(dto);
+        sentencePaperService.editQuestion(entity);
         managerLogService.log(request);
         return ResponseHelp.success(true);
     }

+ 9 - 11
server/gateway-api/src/main/java/com/qxgmat/controller/admin/TextbookController.java

@@ -9,14 +9,12 @@ import com.qxgmat.data.constants.enums.QuestionType;
 import com.qxgmat.data.constants.enums.SettingKey;
 import com.qxgmat.data.constants.enums.status.DirectionStatus;
 import com.qxgmat.data.dao.entity.*;
+import com.qxgmat.data.relation.entity.SentenceQuestionRelation;
 import com.qxgmat.data.relation.entity.TextbookQuestionRelation;
 import com.qxgmat.dto.admin.extend.ExercisePaperExtendDto;
 import com.qxgmat.dto.admin.extend.QuestionExtendDto;
 import com.qxgmat.dto.admin.extend.QuestionNoExtendDto;
-import com.qxgmat.dto.admin.request.ExerciseStructDto;
-import com.qxgmat.dto.admin.request.QuestionNoSearchDto;
-import com.qxgmat.dto.admin.request.TextbookLibraryDto;
-import com.qxgmat.dto.admin.request.TextbookLibraryHistoryDto;
+import com.qxgmat.dto.admin.request.*;
 import com.qxgmat.dto.admin.response.ExercisePaperListDto;
 import com.qxgmat.dto.admin.response.ExerciseQuestionListDto;
 import com.qxgmat.dto.admin.response.TextbookPaperListDto;
@@ -66,17 +64,17 @@ public class TextbookController {
 
     @RequestMapping(value = "/question/add", method = RequestMethod.POST)
     @ApiOperation(value = "添加机经题目", httpMethod = "POST")
-    public Response<TextbookQuestion> addQuestion(@RequestBody @Validated TextbookQuestionRelation dto, HttpServletRequest request) {
-//        SentenceQuestion entity = Transform.dtoToEntity(dto);
-        TextbookQuestion entity = textbookService.addQuestion(dto);
+    public Response<TextbookQuestion> addQuestion(@RequestBody @Validated TextbookQuestionDto dto, HttpServletRequest request) {
+        TextbookQuestionRelation entity = Transform.dtoToEntity(dto);
+        TextbookQuestion entityNew = textbookService.addQuestion(entity);
         managerLogService.log(request);
-        return ResponseHelp.success(entity);
+        return ResponseHelp.success(entityNew);
     }
     @RequestMapping(value = "/question/edit", method = RequestMethod.PUT)
     @ApiOperation(value = "修改机经题目", httpMethod = "PUT")
-    public Response<Boolean> editQuestion(@RequestBody @Validated TextbookQuestionRelation dto, HttpServletRequest request) {
-//        SentenceQuestion entity = Transform.dtoToEntity(dto);
-        TextbookQuestion entity = textbookService.editQuestion(dto);
+    public Response<Boolean> editQuestion(@RequestBody @Validated TextbookQuestionDto dto, HttpServletRequest request) {
+        TextbookQuestionRelation entity = Transform.dtoToEntity(dto);
+        textbookService.editQuestion(entity);
         managerLogService.log(request);
         return ResponseHelp.success(true);
     }

+ 1 - 1
server/gateway-api/src/main/java/com/qxgmat/controller/api/QuestionController.java

@@ -378,7 +378,7 @@ public class QuestionController {
     @ApiOperation(value = "提交题目答案", notes = "提交题目", httpMethod = "POST")
     public Response<Boolean> submit(@RequestBody @Validated QuestionSubmitDto dto)  {
         User user = (User) shiroHelp.getLoginUser();
-        Boolean result = questionFlowService.submit(user.getId(), dto.getUserQuestionId(), dto.getTime(), dto.getAnswer(), dto.getSetting());
+        Boolean result = questionFlowService.submit(user.getId(), dto.getUserQuestionId(), dto.getTime(), JSONObject.parseObject(JSONObject.toJSONString(dto.getAnswer())), JSONObject.parseObject(JSONObject.toJSONString(dto.getSetting())));
         return ResponseHelp.success(result);
     }
 

+ 3 - 3
server/gateway-api/src/main/java/com/qxgmat/controller/api/ShopController.java

@@ -55,7 +55,7 @@ public class ShopController {
     @ApiOperation(value = "通过微信二维码支付", notes = "通过微信二维码支付", httpMethod = "POST")
     public Response<PayResponseData> wechatQr(@RequestBody @Validated PayProductDto dto, HttpServletRequest request) throws Exception {
         User user = (User) shiroHelp.getLoginUser();
-        PayResponseData data = tradeService.pay(user.getId(), "", "", dto.getModule(), dto.getModuleExtend(), BigDecimal.valueOf(0), PayChannel.WECHAT_QR, request);
+        PayResponseData data = tradeService.pay(user.getId(), "", "", dto.getModule(), JSONObject.parseObject(JSONObject.toJSONString(dto.getModuleExtend())), BigDecimal.valueOf(0), PayChannel.WECHAT_QR, request);
         return ResponseHelp.success(data);
     }
 
@@ -63,7 +63,7 @@ public class ShopController {
     @ApiOperation(value = "通过微信内支付", notes = "通过微信内支付", httpMethod = "POST")
     public Response<PayResponseData> wechatJs(@RequestBody @Validated PayProductDto dto, HttpServletRequest request) throws Exception {
         User user = (User) shiroHelp.getLoginUser();
-        PayResponseData data = tradeService.pay(user.getId(), "", "", dto.getModule(), dto.getModuleExtend(), BigDecimal.valueOf(0), PayChannel.WECHAT_JS, request);
+        PayResponseData data = tradeService.pay(user.getId(), "", "", dto.getModule(), JSONObject.parseObject(JSONObject.toJSONString(dto.getModuleExtend())), BigDecimal.valueOf(0), PayChannel.WECHAT_JS, request);
         return ResponseHelp.success(data);
     }
 
@@ -71,7 +71,7 @@ public class ShopController {
     @ApiOperation(value = "通过支付宝二维码支付", notes = "通过支付宝二维码支付", httpMethod = "POST")
     public Response<PayResponseData> alipayQr(@RequestBody @Validated PayProductDto dto, HttpServletRequest request) throws Exception {
         User user = (User) shiroHelp.getLoginUser();
-        PayResponseData data = tradeService.pay(user.getId(), "", "", dto.getModule(), dto.getModuleExtend(), BigDecimal.valueOf(0), PayChannel.ALIPAY_QR, request);
+        PayResponseData data = tradeService.pay(user.getId(), "", "", dto.getModule(), JSONObject.parseObject(JSONObject.toJSONString(dto.getModuleExtend())), BigDecimal.valueOf(0), PayChannel.ALIPAY_QR, request);
         return ResponseHelp.success(data);
     }
 

+ 6 - 6
server/gateway-api/src/main/java/com/qxgmat/dto/admin/request/QuestionDto.java

@@ -35,9 +35,9 @@ public class QuestionDto {
 
     private Integer[] associationContent;
 
-    private JSONObject content;
+    private Object content;
 
-    private JSONObject answer;
+    private Object answer;
 
     private int[] relationQuestion;
 
@@ -113,11 +113,11 @@ public class QuestionDto {
         this.associationContent = associationContent;
     }
 
-    public JSONObject getContent() {
+    public Object getContent() {
         return content;
     }
 
-    public void setContent(JSONObject content) {
+    public void setContent(Object content) {
         this.content = content;
     }
 
@@ -137,11 +137,11 @@ public class QuestionDto {
         this.description = description;
     }
 
-    public JSONObject getAnswer() {
+    public Object getAnswer() {
         return answer;
     }
 
-    public void setAnswer(JSONObject answer) {
+    public void setAnswer(Object answer) {
         this.answer = answer;
     }
 

+ 88 - 0
server/gateway-api/src/main/java/com/qxgmat/dto/admin/request/SentenceQuestionDto.java

@@ -0,0 +1,88 @@
+package com.qxgmat.dto.admin.request;
+
+import com.nuliji.tools.annotation.Dto;
+import com.qxgmat.data.relation.entity.SentenceQuestionRelation;
+
+@Dto(entity = SentenceQuestionRelation.class)
+public class SentenceQuestionDto {
+
+    private Integer id;
+
+    private String title;
+
+    private Integer isTrail;
+
+    private Integer isPaper;
+
+    private Integer no;
+
+    private Integer questionId;
+
+    private String chinese;
+
+    private QuestionDto question;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public Integer getIsTrail() {
+        return isTrail;
+    }
+
+    public void setIsTrail(Integer isTrail) {
+        this.isTrail = isTrail;
+    }
+
+    public Integer getIsPaper() {
+        return isPaper;
+    }
+
+    public void setIsPaper(Integer isPaper) {
+        this.isPaper = isPaper;
+    }
+
+    public Integer getNo() {
+        return no;
+    }
+
+    public void setNo(Integer no) {
+        this.no = no;
+    }
+
+    public Integer getQuestionId() {
+        return questionId;
+    }
+
+    public void setQuestionId(Integer questionId) {
+        this.questionId = questionId;
+    }
+
+    public String getChinese() {
+        return chinese;
+    }
+
+    public void setChinese(String chinese) {
+        this.chinese = chinese;
+    }
+
+    public QuestionDto getQuestion() {
+        return question;
+    }
+
+    public void setQuestion(QuestionDto question) {
+        this.question = question;
+    }
+}

+ 68 - 0
server/gateway-api/src/main/java/com/qxgmat/dto/admin/request/TextbookQuestionDto.java

@@ -0,0 +1,68 @@
+package com.qxgmat.dto.admin.request;
+
+import com.nuliji.tools.annotation.Dto;
+import com.qxgmat.data.relation.entity.TextbookQuestionRelation;
+
+@Dto(entity = TextbookQuestionRelation.class)
+public class TextbookQuestionDto {
+
+    private Integer id;
+
+    private String title;
+
+    private Integer libraryId;
+
+    private Integer no;
+
+    private Integer questionId;
+
+    private QuestionDto question;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public Integer getLibraryId() {
+        return libraryId;
+    }
+
+    public void setLibraryId(Integer libraryId) {
+        this.libraryId = libraryId;
+    }
+
+    public Integer getNo() {
+        return no;
+    }
+
+    public void setNo(Integer no) {
+        this.no = no;
+    }
+
+    public Integer getQuestionId() {
+        return questionId;
+    }
+
+    public void setQuestionId(Integer questionId) {
+        this.questionId = questionId;
+    }
+
+    public QuestionDto getQuestion() {
+        return question;
+    }
+
+    public void setQuestion(QuestionDto question) {
+        this.question = question;
+    }
+}

+ 3 - 3
server/gateway-api/src/main/java/com/qxgmat/dto/request/ExaminationStartDto.java

@@ -4,7 +4,7 @@ import com.alibaba.fastjson.JSONArray;
 
 public class ExaminationStartDto {
     private Boolean disorder;
-    private JSONArray order;
+    private String[] order;
     private Integer paperId;
 
     public Integer getPaperId() {
@@ -23,11 +23,11 @@ public class ExaminationStartDto {
         this.disorder = disorder;
     }
 
-    public JSONArray getOrder() {
+    public String[] getOrder() {
         return order;
     }
 
-    public void setOrder(JSONArray order) {
+    public void setOrder(String[] order) {
         this.order = order;
     }
 }

+ 3 - 3
server/gateway-api/src/main/java/com/qxgmat/dto/request/PayProductDto.java

@@ -6,7 +6,7 @@ public class PayProductDto {
 
     private String module;
 
-    private JSONObject moduleExtend;
+    private Object moduleExtend;
 
     public String getModule() {
         return module;
@@ -16,11 +16,11 @@ public class PayProductDto {
         this.module = module;
     }
 
-    public JSONObject getModuleExtend() {
+    public Object getModuleExtend() {
         return moduleExtend;
     }
 
-    public void setModuleExtend(JSONObject moduleExtend) {
+    public void setModuleExtend(Object moduleExtend) {
         this.moduleExtend = moduleExtend;
     }
 }

+ 6 - 6
server/gateway-api/src/main/java/com/qxgmat/dto/request/QuestionSubmitDto.java

@@ -7,9 +7,9 @@ public class QuestionSubmitDto {
 
     private Integer time;
 
-    private JSONObject answer;
+    private Object answer;
 
-    private JSONObject setting;
+    private Object setting;
 
     public Integer getUserQuestionId() {
         return userQuestionId;
@@ -19,11 +19,11 @@ public class QuestionSubmitDto {
         this.userQuestionId = userQuestionId;
     }
 
-    public JSONObject getAnswer() {
+    public Object getAnswer() {
         return answer;
     }
 
-    public void setAnswer(JSONObject answer) {
+    public void setAnswer(Object answer) {
         this.answer = answer;
     }
 
@@ -35,11 +35,11 @@ public class QuestionSubmitDto {
         this.time = time;
     }
 
-    public JSONObject getSetting() {
+    public Object getSetting() {
         return setting;
     }
 
-    public void setSetting(JSONObject setting) {
+    public void setSetting(Object setting) {
         this.setting = setting;
     }
 }

+ 13 - 0
server/tools/src/main/java/com/nuliji/tools/Transform.java

@@ -57,10 +57,23 @@ public class Transform {
         modelMapper.addConverter(longToDate);
         Converter<JSONObject, JSONObject> jsonObjectConverter = new AbstractConverter<JSONObject, JSONObject>() {
             protected JSONObject convert(JSONObject source) {
+                logger.info(source.toJSONString());
                 return JSONObject.parseObject(source.toJSONString());
             }
         };
         modelMapper.addConverter(jsonObjectConverter);
+        Converter<String, JSONObject> stringJSONObjectConverter = new AbstractConverter<String, JSONObject>() {
+            protected JSONObject convert(String source) {
+                return JSONObject.parseObject(source);
+            }
+        };
+        modelMapper.addConverter(stringJSONObjectConverter);
+        Converter<Object, JSONObject> objectJSONObjectConverter = new AbstractConverter<Object, JSONObject>() {
+            protected JSONObject convert(Object source) {
+                return JSONObject.parseObject(JSONObject.toJSONString(source));
+            }
+        };
+        modelMapper.addConverter(objectJSONObjectConverter);
     }
 
     public static <S, T> T dtoToEntity(S source) {