package org.springblade.modules.training.controller; import com.baomidou.mybatisplus.core.metadata.IPage; 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; import org.springblade.core.mp.support.Query; import org.springblade.core.tool.api.R; 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 * @time 2021-07-12 * @desc 报名培训管理控制层 */ @RestController @AllArgsConstructor @RequestMapping("/trainingRegistration") public class TrainingRegistrationController { private final TrainingRegistrationService trainingRegistrationService; private final TrainExamService trainExamService; private final ExamPaperService examPaperService; /** * 自定义分页 * @param query page,size * @param trainingRegistration 报名培训信息对象 */ @GetMapping("/page") public R> page(TrainingRegistrationVo trainingRegistration, Query query) { IPage pages = trainingRegistrationService.selectTrainingRegistrationPage(Condition.getPage(query), trainingRegistration); return R.data(pages); } /** * 新增 * @param trainingRegistration 报名培训信息对象 */ @PostMapping("/save") @ApiOperation(value = "新增", notes = "传入trainingRegistration") public R save(@RequestBody TrainingRegistration trainingRegistration) throws Exception { return R.status(trainingRegistrationService.save(trainingRegistration)); } /** * 修改 * @param trainingRegistration 报名培训信息对象 */ @PostMapping("/update") public R update(@RequestBody TrainingRegistration trainingRegistration) throws Exception { arg.test01(arg.url+"/trainingRegistration/update",trainingRegistration); return R.status(trainingRegistrationService.updateById(trainingRegistration)); } /** * 新增或修改 * @param trainingRegistration 报名培训信息对象 */ @PostMapping("/submit") public R submit(@RequestBody TrainingRegistration trainingRegistration) throws Exception { 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); return R.status(trainingRegistrationService.saveOrUpdate(trainingRegistration)); } /** * 删除 * @param ids 报名培训信息ids 数组 */ @PostMapping("/remove") public R remove(@ApiParam(value = "主键集合") @RequestParam String ids) { arg.sendPostRemoveByIds(arg.url+"/trainingRegistration/remove",ids); return R.status(trainingRegistrationService.removeByIds(Func.toLongList(ids))); } /** * 详情 * @param trainingRegistration 报名培训信息对象 */ @GetMapping("/detail") @ApiOperation(value = "详情", notes = "传入trainingRegistration") public R detail(TrainingRegistration trainingRegistration) { TrainingRegistrationVo detail = trainingRegistrationService.selectTrainingRegistrationInfo(trainingRegistration); return R.data(detail); } /** * 导出报名数数据 * @param response * @param trainingRegistration 培训报名对象 */ @GetMapping("export-apply") @ApiOperation(value = "导出报名清册") public void exportApply(HttpServletResponse response,TrainingRegistrationVo trainingRegistration) { List 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; } }