Browse Source

编辑考试

xiatian 4 days ago
parent
commit
b3635afd9a

+ 76 - 57
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/bean/ExamVo.java

@@ -2,14 +2,8 @@ package cn.com.qmth.stmms.biz.exam.bean;
 
 import java.util.Date;
 
-import org.apache.commons.lang.StringUtils;
-
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
-
 import cn.com.qmth.stmms.biz.exam.model.Exam;
 import cn.com.qmth.stmms.biz.file.enums.FormatType;
-import cn.com.qmth.stmms.biz.mark.model.PictureConfigItem;
 import cn.com.qmth.stmms.common.enums.ExamStatus;
 import cn.com.qmth.stmms.common.enums.ExamType;
 import cn.com.qmth.stmms.common.enums.MarkMode;
@@ -449,56 +443,81 @@ public class ExamVo {
         this.excellentScore = excellentScore;
     }
 
-    public ExamVo of(Exam e) {
-        ExamVo vo = new ExamVo();
-        vo.setId(e.getId());
-        vo.setName(e.getName());
-        vo.setSchoolId(e.getSchoolId());
-        vo.setCode(e.getCode());
-        vo.setExamTime(e.getExamTime());
-        vo.setStatus(e.getStatus());
-        vo.setDescription(e.getDescription());
-        vo.setForceSpecialTag(e.isForceSpecialTag());
-        vo.setSliceConfig(e.getSliceConfig());
-        vo.setCreateTime(e.getCreateTime());
-        vo.setUpdateTime(e.getUpdateTime());
-        vo.setCreatorId(e.getCreatorId());
-        vo.setSasConfig(e.getSasConfig());
-        vo.setSheetConfig(e.getSheetConfig());
-        vo.setType(e.getType());
-        vo.setCardType(e.getCardType());
-        vo.setForbiddenInfo(e.isForbiddenInfo());
-        vo.setForbiddenScore(e.isForbiddenScore());
-        vo.setObjectiveStatus(e.getObjectiveStatus());
-        vo.setStartTime(e.getStartTime());
-        vo.setEndTime(e.getEndTime());
-        vo.setMarkMode(e.getMarkMode());
-        vo.setSheetView(e.isSheetView());
-        vo.setScanConfig(e.getScanConfig());
-        vo.setAutoScroll(e.isAutoScroll());
-        vo.setEnableSplit(e.isEnableSplit());
-        vo.setShowReject(e.isShowReject());
-        vo.setInspectUnrepeated(e.getInspectUnrepeated());
-        vo.setInspectScrollBottom(e.getInspectScrollBottom());
-        vo.setRemarkCount(e.getRemarkCount());
-        vo.setShowObjectiveScore(e.getShowObjectiveScore());
-        vo.setInspectRoundLimit(e.getInspectRoundLimit());
-        vo.setTrackCountPolicy(e.getTrackCountPolicy());
-        vo.setPictureConfig(buildPictureConfig(e.getSheetConfig()));
-        vo.setPassScore(e.getPassScore());
-        vo.setExcellentScore(e.getExcellentScore());
-        return vo;
-    }
-
-    protected String buildPictureConfig(String sheetConfig) {
-        if (StringUtils.isNotBlank(sheetConfig)) {
-            try {
-                ObjectMapper mapper = new ObjectMapper();
-                return mapper.writeValueAsString(PictureConfigItem.parse(sheetConfig));
-            } catch (JsonProcessingException e) {
-                e.printStackTrace();
-            }
-        }
-        return "";
+    public static ExamVo of(Exam from) {
+        ExamVo ret = new ExamVo();
+        ret.setId(from.getId());
+        ret.setName(from.getName());
+        ret.setSchoolId(from.getSchoolId());
+        ret.setCode(from.getCode());
+        ret.setExamTime(from.getExamTime());
+        ret.setStatus(from.getStatus());
+        ret.setDescription(from.getDescription());
+        ret.setForceSpecialTag(from.isForceSpecialTag());
+        ret.setSliceConfig(from.getSliceConfig());
+        ret.setCreateTime(from.getCreateTime());
+        ret.setUpdateTime(from.getUpdateTime());
+        ret.setCreatorId(from.getCreatorId());
+        ret.setSasConfig(from.getSasConfig());
+        ret.setSheetConfig(from.getSheetConfig());
+        ret.setType(from.getType());
+        ret.setCardType(from.getCardType());
+        ret.setForbiddenInfo(from.isForbiddenInfo());
+        ret.setForbiddenScore(from.isForbiddenScore());
+        ret.setObjectiveStatus(from.getObjectiveStatus());
+        ret.setStartTime(from.getStartTime());
+        ret.setEndTime(from.getEndTime());
+        ret.setMarkMode(from.getMarkMode());
+        ret.setSheetView(from.isSheetView());
+        ret.setScanConfig(from.getScanConfig());
+        ret.setAutoScroll(from.isAutoScroll());
+        ret.setEnableSplit(from.isEnableSplit());
+        ret.setShowReject(from.isShowReject());
+        ret.setInspectUnrepeated(from.getInspectUnrepeated());
+        ret.setInspectScrollBottom(from.getInspectScrollBottom());
+        ret.setRemarkCount(from.getRemarkCount());
+        ret.setShowObjectiveScore(from.getShowObjectiveScore());
+        ret.setInspectRoundLimit(from.getInspectRoundLimit());
+        ret.setTrackCountPolicy(from.getTrackCountPolicy());
+        ret.setPassScore(from.getPassScore());
+        ret.setExcellentScore(from.getExcellentScore());
+        return ret;
+    }
+
+    public static Exam of(ExamVo from) {
+        Exam ret = new Exam();
+        ret.setId(from.getId());
+        ret.setName(from.getName());
+        ret.setSchoolId(from.getSchoolId());
+        ret.setCode(from.getCode());
+        ret.setExamTime(from.getExamTime());
+        ret.setStatus(from.getStatus());
+        ret.setDescription(from.getDescription());
+        ret.setForceSpecialTag(from.getForceSpecialTag());
+        ret.setSliceConfig(from.getSliceConfig());
+        ret.setCreateTime(from.getCreateTime());
+        ret.setUpdateTime(from.getUpdateTime());
+        ret.setCreatorId(from.getCreatorId());
+        ret.setSasConfig(from.getSasConfig());
+        ret.setSheetConfig(from.getSheetConfig());
+        ret.setType(from.getType());
+        ret.setCardType(from.getCardType());
+        ret.setForbiddenInfo(from.getForbiddenInfo());
+        ret.setForbiddenScore(from.getForbiddenScore());
+        ret.setObjectiveStatus(from.getObjectiveStatus());
+        ret.setStartTime(from.getStartTime());
+        ret.setEndTime(from.getEndTime());
+        ret.setMarkMode(from.getMarkMode());
+        ret.setSheetView(from.getSheetView());
+        ret.setScanConfig(from.getScanConfig());
+        ret.setAutoScroll(from.getAutoScroll());
+        ret.setEnableSplit(from.getEnableSplit());
+        ret.setShowReject(from.getShowReject());
+        ret.setInspectUnrepeated(from.getInspectUnrepeated());
+        ret.setInspectScrollBottom(from.getInspectScrollBottom());
+        ret.setRemarkCount(from.getRemarkCount());
+        ret.setShowObjectiveScore(from.getShowObjectiveScore());
+        ret.setInspectRoundLimit(from.getInspectRoundLimit());
+        ret.setTrackCountPolicy(from.getTrackCountPolicy());
+        return ret;
     }
 }

