package com.gkhy.exam.institutionalaccess.service.serviceImpl; 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.*; 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.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 listByPage(ThStudyDetailQuery query) { query.setStartSize((query.getPageNum()-1)*query.getPageSize()); List thStudyDetailVOS = thStudyDetailService.listByPage(query); if(!CollectionUtils.isEmpty(thStudyDetailVOS)){ List detailUuids = thStudyDetailVOS.stream().map(ThStudyDetailVO::getUuid).collect(Collectors.toList()); //获取认证记录 List authList = thStudyAuthService.getByStudyDetaiUuids(detailUuids); //获取轨迹 List trackList = thStudyTrackService.getListByStudyDetaiIds(detailUuids); //获取章节名称 List chapterUuids = thStudyDetailVOS.stream().map(ThStudyDetailVO::getChapterUuid).collect(Collectors.toList()); List chapterList = thCourseChapterService.getChapterNameByUuids(chapterUuids); //获取课程名称 List courseUuids = thStudyDetailVOS.stream().map(ThStudyDetailVO::getCourseUuid).collect(Collectors.toList()); List courseList = thCourseService.getCourseNameByUuids(courseUuids); //获取批次名称 List batchUuids = thStudyDetailVOS.stream().map(ThStudyDetailVO::getBatchUuid).collect(Collectors.toList()); List batchList = thBatchService.getBatchNameByUuids(batchUuids); //学生信息 List idcards = thStudyDetailVOS.stream().map(ThStudyDetailVO::getIdcard).collect(Collectors.toList()); List 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())); List thStudyAuthVOList = authList.stream().filter(a -> a.getStudyDetailUuid().equals(thStudyDetailVO.getUuid())) .map(a -> { ThStudyAuthVO thStudyAuthVO = new ThStudyAuthVO(); BeanUtils.copyProperties(a, thStudyAuthVO); thStudyAuthVO.setAuthPostionDesc(ConvertTimeUtils.convertTimeToString(a.getAuthPosition())); return thStudyAuthVO; }).collect(Collectors.toList()); List trackVOList = trackList.stream().filter(t -> t.getStudyDetailUuid().equals(thStudyDetailVO.getUuid())) .map(t -> { ThStudyTrackVO thStudyTrackVO = new ThStudyTrackVO(); BeanUtils.copyProperties(t, thStudyTrackVO); thStudyTrackVO.setTimeIntervalDesc(ConvertTimeUtils.convertTimeToString(t.getTimeInterval())); return thStudyTrackVO; }).collect(Collectors.toList()); thStudyDetailVO.setAuthList(thStudyAuthVOList); thStudyDetailVO.setTrackList(trackVOList); List chapterSelectList = chapterList.stream().filter(chapter -> chapter.getUuid().equals(thStudyDetailVO.getChapterUuid())).collect(Collectors.toList()); if(!CollectionUtils.isEmpty(chapterSelectList)){ thStudyDetailVO.setChapterName(chapterSelectList.get(0).getChapterName()); } List courseSelectList = courseList.stream().filter(c -> c.getUuid().equals(thStudyDetailVO.getCourseUuid())).collect(Collectors.toList()); if(!CollectionUtils.isEmpty(courseSelectList)){ thStudyDetailVO.setCourseName(courseSelectList.get(0).getCourseName()); } List batchSelectList = batchList.stream().filter(b -> b.getUuid().equals(thStudyDetailVO.getBatchUuid())).collect(Collectors.toList()); if(!CollectionUtils.isEmpty(batchSelectList)){ thStudyDetailVO.setBatchName(batchSelectList.get(0).getBatchName()); } List 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 params = new HashMap<>(); params.put("idcard",query.getIdcard()); String json = HttpClientUtil.doGet(accessAddress.getUrl(), params); log.info("调用机构接口返回结果: "+json); ReturnVO returnVo = JSONObject.parseObject(json, new TypeReference>() {}); 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() {}); }catch (Exception e){ logger.error("学习实时记录反序列化失败!"); throw new BusinessException(this.getClass(), ResultConstants.SERIALIZE_ERROR); } } } return thPlatformStudentRespDTO; } public static void main(String[] args) { Map params = new HashMap<>(); params.put("idcard","652201198009174020"); String s = HttpClientUtil.doGet("https://app.lgb360.com/egress/xj/getStuDetail", params); System.out.println(s); } }