|
@@ -1,12 +1,14 @@
|
|
|
package cn.com.qmth.stmms.biz.user.service.impl;
|
|
|
|
|
|
-import cn.com.qmth.stmms.biz.user.dao.UserDao;
|
|
|
-import cn.com.qmth.stmms.biz.user.model.User;
|
|
|
-import cn.com.qmth.stmms.biz.user.service.UserService;
|
|
|
-import cn.com.qmth.stmms.biz.user.service.query.UserSearchQuery;
|
|
|
-import cn.com.qmth.stmms.common.enums.Role;
|
|
|
-import cn.com.qmth.stmms.common.enums.UserSource;
|
|
|
-import cn.com.qmth.stmms.common.utils.EncryptUtils;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.LinkedList;
|
|
|
+import java.util.List;
|
|
|
+
|
|
|
+import javax.persistence.criteria.CriteriaBuilder;
|
|
|
+import javax.persistence.criteria.CriteriaQuery;
|
|
|
+import javax.persistence.criteria.Predicate;
|
|
|
+import javax.persistence.criteria.Root;
|
|
|
|
|
|
import org.apache.commons.lang3.RandomStringUtils;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
@@ -16,14 +18,24 @@ import org.springframework.data.jpa.domain.Specification;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
-import javax.persistence.criteria.CriteriaBuilder;
|
|
|
-import javax.persistence.criteria.CriteriaQuery;
|
|
|
-import javax.persistence.criteria.Predicate;
|
|
|
-import javax.persistence.criteria.Root;
|
|
|
-
|
|
|
-import java.util.Date;
|
|
|
-import java.util.LinkedList;
|
|
|
-import java.util.List;
|
|
|
+import cn.com.qmth.stmms.biz.exam.model.Exam;
|
|
|
+import cn.com.qmth.stmms.biz.exam.model.ExamSubject;
|
|
|
+import cn.com.qmth.stmms.biz.exam.model.MarkGroup;
|
|
|
+import cn.com.qmth.stmms.biz.exam.model.Marker;
|
|
|
+import cn.com.qmth.stmms.biz.exam.model.SubjectUser;
|
|
|
+import cn.com.qmth.stmms.biz.exam.service.ExamService;
|
|
|
+import cn.com.qmth.stmms.biz.exam.service.ExamStudentService;
|
|
|
+import cn.com.qmth.stmms.biz.exam.service.ExamSubjectService;
|
|
|
+import cn.com.qmth.stmms.biz.exam.service.MarkGroupService;
|
|
|
+import cn.com.qmth.stmms.biz.exam.service.MarkerService;
|
|
|
+import cn.com.qmth.stmms.biz.exam.service.SubjectUserService;
|
|
|
+import cn.com.qmth.stmms.biz.user.dao.UserDao;
|
|
|
+import cn.com.qmth.stmms.biz.user.model.User;
|
|
|
+import cn.com.qmth.stmms.biz.user.service.UserService;
|
|
|
+import cn.com.qmth.stmms.biz.user.service.query.UserSearchQuery;
|
|
|
+import cn.com.qmth.stmms.common.enums.Role;
|
|
|
+import cn.com.qmth.stmms.common.enums.UserSource;
|
|
|
+import cn.com.qmth.stmms.common.utils.EncryptUtils;
|
|
|
|
|
|
/**
|
|
|
* 用户Service
|
|
@@ -33,9 +45,29 @@ import java.util.List;
|
|
|
@Service("userService")
|
|
|
public class UserServiceImpl implements UserService {
|
|
|
|
|
|
+ public static final String USER_PASSWORD = "123456";
|
|
|
+
|
|
|
@Autowired
|
|
|
private UserDao userDao;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private SubjectUserService subjectUserService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private MarkerService markerService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ExamService examService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private MarkGroupService groupService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ExamSubjectService subjectService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ExamStudentService studentService;
|
|
|
+
|
|
|
@Override
|
|
|
@Transactional
|
|
|
public User save(User user) {
|
|
@@ -201,4 +233,167 @@ public class UserServiceImpl implements UserService {
|
|
|
return userDao.findFirstBySchoolIdAndRelatedAccount(schoolId, account);
|
|
|
}
|
|
|
|
|
|
+ @Transactional
|
|
|
+ @Override
|
|
|
+ public void batchSaveMarker(int examId, String[] subjectCodes, Integer number, String password) {
|
|
|
+ if (subjectCodes.length == 0) {
|
|
|
+ List<ExamSubject> subjects = subjectService.list(examId, 0);
|
|
|
+ for (ExamSubject subject : subjects) {
|
|
|
+ saveMarkerBySubject(examId, number, password, subject.getCode());
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ for (String subjectCode : subjectCodes) {
|
|
|
+ saveMarkerBySubject(examId, number, password, subjectCode);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ private void saveMarkerBySubject(int examId, Integer number, String password, String subjectCode) {
|
|
|
+ Exam exam = examService.findById(examId);
|
|
|
+ List<MarkGroup> groups = groupService.findByExamAndSubject(examId, subjectCode);
|
|
|
+ List<Marker> saveList = new ArrayList<Marker>();
|
|
|
+ for (MarkGroup group : groups) {
|
|
|
+ String prefix = exam.getSchoolId() + "-" + subjectCode + "-" + group.getNumber();
|
|
|
+ int maxNumber = this.findMaxNumberByLoginNameStart(prefix);
|
|
|
+ for (int j = 0; j < number; j++) {
|
|
|
+ String loginName = prefix + "-" + (maxNumber + j + 1);
|
|
|
+ User user = userDao.findFirstByLoginName(loginName);
|
|
|
+ if (user == null) {
|
|
|
+ user = new User();
|
|
|
+ user.setLoginName(loginName);
|
|
|
+ user.setName(loginName);
|
|
|
+ user.setPassword(EncryptUtils.md5(USER_PASSWORD));
|
|
|
+ user.setRole(Role.MARKER);
|
|
|
+ user.setSource(UserSource.INTERNAL);
|
|
|
+ user.setEnable(true);
|
|
|
+ user.setSchoolId(exam.getSchoolId());
|
|
|
+ user.setCreatedTime(new Date());
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(password)) {
|
|
|
+ user.setPassword(EncryptUtils.md5(password));
|
|
|
+ }
|
|
|
+ userDao.save(user);
|
|
|
+ Marker marker = markerService.findByExamAndSubjectAndNumberAndUserId(examId, subjectCode,
|
|
|
+ group.getNumber(), user.getId());
|
|
|
+ if (marker == null) {
|
|
|
+ marker = new Marker();
|
|
|
+ marker.setSubjectCode(subjectCode);
|
|
|
+ marker.setGroupNumber(group.getNumber());
|
|
|
+ marker.setUserId(user.getId());
|
|
|
+ marker.setExamId(examId);
|
|
|
+ marker.setEnable(true);
|
|
|
+ saveList.add(marker);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ markerService.batchSave(saveList);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Transactional
|
|
|
+ @Override
|
|
|
+ public void batchSaveSubjectUser(int examId, Role role, String[] subjectCodes, Integer number) {
|
|
|
+ if (subjectCodes.length == 0) {
|
|
|
+ List<ExamSubject> subjects = subjectService.list(examId);
|
|
|
+ for (ExamSubject subject : subjects) {
|
|
|
+ saveSubjectUserBySubject(examId, number, role, subject.getCode());
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ for (String subjectCode : subjectCodes) {
|
|
|
+ saveSubjectUserBySubject(examId, number, role, subjectCode);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void saveSubjectUserBySubject(int examId, Integer number, Role role, String subjectCode) {
|
|
|
+ Exam exam = examService.findById(examId);
|
|
|
+ List<SubjectUser> saveList = new ArrayList<SubjectUser>();
|
|
|
+ for (int i = 0; i < number; i++) {
|
|
|
+ String prefix = exam.getSchoolId() + "-" + subjectCode;
|
|
|
+ if (role.equals(Role.INSPECTOR)) {
|
|
|
+ prefix = exam.getSchoolId() + "-FH-" + subjectCode;
|
|
|
+ }
|
|
|
+ int maxNumber = this.findMaxNumberByLoginNameStart(prefix);
|
|
|
+ String loginName = prefix + "-" + (maxNumber + i + 1);
|
|
|
+ User user = userDao.findFirstByLoginName(loginName);
|
|
|
+ if (user == null) {
|
|
|
+ user = new User();
|
|
|
+ user.setLoginName(loginName);
|
|
|
+ user.setName(loginName);
|
|
|
+ user.setPassword(EncryptUtils.md5(USER_PASSWORD));
|
|
|
+ user.setRole(role);
|
|
|
+ user.setSource(UserSource.INTERNAL);
|
|
|
+ user.setEnable(true);
|
|
|
+ user.setSchoolId(exam.getSchoolId());
|
|
|
+ user.setCreatedTime(new Date());
|
|
|
+ userDao.save(user);
|
|
|
+ }
|
|
|
+ SubjectUser subjectUser = subjectUserService.findBySubjectCodeAndUserId(subjectCode, user.getId());
|
|
|
+ if (subjectUser == null) {
|
|
|
+ subjectUser = new SubjectUser();
|
|
|
+ subjectUser.setSubjectCode(subjectCode);
|
|
|
+ subjectUser.setUserId(user.getId());
|
|
|
+ saveList.add(subjectUser);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ subjectUserService.batchSave(saveList);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void batchSaveCollegeUser(int examId, Integer number) {
|
|
|
+ Exam exam = examService.findById(examId);
|
|
|
+ List<String> collegeList = studentService.findDistinctCollege(examId);
|
|
|
+ List<SubjectUser> saveList = new ArrayList<SubjectUser>();
|
|
|
+ for (String college : collegeList) {
|
|
|
+ List<String> subjectList = studentService.findDistinctSubjectCodeByCollege(examId, college);
|
|
|
+ for (int i = 0; i < number; i++) {
|
|
|
+ String prefix = exam.getSchoolId() + "-XY-";
|
|
|
+ int maxNumber = this.findMaxNumberByLoginNameStart(prefix);
|
|
|
+ String loginName = prefix + "-" + (maxNumber + i + 1);
|
|
|
+ User user = userDao.findFirstByLoginName(loginName);
|
|
|
+ if (user == null) {
|
|
|
+ user = new User();
|
|
|
+ user.setLoginName(loginName);
|
|
|
+ user.setName(loginName);
|
|
|
+ user.setPassword(EncryptUtils.md5(USER_PASSWORD));
|
|
|
+ user.setRole(Role.COLLEGE_ADMIN);
|
|
|
+ user.setSource(UserSource.INTERNAL);
|
|
|
+ user.setEnable(true);
|
|
|
+ user.setSchoolId(exam.getSchoolId());
|
|
|
+ user.setCreatedTime(new Date());
|
|
|
+ userDao.save(user);
|
|
|
+ }
|
|
|
+ for (String subjectCode : subjectList) {
|
|
|
+ SubjectUser subjectUser = subjectUserService.findBySubjectCodeAndUserId(subjectCode, user.getId());
|
|
|
+ if (subjectUser == null) {
|
|
|
+ subjectUser = new SubjectUser();
|
|
|
+ subjectUser.setSubjectCode(subjectCode);
|
|
|
+ subjectUser.setUserId(user.getId());
|
|
|
+ saveList.add(subjectUser);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ subjectUserService.batchSave(saveList);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public int findMaxNumberByLoginNameStart(String prefix) {
|
|
|
+ List<User> list = userDao.findStartWithLoginName(prefix);
|
|
|
+ int number = 1;
|
|
|
+ for (User user : list) {
|
|
|
+ String userNumber = user.getLoginName().substring(prefix.length() + 1, user.getLoginName().length() - 1);
|
|
|
+ try {
|
|
|
+ int no = Integer.parseInt(userNumber);
|
|
|
+ if (number < no) {
|
|
|
+ number = no;
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return number;
|
|
|
+ }
|
|
|
+
|
|
|
}
|