xiatian 2 жил өмнө
parent
commit
f9b5c1961d
25 өөрчлөгдсөн 333 нэмэгдсэн , 83 устгасан
  1. 11 6
      db/init.sql
  2. 1 1
      src/main/java/cn/com/qmth/mps/bean/ImportMsg.java
  3. 32 6
      src/main/java/cn/com/qmth/mps/controller/PaperController.java
  4. 3 3
      src/main/java/cn/com/qmth/mps/controller/UserController.java
  5. 9 0
      src/main/java/cn/com/qmth/mps/dao/ExamDao.java
  6. 7 0
      src/main/java/cn/com/qmth/mps/entity/ExamEntity.java
  7. 9 0
      src/main/java/cn/com/qmth/mps/entity/PaperDetailUnitEntity.java
  8. 9 0
      src/main/java/cn/com/qmth/mps/entity/SchoolEntity.java
  9. 2 0
      src/main/java/cn/com/qmth/mps/service/CourseService.java
  10. 9 0
      src/main/java/cn/com/qmth/mps/service/ExamService.java
  11. 7 0
      src/main/java/cn/com/qmth/mps/service/PaperService.java
  12. 2 0
      src/main/java/cn/com/qmth/mps/service/impl/AuthServiceImpl.java
  13. 14 0
      src/main/java/cn/com/qmth/mps/service/impl/CourseServiceImpl.java
  14. 15 0
      src/main/java/cn/com/qmth/mps/service/impl/ExamServiceImpl.java
  15. 129 0
      src/main/java/cn/com/qmth/mps/service/impl/PaperServiceImpl.java
  16. 18 36
      src/main/java/cn/com/qmth/mps/service/impl/UserServiceImpl.java
  17. 3 3
      src/main/java/cn/com/qmth/mps/util/AuthorizationCreateUtil.java
  18. 8 0
      src/main/java/cn/com/qmth/mps/vo/exam/ExamDomain.java
  19. 8 0
      src/main/java/cn/com/qmth/mps/vo/exam/ExamVo.java
  20. 0 16
      src/main/java/cn/com/qmth/mps/vo/paper/PaperVo.java
  21. 10 0
      src/main/java/cn/com/qmth/mps/vo/school/SchoolDomain.java
  22. 10 0
      src/main/java/cn/com/qmth/mps/vo/school/SchoolVo.java
  23. 9 6
      src/main/resources/application-test.properties
  24. 8 6
      src/main/resources/application.properties
  25. BIN
      src/main/resources/importtemplates/courseImport.xlsx

+ 11 - 6
db/init.sql

