From fdaba78e25c457c48c4581cc84635b63d6363176 Mon Sep 17 00:00:00 2001
From: fuliqi <fuliqi@qq.com>
Date: 星期五, 07 六月 2024 11:30:06 +0800
Subject: [PATCH] 新增模板及校验

---
 src/main/java/com/ycl/jxkg/domain/vo/ExamTemplateVO.java                |    3 +
 src/main/java/com/ycl/jxkg/controller/admin/ExamTemplateController.java |   11 +++++
 src/main/resources/mapper/ExamTemplateMapper.xml                        |    3 +
 src/main/java/com/ycl/jxkg/service/impl/ExamTemplateServiceImpl.java    |   63 +++++++++++++++++++++++++++++++
 src/main/java/com/ycl/jxkg/domain/entity/ExamTemplate.java              |   11 ++++-
 src/main/java/com/ycl/jxkg/domain/form/ExamTemplateForm.java            |   23 ++++++-----
 src/main/java/com/ycl/jxkg/enums/VisibilityEnum.java                    |    2 
 7 files changed, 102 insertions(+), 14 deletions(-)

diff --git a/src/main/java/com/ycl/jxkg/controller/admin/ExamTemplateController.java b/src/main/java/com/ycl/jxkg/controller/admin/ExamTemplateController.java
index be8a3ad..e8ebd12 100644
--- a/src/main/java/com/ycl/jxkg/controller/admin/ExamTemplateController.java
+++ b/src/main/java/com/ycl/jxkg/controller/admin/ExamTemplateController.java
@@ -1,10 +1,13 @@
 package com.ycl.jxkg.controller.admin;
 
+import com.ycl.jxkg.base.SystemCode;
 import com.ycl.jxkg.group.Update;
 import com.ycl.jxkg.group.Add;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.security.access.prepost.PreAuthorize;
 import lombok.RequiredArgsConstructor;
+
+import java.math.BigDecimal;
 import java.util.List;
 import org.springframework.validation.annotation.Validated;
 import javax.validation.constraints.NotEmpty;
@@ -16,6 +19,9 @@
 import com.ycl.jxkg.domain.query.ExamTemplateQuery;
 import lombok.RequiredArgsConstructor;
 import org.springframework.web.bind.annotation.*;
+
+import static com.ycl.jxkg.enums.DeductTypeEnum.EachCorrect;
+import static com.ycl.jxkg.enums.DeductTypeEnum.PartCorrect;
 
 /**
  * 闅忔満璇曞嵎妯℃澘 鍓嶇鎺у埗鍣�
@@ -31,10 +37,13 @@
 public class ExamTemplateController {
 
     private final ExamTemplateService examTemplateService;
-
     @PostMapping
     @ApiOperation(value = "娣诲姞", notes = "娣诲姞")
     public Result add(@RequestBody @Validated(Add.class) ExamTemplateForm form) {
+        //鍙傛暟鏍¢獙
+        if(form.getDeductType()!=null && (form.getDeductType() ==PartCorrect.getCode() || form.getDeductType() == EachCorrect.getCode()) && (form.getDeductTypeScore() ==null || form.getDeductTypeScore().compareTo(BigDecimal.ZERO) <= 0)){
+                return Result.fail(SystemCode.ParameterValidError.getCode(),"澶氶�夎瘎鍒嗕笉鑳戒负0鎴栫┖");
+        }
         return examTemplateService.add(form);
     }
 
diff --git a/src/main/java/com/ycl/jxkg/domain/entity/ExamTemplate.java b/src/main/java/com/ycl/jxkg/domain/entity/ExamTemplate.java
index b3f3ce9..1e31949 100644
--- a/src/main/java/com/ycl/jxkg/domain/entity/ExamTemplate.java
+++ b/src/main/java/com/ycl/jxkg/domain/entity/ExamTemplate.java
@@ -3,9 +3,11 @@
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.ycl.jxkg.domain.base.AbsEntity;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.math.BigDecimal;
+import java.util.Date;
 
 /**
  * 闅忔満璇曞嵎妯℃澘
@@ -29,7 +31,7 @@
 
     @TableField("score")
     /** 鎬诲垎 */
-    private Integer score;
+    private BigDecimal score;
 
     @TableField("visibility")
     /** 鏄惁绉佹湁 */
@@ -42,6 +44,9 @@
     @TableField("deduct_type")
     /** 澶氶�夋墸鍒嗙被鍨� */
     private Integer deductType;
+
+    @TableField("deduct_type_score")
+    private BigDecimal deductTypeScore;
 
     @TableField("single_choice")
     /** 鍗曢�夐鏁伴噺 */
