From 7b18a6778a4ab36ff4181ebcef1d2f747a7291c6 Mon Sep 17 00:00:00 2001
From: Administrator <admin>
Date: Tue, 03 Aug 2021 15:45:09 +0800
Subject: [PATCH] 1.新增培训考试生成准考证号码 2.考试报名清册导入功能实现
---
src/main/java/org/springblade/modules/apply/mapper/ApplyMapper.xml | 2
src/main/java/org/springblade/modules/apply/service/ApplyService.java | 2
src/main/java/org/springblade/modules/training/mapper/TrainingRegistrationMapper.java | 7 +
src/main/java/org/springblade/modules/training/controller/TrainingRegistrationController.java | 174 ++++++++++++++++++++++++++++
src/main/java/org/springblade/modules/training/service/impl/TrainingRegistrationServiceImpl.java | 40 ++++++
src/main/java/org/springblade/modules/apply/excel/ApplyImporter.java | 4
src/main/java/org/springblade/modules/apply/service/impl/ApplyServiceImpl.java | 41 +++---
src/main/java/org/springblade/modules/training/excel/TrainingRegistrationImporter.java | 43 +++++++
src/main/java/org/springblade/modules/training/mapper/TrainingRegistrationMapper.xml | 12 ++
src/main/java/org/springblade/modules/apply/controller/ApplyController.java | 8
src/main/java/org/springblade/modules/training/service/TrainingRegistrationService.java | 14 ++
11 files changed, 319 insertions(+), 28 deletions(-)
diff --git a/src/main/java/org/springblade/modules/apply/controller/ApplyController.java b/src/main/java/org/springblade/modules/apply/controller/ApplyController.java
index 884a83f..91bf2e6 100644
--- a/src/main/java/org/springblade/modules/apply/controller/ApplyController.java
+++ b/src/main/java/org/springblade/modules/apply/controller/ApplyController.java
@@ -121,8 +121,8 @@
@PostMapping("import-apply")
@ApiOperation(value = "导入报名考试数据", notes = "传入excel")
public R importUser(MultipartFile file, Integer isCovered) {
- ApplyImporter applyImporter = new ApplyImporter(applyService, isCovered == 1);
- ExcelUtil.save(file, applyImporter, ApplyExcel.class);
+ ApplyImporter applyImporter = new ApplyImporter(applyService, false);
+ ExcelUtil.save(file, applyImporter, ApplyInfoExcel.class);
return R.success("操作成功");
}
@@ -132,8 +132,8 @@
@GetMapping("export-template")
@ApiOperation(value = "导出模板")
public void exportUser(HttpServletResponse response) {
- List<ApplyExcel> list = new ArrayList<>();
- ExcelUtil.export(response, "考试报名数据模板", "考试报名数据表", list, ApplyExcel.class);
+ List<ApplyInfoExcel> list = new ArrayList<>();
+ ExcelUtil.export(response, "考试报名数据模板", "考试报名数据表", list, ApplyInfoExcel.class);
}
diff --git a/src/main/java/org/springblade/modules/apply/excel/ApplyImporter.java b/src/main/java/org/springblade/modules/apply/excel/ApplyImporter.java
index 60a72aa..101a747 100644
--- a/src/main/java/org/springblade/modules/apply/excel/ApplyImporter.java
+++ b/src/main/java/org/springblade/modules/apply/excel/ApplyImporter.java
@@ -29,13 +29,13 @@
* @since 2021-07-22
*/
@RequiredArgsConstructor
-public class ApplyImporter implements ExcelImporter<ApplyExcel> {
+public class ApplyImporter implements ExcelImporter<ApplyInfoExcel> {
private final ApplyService service;
private final Boolean isCovered;
@Override
- public void save(List<ApplyExcel> data) {
+ public void save(List<ApplyInfoExcel> data) {
service.importApply(data, isCovered);
}
}
diff --git a/src/main/java/org/springblade/modules/apply/mapper/ApplyMapper.xml b/src/main/java/org/springblade/modules/apply/mapper/ApplyMapper.xml
index dd08486..7a3bf1c 100644
--- a/src/main/java/org/springblade/modules/apply/mapper/ApplyMapper.xml
+++ b/src/main/java/org/springblade/modules/apply/mapper/ApplyMapper.xml
@@ -25,6 +25,7 @@
bd.id = bu.dept_id
WHERE
1=1
+ and is_exam = 1
<if test="apply.name!=null and apply.name!=''">
and sa.name like concat('%', #{apply.name},'%')
</if>
@@ -166,6 +167,7 @@
bd.id = bu.dept_id
WHERE
1=1
+ and is_exam = 1
<if test="apply.name!=null and apply.name!=''">
and sa.name like concat('%', #{apply.name},'%')
</if>
diff --git a/src/main/java/org/springblade/modules/apply/service/ApplyService.java b/src/main/java/org/springblade/modules/apply/service/ApplyService.java
index 4c0172f..024ce57 100644
--- a/src/main/java/org/springblade/modules/apply/service/ApplyService.java
+++ b/src/main/java/org/springblade/modules/apply/service/ApplyService.java
@@ -52,7 +52,7 @@
* @param isCovered
* @return
*/
- void importApply(List<ApplyExcel> data, Boolean isCovered);
+ void importApply(List<ApplyInfoExcel> data, Boolean isCovered);
/**
* 获取准考证信息
diff --git a/src/main/java/org/springblade/modules/apply/service/impl/ApplyServiceImpl.java b/src/main/java/org/springblade/modules/apply/service/impl/ApplyServiceImpl.java
index 18da928..df90d33 100644
--- a/src/main/java/org/springblade/modules/apply/service/impl/ApplyServiceImpl.java
+++ b/src/main/java/org/springblade/modules/apply/service/impl/ApplyServiceImpl.java
@@ -10,6 +10,7 @@
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
import org.springblade.common.utils.arg;
+import org.springblade.core.mp.support.Condition;
import org.springblade.modules.apply.entity.Apply;
import org.springblade.modules.apply.excel.ApplyExcel;
import org.springblade.modules.apply.excel.ApplyInfoExcel;
@@ -19,6 +20,8 @@
import org.springblade.modules.apply.vo.ApplyVO;
import org.springblade.modules.exam.entity.ExamPaper;
import org.springblade.modules.exam.service.ExamPaperService;
+import org.springblade.modules.system.entity.User;
+import org.springblade.modules.system.service.IUserService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -38,6 +41,8 @@
private final ExamPaperService examPaperService;
+
+ private final IUserService userService;
/**
* 自定义分页数据
@@ -82,26 +87,24 @@
@Override
@Transactional(rollbackFor = Exception.class)
- public void importApply(List<ApplyExcel> data, Boolean isCovered) {
- data.forEach(applyExcel -> {
- Apply apply = new Apply();
- //设置数据
- apply.setExamId(applyExcel.getExamId());
- apply.setUserId(applyExcel.getUserId());
- apply.setApplyTime(new Date());
- apply.setApplyStatus(2);
- //去生成准考证号码
- apply.setCandidateNo(getCandidateNo(apply));
- //去生成考试编号
- apply.setApplyCode(getApplyCode(apply));
- //插入数据
- this.save(apply);
- //内网新增
- try {
- arg.test01(arg.url+"/apply/save",apply);
- } catch (Exception e) {
- e.printStackTrace();
+ public void importApply(List<ApplyInfoExcel> data, Boolean isCovered) {
+ data.forEach(applyInfoExcel -> {
+ //通过准考证号
+ if (null!=applyInfoExcel.getCandidateNo() && applyInfoExcel.getIdCardNo()!=""){
+ Apply apply = new Apply();
+ apply.setCandidateNo(applyInfoExcel.getCandidateNo());
+ //查询报名信息
+ Apply apply1 = baseMapper.selectOne(Condition.getQueryWrapper(apply));
+ apply1.setIsExam(2);
+ baseMapper.updateById(apply1);
+ //内网新增
+ try {
+// arg.test01(arg.url+"/apply/update",apply1);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
}
+
});
}
diff --git a/src/main/java/org/springblade/modules/training/controller/TrainingRegistrationController.java b/src/main/java/org/springblade/modules/training/controller/TrainingRegistrationController.java
index 68ab10b..39cfd29 100644
--- a/src/main/java/org/springblade/modules/training/controller/TrainingRegistrationController.java
+++ b/src/main/java/org/springblade/modules/training/controller/TrainingRegistrationController.java
@@ -4,6 +4,11 @@
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.AllArgsConstructor;
+import net.sourceforge.pinyin4j.PinyinHelper;
+import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
+import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
+import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
+import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
import org.springblade.common.utils.arg;
import org.springblade.core.excel.util.ExcelUtil;
import org.springblade.core.mp.support.Condition;
@@ -12,15 +17,26 @@
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.tool.utils.Func;
import org.springblade.modules.apply.entity.Apply;
+import org.springblade.modules.apply.excel.ApplyImporter;
import org.springblade.modules.apply.excel.ApplyInfoExcel;
+import org.springblade.modules.exam.entity.ExamPaper;
+import org.springblade.modules.exam.entity.ExamScore;
+import org.springblade.modules.exam.service.ExamPaperService;
+import org.springblade.modules.training.entity.TrainExam;
import org.springblade.modules.training.entity.TrainingRegistration;
+import org.springblade.modules.training.excel.TrainingRegistrationImporter;
+import org.springblade.modules.training.service.TrainExamService;
import org.springblade.modules.training.service.TrainingRegistrationService;
import org.springblade.modules.training.vo.TrainingRegistrationVo;
import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
+import java.text.DecimalFormat;
+import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
+import java.util.UUID;
/**
* @author zhongrj
@@ -33,6 +49,10 @@
public class TrainingRegistrationController {
private final TrainingRegistrationService trainingRegistrationService;
+
+ private final TrainExamService trainExamService;
+
+ private final ExamPaperService examPaperService;
/**
* 自定义分页
@@ -71,13 +91,17 @@
*/
@PostMapping("/submit")
public R submit(@RequestBody TrainingRegistration trainingRegistration) throws Exception {
- if (null!=trainingRegistration.getId()){
+ if (null==trainingRegistration.getId()){
trainingRegistration.setTrainingTime(new Date());
trainingRegistration.setCancel(1);
//默认报名未考试状态
trainingRegistration.setIsExam(1);
+ //去生成准考证号码
+ trainingRegistration.setCandidateNo(getCandidateNo(trainingRegistration));
+ //去生成考试编号
+// trainingRegistration.setApplyCode(getApplyCode(trainingRegistration));
}
- arg.test01(arg.url+"/trainingRegistration/submit",trainingRegistration);
+// arg.test01(arg.url+"/trainingRegistration/submit",trainingRegistration);
return R.status(trainingRegistrationService.saveOrUpdate(trainingRegistration));
}
@@ -113,4 +137,150 @@
List<ApplyInfoExcel> list = trainingRegistrationService.getTrainingRegistrationExcelList(trainingRegistration);
ExcelUtil.export(response, "考试报名清册数据"+ DateUtil.time(), "考试报名清册数据表", list, ApplyInfoExcel.class);
}
+
+ /**
+ * 导入报名考试数据
+ */
+ @PostMapping("import-trainingRegistration")
+ @ApiOperation(value = "导入报名考试数据", notes = "传入excel")
+ public R importUser(MultipartFile file, Integer isCovered) {
+ TrainingRegistrationImporter trainingRegistrationImporter = new TrainingRegistrationImporter(trainingRegistrationService, false);
+ ExcelUtil.save(file, trainingRegistrationImporter, ApplyInfoExcel.class);
+ return R.success("操作成功");
+ }
+
+
+ /**
+ * 生成准考证号码
+ * @param trainingRegistration 考试报名信息对象
+ */
+ private String getCandidateNo(TrainingRegistration trainingRegistration) {
+ //获取考试信息
+ ExamPaper examPaper = examPaperService.getById(trainingRegistration.getTrainExamId());
+ if (null!=examPaper.getStartTime()){
+ String format = new SimpleDateFormat("yyyy-MM-dd").format(examPaper.getStartTime());
+ String year = format.substring(2,4);
+ String quarter = null;
+ String months = null;
+ String days = null;
+ int month = Integer.parseInt(format.substring(5,7));
+ int day = Integer.parseInt(format.substring(8,10));
+ if (month>0 && month<=3){
+ quarter = "C";
+ }
+ if (month>3 && month<=6){
+ quarter = "X";
+ }
+ if (month>6 && month<=9){
+ quarter = "Q";
+ }
+ if (month>9 && month<=12){
+ quarter = "D";
+ }
+ if (month<=9){
+ months = "0" + month;
+ }
+ if (day<=9){
+ days = "0" + day;
+ }
+ //获取考试名称前缀,去除数字,字母
+ String examName
+ = examPaper.getExamName().replaceAll("\\s*", "").replaceAll("[^(\\u4e00-\\u9fa5)]", "").substring(0,1);
+
+ //前缀 = 年的最后两位 + 月份(两位) + 考试名称(中文拼音)首字母(去除数字,字母) + 考试类型 + 季度拼音首字母大写(春季就是 C)
+ String result = year
+ + months
+ + toFirstChar(examName).toUpperCase()
+ + examPaper.getExamType()
+ + quarter;
+ //查询是当前前缀已生成的数量
+ int count = trainingRegistrationService.getCandidateNoCount(result);
+ if (count==0){
+ return result + "0000";
+ }
+ //格式化
+ DecimalFormat decimalFormat = new DecimalFormat("0000");
+ //返回
+ return result + (decimalFormat.format(count++));
+ }
+ return null;
+ }
+
+
+ /**
+ * 生成报名编号
+ * @param apply 考试报名信息对象
+ */
+ private String getApplyCode(Apply apply) {
+ //获取考试信息
+ ExamPaper examPaper = examPaperService.getById(apply.getExamId());
+ if (null!=examPaper.getStartTime()){
+ String format = new SimpleDateFormat("yyyy-MM-dd").format(examPaper.getStartTime());
+ String year = format.substring(2,4);
+ String quarter = null;
+ String months = null;
+ String days = null;
+ int month = Integer.parseInt(format.substring(5,7));
+ int day = Integer.parseInt(format.substring(8,10));
+ if (month>0 && month<=3){
+ quarter = "C";
+ }
+ if (month>3 && month<=6){
+ quarter = "X";
+ }
+ if (month>6 && month<=9){
+ quarter = "Q";
+ }
+ if (month>9 && month<=12){
+ quarter = "D";
+ }
+ if (month<=9){
+ months = "0" + month;
+ }
+ if (day<=9){
+ days = "0" + day;
+ }
+ //获取考试名称前缀,去除数字,字母
+ String examName
+ = examPaper.getExamName().replaceAll("\\s*", "").replaceAll("[^(\\u4e00-\\u9fa5)]", "").substring(0,1);
+
+ //前缀 = 年的最后两位 + 月份(两位) + 考试名称(中文拼音)首字母(去除数字,字母) + 考试类型 + 季度拼音首字母大写(春季就是 C)
+ String result = year
+ + months
+ + toFirstChar(examName).toUpperCase()
+ + examPaper.getExamType()
+ + quarter;
+ //生成随机数
+ UUID uuid = UUID.randomUUID();
+ //返回
+ return result + uuid.toString().replaceAll("\\-","");
+ }
+ return null;
+ }
+
+ /**
+ * 获取字符串拼音的第一个字母
+ * @param chinese
+ * @return
+ */
+ private String toFirstChar(String chinese){
+ String pinyinStr = "";
+ char[] newChar = chinese.toCharArray();
+ //转为单个字符
+ HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
+ defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
+ defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
+ for (int i = 0; i < newChar.length; i++) {
+ if (newChar[i] > 128) {
+ try {
+ pinyinStr += PinyinHelper.toHanyuPinyinStringArray(newChar[i], defaultFormat)[0].charAt(0);
+ } catch (BadHanyuPinyinOutputFormatCombination e) {
+ e.printStackTrace();
+ }
+ }else{
+ pinyinStr += newChar[i];
+ }
+ }
+ return pinyinStr;
+ }
}
diff --git a/src/main/java/org/springblade/modules/training/excel/TrainingRegistrationImporter.java b/src/main/java/org/springblade/modules/training/excel/TrainingRegistrationImporter.java
new file mode 100644
index 0000000..23129e3
--- /dev/null
+++ b/src/main/java/org/springblade/modules/training/excel/TrainingRegistrationImporter.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * Neither the name of the dreamlu.net developer nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ * Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.modules.training.excel;
+
+import lombok.RequiredArgsConstructor;
+import org.springblade.core.excel.support.ExcelImporter;
+import org.springblade.modules.apply.excel.ApplyInfoExcel;
+import org.springblade.modules.apply.service.ApplyService;
+import org.springblade.modules.training.service.TrainingRegistrationService;
+
+import java.util.List;
+
+/**
+ * 培训报名考试数据导入类
+ *
+ * @author zhongrj
+ * @since 2021-08-03
+ */
+@RequiredArgsConstructor
+public class TrainingRegistrationImporter implements ExcelImporter<ApplyInfoExcel> {
+
+ private final TrainingRegistrationService service;
+ private final Boolean isCovered;
+
+ @Override
+ public void save(List<ApplyInfoExcel> data) {
+ service.importTrainingRegistration(data, isCovered);
+ }
+}
diff --git a/src/main/java/org/springblade/modules/training/mapper/TrainingRegistrationMapper.java b/src/main/java/org/springblade/modules/training/mapper/TrainingRegistrationMapper.java
index 5289b91..c3e4ac4 100644
--- a/src/main/java/org/springblade/modules/training/mapper/TrainingRegistrationMapper.java
+++ b/src/main/java/org/springblade/modules/training/mapper/TrainingRegistrationMapper.java
@@ -38,4 +38,11 @@
* @return
*/
List<ApplyInfoExcel> getTrainingRegistrationExcelList(@Param("trainingRegistration")TrainingRegistrationVo trainingRegistration);
+
+ /**
+ * 查询准考证前缀相同的数量
+ * @param result
+ * @return
+ */
+ int getCandidateNoCount(@Param("result")String result);
}
diff --git a/src/main/java/org/springblade/modules/training/mapper/TrainingRegistrationMapper.xml b/src/main/java/org/springblade/modules/training/mapper/TrainingRegistrationMapper.xml
index cff7f92..2cf7b2d 100644
--- a/src/main/java/org/springblade/modules/training/mapper/TrainingRegistrationMapper.xml
+++ b/src/main/java/org/springblade/modules/training/mapper/TrainingRegistrationMapper.xml
@@ -31,6 +31,7 @@
ke.id = sr.train_exam_id
WHERE
1=1
+ and is_exam = 1
<if test="trainingRegistration.trainingUnitId!=null and trainingRegistration.trainingUnitId!=''">
and sr.training_unit_id = #{trainingRegistration.trainingUnitId}
</if>
@@ -95,6 +96,7 @@
ke.id = sr.train_exam_id
WHERE
1=1
+ and is_exam = 1
<if test="trainingRegistration.trainingUnitId!=null and trainingRegistration.trainingUnitId!=''">
and sr.training_unit_id = #{trainingRegistration.trainingUnitId}
</if>
@@ -114,4 +116,14 @@
and sr.cancel = #{trainingRegistration.cancel}
</if>
</select>
+
+
+ <!--获取准考证前缀相同的数量-->
+ <select id="getCandidateNoCount" resultType="java.lang.Integer">
+ select count(*) from sys_training_registration
+ where 1=1
+ <if test="result!=null and result!=''">
+ and candidate_no like concat('%', #{result},'%')
+ </if>
+ </select>
</mapper>
diff --git a/src/main/java/org/springblade/modules/training/service/TrainingRegistrationService.java b/src/main/java/org/springblade/modules/training/service/TrainingRegistrationService.java
index 93cce82..43c0424 100644
--- a/src/main/java/org/springblade/modules/training/service/TrainingRegistrationService.java
+++ b/src/main/java/org/springblade/modules/training/service/TrainingRegistrationService.java
@@ -34,4 +34,18 @@
* @return
*/
List<ApplyInfoExcel> getTrainingRegistrationExcelList(TrainingRegistrationVo trainingRegistration);
+
+ /**
+ * 培训考试清册导入
+ * @param data
+ * @param isCovered
+ */
+ void importTrainingRegistration(List<ApplyInfoExcel> data, Boolean isCovered);
+
+ /**
+ * 查询准考证前缀相同的数量
+ * @param result
+ * @return
+ */
+ int getCandidateNoCount(String result);
}
diff --git a/src/main/java/org/springblade/modules/training/service/impl/TrainingRegistrationServiceImpl.java b/src/main/java/org/springblade/modules/training/service/impl/TrainingRegistrationServiceImpl.java
index 2c3cb68..effb09a 100644
--- a/src/main/java/org/springblade/modules/training/service/impl/TrainingRegistrationServiceImpl.java
+++ b/src/main/java/org/springblade/modules/training/service/impl/TrainingRegistrationServiceImpl.java
@@ -3,6 +3,8 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.modules.apply.entity.Apply;
import org.springblade.modules.apply.excel.ApplyInfoExcel;
import org.springblade.modules.training.entity.TrainingRegistration;
import org.springblade.modules.training.mapper.TrainingRegistrationMapper;
@@ -47,4 +49,42 @@
public List<ApplyInfoExcel> getTrainingRegistrationExcelList(TrainingRegistrationVo trainingRegistration) {
return baseMapper.getTrainingRegistrationExcelList(trainingRegistration);
}
+
+ /**
+ * 培训考试清册导入
+ * @param data
+ * @param isCovered
+ */
+ @Override
+ public void importTrainingRegistration(List<ApplyInfoExcel> data, Boolean isCovered) {
+ data.forEach(applyInfoExcel -> {
+ //通过准考证号
+ if (null!=applyInfoExcel.getCandidateNo() && applyInfoExcel.getIdCardNo()!=""){
+ TrainingRegistration trainingRegistration = new TrainingRegistration();
+ trainingRegistration.setCandidateNo(applyInfoExcel.getCandidateNo());
+ //查询报名信息
+ TrainingRegistration trainingRegistration1 = baseMapper.selectOne(Condition.getQueryWrapper(trainingRegistration));
+ trainingRegistration1.setIsExam(2);
+ baseMapper.updateById(trainingRegistration1);
+ //内网新增
+ try {
+// arg.test01(arg.url+"/apply/update",apply1);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ });
+ }
+
+
+ /**
+ * 查询准考证前缀相同的数量
+ * @param result
+ * @return
+ */
+ @Override
+ public int getCandidateNoCount(String result) {
+ return baseMapper.getCandidateNoCount(result);
+ }
}
--
Gitblit v1.9.3