+ 2 - 2
stmms-web/src/main/java/cn/com/qmth/stmms/admin/utils/CopyObjectCodeGenerator.java

@@ -11,9 +11,9 @@ public class CopyObjectCodeGenerator {
 
     private static Object ob = new ExamVo();
 
-    private static String setName = "a";
+    private static String setName = "ret";
 
-    private static String getName = "b";
+    private static String getName = "from";
 
     public static String generateCopyCode(Object source) {
         StringBuilder code = new StringBuilder();

+ 4 - 0
stmms-web/src/main/java/cn/com/qmth/stmms/api/controller/BaseApiController.java

@@ -142,4 +142,8 @@ public class BaseApiController extends BaseController {
     public WebUser getWebUser() {
         return RequestUtils.getWebUser();
     }
+
+    public ApiUser getApiUser() {
+        return RequestUtils.getApiUser();
+    }
 }

+ 105 - 23
stmms-web/src/main/java/cn/com/qmth/stmms/api/controller/admin/ExamController.java

@@ -1,32 +1,39 @@
 package cn.com.qmth.stmms.api.controller.admin;
 
-import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
-import javax.servlet.http.HttpServletRequest;
-
+import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
 
 import com.qmth.boot.core.collection.PageResult;
 
 import cn.com.qmth.stmms.api.controller.BaseApiController;
-import cn.com.qmth.stmms.api.exception.ApiException;
+import cn.com.qmth.stmms.biz.exam.bean.ExamVo;
 import cn.com.qmth.stmms.biz.exam.model.Exam;
 import cn.com.qmth.stmms.biz.exam.query.ExamSearchQuery;
 import cn.com.qmth.stmms.biz.exam.service.ExamService;
-import cn.com.qmth.stmms.biz.school.service.SchoolService;
+import cn.com.qmth.stmms.biz.mark.model.PictureConfigItem;
+import cn.com.qmth.stmms.biz.user.model.User;
 import cn.com.qmth.stmms.biz.utils.PageUtil;
+import cn.com.qmth.stmms.common.annotation.Logging;
 import cn.com.qmth.stmms.common.domain.ApiUser;
 import cn.com.qmth.stmms.common.enums.ExamStatus;
 import cn.com.qmth.stmms.common.enums.ExamType;
-import cn.com.qmth.stmms.common.utils.RequestUtils;
+import cn.com.qmth.stmms.common.enums.LogType;
+import cn.com.qmth.stmms.common.enums.ObjectiveStatus;
+import cn.com.qmth.stmms.common.enums.TrackCountPolicy;
+import net.sf.json.JSONArray;
+import net.sf.json.JSONObject;
+import net.sf.json.JsonConfig;
 
 @Controller("adminExamController")
 @RequestMapping("/api/admin/exam")
@@ -38,40 +45,115 @@ public class ExamController extends BaseApiController {
     private ExamService examService;
 
     @Autowired
-    private SchoolService schoolService;
+    // private SchoolService schoolService;
 
-    private Exam validateExam(ApiUser au, Integer examId, ExamType... types) {
-        Exam exam = examService.findById(examId);
-        if (exam == null || !validateSchool(au.getSchoolId(), exam.getSchoolId())
-                || exam.getStatus() != ExamStatus.START) {
-            throw ApiException.EXAM_NOT_ACCESSIBLED;
-        }
-        if (types != null && types.length > 0 && !Arrays.asList(types).contains(exam.getType())) {
-            throw ApiException.QUERY_PARAM_ERROR.replaceMessage("exam type invalid");
-        }
-        return exam;
-    }
+    // private Exam validateExam(ApiUser au, Integer examId, ExamType... types)
+    // {
+    // Exam exam = examService.findById(examId);
+    // if (exam == null || !validateSchool(au.getSchoolId(), exam.getSchoolId())
+    // || exam.getStatus() != ExamStatus.START) {
+    // throw ApiException.EXAM_NOT_ACCESSIBLED;
+    // }
+    // if (types != null && types.length > 0 &&
+    // !Arrays.asList(types).contains(exam.getType())) {
+    // throw ApiException.QUERY_PARAM_ERROR.replaceMessage("exam type invalid");
+    // }
+    // return exam;
+    // }
 
-    @RequestMapping(value = "/list", method = RequestMethod.POST)
+    @RequestMapping(value = "list", method = RequestMethod.POST)
     @ResponseBody
-    public PageResult<Exam> list(HttpServletRequest request, ExamSearchQuery query) {
-        ApiUser user = RequestUtils.getApiUser(request);
+    public PageResult<Exam> list(ExamSearchQuery query) {
+        ApiUser user = getApiUser();
         query.setSchoolId(user.getSchoolId());
         query.orderByIdDesc();
         query = examService.findByQuery(query);
         return PageUtil.of(query);
     }
 
-    @RequestMapping(value = "/types", method = RequestMethod.POST)
+    @RequestMapping(value = "types", method = RequestMethod.POST)
     @ResponseBody
     public List<ExamType> examTypeList() {
         return Arrays.asList(ExamType.values());
     }
 
-    @RequestMapping(value = "/status", method = RequestMethod.POST)
+    @RequestMapping(value = "status", method = RequestMethod.POST)
     @ResponseBody
     public List<ExamStatus> statusLlist() {
         return Arrays.asList(ExamStatus.values());
     }
 
+    @ResponseBody
+    @RequestMapping(value = "find", method = RequestMethod.POST)
+    public ExamVo find(@RequestParam Integer examId) {
+        Exam exam = examService.findById(examId);
+        return ExamVo.of(exam);
+    }
+
+    @ResponseBody
+    @Logging(menu = "创建考试", type = LogType.ADD)
+    @RequestMapping(value = "save", method = RequestMethod.POST)
+    public void save(@RequestBody ExamVo vo) {
+        User user = getApiUser().getUser();
+        Exam exam = ExamVo.of(vo);
+        exam.setSchoolId(user.getSchoolId());
+        exam.setCreatorId(user.getId());
+        exam.setStatus(ExamStatus.START);
+        exam.setTrackCountPolicy(TrackCountPolicy.LE);
+        exam.setObjectiveStatus(ObjectiveStatus.WAITING);
+        if (exam.getType().equals(ExamType.MULTI_MEDIA)) {
+            exam.setForceSpecialTag(false);
+        }
+        JSONObject sasConfig = new JSONObject();
+        sasConfig.accumulate("passScore", vo.getPassScore());
+        sasConfig.accumulate("excellentScore", vo.getExcellentScore());
+        exam.setSasConfig(sasConfig.toString());
+        exam = examService.save(exam);
+    }
+
+    @ResponseBody
+    @Logging(menu = "编辑考试", type = LogType.UPDATE)
+    @SuppressWarnings("unchecked")
+    @RequestMapping(value = "edit", method = RequestMethod.POST)
+    public void edit(@RequestBody ExamVo exam) {
+        User user = getApiUser().getUser();
+        Exam oldExam = examService.findById(exam.getId());
+        if (oldExam != null && oldExam.getSchoolId().equals(user.getSchoolId())) {
+            oldExam.setName(exam.getName());
+            oldExam.setExamTime(exam.getExamTime());
+            oldExam.setDescription(exam.getDescription());
+            oldExam.setStatus(exam.getStatus());
+            oldExam.setForceSpecialTag(exam.getForceSpecialTag());
+            oldExam.setForbiddenInfo(exam.getForbiddenInfo());
+            if (exam.getForbiddenInfo()) {
+                oldExam.setForbiddenScore(exam.getForbiddenScore());
+            } else {
+                oldExam.setForbiddenScore(false);
+            }
+            oldExam.setEnableSplit(exam.getEnableSplit());
+            oldExam.setAutoScroll(exam.getAutoScroll());
+            oldExam.setShowReject(exam.getShowReject());
+            JSONObject sasConfig = new JSONObject();
+            sasConfig.accumulate("passScore", exam.getPassScore());
+            sasConfig.accumulate("excellentScore", exam.getExcellentScore());
+            oldExam.setSasConfig(sasConfig.toString());
+            if (StringUtils.isNotBlank(exam.getSheetConfig())) {
+                String sheetConfig = exam.getSheetConfig();
+                JSONArray array = JSONArray.fromObject(sheetConfig);
+                List<PictureConfigItem> list = JSONArray.toList(array, new PictureConfigItem(), new JsonConfig());
+                oldExam.setSheetConfig(list == null ? null : StringUtils.join(list, PictureConfigItem.DB_ITEM_JOINER));
+            }
+            oldExam.setStartTime(exam.getStartTime());
+            oldExam.setEndTime(exam.getEndTime());
+            oldExam.setMarkMode(exam.getMarkMode());
+            oldExam.setSheetView(exam.getSheetView());
+            oldExam.setInspectScrollBottom(exam.getInspectScrollBottom());
+            oldExam.setInspectUnrepeated(exam.getInspectUnrepeated());
+            oldExam.setShowObjectiveScore(exam.getShowObjectiveScore());
+            oldExam.setRemarkCount(exam.getRemarkCount());
+            oldExam.setInspectRoundLimit(exam.getInspectRoundLimit());
+            oldExam.setTrackCountPolicy(exam.getTrackCountPolicy());
+            examService.save(oldExam);
+        }
+    }
 }

+ 5 - 5
stmms-web/src/main/java/cn/com/qmth/stmms/api/controller/admin/RoleController.java

@@ -25,7 +25,7 @@ import cn.com.qmth.stmms.biz.basic.service.RoleInfoService;
 import cn.com.qmth.stmms.biz.basic.service.RolePrivilegeService;
 import cn.com.qmth.stmms.biz.exception.StatusException;
 import cn.com.qmth.stmms.biz.utils.PageUtil;
-import cn.com.qmth.stmms.common.domain.WebUser;
+import cn.com.qmth.stmms.common.domain.ApiUser;
 
 @Controller
 @RequestMapping("/api/admin/role")
@@ -65,7 +65,7 @@ public class RoleController extends BaseApiController {
     @ResponseBody
     @RequestMapping(value = "privilege/codes", method = RequestMethod.POST)
     public Set<String> privilegeCodes() {
-        WebUser wu = getWebUser();
+        ApiUser wu = getApiUser();
         return rolePrivilegeService.getRoleCodes(wu.getUser().getSchoolId(), wu.getRole());
     }
 
@@ -84,7 +84,7 @@ public class RoleController extends BaseApiController {
     @ResponseBody
     @RequestMapping(value = "privilege/menu", method = RequestMethod.POST)
     public List<Privilege> privilegeMenu() {
-        WebUser wu = getWebUser();
+        ApiUser wu = getApiUser();
         List<Privilege> ps = privilegeService.getMenuPrivileges();
         Set<String> codes = rolePrivilegeService.getRoleCodes(wu.getUser().getSchoolId(), wu.getRole());
         List<Privilege> ret = new ArrayList<>();
@@ -105,8 +105,8 @@ public class RoleController extends BaseApiController {
         if (domain.getSchoolId() == null) {
             throw new StatusException("SchoolId不能为空");
         }
-        WebUser wu = getWebUser();
-        domain.setUserId(wu.getId());
+        ApiUser wu = getApiUser();
+        domain.setUserId(wu.getUser().getId());
         rolePrivilegeService.save(domain);
     }
 

+ 10 - 0
stmms-web/src/main/java/cn/com/qmth/stmms/common/utils/RequestUtils.java

@@ -89,6 +89,16 @@ public class RequestUtils {
         request.setAttribute(REQUEST_VERSION_NAME, VersionInfo.NAME);
     }
 
+    public static ApiUser getApiUser() {
+        HttpServletRequest request = getRequest();
+        Object obj = request.getAttribute(REQUEST_API_USER_KEY);
+        if (obj != null && obj instanceof ApiUser) {
+            return (ApiUser) obj;
+        } else {
+            return null;
+        }
+    }
+
     public static ApiUser getApiUser(HttpServletRequest request) {
         Object obj = request.getAttribute(REQUEST_API_USER_KEY);
         if (obj != null && obj instanceof ApiUser) {