@@ -95,5 +100,7 @@
     /**  */
     private Integer createUser;
 
-
+    @TableField("create_time")
+    /**  */
+    private Date createTime;
 }
diff --git a/src/main/java/com/ycl/jxkg/domain/form/ExamTemplateForm.java b/src/main/java/com/ycl/jxkg/domain/form/ExamTemplateForm.java
index af2310f..7da12f5 100644
--- a/src/main/java/com/ycl/jxkg/domain/form/ExamTemplateForm.java
+++ b/src/main/java/com/ycl/jxkg/domain/form/ExamTemplateForm.java
@@ -1,20 +1,20 @@
 package com.ycl.jxkg.domain.form;
 
-import com.ycl.jxkg.domain.question.TemplateQuestionDTO;
-import com.ycl.jxkg.group.Update;
-import com.ycl.jxkg.group.Add;
 import com.ycl.jxkg.domain.base.AbsForm;
 import com.ycl.jxkg.domain.entity.ExamTemplate;
-import org.springframework.beans.BeanUtils;
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
-import org.springframework.lang.NonNull;
+import com.ycl.jxkg.domain.question.TemplateQuestionDTO;
+import com.ycl.jxkg.group.Add;
+import com.ycl.jxkg.group.Update;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import org.springframework.beans.BeanUtils;
+import org.springframework.lang.NonNull;
 
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
 import java.math.BigDecimal;
-import java.util.Date;
 import java.util.List;
 
 /**
@@ -36,18 +36,21 @@
     private Integer subjectId;
 
     @ApiModelProperty("鎬诲垎")
-    private Integer score;
+    private BigDecimal score;
 
     @ApiModelProperty("鏄惁绉佹湁")
     private String visibility;
 
-    @NotNull(message = "寤鸿鏃堕棿涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @Min(value = 1,message = "寤鸿鏃堕棿蹇呴』澶т簬0",groups = {Add.class, Update.class})
     @ApiModelProperty("寤鸿鏃堕棿")
     private Integer suggestTime;
 
     @ApiModelProperty("澶氶�夋墸鍒嗙被鍨�")
     private Integer deductType;
 
+    @ApiModelProperty("澶氶�夋墸鍒�")
+    private BigDecimal deductTypeScore;
+
     @ApiModelProperty("棰樼洰妯℃澘")
     private List<TemplateQuestionDTO> questionList;
 
diff --git a/src/main/java/com/ycl/jxkg/domain/vo/ExamTemplateVO.java b/src/main/java/com/ycl/jxkg/domain/vo/ExamTemplateVO.java
index 112047e..b887805 100644
--- a/src/main/java/com/ycl/jxkg/domain/vo/ExamTemplateVO.java
+++ b/src/main/java/com/ycl/jxkg/domain/vo/ExamTemplateVO.java
@@ -39,6 +39,9 @@
     /** 澶氶�夋墸鍒嗙被鍨� */
     private Integer deductType;
 
+    /** 澶氶�夎瘎鍒� */
+    private BigDecimal deductTypeScore;
+
     /** 鍗曢�夐鏁伴噺 */
     private Integer singleChoice;
 
diff --git a/src/main/java/com/ycl/jxkg/enums/VisibilityEnum.java b/src/main/java/com/ycl/jxkg/enums/VisibilityEnum.java
index d5bea92..8007bf7 100644
--- a/src/main/java/com/ycl/jxkg/enums/VisibilityEnum.java
+++ b/src/main/java/com/ycl/jxkg/enums/VisibilityEnum.java
@@ -1,4 +1,4 @@
-package com.ycl.jxkg.domain.enums;
+package com.ycl.jxkg.enums;
 
 import java.util.HashMap;
 import java.util.Map;
diff --git a/src/main/java/com/ycl/jxkg/service/impl/ExamTemplateServiceImpl.java b/src/main/java/com/ycl/jxkg/service/impl/ExamTemplateServiceImpl.java
index 20bea45..d682060 100644
--- a/src/main/java/com/ycl/jxkg/service/impl/ExamTemplateServiceImpl.java
+++ b/src/main/java/com/ycl/jxkg/service/impl/ExamTemplateServiceImpl.java
@@ -1,7 +1,12 @@
 package com.ycl.jxkg.service.impl;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.ycl.jxkg.context.WebContext;
 import com.ycl.jxkg.domain.entity.ExamTemplate;
+import com.ycl.jxkg.domain.entity.User;
+import com.ycl.jxkg.domain.question.TemplateQuestionDTO;
+import com.ycl.jxkg.enums.QuestionTypeEnum;
+import com.ycl.jxkg.enums.VisibilityEnum;
 import com.ycl.jxkg.mapper.ExamTemplateMapper;
 import com.ycl.jxkg.service.ExamTemplateService;
 import com.ycl.jxkg.base.Result;
