| | |
| | | import annotation.DataScope; |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; |
| | | import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.ycl.platform.base.CheckIndex; |
| | | import com.ycl.platform.domain.dto.CheckResultExportDTO; |
| | |
| | | import com.ycl.platform.domain.entity.*; |
| | | import com.ycl.platform.domain.query.DashboardQuery; |
| | | import com.ycl.platform.domain.vo.*; |
| | | import com.ycl.platform.mapper.CheckRuleMapper; |
| | | import com.ycl.platform.mapper.CheckScoreMapper; |
| | | import com.ycl.platform.mapper.CheckTemplateMapper; |
| | | import com.ycl.platform.mapper.CheckTemplateRuleMapper; |
| | | import com.ycl.platform.mapper.*; |
| | | import com.ycl.platform.service.ICheckIndexCarService; |
| | | import com.ycl.platform.service.ICheckIndexFaceService; |
| | | import com.ycl.platform.service.ICheckIndexVideoService; |
| | |
| | | import com.ycl.utils.SecurityUtils; |
| | | import com.ycl.utils.StringUtils; |
| | | import constant.CheckConstants; |
| | | import enumeration.general.AreaDeptEnum; |
| | | import enumeration.general.PublishType; |
| | | import jakarta.servlet.http.HttpServletResponse; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.BeanUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | |
| | | import java.io.IOException; |
| | | import java.math.BigDecimal; |
| | | import java.math.RoundingMode; |
| | | import java.net.InetAddress; |
| | | import java.text.SimpleDateFormat; |
| | | import java.time.LocalDateTime; |
| | | import java.util.*; |
| | |
| | | private ICheckIndexVideoService indexVideoService; |
| | | @Autowired |
| | | private ISysDeptService deptService; |
| | | |
| | | @Autowired |
| | | private PlatformMapper platformMapper; |
| | | |
| | | /** |
| | | * 查询考核积分指标 |
| | |
| | | |
| | | /** |
| | | * 查询考核积分卡片列表 |
| | | * |
| | | * 这里显示当天的成绩如果没有当天成绩则显示最后一次成绩 |
| | | * @param checkScore 考核积分 |
| | | * @return 考核积分 |
| | | */ |
| | | @Override |
| | | @DataScope(deptAlias = "d", userAlias = "u") |
| | | public Map<Long, List<CheckScore>> selectCheckScoreList(CheckScore checkScore) { |
| | | public Map<Long, List<CheckScore>> selectCheckScoreList(CheckScore query) { |
| | | CheckScore checkScore = new CheckScore(); |
| | | BeanUtils.copyProperties(query,checkScore); |
| | | //区县只能看已发布 |
| | | roleControl(checkScore); |
| | | |
| | | // 获取数据日期时间 |
| | | Calendar calendar = Calendar.getInstance(); |
| | | getCheckScore(checkScore, calendar); |
| | | // 转换数据日期时间、标签 |
| | | getCheckScore(checkScore); |
| | | |
| | | // 一号查询之前的数据 |
| | | if (LocalDateTime.now().getDayOfMonth() == 1) { |
| | | calendar.add(Calendar.DAY_OF_MONTH, -1); |
| | | } |
| | | // // 一号查询之前的数据 |
| | | // if (LocalDateTime.now().getDayOfMonth() == 1) { |
| | | // calendar.add(Calendar.DAY_OF_MONTH, -1); |
| | | // } |
| | | |
| | | List<CheckScore> checkScores = scoreMapper.selectCheckScoreMap(checkScore); |
| | | |
| | | log.error("打印:{}",checkScores); |
| | | // 如果数据为空,则查询之前的数据 |
| | | if (checkScores.isEmpty()) { |
| | | if (CollectionUtils.isEmpty(checkScores) && (query.getStartDate() ==null || query.getStartDate() ==null)) { |
| | | CheckScore one = scoreMapper.getLast(checkScore); |
| | | if (Objects.nonNull(one)) { |
| | | calendar.setTime(one.getCreateTime()); |
| | | getCheckScore(checkScore, calendar); |
| | | checkScore.setStartDate(one.getCreateTime()); |
| | | checkScore.setEndDate(one.getCreateTime()); |
| | | getCheckScore(checkScore); |
| | | checkScores = scoreMapper.selectCheckScoreMap(checkScore); |
| | | } |
| | | } |
| | | //分数保留一位小数 |
| | | checkScores.stream().forEach(item -> item.setScore(item.getScore().setScale(1, RoundingMode.HALF_UP))); |
| | | return checkScores.stream().collect(Collectors.groupingBy(CheckScore::getDeptId)); |
| | | |
| | | Map<Long, List<CheckScore>> map = checkScores.stream().collect(Collectors.groupingBy(CheckScore::getDeptId)); |
| | | log.error("map :{}",map); |
| | | |
| | | for (Map.Entry<Long, List<CheckScore>> entry : map.entrySet()) { |
| | | List<CheckScore> tempList = new ArrayList<>(); // 临时存储需要添加的元素 |
| | | Iterator<CheckScore> iterator = entry.getValue().iterator(); |
| | | while (iterator.hasNext()) { |
| | | CheckScore listCheckScore = iterator.next(); |
| | | if (listCheckScore.getExamineCategory() == 1 && entry.getValue().size() == 1) { |
| | | CheckScore face = new CheckScore(); |
| | | face.setExamineCategory((short) 2); |
| | | face.setScore(new BigDecimal("0.0")); |
| | | CheckScore car = new CheckScore(); |
| | | car.setExamineCategory((short) 3); |
| | | car.setScore(new BigDecimal("0.0")); |
| | | tempList.add(face); |
| | | tempList.add(car); |
| | | } |
| | | } |
| | | // 迭代结束后,将新元素添加到原始列表中 |
| | | entry.getValue().addAll(tempList); |
| | | } |
| | | |
| | | |
| | | return map; |
| | | } |
| | | |
| | | private void getCheckScore(CheckScore checkScore, Calendar calendar) { |
| | | // 0 省厅月度 1 市局月度 2 省厅季度 3 市局季度 |
| | | switch (checkScore.getExamineTag()) { |
| | | case 0, 1: |
| | | checkScore.setEndDate(calendar.getTime()); |
| | | calendar.set(Calendar.DAY_OF_MONTH, 1); |
| | | checkScore.setStartDate(calendar.getTime()); |
| | | break; |
| | | case 2, 3: |
| | | checkScore.setStartDate(DateUtils.getQuarterStart(calendar).getTime()); |
| | | checkScore.setEndDate(DateUtils.getQuarterEnd(calendar).getTime()); |
| | | checkScore.setExamineTag(checkScore.getExamineTag() == 2 ? 0 : 1); |
| | | break; |
| | | } |
| | | private void getCheckScore(CheckScore checkScore) { |
| | | checkScore.setStartDate(DateUtils.getDayStart(checkScore.getStartDate())); |
| | | checkScore.setEndDate(DateUtils.getDayEnd(checkScore.getEndDate())); |
| | | // 0.省厅 1.市局 2.公安部 |
| | | if (checkScore.getExamineTag() == 0) |
| | | checkScore.setExamineTag(Integer.valueOf(CheckConstants.Examine_Tag_Province + "")); |
| | | if (checkScore.getExamineTag() == 1) |
| | | checkScore.setExamineTag(Integer.valueOf(CheckConstants.Examine_Tag_County + "")); |
| | | if (checkScore.getExamineTag() == 2) |
| | | checkScore.setExamineTag(Integer.valueOf(CheckConstants.Examine_Tag_Dept + "")); |
| | | } |
| | | |
| | | /** |
| | |
| | | */ |
| | | @Override |
| | | public void exportIndex(HttpServletResponse response, CheckResultExportDTO exportDTO) throws IOException { |
| | | // String date = exportDTO.getDate(); |
| | | //如果请求参数时间为空,查这条记录的时间 |
| | | // if (StringUtils.isEmpty(exportDTO.getDate()) && CollectionUtils.isEmpty(exportDTO.getQuarter())) { |
| | | // SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM"); |
| | | // if (exportDTO.getId() != null) { |
| | | // CheckScore checkScore = getById(exportDTO.getId()); |
| | | // Date createTime = checkScore.getCreateTime(); |
| | | // date = formatter.format(createTime); |
| | | // } else { |
| | | // //防止卡片页面导出不传scoreId,导致报错 |
| | | // date = formatter.format(new Date()); |
| | | // } |
| | | // } |
| | | |
| | | //没有标签默认全导 |
| | | if (CollectionUtils.isEmpty(exportDTO.getExamineTags())) { |
| | | exportDTO.setExamineTags(Arrays.asList(0, 1, 2)); |
| | | } |
| | | /** 导三张sheet */ |
| | | //车辆 |
| | | CheckIndexCar checkIndexCar = new CheckIndexCar(); |
| | | // checkIndexCar.setDate(date); |
| | | checkIndexCar.setQuarter(exportDTO.getQuarter()); |
| | | checkIndexCar.setDeptId(exportDTO.getDeptId()); |
| | | checkIndexCar.setDeptIds(exportDTO.getDeptIds()); |
| | | //权限控制 只能查看已发布 |
| | | roleControl(checkIndexCar); |
| | | List<CheckIndexCar> checkIndexCars = new ArrayList<>(); |
| | | //车辆和人脸没有公安部 |
| | | for (Integer examineTag : exportDTO.getExamineTags()) { |
| | | checkIndexCar.setExamineTag(Short.valueOf(examineTag+"")); |
| | | if(examineTag ==0){ |
| | | checkIndexCar.setExamineTagQuery(1); |
| | | } |
| | | if (examineTag == 2) continue; |
| | | CheckIndexCar checkIndexCar = new CheckIndexCar(); |
| | | // checkIndexCar.setDate(date); |
| | | checkIndexCar.setQuarter(exportDTO.getQuarter()); |
| | | checkIndexCar.setDeptId(exportDTO.getDeptId()); |
| | | checkIndexCar.setDeptIds(exportDTO.getDeptIds()); |
| | | //权限控制 只能查看已发布 |
| | | roleControl(checkIndexCar); |
| | | checkIndexCar.setExamineTag(Short.valueOf(examineTag + "")); |
| | | |
| | | checkIndexCars.addAll(indexCarService.selectCheckIndexCarList(checkIndexCar)); |
| | | } |
| | | //计算平均值放在excel最后 |
| | |
| | | checkIndexCarVOS.add(excelVo); |
| | | } |
| | | ExcelExp e1 = new ExcelExp("车辆考核指标数据", checkIndexCarVOS, CheckIndexCarVO.class); |
| | | |
| | | //人脸 |
| | | CheckIndexFace checkIndexFace = new CheckIndexFace(); |
| | | // checkIndexFace.setDate(date); |
| | | checkIndexFace.setQuarter(exportDTO.getQuarter()); |
| | | checkIndexFace.setDeptId(exportDTO.getDeptId()); |
| | | checkIndexFace.setDeptIds(exportDTO.getDeptIds()); |
| | | //权限控制 只能查看已发布 |
| | | roleControl(checkIndexFace); |
| | | List<CheckIndexFace> checkIndexFaces = new ArrayList<>(); |
| | | for (Integer examineTag : exportDTO.getExamineTags()) { |
| | | checkIndexFace.setExamineTag(Short.valueOf(examineTag+"")); |
| | | if(examineTag ==0){ |
| | | checkIndexFace.setExamineTagQuery(1); |
| | | } |
| | | if (examineTag == 2) continue; |
| | | CheckIndexFace checkIndexFace = new CheckIndexFace(); |
| | | // checkIndexFace.setDate(date); |
| | | checkIndexFace.setQuarter(exportDTO.getQuarter()); |
| | | checkIndexFace.setDeptId(exportDTO.getDeptId()); |
| | | checkIndexFace.setDeptIds(exportDTO.getDeptIds()); |
| | | //权限控制 只能查看已发布 |
| | | roleControl(checkIndexFace); |
| | | checkIndexFace.setExamineTag(Short.valueOf(examineTag + "")); |
| | | checkIndexFaces.addAll(indexFaceService.selectCheckIndexFaceList(checkIndexFace)); |
| | | } |
| | | //计算平均值放在excel最后 |
| | |
| | | checkIndexFaceVOS.add(excelVo); |
| | | } |
| | | ExcelExp e2 = new ExcelExp("人脸考核指标数据", checkIndexFaceVOS, CheckIndexFaceVO.class); |
| | | |
| | | //视频 |
| | | CheckIndexVideo checkIndexVideo = new CheckIndexVideo(); |
| | | // checkIndexVideo.setDate(date); |
| | | checkIndexVideo.setQuarter(exportDTO.getQuarter()); |
| | | checkIndexVideo.setDeptId(exportDTO.getDeptId()); |
| | | checkIndexVideo.setDeptIds(exportDTO.getDeptIds()); |
| | | //权限控制 只能查看已发布 |
| | | roleControl(checkIndexVideo); |
| | | List<CheckIndexVideo> checkIndexVideos = new ArrayList<>(); |
| | | for (Integer examineTag : exportDTO.getExamineTags()) { |
| | | checkIndexVideo.setExamineTag(Short.valueOf(examineTag+"")); |
| | | if(examineTag ==0){ |
| | | checkIndexVideo.setExamineTagQuery(1); |
| | | } |
| | | CheckIndexVideo checkIndexVideo = new CheckIndexVideo(); |
| | | // checkIndexVideo.setDate(date); |
| | | checkIndexVideo.setQuarter(exportDTO.getQuarter()); |
| | | checkIndexVideo.setDeptId(exportDTO.getDeptId()); |
| | | checkIndexVideo.setDeptIds(exportDTO.getDeptIds()); |
| | | //权限控制 只能查看已发布 |
| | | roleControl(checkIndexVideo); |
| | | checkIndexVideo.setExamineTag(Short.valueOf(examineTag + "")); |
| | | checkIndexVideos.addAll(indexVideoService.selectCheckIndexVideoList(checkIndexVideo)); |
| | | } |
| | | //计算平均值放在excel最后 |
| | |
| | | List<CheckIndexVideo> provinceList = checkIndexVideos.stream().filter(video -> CheckConstants.Examine_Tag_Province.equals(video.getExamineTag())).collect(Collectors.toList()); |
| | | if (!CollectionUtils.isEmpty(provinceList)) { |
| | | Map<Long, List<CheckIndexVideo>> videoMap = provinceList.stream().collect(Collectors.groupingBy(CheckIndexVideo::getDeptId)); |
| | | List<CheckIndexVideo> videos = new ArrayList<>(); |
| | | videoMap.forEach((deptId, list) -> { |
| | | CheckIndexVideo video = CheckIndexVideo.calculateAverage(list); |
| | | videos.add(video); |
| | | }); |
| | | //根据积分降序 |
| | | checkIndexVideos.addAll(videos.stream().sorted(Comparator.comparing(CheckIndexVideo::getScore).reversed()).collect(Collectors.toList())); |
| | | } |
| | | List<CheckIndexVideo> deptList = checkIndexVideos.stream().filter(video -> CheckConstants.Examine_Tag_Dept.equals(video.getExamineTag())).collect(Collectors.toList()); |
| | | if (!CollectionUtils.isEmpty(deptList)) { |
| | | Map<Long, List<CheckIndexVideo>> videoMap = deptList.stream().collect(Collectors.groupingBy(CheckIndexVideo::getDeptId)); |
| | | List<CheckIndexVideo> videos = new ArrayList<>(); |
| | | videoMap.forEach((deptId, list) -> { |
| | | CheckIndexVideo video = CheckIndexVideo.calculateAverage(list); |
| | |
| | | |
| | | @Override |
| | | public List<Map<String, Object>> home() { |
| | | return baseMapper.home(); |
| | | Date now = new Date(); |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.add(Calendar.DATE, -7); |
| | | Date startTime = calendar.getTime(); |
| | | return baseMapper.home(startTime,now); |
| | | } |
| | | |
| | | |
| | |
| | | |
| | | //大屏展示考核得分 |
| | | @Override |
| | | //TODO:考虑limit bug |
| | | public Map<String, List<Map<String, Object>>> dashboard(DashboardQuery dashboardQuery) { |
| | | public Map<String, Map<String, Object>> dashboard(DashboardQuery dashboardQuery) { |
| | | Date now = new Date(); |
| | | SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| | | dashboardQuery.setStartTime(format.format(DateUtils.getDayStart(now))); |
| | | dashboardQuery.setEndTime(format.format(DateUtils.getDayEnd(now))); |
| | | List<CheckScore> dashboard = scoreMapper.dashboard(dashboardQuery); |
| | | Map<String, List<Map<String, Object>>> resultMap = new HashMap<>(); |
| | | |
| | | for (CheckScore checkScore : dashboard) { |
| | | List<Map<String, Object>> list = new ArrayList<>(); |
| | | //初始化各个区县数据 |
| | | Map<String, Map<String, Object>> resultMap = new HashMap<>(); |
| | | for (AreaDeptEnum value : AreaDeptEnum.values()) { |
| | | Map<String, Object> map = new HashMap<>(); |
| | | map.put("value", checkScore.getScore()); |
| | | if (dashboardQuery.getDataScope() == 1) { |
| | | map.put("name", "省厅得分"); |
| | | } else { |
| | | map.put("name", "区县得分"); |
| | | map.put("video", 0); |
| | | map.put("car", 0); |
| | | map.put("face", 0); |
| | | resultMap.put(value.getName(), map); |
| | | } |
| | | //填充各个区县数据 |
| | | for (CheckScore checkScore : dashboard) { |
| | | Map<String, Object> map = resultMap.get(checkScore.getDeptName()); |
| | | if (CheckConstants.Rule_Category_Video.equals(checkScore.getExamineCategory())) { |
| | | map.put("video", checkScore.getScore().setScale(1, RoundingMode.HALF_UP)); |
| | | } else if (CheckConstants.Rule_Category_Car.equals(checkScore.getExamineCategory())) { |
| | | map.put("car", checkScore.getScore().setScale(1, RoundingMode.HALF_UP)); |
| | | } else if (CheckConstants.Rule_Category_Face.equals(checkScore.getExamineCategory())) { |
| | | map.put("face", checkScore.getScore().setScale(1, RoundingMode.HALF_UP)); |
| | | } |
| | | list.add(map); |
| | | resultMap.put(checkScore.getDeptName(), list); |
| | | resultMap.put(checkScore.getDeptName(), map); |
| | | } |
| | | return resultMap; |
| | | } |