| | |
| | | package com.gkhy.exam.institutionalaccess.service.serviceImpl; |
| | | |
| | | import com.gkhy.exam.institutionalaccess.entity.ThStudyAuth; |
| | | import com.gkhy.exam.institutionalaccess.entity.ThStudyTrack; |
| | | import com.alibaba.fastjson2.JSONObject; |
| | | import com.alibaba.fastjson2.TypeReference; |
| | | import com.gkhy.exam.institutionalaccess.entity.*; |
| | | import com.ruoyi.system.domain.enums.AccessAddressType; |
| | | import com.gkhy.exam.institutionalaccess.model.query.ThStudyDetailQuery; |
| | | import com.gkhy.exam.institutionalaccess.model.resp.ThPlatformStudentRespDTO; |
| | | import com.gkhy.exam.institutionalaccess.model.vo.ThStudyAuthVO; |
| | | import com.gkhy.exam.institutionalaccess.model.vo.ThStudyDetailVO; |
| | | import com.gkhy.exam.institutionalaccess.model.vo.ThStudyTrackVO; |
| | | import com.gkhy.exam.institutionalaccess.service.ThStudyAuthService; |
| | | import com.gkhy.exam.institutionalaccess.service.ThStudyDetailService; |
| | | import com.gkhy.exam.institutionalaccess.service.ThStudyRecordManagerService; |
| | | import com.gkhy.exam.institutionalaccess.service.ThStudyTrackService; |
| | | import com.gkhy.exam.institutionalaccess.service.*; |
| | | import com.gkhy.exam.institutionalaccess.utils.ConvertTimeUtils; |
| | | import com.ruoyi.common.utils.HttpClientUtil; |
| | | import com.gkhy.exam.noncoalmine.model.vo.ReturnVO; |
| | | import com.ruoyi.common.constant.ResultConstants; |
| | | import com.ruoyi.common.exception.BusinessException; |
| | | import com.ruoyi.common.exception.ServiceException; |
| | | import com.ruoyi.common.signature.AESUtils; |
| | | import com.ruoyi.system.domain.ThAccessAddress; |
| | | import com.ruoyi.system.service.ThAccessAddressService; |
| | | import lombok.extern.log4j.Log4j2; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.beans.BeanUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.util.CollectionUtils; |
| | | import org.springframework.util.StringUtils; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | import java.time.Duration; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | | @Service("ThStudyRecordManagerService") |
| | | @Log4j2 |
| | | public class ThStudyRecordManagerServiceImpl implements ThStudyRecordManagerService { |
| | | private Logger logger = LoggerFactory.getLogger(ThStudyRecordManagerServiceImpl.class); |
| | | |
| | | @Autowired |
| | | private ThStudyDetailService thStudyDetailService; |
| | | @Autowired |
| | | private ThStudyTrackService thStudyTrackService; |
| | | @Autowired |
| | | private ThStudyAuthService thStudyAuthService; |
| | | @Autowired |
| | | private ThCourseChapterService thCourseChapterService;; |
| | | @Autowired |
| | | private ThCourseService thCourseService; |
| | | @Autowired |
| | | private ThBatchService thBatchService; |
| | | @Autowired |
| | | private ThStudentService studentService;; |
| | | @Autowired |
| | | private ThAccessAddressService thAccessAddressService; |
| | | |
| | | @Override |
| | | public List<ThStudyDetailVO> listByPage(ThStudyDetailQuery query) { |
| | | query.setStartSize((query.getPageNum()-1)*query.getPageSize()); |
| | | |
| | | List<ThStudyDetailVO> thStudyDetailVOS = thStudyDetailService.listByPage(query); |
| | | |
| | | if(!CollectionUtils.isEmpty(thStudyDetailVOS)){ |
| | | List<String> detailUuids = thStudyDetailVOS.stream().map(ThStudyDetailVO::getUuid).collect(Collectors.toList()); |
| | | //获取认证记录 |
| | | List<ThStudyAuth> authList = thStudyAuthService.getListByStudyDetaiIds(detailUuids); |
| | | List<ThStudyAuth> authList = thStudyAuthService.getByStudyDetaiUuids(detailUuids); |
| | | //获取轨迹 |
| | | List<ThStudyTrack> trackList = thStudyTrackService.getListByStudyDetaiIds(detailUuids); |
| | | |
| | | //获取章节名称 |
| | | List<String> chapterUuids = thStudyDetailVOS.stream().map(ThStudyDetailVO::getChapterUuid).collect(Collectors.toList()); |
| | | List<ThCourseChapter> chapterList = thCourseChapterService.getChapterNameByUuids(chapterUuids); |
| | | //获取课程名称 |
| | | List<String> courseUuids = thStudyDetailVOS.stream().map(ThStudyDetailVO::getCourseUuid).collect(Collectors.toList()); |
| | | List<ThCourse> courseList = thCourseService.getCourseNameByUuids(courseUuids); |
| | | //获取批次名称 |
| | | List<String> batchUuids = thStudyDetailVOS.stream().map(ThStudyDetailVO::getBatchUuid).collect(Collectors.toList()); |
| | | List<ThBatch> batchList = thBatchService.getBatchNameByUuids(batchUuids); |
| | | //学生信息 |
| | | List<String> idcards = thStudyDetailVOS.stream().map(ThStudyDetailVO::getIdcard).collect(Collectors.toList()); |
| | | List<ThStudent> studentList = studentService.getNameByIdcards(idcards); |
| | | for(ThStudyDetailVO thStudyDetailVO : thStudyDetailVOS){ |
| | | //计算自然时间差 |
| | | Duration between = Duration.between(thStudyDetailVO.getStartTime(), thStudyDetailVO.getFinishTime()); |
| | | thStudyDetailVO.setDifference(between.getSeconds()); |
| | | thStudyDetailVO.setDifferenceDesc(ConvertTimeUtils.convertTimeToString(thStudyDetailVO.getDifference())); |
| | | thStudyDetailVO.setDurationDesc(ConvertTimeUtils.convertTimeToString(thStudyDetailVO.getDuration())); |
| | | thStudyDetailVO.setStartPositionDesc(ConvertTimeUtils.convertTimeToString(thStudyDetailVO.getStartPosition())); |
| | | thStudyDetailVO.setFinishPositionDesc(ConvertTimeUtils.convertTimeToString(thStudyDetailVO.getFinishPosition())); |
| | |
| | | }).collect(Collectors.toList()); |
| | | thStudyDetailVO.setAuthList(thStudyAuthVOList); |
| | | thStudyDetailVO.setTrackList(trackVOList); |
| | | List<ThCourseChapter> chapterSelectList = chapterList.stream().filter(chapter -> chapter.getUuid().equals(thStudyDetailVO.getChapterUuid())).collect(Collectors.toList()); |
| | | if(!CollectionUtils.isEmpty(chapterSelectList)){ |
| | | thStudyDetailVO.setChapterName(chapterSelectList.get(0).getChapterName()); |
| | | } |
| | | List<ThCourse> courseSelectList = courseList.stream().filter(c -> c.getUuid().equals(thStudyDetailVO.getCourseUuid())).collect(Collectors.toList()); |
| | | if(!CollectionUtils.isEmpty(courseSelectList)){ |
| | | thStudyDetailVO.setCourseName(courseSelectList.get(0).getCourseName()); |
| | | } |
| | | List<ThBatch> batchSelectList = batchList.stream().filter(b -> b.getUuid().equals(thStudyDetailVO.getBatchUuid())).collect(Collectors.toList()); |
| | | if(!CollectionUtils.isEmpty(batchSelectList)){ |
| | | thStudyDetailVO.setBatchName(batchSelectList.get(0).getBatchName()); |
| | | } |
| | | List<ThStudent> studentSelectList = studentList.stream().filter(thStudent -> thStudent.getIdcard().equals(thStudyDetailVO.getIdcard())).collect(Collectors.toList()); |
| | | if(!CollectionUtils.isEmpty(studentSelectList)){ |
| | | thStudyDetailVO.setName(studentSelectList.get(0).getName()); |
| | | } |
| | | |
| | | } |
| | | } |
| | | return thStudyDetailVOS; |
| | | } |
| | | |
| | | @Override |
| | | public ThPlatformStudentRespDTO getStudyRecordByIdcard(ThStudyDetailQuery query) { |
| | | if(StringUtils.isEmpty(query.getIdcard())){ |
| | | throw new BusinessException(this.getClass(), ResultConstants.PARAM_ERROR_NULL,"学生身份证不可为空"); |
| | | } |
| | | if(query.getInstitutionId() == null){ |
| | | throw new BusinessException(this.getClass(), ResultConstants.PARAM_ERROR_NULL,"学生所属机构不可为空"); |
| | | } |
| | | //获取该机构访问路径 |
| | | ThAccessAddress accessAddress = thAccessAddressService.getByInstitutionIdAndType(query.getInstitutionId(), AccessAddressType.STUDY_RECORD.getType()); |
| | | Map<String,String> params = new HashMap<>(); |
| | | params.put("idcard",query.getIdcard()); |
| | | String json = HttpClientUtil.doGet(accessAddress.getUrl(), params); |
| | | log.info("调用机构接口返回结果: "+json); |
| | | |
| | | ReturnVO<String> returnVo = JSONObject.parseObject(json, new TypeReference<ReturnVO<String>>() {}); |
| | | log.info("获得第三方数据:"+returnVo); |
| | | if(returnVo==null || returnVo.getCode() == null || returnVo.getCode() != 200){ |
| | | throw new ServiceException("获取三方数据数据异常"); |
| | | } |
| | | ThPlatformStudentRespDTO thPlatformStudentRespDTO = null; |
| | | if(!StringUtils.isEmpty(returnVo.getData())){ |
| | | String decrypt = ""; |
| | | try { |
| | | decrypt = AESUtils.decrypt(returnVo.getData()); |
| | | log.info("解密后的数据为:"+decrypt); |
| | | }catch (Exception e){ |
| | | throw new BusinessException(this.getClass(), ResultConstants.SYSTEM_ERROR,"解密异常"); |
| | | } |
| | | if(!StringUtils.isEmpty(decrypt)){ |
| | | try { |
| | | thPlatformStudentRespDTO = JSONObject.parseObject(decrypt, new TypeReference<ThPlatformStudentRespDTO>() {}); |
| | | |
| | | }catch (Exception e){ |
| | | logger.error("学习实时记录反序列化失败!"); |
| | | throw new BusinessException(this.getClass(), ResultConstants.SERIALIZE_ERROR); |
| | | |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | return thPlatformStudentRespDTO; |
| | | } |
| | | |
| | | public static void main(String[] args) { |
| | | Map<String,String> params = new HashMap<>(); |
| | | params.put("idcard","652201198009174020"); |
| | | String s = HttpClientUtil.doGet("https://app.lgb360.com/egress/xj/getStuDetail", params); |
| | | System.out.println(s); |
| | | } |
| | | |
| | | |
| | | } |