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); } 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); } } 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> 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); /** * 获取准考证信息 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(); } } }); } 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; } } src/main/java/org/springblade/modules/training/excel/TrainingRegistrationImporter.java
New file @@ -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); } } 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); } 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> 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); } 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); } }