智慧保安后台管理-外网-验收版本
zengh
2021-12-04 2fdf30b77e0614f4785c7893a01958e8c8db8545
src/main/java/org/springblade/modules/exam/service/impl/ExamScoreServiceImpl.java
@@ -4,22 +4,41 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.AllArgsConstructor;
import org.springblade.common.utils.arg;
import org.springblade.core.mp.support.Condition;
import org.springblade.modules.FTP.FtpUtil;
import org.springblade.modules.apply.entity.Apply;
import org.springblade.modules.apply.service.ApplyService;
import org.springblade.modules.exam.entity.ExamExaminationSubject;
import org.springblade.modules.exam.entity.ExamPaper;
import org.springblade.modules.exam.entity.ExamScore;
import org.springblade.modules.exam.entity.ExamSubjectChoices;
import org.springblade.modules.exam.excel.ExamScoreExcel;
import org.springblade.modules.exam.mapper.ExamScoreMapper;
import org.springblade.modules.exam.service.ExamPaperService;
import org.springblade.modules.exam.service.ExamScoreService;
import org.springblade.modules.exam.vo.ExamPaperSubjectVO;
import org.springblade.modules.exam.service.ExamSubjectChoicesService;
import org.springblade.modules.exam.util.SecurityPaperUtil;
import org.springblade.modules.exam.vo.ExamResultVO;
import org.springblade.modules.exam.vo.ExamScoreVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springblade.modules.system.entity.Role;
import org.springblade.modules.system.entity.User;
import org.springblade.modules.system.service.IRoleService;
import org.springblade.modules.system.service.IUserService;
import org.springblade.modules.system.vo.UserVO;
import org.springblade.modules.training.entity.TrainingRegistration;
import org.springblade.modules.training.service.TrainingRegistrationService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Map;
import static com.bstek.ureport.expression.model.condition.Join.and;
/**
 * 考试成绩服务实现类
@@ -29,7 +48,17 @@
@AllArgsConstructor
public class ExamScoreServiceImpl extends ServiceImpl<ExamScoreMapper, ExamScore> implements ExamScoreService {
   private final IUserService userService;
   private final ExamSubjectChoicesService examSubjectChoicesService;
   private final ExamPaperService examPaperService;
   private final ApplyService applyService;
   private final TrainingRegistrationService trainingRegistrationService;
   private final IRoleService roleService;
   /**
    * 自定义分页数据
@@ -39,7 +68,25 @@
    */
   @Override
   public IPage<ExamScoreVO> selectExamScorePage(IPage<ExamScoreVO> page, ExamScoreVO examScore) {
      if (null!=examScore.getExamType()){
         if (examScore.getExamType()==1){
            return page.setRecords(baseMapper.selectExamScorePage(page, examScore));
         }
         if (examScore.getExamType()==2){
            return page.setRecords(baseMapper.selectTrainExamScorePage(page, examScore));
         }
      }
      return page.setRecords(baseMapper.selectExamScorePage(page, examScore));
   }
   /**
    * 自定义分页数据
    * @param page 分页条件
    * @return
    */
   @Override
   public IPage<ExamScoreVO> scorePage(IPage<ExamScoreVO> page,String deptid,String jurisdiction,String realName) {
      return page.setRecords(baseMapper.scorePage(page,deptid,jurisdiction,realName));
   }
   /**
@@ -63,50 +110,124 @@
      if (examScore.getExamResultVOS().size()>0){
         List<ExamResultVO> examResultVOS = examScore.getExamResultVOS();
         //获取试卷的内容(题号,答案)
         ExamPaper examPaper = new ExamPaper();
         examPaper.setId(examScore.getPapersId());
         List<ExamExaminationSubject> examExaminationSubjects
            = examPaperService.PagerSubject(examPaper).getExamExaminationSubjects();
//         ExamPaper examPaper = new ExamPaper();
//         examPaper.setId(examScore.getPapersId());
//         List<ExamExaminationSubject> examExaminationSubjects
//            = examPaperService.PagerSubject(examPaper).getExamExaminationSubjects();
         List<ExamSubjectChoices> list = examSubjectChoicesService.list();
         //比对考试结果
         //声明理论得分
         int theoryGrade = 0;
         for (ExamResultVO examResultVO : examResultVOS) {
            for (ExamExaminationSubject examExaminationSubject : examExaminationSubjects) {
            for (ExamSubjectChoices es: list) {
               //对比题目id
               if (examResultVO.getSubjectChoicesId().equals(examExaminationSubject.getExamSubjectChoices().getId())) {
               if (examResultVO.getSubjectChoicesId().equals(es.getId())) {
                  //对比答案
                  //处理多选题的答案排序
                  String[] split = examResultVO.getValue().split(",");
                  StringBuilder builder = new StringBuilder();
                  for (String s : split) {
                     builder.append(s);
                  }
                  char[] arrayCh = builder.toString().toCharArray();
                  //利用数组帮助类自动排序
                  Arrays.sort(arrayCh);
                  String sub0 = Arrays.toString(arrayCh);
                  String sub = sub0.substring(1,sub0.length()-1).replaceAll(" ","");
                  if (sub.equals(examExaminationSubject.getExamSubjectChoices().getAnswer())) {
                     theoryGrade += examResultVO.getGrade();
                  if (es.getChoicesType() == 2 || es.getChoicesType() == 3){
                     //判断题逻辑
                     if (examResultVO.getValue().equals(es.getAnswer())) {
                        theoryGrade += examResultVO.getGrade();
                     }
                  }else if(es.getChoicesType() == 0 || es.getChoicesType() == 1){
                     //处理多选题的答案排序
                     String[] split = examResultVO.getValue().split(",");
                     StringBuilder builder = new StringBuilder();
                     for (String s : split) {
                        builder.append(s);
                     }
                     char[] arrayCh = builder.toString().toCharArray();
                     //利用数组帮助类自动排序
                     Arrays.sort(arrayCh);
                     String sub0 = Arrays.toString(arrayCh);
                     String sub = sub0.substring(1,sub0.length()-1).replaceAll(" ","");
                     if (sub.equals(es.getAnswer())) {
                        theoryGrade += examResultVO.getGrade();
                     }
                  }
                  //移除当前试卷题目答案对象
                  examExaminationSubjects.remove(examExaminationSubject);
                  list.remove(es);
                  break;
               }
            }
         }
         //获取考试信息
         ExamPaper paper = examPaperService.getById(examScore.getPapersId());
         int age = 0;
         UserVO user = new UserVO();
         //使用准考证号查询报名信息,修改考试状态为已考试
         if(paper.getExamType()==1){
            Apply apply = new Apply();
            apply.setCandidateNo(examScore.getCandidateNo());
            Apply apply1 = applyService.getOne(Condition.getQueryWrapper(apply));
            //查询用户年龄,根据年龄计算总分
            user = userService.getUserAgeById(apply1.getUserId());
            //修改用户的考试状态,理论考试结束
            user.setIsApply(3);
            userService.updateById(user);
            age = user.getAge();
            //修改为已考试
            apply1.setIsExam(2);
            applyService.updateById(apply1);
            //数据同步
            String s =
               "update sys_apply set is_exam = " + apply1.getIsExam() + " " +"where id = " + "'" + apply1.getId() + "';" +
                  "update blade_user set is_apply = " + user.getIsApply() + " " +"where id = " + "'" + user.getId() + "'";
            FtpUtil.sqlFileUpload(s);
         }
         //模拟考试
         if(paper.getExamType()==2){
            TrainingRegistration trainingRegistration = new TrainingRegistration();
            trainingRegistration.setCandidateNo(examScore.getCandidateNo());
            TrainingRegistration trainingRegistration1 = trainingRegistrationService.getOne(Condition.getQueryWrapper(trainingRegistration));
            //查询用户年龄,根据年龄计算总分
            user = userService.getUserAgeById(Long.parseLong(trainingRegistration1.getUserId()));
            //修改用户的培训状态,理论考试结束
            user.setIsTrain(3);
            age = user.getAge();
            userService.updateById(user);
            //修改为已考试
            trainingRegistration1.setIsExam(2);
            trainingRegistrationService.updateById(trainingRegistration1);
            //数据同步
            String s =
               "update sys_training_registration set is_exam = " + trainingRegistration1.getIsExam() + " " +"where id = " + "'" + trainingRegistration1.getId() + "';" +
                  "update blade_user set is_apply = " + user.getIsApply() + " " +"where id = " + "'" + user.getId() + "'";
            FtpUtil.sqlFileUpload(s);
         }
         //设置考试ID
         examScore.setExamId(examScore.getPapersId().toString());
         //设置理论得分
         examScore.setTheoryGrade(theoryGrade);
         //计算总成绩,此时没有实操成绩,总成绩为实操成绩和理论成绩和的一半
         examScore.setAllGrade(Math.round(theoryGrade/2));
         if (age<=50) {
            examScore.setAllGrade(Math.round(theoryGrade / 2));
         }
         if (age>50) {
            examScore.setAllGrade(Integer.parseInt(String.valueOf(Math.round(theoryGrade*0.5))));
         }
         //设置状态
         if (theoryGrade>=60){
            examScore.setQualified(2);
         }else {
            examScore.setQualified(1);
         }
         //保存成绩数据
         int i = baseMapper.insert(examScore);
         //修改成绩数据
         int i = baseMapper.updateById(examScore);
         String s1 =
            "update exam_score set exam_id = " + examScore.getExamId() +
               ",theory_grade = " + "'" + examScore.getTheoryGrade() + "'" +
               ",all_grade = " + "'" + examScore.getAllGrade() + "'" +
               ",exam_end_time = " + "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:dd").format(examScore.getExamEndTime()) + "'" +
               ",qualified = " + "'" + examScore.getQualified() + "'" +
               " " +"where id = " + "'" + examScore.getId() + "'";
         FtpUtil.sqlFileUpload(s1);
         if (i>0){
            //返回结果
            return true;
@@ -115,4 +236,122 @@
      //返回结果
      return false;
   }
   /**
    * 导入实操成绩
    * @param examScoreExcelList
    * @param isCovered 是否覆盖
    */
   @Override
   public void importExamScore(List<ExamScoreExcel> examScoreExcelList, Boolean isCovered) {
      if (examScoreExcelList.size()>0){
         examScoreExcelList.forEach(examScoreExcel -> {
            if (null!=examScoreExcel.getLearnGrade() && null!=examScoreExcel.getIdCardNo() && examScoreExcel.getIdCardNo()!=""){
               //使用考试名称匹配考试信息
               ExamPaper examPaper = examPaperService.getExamInfoByExamName(examScoreExcel.getExamName());
               //查询出成绩数据
               ExamScore examScore = baseMapper.getExamScoreInfoByIdCardNo(examScoreExcel.getIdCardNo(),examPaper.getId());
               if (null!=examScore) {
                  //查询当前保安信息
                  UserVO user = userService.getUserAgeById(Long.parseLong(examScore.getUserId()));
                  examScore.setLearnGrade(examScoreExcel.getLearnGrade());
                  if (examScore.getTheoryGrade() >= 60 && examScore.getLearnGrade() >= 60) {
                     //合格
                     examScore.setQualified(0);
                     //正式考试通过生成保安证编号
                     if (examPaper.getExamType()==1) {
                        //去生成保安证编号
                        String pre = SecurityPaperUtil.getSecurityPaper();
                        //查询当前年份已有的保安证编号
                        int count = userService.getSecurityPaperCount(pre);
                        String result = null;
                        if (count == 0) {
                           result = pre + "00000";
                        } else {
                           //格式化
                           DecimalFormat decimalFormat = new DecimalFormat("00000");
                           count++;
                           result = pre + (decimalFormat.format(count));
                        }
                        user.setSecuritynumber(result);
                        //发证日期
                        user.setPaperTime(new Date());
                        //修改为持证保安
                        user.setHold("1");
                        //分配保安角色
//                        Role role = new Role();
//                        role.setRoleAlias("保安");
//                        Role oneRole = roleService.getOne(Condition.getQueryWrapper(role));
//                        user.setRoleId(oneRole.getId().toString());
                        //更新保安数据
                        userService.updateById(user);
                        String s1 =
                           "update blade_user set hold = " + "'" +  user.getHold() + "'" +
                              ",securitynumber = " + "'" + user.getSecuritynumber() + "'" +
                              ",paper_time = " + "'" + new SimpleDateFormat("yyyy-MM-dd").format(user.getPaperTime()) + "'" +
                              " " +"where id = " + "'" + user.getId() + "'";
                        FtpUtil.sqlFileUpload(s1);
                     }
                  } else {
                     //不合格
                     examScore.setQualified(1);
                  }
                  //总成绩
                  if (user.getAge()<=50) {
                     examScore.setAllGrade(Math.round((examScore.getTheoryGrade()+examScoreExcel.getLearnGrade())/2));
                  }
                  if (user.getAge()>50) {
                     examScore.setAllGrade(Integer.parseInt(String.valueOf(Math.round(examScore.getTheoryGrade()*0.5)))
                        + Integer.parseInt(String.valueOf(Math.round(examScoreExcel.getLearnGrade()*0.5))));
                  }
                  //内网同步
                  String s1 =
                     "update exam_score set learn_grade = " + "'" + examScore.getLearnGrade() + "'" +
                        ",all_grade = " + "'" + examScore.getAllGrade() + "'" +
                        ",qualified = " + "'" + examScore.getQualified() + "'" +
                        " " +"where id = " + "'" + examScore.getId() + "'";
                  FtpUtil.sqlFileUpload(s1);
                  //更新成绩数据
                  baseMapper.updateById(examScore);
               }
            }
         });
      }
   }
   @Override
   public List<Map<String, Object>> scoreStatistics(String deptid,String jurisdiction) {
      return baseMapper.scoreStatistics(deptid,jurisdiction);
   }
   @Override
   public List<Map<String, Object>> scoreStatisticssc(String deptid,String jurisdiction) {
      return baseMapper.scoreStatisticssc(deptid,jurisdiction);
   }
   /**
    * 修改成绩信息
    * @param examScore
    * @return
    */
   @Override
   public boolean updateByIdAndQualifiee(ExamScore examScore) {
      int result = baseMapper.updateByIdAndQualifiee(examScore);
      if (result>0){
         return true;
      }
      return false;
   }
   /**
    * 考试合格人数对比
    * @param deptid
    * @param jurisdiction
    * @return
    */
   @Override
   public List<Object> scoreStat(String deptid, String jurisdiction) {
      return baseMapper.scoreStat(deptid,jurisdiction);
   }
}