package org.springblade.modules.training.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.springblade.core.log.exception.ServiceException; import org.springblade.core.mp.support.Condition; import org.springblade.core.tool.api.R; import org.springblade.modules.FTP.FtpUtil; import org.springblade.modules.absentrecords.entity.AbsentRecords; import org.springblade.modules.absentrecords.service.AbsentRecordsService; import org.springblade.modules.apply.entity.Apply; 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.exam.service.ExamScoreService; import org.springblade.modules.system.entity.User; import org.springblade.modules.system.service.IUserDeptService; import org.springblade.modules.system.service.IUserService; import org.springblade.modules.training.entity.TrainingRegistration; import org.springblade.modules.training.excel.TrainingRegistrationExcel; import org.springblade.modules.training.mapper.TrainingRegistrationMapper; import org.springblade.modules.training.service.TrainingRegistrationService; import org.springblade.modules.training.util.LongTimeUtil; import org.springblade.modules.training.vo.TrainingRegistrationVo; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.text.DecimalFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * 报名培训服务实现类 * @author zhongrj */ @Service @AllArgsConstructor public class TrainingRegistrationServiceImpl extends ServiceImpl implements TrainingRegistrationService { private final IUserService userService; private final IUserDeptService userDeptService; private final ExamPaperService examPaperService; private final AbsentRecordsService absentRecordsService; private final ExamScoreService examScoreService; @Override public IPage selectTrainingRegistrationPage(IPage page, TrainingRegistrationVo trainingRegistration) { List trainingRegistrationVos = baseMapper.selectTrainingRegistrationPage(page, trainingRegistration); trainingRegistrationVos.forEach(trainingRegistrationVo -> { //如果考试id 为空,考试尚未提交审核 if (null==trainingRegistrationVo.getAuditStatus()){ trainingRegistrationVo.setAuditStatus(4); } }); return page.setRecords(trainingRegistrationVos); } /** * 详情 * @param trainingRegistration 报名培训信息对象 */ @Override public TrainingRegistrationVo selectTrainingRegistrationInfo(TrainingRegistration trainingRegistration) { return baseMapper.selectTrainingRegistrationInfo(trainingRegistration); } /** * 导出报名数数据 * @param trainingRegistration 培训报名对象 * @return */ @Override public List getTrainingRegistrationExcelList(TrainingRegistrationVo trainingRegistration) { return baseMapper.getTrainingRegistrationExcelList(trainingRegistration); } /** * 培训考试清册导入 * @param data * @param isCovered */ @Override @Transactional(rollbackFor = Exception.class) public void importTrainingRegistration(List data, Boolean isCovered,Long examId) { if (data.size()>0){ List list = new ArrayList<>(); data.forEach(trainingRegistrationExcel -> { TrainingRegistration trainingRegistration = new TrainingRegistration(); // User user = userService.getUserInfoByIdCardNo(trainingRegistrationExcel.getIdCardNo()); // //通过培训公司查组织机构id // if (null!=trainingRegistrationExcel.getDeptName() && trainingRegistrationExcel.getDeptName()!=""){ // trainingRegistration.setTrainingUnitId(userDeptService.selectIn(trainingRegistrationExcel.getDeptName())); // } // trainingRegistration.setIsExam(2); // trainingRegistration.setCancel(1); // trainingRegistration.setTrainingTime(new Date()); // trainingRegistration.setAuditStatus(1); // try { // trainingRegistration.setTrainingTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2021-10-07 15:13:12")); // } catch (ParseException e) { // e.printStackTrace(); // } // ExamPaper paper = examPaperService.getById(120); // //生成准考证号 // trainingRegistration.setCandidateNo(getCandidateNo(paper)); // trainingRegistration.setTrainExamId(paper.getId().toString()); // if (null!=user) { // trainingRegistration.setUserId(user.getId().toString()); // this.save(trainingRegistration); // }else { // list.add(trainingRegistrationExcel.getIdCardNo()); // } //通过身份证号 if (null!=trainingRegistrationExcel.getIdCardNo() && trainingRegistrationExcel.getIdCardNo()!=""){ User user = userService.getUserInfoByIdCardNo(trainingRegistrationExcel.getIdCardNo()); trainingRegistration.setUserId(user.getId().toString()); //通过培训公司查组织机构id if (null!=trainingRegistrationExcel.getDeptName() && trainingRegistrationExcel.getDeptName()!=""){ trainingRegistration.setTrainingUnitId(userDeptService.selectIn(trainingRegistrationExcel.getDeptName())); } if(null==user.getIsTrain()){ trainingRegistration.setIsExam(1); trainingRegistration.setCancel(1); trainingRegistration.setTrainingTime(new Date()); trainingRegistration.setAuditStatus(4); //如果examId不为空 if (null!=examId){ //查询考试信息 ExamPaper examPaper = examPaperService.getById(examId); trainingRegistration.setTrainExamId(examId.toString()); //审核通过 if (examPaper.getAuditStatus()==1){ //生成准考证号 trainingRegistration.setCandidateNo(getCandidateNo(examPaper)); trainingRegistration.setAuditStatus(1); } //考试审核不通过 if (examPaper.getAuditStatus()==2){ trainingRegistration.setAuditStatus(2); } //考试待审核 if (examPaper.getAuditStatus()==3){ trainingRegistration.setAuditStatus(3); } } //新增报名 this.save(trainingRegistration); //修改保安报名状态 user.setIsTrain(1); userService.updateById(user); //数据同步 saveTrainingRegistration(trainingRegistration,user); }else { if (user.getIsTrain()!=1) { trainingRegistration.setIsExam(1); trainingRegistration.setCancel(1); trainingRegistration.setTrainingTime(new Date()); trainingRegistration.setAuditStatus(4); //如果examId不为空 if (null!=examId){ //查询考试信息 ExamPaper examPaper = examPaperService.getById(examId); trainingRegistration.setTrainExamId(examId.toString()); //审核通过 if (examPaper.getAuditStatus()==1){ //生成准考证号 trainingRegistration.setCandidateNo(getCandidateNo(examPaper)); } } //新增报名 this.save(trainingRegistration); //修改保安报名状态 user.setIsTrain(1); userService.updateById(user); //数据同步 saveTrainingRegistration(trainingRegistration,user); } } } }); String errorAccount = StringUtils.join(list, "\\\n"); throw new ServiceException("未导入成功"+errorAccount); } } /** * 生成准考证号码 * @param examPaper 考试报名信息对象 */ private String getCandidateNo(ExamPaper examPaper) { //获取考试信息 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; int month = Integer.parseInt(format.substring(5,7)); int day = Integer.parseInt(format.substring(8,10)); String days = null; 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; }else { months = String.valueOf(month); } if (day<=9){ days = "0" + day; }else { days = ""+day; } String type = null; if (examPaper.getExamType()==1){ type = "z"; } if (examPaper.getExamType()==2){ type = "m"; } //获取考试名称前缀,去除数字,字母 // String examName // = examPaper.getExamName().replaceAll("\\s*", "").replaceAll("[^(\\u4e00-\\u9fa5)]", "").substring(0,1); //前缀 = 年的最后两位 + 月份(两位) + 考试名称(中文拼音)首字母(去除数字,字母) + 考试类型 + 季度拼音首字母大写(春季就是 C) // String result = year // + months // + toFirstChar(examName).toUpperCase() // + examPaper.getExamType() // + quarter; //前缀 = 年的最后两位 + 月份(两位) + 日 (两位) + 考试类型 正式考试 z 模拟考试 m String pre = year + months + days + type; //查询是当前前缀已生成准考证号码最大的一位 int count = examPaperService.getCandidateNoCount(pre); String result = null; //格式化 DecimalFormat decimalFormat = new DecimalFormat("0000"); count++; result = pre + (decimalFormat.format(count)); //返回 return result; } return null; } /** * 报名 */ private void saveTrainingRegistration(TrainingRegistration trainingRegistration,User user1){ String formatStr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); Long id = trainingRegistration.getId(); String s = "insert into sys_training_registration(id,training_unit_id,training_time,cancel,user_id,is_exam,audit_status) " + "values(" + "'" + id + "'" + "," + "'" + trainingRegistration.getTrainingUnitId() +"'" + "," + "'" + formatStr +"'" + "," + "'" + trainingRegistration.getCancel() + "'" + "," + "'" + trainingRegistration.getUserId() + "'" + "," + "'" + trainingRegistration.getIsExam() + "'" + "," +"'" + trainingRegistration.getAuditStatus() + "'" + ");" + "update blade_user set is_train = " + user1.getIsTrain() + " " +"where id = " + "'" + user1.getId() + "'"; FtpUtil.sqlFileUpload(s); } /** * 查询准考证前缀相同的数量 * @param result * @return */ @Override public int getCandidateNoCount(String result) { return baseMapper.getCandidateNoCount(result); } /** * 查询培训报名信息 * @param trainingRegistration 培训报名对象信息 * @return */ @Override public Integer getTrainingRegistrationInfo(TrainingRegistration trainingRegistration) { return baseMapper.getTrainingRegistrationInfo(trainingRegistration); } /** * 查询已报名培训公司未关联考试的人员 * @return */ @Override public List getTrainIds(TrainingRegistrationVo trainingRegistrationVo) { trainingRegistrationVo.setSerialStart(trainingRegistrationVo.getSerialStart() -1); trainingRegistrationVo.setSerialEnd(trainingRegistrationVo.getSerialEnd() -trainingRegistrationVo.getSerialStart()); return baseMapper.getTrainIds(trainingRegistrationVo); } /** * 自动处理之前报了名,申请了考试又没有去考试的,做缺考标记,并将报名状态修改为已取消报名 */ @Override public void examApplyStatus() { //封装条件 TrainingRegistration trainingRegistration = new TrainingRegistration(); trainingRegistration.setCancel(1); trainingRegistration.setAuditStatus(1); trainingRegistration.setIsExam(1); //查询考试申请审核通过,已报名,未考试的人员 List trainingRegistrationList = baseMapper.selectTrainingRegistrationList(trainingRegistration); if (trainingRegistrationList.size()>0) { trainingRegistrationList.forEach(trainingRegistration1 -> { //判断时间 //查询考试信息 ExamPaper paper = examPaperService.getById(trainingRegistration1.getTrainExamId()); if (null!=paper) { //比对考试结束时间 Date now = new Date(); Date exanEndTime = paper.getEndTime(); //考试截止时间小于当前时间,说明已过考试时间 if (exanEndTime.before(now)) { //修改报名状态 trainingRegistration1.setCancel(1); //缺考标记 trainingRegistration1.setIsExam(4); this.updateById(trainingRegistration1); //修改保安报名状态 User user = userService.getById(trainingRegistration1.getUserId()); //考试结束 user.setIsTrain(3); userService.updateById(user); //生成缺考记录 AbsentRecords absentRecords = new AbsentRecords(); absentRecords.setUserId(user.getId()); absentRecords.setApplyId(trainingRegistration1.getId()); absentRecords.setExamId(Long.parseLong(trainingRegistration1.getTrainExamId())); absentRecords.setCandidateNo(trainingRegistration1.getCandidateNo()); absentRecords.setCreateTime(new Date()); //新增 absentRecordsService.save(absentRecords); //新增成绩,成绩为0 ExamScore examScore = new ExamScore(); examScore.setCandidateNo(trainingRegistration1.getCandidateNo()); examScore.setTheoryGrade(0); examScore.setAllGrade(0); examScore.setQualified(3); examScore.setUserId(user.getId().toString()); examScore.setApplyId(trainingRegistration1.getId()); examScore.setExamId(trainingRegistration1.getTrainExamId()); //新增 examScoreService.save(examScore); //内网同步 String s = "update sys_training_registration set cancel = " + trainingRegistration1.getCancel() + ",is_exam = " + "'" + trainingRegistration1.getIsExam() + "'" + " " + "where id = " + "'" + trainingRegistration1.getId() + "';" + "update blade_user set is_train = " + user.getIsTrain() + " " + "where id = " + "'" + user.getId() + "';" + "insert into sys_absent_records(id,user_id,create_time,exam_id,apply_id,candidate_no) " + "values(" + "'" + absentRecords.getId() + "'" + "," + "'" + absentRecords.getUserId() + "'" + "," + "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(absentRecords.getCreateTime()) + "'" + "," + "'" + absentRecords.getExamId() + "'" + "," + "'" + absentRecords.getApplyId() + "'" + "," + "'" + absentRecords.getCandidateNo() + "'" + ");" + "insert into exam_score(id,candidate_no,theory_grade,all_grade,qualified,user_id,apply_id,exam_id) " + "values(" + "'" + examScore.getId() + "'" + "," + "'" + examScore.getCandidateNo() + "'" + "," + "'" + examScore.getTheoryGrade() + "'" + "," + "'" + examScore.getAllGrade() + "'" + "," + "'" + examScore.getQualified() + "'" + "," + "'" + examScore.getUserId() + "'" + "," + "'" + examScore.getApplyId() + "'" + "," + "'" + examScore.getExamId() + "'" + ")"; FtpUtil.sqlFileUpload(s); } } }); } } }