| | |
| | | |
| | | package org.springblade.modules.training.service.impl; |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | 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.common.constant.AgeUtil; |
| | | import org.springblade.common.utils.IdCardNoUtil; |
| | | import org.springblade.core.log.exception.ServiceException; |
| | | import org.springblade.core.mp.support.Condition; |
| | | import org.springblade.core.tool.api.R; |
| | | import org.springblade.core.tool.utils.BeanUtil; |
| | | import org.springblade.modules.FTP.FtpUtil; |
| | | import org.springblade.modules.FTP.Monitor; |
| | | import org.springblade.modules.FTP.Result; |
| | | 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.training.util.LongTimeUtil; |
| | | import org.springblade.modules.training.vo.TrainingRegistrationVo; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.data.redis.core.RedisTemplate; |
| | | 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; |
| | | import java.util.*; |
| | | import java.util.concurrent.atomic.AtomicBoolean; |
| | | |
| | | /** |
| | | * 报名培训服务实现类 |
| | |
| | | private final AbsentRecordsService absentRecordsService; |
| | | |
| | | private final ExamScoreService examScoreService; |
| | | |
| | | private final RedisTemplate redisTemplate; |
| | | |
| | | |
| | | @Autowired |
| | | private MyAsyncService myAsyncService; |
| | | |
| | |
| | | */ |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void importTrainingRegistration(List<TrainingRegistrationExcel> data, Boolean isCovered,Long examId) { |
| | | public void importTrainingRegistration(List<TrainingRegistrationExcel> data, Boolean isCovered,String deptId) { |
| | | //需要推送内网的保安员信息集合 |
| | | List<TrainingRegistration> trainingRegistrationList = new ArrayList<>(); |
| | | //年龄不符的保安员信息存入集合 |
| | | List<String> ageErrorList = new ArrayList<>(); |
| | | List<String> cardErrorList = new ArrayList<>(); |
| | | AtomicBoolean ageStatus = new AtomicBoolean(true); |
| | | AtomicBoolean cardStatus = new AtomicBoolean(true); |
| | | if (data.size()>0){ |
| | | List<String> 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); |
| | | } |
| | | for (TrainingRegistrationExcel trainingRegistrationExcel : data) { |
| | | //判断是否为当前单位 |
| | | String deptIds = userDeptService.selectIn(trainingRegistrationExcel.getDeptName()); |
| | | if (null!=deptIds && !deptIds.equals("")) { |
| | | if (null != deptId && !deptId.equals("")) { |
| | | if (!deptId.equals(deptIds)) { |
| | | throw new ServiceException("导入失败!不能给予不是本公司的保安员报名!"); |
| | | } |
| | | //新增报名 |
| | | this.save(trainingRegistration); |
| | | } |
| | | }else { |
| | | //如果deptIds 为空,则说明还没有改公司 |
| | | throw new ServiceException("导入失败!公司名:["+trainingRegistrationExcel.getDeptName()+"]不存在!"); |
| | | } |
| | | |
| | | //修改保安报名状态 |
| | | user.setIsTrain(1); |
| | | userService.updateById(user); |
| | | //数据同步 |
| | | saveTrainingRegistration(trainingRegistration,user); |
| | | //身份证校验 |
| | | if (null==trainingRegistrationExcel.getIdCardNo() || trainingRegistrationExcel.getIdCardNo().equals("")){ |
| | | throw new ServiceException("导入失败!身份证号码不能为空!"); |
| | | } |
| | | //姓名校验 |
| | | if (null==trainingRegistrationExcel.getRealName() || trainingRegistrationExcel.getRealName().equals("")){ |
| | | throw new ServiceException("导入失败!姓名不能为空!"); |
| | | } |
| | | |
| | | if (null!=trainingRegistrationExcel.getIdCardNo() && !trainingRegistrationExcel.getIdCardNo().equals("")){ |
| | | //去除所有空格 |
| | | String cardid = trainingRegistrationExcel.getIdCardNo().replaceAll(" ", ""); |
| | | //校验 |
| | | boolean b = IdCardNoUtil.checkIdCardNo(cardid); |
| | | if(!b){ |
| | | cardStatus.set(false); |
| | | cardErrorList.add(trainingRegistrationExcel.getIdCardNo()); |
| | | continue; |
| | | } |
| | | } |
| | | |
| | | //计算年龄 |
| | | Integer age = AgeUtil.idCardToAge(trainingRegistrationExcel.getIdCardNo()); |
| | | |
| | | //判断年龄 |
| | | if (age<18 || age>60) { |
| | | ageStatus.set(false); |
| | | ageErrorList.add(trainingRegistrationExcel.getIdCardNo()); |
| | | continue; |
| | | } |
| | | |
| | | //向内网推送数据 |
| | | //生成随机数 |
| | | String uuid = UUID.randomUUID().toString(); |
| | | //创建培训对象 |
| | | TrainingRegistration trainingRegistration = new TrainingRegistration(); |
| | | trainingRegistration.setName(trainingRegistrationExcel.getRealName()); |
| | | trainingRegistration.setDeptId(Long.parseLong(deptId)); |
| | | trainingRegistration.setIdCardNo(trainingRegistrationExcel.getIdCardNo()); |
| | | //已报名 |
| | | trainingRegistration.setCancel(1); |
| | | //默认为未考试状态 |
| | | trainingRegistration.setIsExam(1); |
| | | //未提交考试审核 |
| | | trainingRegistration.setAuditStatus(4); |
| | | trainingRegistration.setTrainingTime(new Date()); |
| | | //将 user 存入 redis |
| | | redisTemplate.opsForValue().set(uuid, JSON.toJSONString(trainingRegistration)); |
| | | //trainingRegistration 临时设置uuid 到 AcademicUrl字段 |
| | | trainingRegistration.setAcademicUrl(uuid); |
| | | //加入集合 |
| | | trainingRegistrationList.add(trainingRegistration); |
| | | } |
| | | |
| | | Result result = new Result(); |
| | | //培训批量插入 |
| | | if (trainingRegistrationList.size()>0) { |
| | | //生成随机数 |
| | | String uuid = UUID.randomUUID().toString(); |
| | | //数据推送 |
| | | Map<String, Object> map = new HashMap<>(1); |
| | | map.put(uuid, trainingRegistrationList); |
| | | // myAsyncService.FTPObjectTrianList(map); |
| | | |
| | | int count = 0; |
| | | //调用ftp获取返回数据 |
| | | while (true){ |
| | | try { |
| | | Thread.sleep(1000); |
| | | } catch (InterruptedException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | //调用ftp获取返回数据 |
| | | result = Monitor.getFtpDataByUuidList(uuid); |
| | | //如果返回true,就退处 |
| | | if (result.getCode() == 200) { |
| | | break; |
| | | }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); |
| | | count++; |
| | | if (count == 30) { |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | }); |
| | | String errorAccount = StringUtils.join(list, "\\\n"); |
| | | throw new ServiceException("未导入成功"+errorAccount); |
| | | } |
| | | |
| | | // if (null!=result){ |
| | | // //获取 result |
| | | // List<Result> data1 = result.getData(); |
| | | // if (data1.size()>0){ |
| | | // for (Result result1 : data1) { |
| | | // // 取出 Msg ,此 msg 存的对应的 uuid |
| | | // String uuid = result1.getMsg(); |
| | | // // 从redis 中获取对应的用户信息 |
| | | // User user = handlerUserInfo(uuid); |
| | | // if (result1.getCode()==200){ |
| | | // user.setId(result1.getUserId()); |
| | | // this.save(user); |
| | | // } |
| | | // if (result1.getCode()==201){ |
| | | // user.setId(result1.getUserId()); |
| | | // user.setCreateTime(null); |
| | | // this.updateById(user); |
| | | // } |
| | | // if (result1.getCode()==202){ |
| | | // status.set(false); |
| | | // //已在其他单位存在 |
| | | // errorList.add(user.getCardid()); |
| | | // } |
| | | // if (result1.getCode()==203){ |
| | | // securityInvalidStatus.set(false); |
| | | // //保安证编号不匹配 |
| | | // securityInvalidList.add(user.getCardid()); |
| | | // } |
| | | // } |
| | | // } |
| | | // } |
| | | //如果所有数据导入有一个异常 |
| | | StringBuilder errorBuilder = new StringBuilder(); |
| | | if (!ageStatus.get()){ |
| | | String errorAccount = StringUtils.join(ageErrorList, "\\\n"); |
| | | errorBuilder.append("保安员:[" + errorAccount + "]报名失败!年龄不符,报名年龄为[18-60]周岁!"); |
| | | } |
| | | if (!cardStatus.get()){ |
| | | String errorAccount = StringUtils.join(cardErrorList, "\\\n"); |
| | | errorBuilder.append("用户:[" + errorAccount + "]导入失败!身份证号码不正确,请核对!"); |
| | | } |
| | | //抛出异常 |
| | | if (errorBuilder.length()>0){ |
| | | throw new ServiceException(errorBuilder.toString()); |
| | | } |
| | | } |
| | | } |
| | | |