123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378 |
- import cn.com.qmth.stmms.ms.Application;
- import cn.com.qmth.stmms.ms.commons.utils.RandomUtil;
- import cn.com.qmth.stmms.ms.core.domain.*;
- import cn.com.qmth.stmms.ms.core.domain.user.MarkRight;
- import cn.com.qmth.stmms.ms.core.domain.user.MarkUser;
- import cn.com.qmth.stmms.ms.core.domain.user.Role;
- import cn.com.qmth.stmms.ms.core.repository.*;
- import cn.com.qmth.stmms.ms.core.vo.Subject;
- import com.alibaba.fastjson.JSON;
- import com.alibaba.fastjson.JSONObject;
- import net.coobird.thumbnailator.Thumbnails;
- import org.junit.Test;
- import org.junit.runner.RunWith;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.boot.test.context.SpringBootTest;
- import org.springframework.test.context.junit4.SpringRunner;
- import org.springframework.util.CollectionUtils;
- import java.io.File;
- import java.io.IOException;
- import java.util.*;
- @RunWith(SpringRunner.class)
- @SpringBootTest(classes = {Application.class})
- // 指定启动类
- public class BatchCreateDataTest {
- private static final Logger logger = LoggerFactory.getLogger(BatchCreateDataTest.class);
- @Autowired
- private ExamQuestionRepo examQuestionRepo;
- @Autowired
- private StudentRepo studentRepo;
- @Autowired
- private PaperRepo paperRepo;
- @Autowired
- private WorkRepo workRepo;
- @Autowired
- private MarkSubjectRepo markSubjectRepo;
- @Autowired
- private MarkUserRepo markUserRepo;
- @Autowired
- private ParamSettingRepo paramSettingRepo;
- @Autowired
- private LevelRepo levelRepo;
- @Autowired
- RandomUtil randomUtil;
- // 考生初始准考证号
- private int initNumber = 1000000;
- // 考生数量
- private static int COUNT = 60000;
- // 评卷员数量
- private static int MARKER_COUNT = 15;
- // 科组长数量
- private static int MARKER_LEADER_COUNT = 4;
- // 工作id
- private static Long WORK_ID = 1L;
- // 是否开启粗分档
- private static Boolean isOpenRoughLevel = true;
- // 生成科目
- private List<Subject> subjects = Arrays.asList(Subject.SX, Subject.SC, Subject.SM);
- // 是否复制图片
- private boolean isCreateImage = false;
- // 图片存放目录
- private String baseDir = "D:\\my_workspaces\\ide_workspace_qmth\\idea_workspace\\stmms-ms-server\\upload";
- /**
- * 生成数据
- *
- * @throws Exception
- */
- // @Test
- public void createTask() throws Exception {
- createData();
- }
- private void createData() throws Exception {
- // 生成工作
- createWork();
- // 生成用户
- createUser();
- randomUtil.getRandom(WORK_ID, false);
- //生成exam_question信息
- List<ExamQuestion> questions = createQuestions();
- examQuestionRepo.save(questions);
- logger.info("questions新增:{}", questions.size());
- //生成student信息
- List<Student> students = createStudent();
- List<Student> data = new ArrayList<>();
- for (Student stu : students) {
- if (data.size() == 2000) {
- studentRepo.save(data);
- data.clear();
- }
- data.add(stu);
- }
- //将剩下的数据也导入
- if (!data.isEmpty()) {
- studentRepo.save(data);
- }
- logger.info("students新增:{}", students.size());
- //生成paper信息
- List<Paper> papers = createPaper(students, subjects);
- List<Paper> data1 = new ArrayList<>();
- for (Paper p : papers) {
- if (data1.size() == 2000) {
- paperRepo.save(data1);
- data1.clear();
- }
- data1.add(p);
- }
- //将剩下的数据也导入
- if (!data1.isEmpty()) {
- paperRepo.save(data1);
- }
- logger.info("papers新增:{}", papers.size());
- if (isCreateImage) {
- //生成image
- createImage(students);
- logger.info("image成功");
- //生成sheet
- createSheet(students);
- logger.info("sheet成功");
- //生成thumb
- createThumb(students);
- logger.info("thumb成功");
- }
- }
- private void createWork() {
- Work work = workRepo.findOne(WORK_ID);
- if (work == null) {
- work = new Work();
- work.setId(WORK_ID);
- work.setActive(true);
- work.setCreatedOn(new Date());
- work.setName("批量测试");
- workRepo.save(work);
- }
- List<MarkSubject> markSubjects = markSubjectRepo.findAllByWorkId(work.getId());
- if (CollectionUtils.isEmpty(markSubjects)) {
- Subject[] subjects = Subject.values();
- for (int i = 0; i < subjects.length - 1; i++) {
- MarkSubject markSubject = new MarkSubject(subjects[i], work.getId());
- markSubject.setWorkId(work.getId());
- markSubject.setEnable(true);
- markSubjectRepo.save(markSubject);
- }
- }
- //新增工作的同时,初始化该工作的全局参数
- ParamSetting paramSetting = ParamSetting.init(WORK_ID);
- if (isOpenRoughLevel) {
- String levelConfig = paramSetting.getLevelConfig();
- JSONObject jsonObject = JSON.parseObject(levelConfig, JSONObject.class);
- jsonObject.put("roughLevelEnable", 1);
- paramSetting.setLevelConfig(JSON.toJSONString(jsonObject));
- }
- paramSetting.setWorkId(WORK_ID);
- paramSettingRepo.save(paramSetting);
- //默认增加档位
- Level aLevel = new Level(WORK_ID, "A", 0, 100, 90, Level.LevelType.ADMITED, 95, "1", 93);
- Level bLevel = new Level(WORK_ID, "B", 1, 89, 85, Level.LevelType.ADMITED, 87, "1", 93);
- Level cLevel = new Level(WORK_ID, "C", 2, 84, 80, Level.LevelType.ADMITED, 82, "2", 80);
- Level dLevel = new Level(WORK_ID, "D", 3, 79, 75, Level.LevelType.ADMITED, 77, "2", 80);
- Level eLevel = new Level(WORK_ID, "E", 4, 74, 70, Level.LevelType.ADMITED, 72, "3", 68);
- Level fLevel = new Level(WORK_ID, "F", 5, 69, 65, Level.LevelType.ADMITED, 67, "3", 68);
- Level gLevel = new Level(WORK_ID, "G", 6, 64, 60, Level.LevelType.ADMITED, 62, "3", 68);
- Level hLevel = new Level(WORK_ID, "H", 7, 59, 55, Level.LevelType.ADMITED, 57, "4", 55);
- Level iLevel = new Level(WORK_ID, "I", 8, 54, 50, Level.LevelType.ADMITED, 52, "4", 55);
- Level jLevel = new Level(WORK_ID, "J", 9, 49, 45, Level.LevelType.ADMITED, 47, "5", 35);
- Level kLevel = new Level(WORK_ID, "K", 10, 44, 0, Level.LevelType.ADMITED, 40, "5", 35);
- List<Level> levels = Arrays.asList(aLevel, bLevel, cLevel, dLevel, eLevel, fLevel, gLevel, hLevel, iLevel, jLevel, kLevel);
- levelRepo.save(levels);
- }
- private void createUser() {
- List<MarkUser> markUsers = new ArrayList<>();
- for (Subject subject : subjects) {
- // 评卷员
- for (int i = 1; i <= MARKER_COUNT; i++) {
- MarkUser markUser = new MarkUser();
- markUser.setLoginName(subject.name().toLowerCase() + i);
- markUser.setName(subject.name() + i);
- markUser.setRole(Role.MARKER);
- markUser.setPassword("123456");
- markUser.setPwChangedCount(1);
- markUser.setSubject(subject);
- markUser.setWorkId(WORK_ID);
- markUser.setMarkRight(MarkRight.ALLOW_ALL);
- markUser.setWeight(1D);
- markUser.setLeaderConfirm(true);
- markUser.setLevelCallback(false);
- markUser.setOneClickLevel(false);
- markUser.setStandardVolume(false);
- markUsers.add(markUser);
- }
- // 科组长
- for (int i = 1; i <= MARKER_LEADER_COUNT; i++) {
- MarkUser markUser = new MarkUser();
- markUser.setLoginName(subject.name().toLowerCase() + "-kzz" + i);
- markUser.setName(subject.name() + "KZZ" + i);
- markUser.setRole(Role.MARK_LEADER);
- markUser.setPassword("123456");
- markUser.setPwChangedCount(1);
- markUser.setSubject(subject);
- markUser.setWorkId(WORK_ID);
- markUser.setMarkRight(MarkRight.ALLOW_ALL);
- markUser.setWeight(null);
- markUser.setLeaderConfirm(true);
- markUser.setLevelCallback(true);
- markUser.setOneClickLevel(true);
- markUser.setStandardVolume(true);
- markUsers.add(markUser);
- }
- }
- markUserRepo.save(markUsers);
- }
- private List<ExamQuestion> createQuestions() {
- List<ExamQuestion> questions = new ArrayList<>();
- ExamQuestion examQuestion1 = new ExamQuestion();
- examQuestion1.setId(1l);
- examQuestion1.setAreaCode("1");
- examQuestion1.setAreaName("省艺术培训协会");
- examQuestion1.setName("速写1");
- examQuestion1.setSubject(Subject.SX);
- examQuestion1.setWorkId(WORK_ID);
- // examQuestion1.setTest(0);
- questions.add(examQuestion1);
- ExamQuestion examQuestion2 = new ExamQuestion();
- examQuestion2.setId(2l);
- examQuestion2.setAreaCode("1");
- examQuestion2.setAreaName("省艺术培训协会");
- examQuestion2.setName("色彩1");
- examQuestion2.setSubject(Subject.SC);
- examQuestion2.setWorkId(WORK_ID);
- // examQuestion2.setTest(0);
- questions.add(examQuestion2);
- ExamQuestion examQuestion3 = new ExamQuestion();
- examQuestion3.setId(3l);
- examQuestion3.setAreaCode("1");
- examQuestion3.setAreaName("省艺术培训协会");
- examQuestion3.setName("素描1");
- examQuestion3.setSubject(Subject.SM);
- examQuestion3.setWorkId(WORK_ID);
- // examQuestion3.setTest(0);
- questions.add(examQuestion3);
- return questions;
- }
- private List<Student> createStudent() {
- List<Student> students = new ArrayList<>();
- StringJoiner stringJoiner = new StringJoiner(",");
- stringJoiner.add("SX:" + (subjects.contains(Subject.SX) ? 1 : 0))
- .add("SC:" + (subjects.contains(Subject.SC) ? 1 : 0))
- .add("SM:" + (subjects.contains(Subject.SM) ? 1 : 0));
- for (int i = 0; i < COUNT; i++) {
- Student student = new Student();
- student.setAreaCode("1");
- student.setAreaName("省艺术培训协会");
- student.setExamNumber(String.valueOf(initNumber + i));
- student.setExamRoom("第一考场");
- student.setSchool("湖北美术学院");
- student.setAbsent(false);
- student.setName("考生" + i);
- student.setUploadStatus(stringJoiner.toString());
- student.setWorkId(WORK_ID);
- student.setSourceName("湖北");
- student.setRelateExamNumber(student.getExamNumber());
- students.add(student);
- }
- return students;
- }
- private List<Paper> createPaper(List<Student> students, List<Subject> subjects) throws Exception {
- List<Paper> papers = new ArrayList<>();
- for (Subject subject : subjects) {
- ExamQuestion examQuestion = examQuestionRepo.findByWorkIdAndSubjectAndAreaCode(WORK_ID, subject, "1");
- for (Student student : students) {
- Long random = getRandom(student.getWorkId(), student.getExamNumber());
- Paper paper = new Paper(student.getWorkId(), subject, examQuestion, student, false, random);
- papers.add(paper);
- }
- }
- return papers;
- }
- private void createImage(List<Student> students) throws IOException {
- String imageDir = baseDir + File.separator + "images" + File.separator + WORK_ID + File.separator + Subject.SX.name() + File.separator + "1";
- File out = new File(imageDir);
- if (!out.exists()) {
- out.mkdirs();
- }
- File in = new File(imageDir, "sx.jpg");
- for (Student student : students) {
- Thumbnails.of(in).scale(1f).toFile(new File(imageDir, student.getExamNumber() + ".jpg"));
- }
- }
- private void createSheet(List<Student> students) throws IOException {
- String sheetDir = baseDir + File.separator + "sheet" + File.separator + WORK_ID + File.separator + Subject.SX.name() + File.separator + "1";
- File out = new File(sheetDir);
- if (!out.exists()) {
- out.mkdirs();
- }
- File in = new File(sheetDir, "sx.jpg");
- for (Student student : students) {
- Thumbnails.of(in).scale(1f).toFile(new File(sheetDir, student.getExamNumber() + ".jpg"));
- }
- }
- private void createThumb(List<Student> students) throws IOException {
- String thumbDir = baseDir + File.separator + "thumbs" + File.separator + WORK_ID + File.separator + Subject.SX.name() + File.separator + "1";
- File out = new File(thumbDir);
- if (!out.exists()) {
- out.mkdirs();
- }
- File in = new File(thumbDir, "sx.jpg");
- for (Student student : students) {
- Thumbnails.of(in).scale(1f).toFile(new File(thumbDir, student.getExamNumber() + ".jpg"));
- }
- }
- /**
- * 获取随机号
- *
- * @param workId
- * @param examNumber
- * @return
- * @throws Exception
- */
- public Long getRandom(Long workId, String examNumber) throws Exception {
- int count = 0, result = 0;
- Long random = 0L;
- while (true) {
- random = randomUtil.getRandomMap().get(workId).get(new Random().nextInt(randomUtil.getRandomMap().get(workId).size()));
- // random = RandomUtil.randomList.get(new Random().nextInt(RandomUtil.randomList.size()));
- result = paperRepo.countByWorkIdAndExamNumberAndRandomSeq(workId, examNumber, random);
- if (result == 0 && random != Long.parseLong(examNumber.substring(3, examNumber.length()))) {
- break;
- } else {
- count++;
- }
- if (count > 1000) {
- // throw new Exception("重复几率较高,建议重新生成随机号");
- randomUtil.getRandom(workId, true);
- getRandom(workId, examNumber);
- }
- }
- return random;
- }
- }
|