@@ -9,12 +14,21 @@
 import com.ycl.jxkg.domain.form.ExamTemplateForm;
 import com.ycl.jxkg.domain.vo.ExamTemplateVO;
 import com.ycl.jxkg.domain.query.ExamTemplateQuery;
+import io.swagger.models.auth.In;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.core.context.SecurityContext;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.security.core.userdetails.UserDetails;
 import org.springframework.stereotype.Service;
 import lombok.RequiredArgsConstructor;
 import com.ycl.jxkg.utils.PageUtil;
 import org.springframework.beans.BeanUtils;
 import org.springframework.util.Assert;
+import org.springframework.util.StringUtils;
 
+import java.math.BigDecimal;
+import java.security.Security;
+import java.util.Date;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -28,6 +42,9 @@
 @RequiredArgsConstructor
 public class ExamTemplateServiceImpl extends ServiceImpl<ExamTemplateMapper, ExamTemplate> implements ExamTemplateService {
 
+    @Autowired
+    protected WebContext webContext;
+
     private final ExamTemplateMapper examTemplateMapper;
 
     /**
@@ -38,6 +55,52 @@
     @Override
     public Result add(ExamTemplateForm form) {
         ExamTemplate entity = ExamTemplateForm.getEntityByForm(form, null);
+        User currentUser = webContext.getCurrentUser();
+        entity.setCreateUser(currentUser.getId());
+        entity.setCreateTime(new Date());
+        if(!StringUtils.isEmpty(entity.getVisibility())) {
+            entity.setVisibility(VisibilityEnum.fromCode(Integer.parseInt(entity.getVisibility())).getName());
+        }
+        List<TemplateQuestionDTO> questionList = form.getQuestionList();
+        BigDecimal score = BigDecimal.ZERO;
+        //璁剧疆棰樼洰淇℃伅
+        for (TemplateQuestionDTO dto : questionList) {
+            score = score.add(dto.getScore().multiply(BigDecimal.valueOf(dto.getNum())));
+            Integer questionType = dto.getQuestionType();
+            switch (QuestionTypeEnum.fromCode(questionType)){
+                //鍗曢��
+                case SingleChoice:
+                    entity.setSingleChoice(dto.getNum());
+                    entity.setSingleScore(dto.getScore());
+                    break;
+                //澶氶��
+                case MultipleChoice:
+                    entity.setMultipleChoice(dto.getNum());
+                    entity.setMultipleScore(dto.getScore());
+                    break;
+                //鍒ゆ柇
+                case TrueFalse:
+                    entity.setTrueFalse(dto.getNum());
+                    entity.setTrueFalseScore(dto.getScore());
+                    break;
+                //濉┖
+                case GapFilling:
+                    entity.setGapFilling(dto.getNum());
+                    entity.setGapScore(dto.getScore());
+                    break;
+                //绠�绛�
+                case ShortAnswer:
+                    entity.setShortAnswer(dto.getNum());
+                    entity.setShortAnswerScore(dto.getScore());
+                    break;
+                //璁$畻
+                case Calculation:
+                    entity.setCalculation(dto.getNum());
+                    entity.setCalculationScore(dto.getScore());
+                    break;
+            }
+        }
+        entity.setScore(score);
         baseMapper.insert(entity);
         return Result.ok("娣诲姞鎴愬姛");
     }
diff --git a/src/main/resources/mapper/ExamTemplateMapper.xml b/src/main/resources/mapper/ExamTemplateMapper.xml
index a2ca3f5..31a41a8 100644
--- a/src/main/resources/mapper/ExamTemplateMapper.xml
+++ b/src/main/resources/mapper/ExamTemplateMapper.xml
@@ -10,6 +10,7 @@
         <result column="visibility" property="visibility" />
         <result column="suggest_time" property="suggestTime" />
         <result column="deduct_type" property="deductType" />
+        <result column="deduct_type_score" property="deductTypeScore" />
         <result column="single_choice" property="singleChoice" />
         <result column="multiple_choice" property="multipleChoice" />
         <result column="gap_filling" property="gapFilling" />
@@ -40,6 +41,7 @@
             TET.visibility,
             TET.suggest_time,
             TET.deduct_type,
+            TET.deduct_type_score,
             TET.single_choice,
             TET.multiple_choice,
             TET.gap_filling,
@@ -70,6 +72,7 @@
             TET.visibility,
             TET.suggest_time,
             TET.deduct_type,
+            TET.deduct_type_score,
             TET.single_choice,
             TET.multiple_choice,
             TET.gap_filling,

--
Gitblit v1.8.0