@@ -38,9 +38,11 @@ CREATE TABLE `mps_exam` (
   `updater_id` bigint DEFAULT NULL,
   `exam_status` varchar(255) COLLATE utf8_bin NOT NULL,
   `name` varchar(255) COLLATE utf8_bin NOT NULL,
+  `code` varchar(255) COLLATE utf8_bin NOT NULL,
   `school_id` bigint NOT NULL,
   PRIMARY KEY (`id`),
-  UNIQUE KEY `IDX_EXAM_01` (`school_id`,`name`)
+  UNIQUE KEY `IDX_EXAM_01` (`school_id`,`name`),
+  UNIQUE KEY `IDX_EXAM_02` (`school_id`,`code`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
 
 -- ----------------------------
@@ -55,14 +57,14 @@ CREATE TABLE `mps_paper` (
   `updater_id` bigint DEFAULT NULL,
   `course_id` bigint NOT NULL,
   `exam_id` bigint NOT NULL,
-  `group_finish` bit(1) DEFAULT NULL,
+  `group_finish` bit(1) NOT NULL,
   `group_info` text COLLATE utf8_bin,
-  `objective_score` double DEFAULT NULL,
+  `objective_score` double NOT NULL,
   `paper_type` varchar(255) COLLATE utf8_bin DEFAULT NULL,
   `school_id` bigint NOT NULL,
   `struct_info` text COLLATE utf8_bin,
-  `subjective_score` double DEFAULT NULL,
-  `total_score` double DEFAULT NULL,
+  `subjective_score` double NOT NULL,
+  `total_score` double NOT NULL,
   PRIMARY KEY (`id`),
   UNIQUE KEY `IDX_PAPER_01` (`school_id`,`exam_id`,`course_id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
@@ -97,6 +99,7 @@ CREATE TABLE `mps_paper_detail_unit` (
   `detail_id` bigint NOT NULL,
   `detail_number` int NOT NULL,
   `number` int NOT NULL,
+  `objective` bit(1) NOT NULL,
   `paper_id` bigint NOT NULL,
   `score` double NOT NULL,
   `score_step` double NOT NULL,
@@ -207,10 +210,12 @@ CREATE TABLE `mps_school` (
   `contacts` varchar(255) COLLATE utf8_bin DEFAULT NULL,
   `enable` bit(1) NOT NULL,
   `name` varchar(255) COLLATE utf8_bin NOT NULL,
+  `code` varchar(255) COLLATE utf8_bin NOT NULL,
   `region` varchar(255) COLLATE utf8_bin DEFAULT NULL,
   `telephone` varchar(255) COLLATE utf8_bin DEFAULT NULL,
   PRIMARY KEY (`id`),
-  UNIQUE KEY `IDX_SCHOOL_01` (`name`)
+  UNIQUE KEY `IDX_SCHOOL_01` (`name`),
+  UNIQUE KEY `IDX_SCHOOL_02` (`code`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
 
 -- ----------------------------

+ 1 - 1
src/main/java/cn/com/qmth/mps/bean/UserImportMsg.java → src/main/java/cn/com/qmth/mps/bean/ImportMsg.java

@@ -2,7 +2,7 @@ package cn.com.qmth.mps.bean;
 
 import java.util.List;
 
-public class UserImportMsg {
+public class ImportMsg {
 	private Boolean hasError;
 	private List<String> errMsg;
 	public Boolean getHasError() {

+ 32 - 6
src/main/java/cn/com/qmth/mps/controller/PaperController.java

@@ -4,6 +4,8 @@ import java.util.List;
 
 import javax.servlet.http.HttpServletResponse;
 
+import org.apache.commons.collections4.CollectionUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -17,7 +19,9 @@ import com.qmth.boot.api.annotation.BOOL;
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.boot.core.collection.PageResult;
 
+import cn.com.qmth.mps.bean.ImportMsg;
 import cn.com.qmth.mps.bean.PaperGroup;
+import cn.com.qmth.mps.service.PaperService;
 import cn.com.qmth.mps.util.ResouceUtil;
 import cn.com.qmth.mps.vo.paper.GroupVo;
 import cn.com.qmth.mps.vo.paper.PaperQuery;
@@ -32,23 +36,45 @@ import io.swagger.annotations.ApiOperation;
 @Aac(strict = BOOL.FALSE, auth = BOOL.TRUE)
 public class PaperController extends BaseController {
 	
+	@Autowired
+	private PaperService paperService;
 	
 	@PostMapping("import-course")
 	@ApiOperation(value = "导入科目")
-	public void importPaper(@RequestParam Long examId, @RequestParam MultipartFile file) {
+	public ImportMsg importPaper(@RequestParam Long examId, @RequestParam MultipartFile file) {
+		List<String> failRecords=paperService.importPaper(examId,getAccessUser(),file);
+		ImportMsg msg = new ImportMsg();
+		msg.setHasError(CollectionUtils.isNotEmpty(failRecords));
+		msg.setErrMsg(failRecords);
+		return msg;
 	}
+	
+	@PostMapping("import-struct-subject")
+	@ApiOperation(value = "导入主观题试卷结构")
+	public ImportMsg importSubjectStruct(@RequestParam Long examId, @RequestParam MultipartFile file) {
+		List<String> failRecords=paperService.importPaper(examId,getAccessUser(),file);
+		ImportMsg msg = new ImportMsg();
+		msg.setHasError(CollectionUtils.isNotEmpty(failRecords));
+		msg.setErrMsg(failRecords);
+		return msg;
+	}
+	
 
 	@ApiOperation(value = "下载科目导入模板")
 	@PostMapping("template-course")
 	public void getImportTemplate() {
 		exportFile("科目导入模板.xlsx", ResouceUtil.getStream("importtemplates/courseImport.xlsx"));
 	}
-
-	@ApiOperation(value = "导出")
-	@PostMapping("export")
-	public void export(PaperQuery query, HttpServletResponse response) {
+	@ApiOperation(value = "下载试卷结构导入模板")
+	@PostMapping("template-struct")
+	public void getStructImportTemplate() {
+		exportFile("试卷结构导入模板.xlsx", ResouceUtil.getStream("importtemplates/structImport.xlsx"));
 	}
-
+	@ApiOperation(value = "导出主观题")
+	@PostMapping("export-subjective")
+	public void exportSubjective(PaperQuery query, HttpServletResponse response) {
+	}
+	
 
 	@ApiOperation(value = "获取分页")
 	@RequestMapping(value = "page", method = RequestMethod.POST)

+ 3 - 3
src/main/java/cn/com/qmth/mps/controller/UserController.java

@@ -16,8 +16,8 @@ import com.qmth.boot.api.annotation.BOOL;
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.boot.core.collection.PageResult;
 
+import cn.com.qmth.mps.bean.ImportMsg;
 import cn.com.qmth.mps.bean.User;
-import cn.com.qmth.mps.bean.UserImportMsg;
 import cn.com.qmth.mps.service.UserService;
 import cn.com.qmth.mps.util.ResouceUtil;
 import cn.com.qmth.mps.vo.user.UserDomain;
@@ -42,10 +42,10 @@ public class UserController extends BaseController {
 
 	@PostMapping("import")
 	@ApiOperation(value = "导入")
-	public UserImportMsg importUser(@RequestParam Long schoolId, @RequestParam MultipartFile file) {
+	public ImportMsg importUser(@RequestParam Long schoolId, @RequestParam MultipartFile file) {
 		User user = getAccessUser();
 		List<String> failRecords = userService.importUser(schoolId,user, file);
-		UserImportMsg msg = new UserImportMsg();
+		ImportMsg msg = new ImportMsg();
 		msg.setHasError(CollectionUtils.isNotEmpty(failRecords));
 		msg.setErrMsg(failRecords);
 		return msg;

+ 9 - 0
src/main/java/cn/com/qmth/mps/dao/ExamDao.java

@@ -0,0 +1,9 @@
+package cn.com.qmth.mps.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+import cn.com.qmth.mps.entity.ExamEntity;
+
+public interface ExamDao extends BaseMapper<ExamEntity> {
+
+}

+ 7 - 0
src/main/java/cn/com/qmth/mps/entity/ExamEntity.java

@@ -8,6 +8,7 @@ import cn.com.qmth.mps.enums.ExamStatus;
 public class ExamEntity extends AuditingEntity {
 	private static final long serialVersionUID = 3104183197745226731L;
 	private Long schoolId;
+	private String code;
 	private String name;
 	private ExamStatus examStatus;
 	
@@ -30,6 +31,12 @@ public class ExamEntity extends AuditingEntity {
 	public void setExamStatus(ExamStatus examStatus) {
 		this.examStatus = examStatus;
 	}
+	public String getCode() {
+		return code;
+	}
+	public void setCode(String code) {
+		this.code = code;
+	}
 
 	
 }

+ 9 - 0
src/main/java/cn/com/qmth/mps/entity/PaperDetailUnitEntity.java

@@ -16,6 +16,7 @@ public class PaperDetailUnitEntity extends AuditingEntity {
 	private Integer number;
 	private Double score;
 	private Double scoreStep;
+	private Boolean objective;
 
 	public Integer getNumber() {
 		return number;
@@ -65,4 +66,12 @@ public class PaperDetailUnitEntity extends AuditingEntity {
 		this.detailNumber = detailNumber;
 	}
 
+	public Boolean getObjective() {
+		return objective;
+	}
+
+	public void setObjective(Boolean objective) {
+		this.objective = objective;
+	}
+
 }

+ 9 - 0
src/main/java/cn/com/qmth/mps/entity/SchoolEntity.java

@@ -7,6 +7,7 @@ import cn.com.qmth.mps.entity.base.AuditingEntity;
 public class SchoolEntity extends AuditingEntity {
 
 	private static final long serialVersionUID = -592353272256492483L;
+	private String code;
 	private String name;
 	private Boolean enable;
 
@@ -57,4 +58,12 @@ public class SchoolEntity extends AuditingEntity {
 		this.region = region;
 	}
 
+	public String getCode() {
+		return code;
+	}
+
+	public void setCode(String code) {
+		this.code = code;
+	}
+
 }

+ 2 - 0
src/main/java/cn/com/qmth/mps/service/CourseService.java

@@ -8,5 +8,7 @@ public interface CourseService  extends IService<CourseEntity> {
 
 	CourseEntity getByCode(Long schoolId, String code);
 
+	CourseEntity saveOrGet(Long schoolId, String code, String name);
+
 
 }

+ 9 - 0
src/main/java/cn/com/qmth/mps/service/ExamService.java

@@ -0,0 +1,9 @@
+package cn.com.qmth.mps.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import cn.com.qmth.mps.entity.ExamEntity;
+
+public interface ExamService  extends IService<ExamEntity> {
+
+}

+ 7 - 0
src/main/java/cn/com/qmth/mps/service/PaperService.java

@@ -1,9 +1,16 @@
 package cn.com.qmth.mps.service;
 
+import java.util.List;
+
+import org.springframework.web.multipart.MultipartFile;
+
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import cn.com.qmth.mps.bean.User;
 import cn.com.qmth.mps.entity.PaperEntity;
 
 public interface PaperService  extends IService<PaperEntity> {
 
+	List<String> importPaper(Long examId, User accessUser, MultipartFile file);
+
 }

+ 2 - 0
src/main/java/cn/com/qmth/mps/service/impl/AuthServiceImpl.java

@@ -12,6 +12,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import com.qmth.boot.core.exception.StatusException;
+import com.qmth.boot.core.security.annotation.AuthorizationComponent;
 import com.qmth.boot.core.security.service.AuthorizationService;
 import com.qmth.boot.tools.signature.SignatureType;
 import com.qmth.boot.tools.uuid.FastUUID;
@@ -32,6 +33,7 @@ import cn.com.qmth.mps.vo.AdminLoginVo;
 import net.sf.json.JSONObject;
 import sun.misc.BASE64Decoder;
 
+@AuthorizationComponent
 @Service
 public class AuthServiceImpl implements AuthorizationService<User>, AuthService {
 	@Autowired

+ 14 - 0
src/main/java/cn/com/qmth/mps/service/impl/CourseServiceImpl.java

@@ -1,6 +1,7 @@
 package cn.com.qmth.mps.service.impl;
 
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -22,5 +23,18 @@ public class CourseServiceImpl extends ServiceImpl<CourseDao, CourseEntity> impl
         return this.getOne(wrapper);
 	}
 
+	@Transactional
+	@Override
+	public CourseEntity saveOrGet(Long schoolId, String code,String name) {
+		CourseEntity c=getByCode(schoolId, code);
+		if(c==null) {
+			c=new CourseEntity();
+			c.setSchoolId(schoolId);
+			c.setCode(code);
+		}
+		c.setName(name);
+		this.saveOrUpdate(c);
+		return c;
+	}
 
 }

+ 15 - 0
src/main/java/cn/com/qmth/mps/service/impl/ExamServiceImpl.java

@@ -0,0 +1,15 @@
+package cn.com.qmth.mps.service.impl;
+
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+import cn.com.qmth.mps.dao.ExamDao;
+import cn.com.qmth.mps.entity.ExamEntity;
+import cn.com.qmth.mps.service.ExamService;
+
+@Service
+public class ExamServiceImpl extends ServiceImpl<ExamDao, ExamEntity> implements ExamService {
+
+
+}

+ 129 - 0
src/main/java/cn/com/qmth/mps/service/impl/PaperServiceImpl.java

@@ -1,15 +1,144 @@
 package cn.com.qmth.mps.service.impl;
 
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.dao.DuplicateKeyException;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.interceptor.TransactionAspectSupport;
+import org.springframework.web.multipart.MultipartFile;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qmth.boot.core.exception.StatusException;
+import com.qmth.boot.tools.excel.ExcelReader;
+import com.qmth.boot.tools.excel.enums.ExcelType;
+import com.qmth.boot.tools.excel.model.DataMap;
 
+import cn.com.qmth.mps.bean.User;
 import cn.com.qmth.mps.dao.PaperDao;
+import cn.com.qmth.mps.entity.CourseEntity;
+import cn.com.qmth.mps.entity.ExamEntity;
 import cn.com.qmth.mps.entity.PaperEntity;
+import cn.com.qmth.mps.enums.Role;
+import cn.com.qmth.mps.service.CourseService;
+import cn.com.qmth.mps.service.ExamService;
 import cn.com.qmth.mps.service.PaperService;
 
 @Service
 public class PaperServiceImpl extends ServiceImpl<PaperDao, PaperEntity> implements PaperService {
+	
+	@Autowired
+	private ExamService examService;
+	
+	@Autowired
+	private CourseService courseService;
+
+	@Transactional
+	@Override
+	public List<String> importPaper(Long examId, User user, MultipartFile file) {
+		ExamEntity exam=examService.getById(examId);
+		if(exam==null) {
+			throw new StatusException("未找到考试批次");
+		}
+		if (!user.getRole().equals(Role.SUPER_ADMIN) && !user.getSchoolId().equals(exam.getSchoolId())) {
+			throw new StatusException("非法操作");
+		}
+		InputStream inputStream = null;
+		try {
+			inputStream=file.getInputStream();
+			List<DataMap> lineList = ExcelReader.create(ExcelType.XLSX, inputStream, 0).getDataMapList();
+			if (CollectionUtils.isEmpty(lineList)) {
+				throw new StatusException("Excel无内容");
+			}
+			if (1001 < lineList.size()) {
+				throw new StatusException("数据行数不能超过1000");
+			}
+			List<String> failRecords = new ArrayList<>();
+			List<PaperEntity> ret = new ArrayList<>();
+			for (int i = 0; i < lineList.size(); i++) {
+				DataMap line = lineList.get(i);
+
+				StringBuilder msg = new StringBuilder();
+
+				PaperEntity imp = new PaperEntity();
+				imp.setTotalScore(0.0);
+				imp.setObjectiveScore(0.0);
+				imp.setSubjectiveScore(0.0);
+				imp.setSchoolId(exam.getSchoolId());
+				imp.setGroupFinish(false);
+				imp.setExamId(examId);
+				String code = trimAndNullIfBlank(line.getValue(0));
+				if (StringUtils.isBlank(code)) {
+					msg.append("  科目代码不能为空");
+				} else if (code.length() > 20) {
+					msg.append("  科目代码不能超过20个字符");
+				}
+
+				String name = trimAndNullIfBlank(line.getValue(1));
+				if (StringUtils.isBlank(name)) {
+					msg.append("  科目名称不能为空");
+				} else if (name.length() > 20) {
+					msg.append("  科目名称不能超过20个字符");
+				}
+				if (msg.length() == 0) {
+					CourseEntity course=courseService.saveOrGet(exam.getSchoolId(), code, name);
+					imp.setCourseId(course.getId());
+				}
+
+				if (msg.length() > 0) {
+					failRecords.add(newError(i + 1, msg.toString()));
+				} else {
+					ret.add(imp);
+				}
+
+			}
+			if (CollectionUtils.isNotEmpty(failRecords)) {
+				return failRecords;
+			}
+			for (int i = 0; i < ret.size(); i++) {
+				PaperEntity cur = ret.get(i);
+				try {
+					this.save(cur);
+				} catch (DuplicateKeyException e) {
+					failRecords.add(newError(i + 1, "科目已存在"));
+				} catch (Exception e) {
+					failRecords.add(newError(i + 1, "系统异常"));
+					log.error("科目导入系统异常", e);
+				}
+			}
+			if (CollectionUtils.isNotEmpty(failRecords)) {
+				TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+			}
+			return failRecords;
+		} catch (StatusException e) {
+			throw e;
+		} catch (Exception e) {
+			throw new StatusException("系统错误",e);
+		} finally {
+			if(inputStream!=null) {
+				try {
+					inputStream.close();
+				} catch (IOException e) {
+				}
+			}
+		}
+	}
+	
+	private String trimAndNullIfBlank(String s) {
+		if (StringUtils.isBlank(s)) {
+			return null;
+		}
+		return s.trim();
+	}
+	private String newError(int lineNum, String msg) {
+		return "第" + lineNum + "行" + msg;
+	}
 
 
 

+ 18 - 36
src/main/java/cn/com/qmth/mps/service/impl/UserServiceImpl.java

@@ -48,13 +48,11 @@ import cn.com.qmth.mps.vo.user.UserVo;
 public class UserServiceImpl extends ServiceImpl<UserDao, UserEntity> implements UserService {
 	private static final String defPassWd = "123456";
 
-	private static final String[] EXCEL_HEADER = new String[] { "姓名", "登录名", "角色", "科目" };
-
 	@Autowired
 	private UserCourseRelationService userCourseRelationService;
 	@Autowired
 	private SchoolService schoolService;
-	
+
 	@Override
 	public UserEntity getByLoginName(String phone) {
 		QueryWrapper<UserEntity> wrapper = new QueryWrapper<>();
@@ -122,13 +120,14 @@ public class UserServiceImpl extends ServiceImpl<UserDao, UserEntity> implements
 
 	@Transactional
 	@Override
-	public List<String> importUser(Long schoolId,User user, MultipartFile file) {
+	public List<String> importUser(Long schoolId, User user, MultipartFile file) {
 		if (!user.getRole().equals(Role.SUPER_ADMIN) && !user.getSchoolId().equals(schoolId)) {
 			throw new StatusException("非法操作");
 		}
 		InputStream inputStream = null;
 		try {
-			List<DataMap> lineList = ExcelReader.create(ExcelType.XLSX, inputStream, 4).getDataMapList();
+			inputStream = file.getInputStream();
+			List<DataMap> lineList = ExcelReader.create(ExcelType.XLSX, inputStream, 0).getDataMapList();
 			if (CollectionUtils.isEmpty(lineList)) {
 				throw new StatusException("Excel无内容");
 			}
@@ -139,12 +138,6 @@ public class UserServiceImpl extends ServiceImpl<UserDao, UserEntity> implements
 			List<UserDomain> userList = new ArrayList<>();
 			for (int i = 0; i < lineList.size(); i++) {
 				DataMap line = lineList.get(i);
-				if (0 == i) {
-					if (headerError(line)) {
-						throw new StatusException("Excel表头错误");
-					}
-					continue;
-				}
 
 				StringBuilder msg = new StringBuilder();
 
@@ -178,7 +171,7 @@ public class UserServiceImpl extends ServiceImpl<UserDao, UserEntity> implements
 				impuser.setRole(Role.getByName(role));
 
 				String coursecodes = trimAndNullIfBlank(line.getValue(3));
-				if(StringUtils.isNotBlank(coursecodes)) {
+				if (StringUtils.isNotBlank(coursecodes)) {
 					impuser.setCourse(Arrays.asList(coursecodes.split(",")));
 				}
 
@@ -207,10 +200,12 @@ public class UserServiceImpl extends ServiceImpl<UserDao, UserEntity> implements
 				TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
 			}
 			return failRecords;
+		} catch (StatusException e) {
+			throw e;
 		} catch (Exception e) {
-			throw new StatusException("系统错误",e);
+			throw new StatusException("系统错误", e);
 		} finally {
-			if(inputStream!=null) {
+			if (inputStream != null) {
 				try {
 					inputStream.close();
 				} catch (IOException e) {
@@ -218,31 +213,18 @@ public class UserServiceImpl extends ServiceImpl<UserDao, UserEntity> implements
 			}
 		}
 	}
-	
-	private boolean headerError(DataMap header) {
-		if (EXCEL_HEADER.length != header.size()) {
-			return true;
-		}
-		for (int i = 0; i < EXCEL_HEADER.length; i++) {
-			if (null == header.getValue(i)) {
-				return true;
-			}
-			if (!EXCEL_HEADER[i].equals(header.getValue(i).trim())) {
-				return true;
-			}
-		}
-		return false;
-	}
+
 	private String trimAndNullIfBlank(String s) {
 		if (StringUtils.isBlank(s)) {
 			return null;
 		}
 		return s.trim();
 	}
+
 	private String newError(int lineNum, String msg) {
 		return "第" + lineNum + "行" + msg;
 	}
-	
+
 	@Override
 	public PageResult<UserVo> page(UserQuery query, User user) {
 		if (query.getSchoolId() == null) {
@@ -257,11 +239,11 @@ public class UserServiceImpl extends ServiceImpl<UserDao, UserEntity> implements
 
 	@Override
 	public UserVo info(Long id) {
-		UserEntity ue=this.getById(id);
+		UserEntity ue = this.getById(id);
 		if (ue == null) {
 			throw new StatusException("未找到用户信息");
 		}
-		UserVo vo=new UserVo();
+		UserVo vo = new UserVo();
 		vo.setEnable(ue.getEnable());
 		vo.setId(ue.getId());
 		vo.setRoleId(ue.getRoleId());
@@ -269,7 +251,7 @@ public class UserServiceImpl extends ServiceImpl<UserDao, UserEntity> implements
 		vo.setName(ue.getName());
 		vo.setSchoolId(ue.getSchoolId());
 		vo.setSchoolName(schoolService.getById(ue.getSchoolId()).getName());
-		if(vo.getRoleId().equals(Role.SECTION_LEADER.getId())) {
+		if (vo.getRoleId().equals(Role.SECTION_LEADER.getId())) {
 			vo.setCourseCodes(userCourseRelationService.getCourseCodes(vo.getId()));
 		}
 		return vo;
@@ -295,7 +277,7 @@ public class UserServiceImpl extends ServiceImpl<UserDao, UserEntity> implements
 		String realPassword = StringEscapeUtils.unescapeJava(password);
 		byte[] bytes = SHA256.encode(realPassword);
 		String encodePassword = ByteUtil.toHexAscii(bytes);
-		UserEntity ue=this.getById(userId);
+		UserEntity ue = this.getById(userId);
 		if (ue == null) {
 			throw new StatusException("未找到用户信息");
 		}
@@ -305,8 +287,8 @@ public class UserServiceImpl extends ServiceImpl<UserDao, UserEntity> implements
 
 	@Transactional
 	@Override
-	public void resetPass(Long schoolId,List<Long> ids, User accessUser) {
-		String pw=ByteUtil.toHexAscii(SHA256.encode(defPassWd));
+	public void resetPass(Long schoolId, List<Long> ids, User accessUser) {
+		String pw = ByteUtil.toHexAscii(SHA256.encode(defPassWd));
 		UpdateWrapper<UserEntity> wrapper = new UpdateWrapper<>();
 		LambdaUpdateWrapper<UserEntity> lw = wrapper.lambda();
 		lw.set(UserEntity::getPassword, pw);

+ 3 - 3
src/main/java/cn/com/qmth/mps/util/AuthorizationCreateUtil.java

@@ -11,9 +11,9 @@ public class AuthorizationCreateUtil {
     
     public static void main(String[] args) {
     	long time = System.currentTimeMillis();
-    	String identity="SCANNER_127.0.0.1";//登录后user属性
-    	String token="x3m8G4i5qzZ3bemrcDNQYFcx3i4v2I7K";//登录后user属性
-    	String url="/api/admin/check/absent/query";//请求路径
+    	String identity="SUPER_ADMIN_1";//登录后user属性
+    	String token="ffffffffb49ddd0affffffffc5e74516";//登录后user属性
+    	String url="/api/paper/import-course";//请求路径
     	String s = SignatureEntity.build(SignatureType.TOKEN, "post", url, time, identity, token);
     	System.out.println("time:"+time);
     	System.out.println("Authorization:"+s);

+ 8 - 0
src/main/java/cn/com/qmth/mps/vo/exam/ExamDomain.java

@@ -5,6 +5,8 @@ import io.swagger.annotations.ApiModelProperty;
 public class ExamDomain {
 	@ApiModelProperty("id")
 	private Long id;
+	@ApiModelProperty("考试编码")
+	private String code;
 	@ApiModelProperty("考试名称")
 	private String name;
 	@ApiModelProperty("考试状态")
@@ -27,6 +29,12 @@ public class ExamDomain {
 	public void setId(Long id) {
 		this.id = id;
 	}
+	public String getCode() {
+		return code;
+	}
+	public void setCode(String code) {
+		this.code = code;
+	}
 
 	
 }

+ 8 - 0
src/main/java/cn/com/qmth/mps/vo/exam/ExamVo.java

@@ -12,6 +12,8 @@ public class ExamVo extends BaseEntity{
 	private Long id;
 	@ApiModelProperty("学校名称")
 	private Long schoolId;
+	@ApiModelProperty("考试编码")
+	private String code;
 	@ApiModelProperty("考试名称")
 	private String name;
 	@ApiModelProperty("考试状态")
@@ -48,6 +50,12 @@ public class ExamVo extends BaseEntity{
 	public void setId(Long id) {
 		this.id = id;
 	}
+	public String getCode() {
+		return code;
+	}
+	public void setCode(String code) {
+		this.code = code;
+	}
 
 	
 }

+ 0 - 16
src/main/java/cn/com/qmth/mps/vo/paper/PaperVo.java

@@ -26,16 +26,12 @@ public class PaperVo extends BaseEntity{
     private String courseName;
 	@ApiModelProperty("试卷总分")
 	private Double totalScore;
-	@ApiModelProperty("客观总分")
-	private Double objectiveScore;
 	@ApiModelProperty("主观总分")
 	private Double subjectiveScore;
 	@ApiModelProperty("试卷结构信息")
 	private List<PaperDetail> structInfo;
 	@ApiModelProperty("分组信息")
 	private List<PaperGroup> groupInfo;
-	@ApiModelProperty("试卷类型")
-	private String paperType;
 	@ApiModelProperty("分组是否完成")
 	private Boolean groupFinish;
 	public Long getId() {
@@ -80,12 +76,6 @@ public class PaperVo extends BaseEntity{
 	public void setTotalScore(Double totalScore) {
 		this.totalScore = totalScore;
 	}
-	public Double getObjectiveScore() {
-		return objectiveScore;
-	}
-	public void setObjectiveScore(Double objectiveScore) {
-		this.objectiveScore = objectiveScore;
-	}
 	public Double getSubjectiveScore() {
 		return subjectiveScore;
 	}
@@ -105,12 +95,6 @@ public class PaperVo extends BaseEntity{
 	public void setGroupInfo(List<PaperGroup> groupInfo) {
 		this.groupInfo = groupInfo;
 	}
-	public String getPaperType() {
-		return paperType;
-	}
-	public void setPaperType(String paperType) {
-		this.paperType = paperType;
-	}
 	public Boolean getGroupFinish() {
 		return groupFinish;
 	}

+ 10 - 0
src/main/java/cn/com/qmth/mps/vo/school/SchoolDomain.java

@@ -5,6 +5,8 @@ import io.swagger.annotations.ApiModelProperty;
 public class SchoolDomain {
 	@ApiModelProperty("学校id")
 	private Long id;
+	@ApiModelProperty("学校编码")
+	private String code;
 	@ApiModelProperty("学校名称")
 	private String name;
 	@ApiModelProperty("联系方式")
@@ -54,5 +56,13 @@ public class SchoolDomain {
 	public void setId(Long id) {
 		this.id = id;
 	}
+
+	public String getCode() {
+		return code;
+	}
+
+	public void setCode(String code) {
+		this.code = code;
+	}
 	
 }

+ 10 - 0
src/main/java/cn/com/qmth/mps/vo/school/SchoolVo.java

@@ -7,6 +7,8 @@ public class SchoolVo extends AuditingEntity {
 	private static final long serialVersionUID = -592353272256492483L;
 	@ApiModelProperty("二维码")
 	private String qrCode;
+	@ApiModelProperty("学校编码")
+	private String code;
 	@ApiModelProperty("学校名称")
 	private String name;
 	@ApiModelProperty("启用禁用")
@@ -67,4 +69,12 @@ public class SchoolVo extends AuditingEntity {
 		this.qrCode = qrCode;
 	}
 
+	public String getCode() {
+		return code;
+	}
+
+	public void setCode(String code) {
+		this.code = code;
+	}
+
 }

+ 9 - 6
src/main/resources/application-test.properties

@@ -22,15 +22,18 @@ com.qmth.datasource.url=jdbc:mysql://${db.host}:${db.port}/${db.database}?useUni
 #
 com.qmth.logging.root-level=info
 com.qmth.logging.file-path=/home/admin/project/marking-paper-struct/log/marking-paper-struct.log
-
-#DISK
-com.qmth.fss.config=/home/admin/project/marking-paper-struct/static
-com.qmth.fss.server=http://localhost:7101/file
-
+com.qmth.auth.time-max-delay=3600s
+com.qmth.auth.time-max-ahead=3600s
 spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
 spring.jackson.time-zone=GMT+8
 
 session-timeout=7200
 wxapp-url=xxx
 wxapp-appid=xxx
-wxapp-secret=xxxx
+wxapp-secret=xxxx
+
+markingcloud.server=http://192.168.10.224:8080
+qmth.solar.host=https://solar.qmth.com.cn
+qmth.solar.org.uri=/api/open/org/query
+qmth.solar.access-key=e5d4ccee19d34fcf99246a770ce62293
+qmth.solar.access-secret=Zfqq3nXAGLUGevDdJV1PieeKWJXCIKxG

+ 8 - 6
src/main/resources/application.properties

@@ -22,11 +22,8 @@ com.qmth.datasource.url=jdbc:mysql://${db.host}:${db.port}/${db.database}?useUni
 #
 com.qmth.logging.root-level=info
 com.qmth.logging.file-path=/home/admin/project/marking-paper-struct/log/marking-paper-struct.log
-
-#DISK
-com.qmth.fss.config=/home/admin/project/marking-paper-struct/static
-com.qmth.fss.server=http://localhost:7101/file
-
+com.qmth.auth.time-max-delay=3600s
+com.qmth.auth.time-max-ahead=3600s
 spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
 spring.jackson.time-zone=GMT+8
 
@@ -34,4 +31,9 @@ session-timeout=7200
 
 wxapp-url=xxx
 wxapp-appid=xxx
-wxapp-secret=xxx
+wxapp-secret=xxx
+markingcloud.server=http://192.168.10.224:8080
+qmth.solar.host=https://solar.qmth.com.cn
+qmth.solar.org.uri=/api/open/org/query
+access-key=e5d4ccee19d34fcf99246a770ce62293
+access-secret=Zfqq3nXAGLUGevDdJV1PieeKWJXCIKxG

BIN
src/main/resources/importtemplates/courseImport.xlsx