智慧保安后台管理-外网-验收版本
Administrator
2021-08-03 7b18a6778a4ab36ff4181ebcef1d2f747a7291c6
1.新增培训考试生成准考证号码
2.考试报名清册导入功能实现
10 files modified
1 files added
347 ■■■■■ changed files
src/main/java/org/springblade/modules/apply/controller/ApplyController.java 8 ●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/apply/excel/ApplyImporter.java 4 ●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/apply/mapper/ApplyMapper.xml 2 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/apply/service/ApplyService.java 2 ●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/apply/service/impl/ApplyServiceImpl.java 41 ●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/training/controller/TrainingRegistrationController.java 174 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/training/excel/TrainingRegistrationImporter.java 43 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/training/mapper/TrainingRegistrationMapper.java 7 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/training/mapper/TrainingRegistrationMapper.xml 12 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/training/service/TrainingRegistrationService.java 14 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/training/service/impl/TrainingRegistrationServiceImpl.java 40 ●●●●● patch | view | raw | blame | history
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);
    }
}