java随机组卷和手动组卷功能实现
//组卷
@PostMapping("/paper/ins")
public void insert(HttpServletResponse response, @RequestBody OrderPaperVo orderPaper)throws IOException{
int length, sing, many, judg, answ;
if(StringUtils.isNotEmpty(orderPaper.getSjTypearray())) orderPaper.setType(orderPaper.getSjTypearray()[0]);
if(StringUtils.isNotEmpty(orderPaper.getSjLevelarray())) orderPaper.setLevel(orderPaper.getSjLevelarray()[0]);
if(StringUtils.isNotEmpty(orderPaper.getDelFlagarray())) orderPaper.setDelFlag(orderPaper.getDelFlagarray()[0]);
Date date = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String format = dateFormat.format(date);
orderPaper.setCreateTime(format);
//2 随机出题 1 手动出题
if ("2".equals(orderPaper.getDelFlag())) {
//1 单选 2 判断 3 多选 4 简答
//试题总个数 length
length = (sing = Integer.parseInt(orderPaper.getSingle())) + (many = Integer.parseInt(orderPaper.getMany())) + (judg = Integer.parseInt(orderPaper.getJudgment())) + (answ = Integer.parseInt(orderPaper.getAnsw()));
String[] array = new String[length];
//查出所有单选题
String[] sinIds = orderQuestionService.selectIdsByType(1);
//查出所有判断题
String[] judgIds = orderQuestionService.selectIdsByType(2);
//查出所有多选题
String[] manyIds = orderQuestionService.selectIdsByType(3);
//查出所有简答题
String[] answIds = orderQuestionService.selectIdsByType(4);
for (int i = 0; i < length; i++) {
Random random = new Random();
int i1 = random.nextInt(sinIds.length);
int i2 = random.nextInt(judgIds.length);
int i3 = random.nextInt(manyIds.length);
int i4 = random.nextInt(answIds.length);
if (i < sing) array[i] = sinIds[i1];
if (i >= sing && i < sing + many) array[i] = manyIds[i3];
if (i >= sing + many && i < sing + many + judg) array[i] = judgIds[i2];
if (i >= sing + many + judg && i < sing + many + judg + answ) array[i] = answIds[i4];
}
orderPaper.setQuestionIds(array);
}
if ("1".equals(orderPaper.getDelFlag())) {
//把数组整合到一起
String[] signarr = StringUtils.isNotEmpty(orderPaper.getSingleList()) ? orderPaper.getSingleList().split(",") : new String[0];//单选
String[] manyarr = StringUtils.isNotEmpty(orderPaper.getManyList()) ? orderPaper.getManyList().split(",") : new String[0];//多选
String[] judgarr = StringUtils.isNotEmpty(orderPaper.getJudgmentList()) ? orderPaper.getJudgmentList().split(",") : new String[0];//判断
String[] answarr = StringUtils.isNotEmpty(orderPaper.getAnswList()) ? orderPaper.getAnswList().split(",") : new String[0];//简答
length = (sing = signarr.length) + (many = manyarr.length) + (judg = judgarr.length) + (answ = answarr.length);
String[] array = new String[length];//开辟空数组空间,保存id
System.arraycopy(signarr,0,array,0,sing);
System.arraycopy(manyarr,0,array,sing,many);
System.arraycopy(judgarr,0,array,many + sing,judg);
System.arraycopy(answarr,0,array,many + sing + judg,answ);
orderPaper.setQuestionIds(array);
}
Date date1 = new Date();
SimpleDateFormat dateFormat1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String format1 = dateFormat1.format(date1);
orderPaper.setCreateTime(format1);
int i = orderPaperService.insertPaperTest(orderPaper);
//添加试卷试题关联
String[] questionIds = orderPaper.getQuestionIds();
for (int i1 = 0; i1 < questionIds.length; i1++) {
OrderPaperQuestion orderPaperQuestion = new OrderPaperQuestion();
orderPaperQuestion.setPaperId(orderPaper.getId());
orderPaperQuestion.setQuestionId(Integer.parseInt(questionIds[i1]));
orderPaperQuestionService.insertOrderPaperQuestion(orderPaperQuestion);
}
if (i > 0) {
writeJSON(null,response,"200","添加成功");
}else
writeJSON(null,response,"201","添加失败");
}
实体类:
@Data
public class OrderPaperVo extends OrderPaper {
//单选
private String singleList;
//多选
private String manyList;
//判断
private String judgmentList;
//简答
private String answList;
}
@Data
public class OrderPaper implements Serializable {
private static final long serialVersionUID=1L;
//
private Integer id;
//试卷类型(1、理论 2 实训 3 综合)
private String type;
private String[] sjTypearray;
//试卷难易程度(1、人工评分 2 系统评分)
private String level;
private String[] sjLevelarray;
//总分
private String score;
//及格分数
private String passscore;
//考试需知
private String remark;
//创建时间
private String createTime;
//创建人
private String createuser;
//试卷简介
private String introduction;
//考试时间
private String doingtime;
//1 随机出题 2手动出题
private String delFlag;
private String[] delFlagarray;
//是否可重新考试 0 不可以 1 可以
private String rtype;
//开始ip
private String startIp;
//结束ip
private String endIp;
//单选题个数
private String single;
//单选分数
private String singleScore;
//多选个数
private String many;
//多选分数
private String manyScore;
//判断个数
private String judgment;
//判断分数
private String judgmentScore;
//简答个数
private String answ;
//简答分数
private String answSore;
//考试开始时间
private Date startTime;
//考试结束时间
private Date endTime;
//班级id
private Integer classId;
private String[] questionIds;
//
private String majorName;
private String catalogName;
private String systemName;
///返回试题
private List<Questions> singlList;
private List<Questions> manList;
private List<Questions> judgeList;
private List<Questions> ansList;
arraycopy用法:
参数:
src:要复制的数组(源数组)
srcPos:复制源数组的起始位置
dest:目标数组
destPos:目标数组的下标位置
length:要复制的长度
String[] arr = {"A","B","C","D","E","F"};
System.arraycopy(arr ,3,arr,2,2);
从下标为3的位置开始复制,复制的长度为2(复制D、E),从下标为2的位置开始替换为D、E
复制后的数组为:
String[] arr = {"A","B","D","E","E","F"};