Administrator
2021-07-18 f7acd7b832ed008c83910a7aad3e9b227c777198
报名考试新增接口准考证号码生成
7 files modified
121 ■■■■■ changed files
pom.xml 7 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/apply/controller/ApplyController.java 81 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/apply/entity/Apply.java 1 ●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/apply/mapper/ApplyMapper.java 6 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/apply/mapper/ApplyMapper.xml 9 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/apply/service/ApplyService.java 7 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/apply/service/impl/ApplyServiceImpl.java 10 ●●●●● patch | view | raw | blame | history
pom.xml
@@ -200,6 +200,13 @@
            <artifactId>lombok</artifactId>
            <scope>provided</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.belerweb/pinyin4j -->
        <dependency>
            <groupId>com.belerweb</groupId>
            <artifactId>pinyin4j</artifactId>
            <version>2.5.1</version>
        </dependency>
    </dependencies>
    <build>
src/main/java/org/springblade/modules/apply/controller/ApplyController.java
@@ -3,7 +3,13 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import io.swagger.models.auth.In;
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.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springblade.core.tool.api.R;
@@ -11,8 +17,11 @@
import org.springblade.modules.apply.entity.Apply;
import org.springblade.modules.apply.service.ApplyService;
import org.springblade.modules.apply.vo.ApplyVO;
import org.springblade.modules.exam.entity.ExamPaper;
import org.springblade.modules.exam.service.ExamPaperService;
import org.springframework.web.bind.annotation.*;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
/**
@@ -26,6 +35,8 @@
public class ApplyController {
    private final ApplyService applyService;
    private final ExamPaperService examPaperService;
    /**
     * 自定义分页
@@ -73,7 +84,7 @@
     */
    @PostMapping("/submit")
    public R submit(@RequestBody Apply apply) {
        if (null!=apply.getId()){
        if (null==apply.getId()){
            //去生成准考证
            apply.setCandidateNo(getCandidateNo(apply));
        }
@@ -82,14 +93,19 @@
    /**
     * 生成准考证
     * @param apply 报名对象信息
     * @param apply 考试报名信息对象
     */
    private String getCandidateNo(Apply apply) {
        String candidateNo = null;
        if (null!=apply.getExamTime()){
            String year = ((Integer) apply.getExamTime().getYear()).toString().substring(2,3);
        //获取考试信息
        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;
            int month = apply.getExamTime().getMonth();
            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";
            }
@@ -102,8 +118,59 @@
            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);
            //前缀
            String result = year
                            + months
                            + toFirstChar(examName).toUpperCase()
                            + examPaper.getExamType()
                            + quarter;
            //查询是当前前缀已生成的数量
            int count = applyService.getCandidateNoCount(result);
            if (count==0){
                return result + "0000";
            }
            //格式化
            DecimalFormat decimalFormat = new DecimalFormat("0000");
            //返回
            return result + (decimalFormat.format(count++));
        }
        return "2107XN0001";
        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/apply/entity/Apply.java
@@ -158,4 +158,5 @@
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date examTime;
}
src/main/java/org/springblade/modules/apply/mapper/ApplyMapper.java
@@ -31,4 +31,10 @@
     */
    ApplyVO selectApplyInfo(@Param("apply") Apply apply);
    /**
     * 获取准考证前缀相同的数量
     * @param result 前缀
     * @return
     */
    int getCandidateNoCount(@Param("result")String result);
}
src/main/java/org/springblade/modules/apply/mapper/ApplyMapper.xml
@@ -44,4 +44,13 @@
            and id = #{apply.id}
        </if>
    </select>
    <!--获取准考证前缀相同的数量-->
    <select id="getCandidateNoCount" resultType="java.lang.Integer">
        select count(*) from sys_apply
        where 1=1
        <if test="result!=null and result!=''">
            and candidate_no like concat('%', #{result},'%')
        </if>
    </select>
</mapper>
src/main/java/org/springblade/modules/apply/service/ApplyService.java
@@ -25,4 +25,11 @@
     * @return
     */
    ApplyVO selectApplyInfo(Apply apply);
    /**
     * 获取准考证前缀相同的数量
     * @param result 前缀
     * @return
     */
    int getCandidateNoCount(String result);
}
src/main/java/org/springblade/modules/apply/service/impl/ApplyServiceImpl.java
@@ -35,4 +35,14 @@
    public ApplyVO selectApplyInfo(Apply apply) {
        return baseMapper.selectApplyInfo(apply);
    }
    /**
     * 获取准考证前缀相同的数量
     * @param result 前缀
     * @return
     */
    @Override
    public int getCandidateNoCount(String result) {
        return baseMapper.getCandidateNoCount(result);
    }
}