| | |
| | | package com.ycl.platform.service.impl; |
| | | |
| | | 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.dto.CheckScoreDTO; |
| | | import com.ycl.platform.domain.entity.CheckRule; |
| | | import com.ycl.platform.domain.entity.CheckScore; |
| | | import com.ycl.platform.domain.entity.CheckTemplate; |
| | | import com.ycl.platform.domain.entity.CheckTemplateRule; |
| | | import com.ycl.platform.domain.vo.CheckScoreDetailVO; |
| | | 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.domain.dto.CheckScoreIndexDTO; |
| | | import com.ycl.platform.domain.dto.ScoreIndexDTO; |
| | | import com.ycl.platform.domain.entity.*; |
| | | import com.ycl.platform.domain.query.DashboardQuery; |
| | | import com.ycl.platform.domain.vo.*; |
| | | 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.platform.service.ICheckScoreService; |
| | | import com.ycl.system.entity.BaseEntity; |
| | | import com.ycl.system.entity.SysRole; |
| | | import com.ycl.system.entity.SysUser; |
| | | import com.ycl.system.service.ISysDeptService; |
| | | import com.ycl.utils.DateUtils; |
| | | 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.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.util.CollectionUtils; |
| | | import utils.DateUtils; |
| | | import pojo.ExcelExp; |
| | | import utils.poi.ExcelUtilManySheet; |
| | | |
| | | import java.time.LocalDate; |
| | | import java.time.format.DateTimeFormatter; |
| | | import java.util.ArrayList; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | 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.*; |
| | | import java.util.function.Function; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * 考核积分明细Service业务层处理 |
| | | * |
| | | * |
| | | * @author ruoyi |
| | | * @date 2024-04-22 |
| | | */ |
| | | @Service |
| | | @Slf4j |
| | | public class CheckScoreServiceImpl implements ICheckScoreService |
| | | { |
| | | public class CheckScoreServiceImpl extends ServiceImpl<CheckScoreMapper, CheckScore> implements ICheckScoreService { |
| | | @Autowired |
| | | private CheckScoreMapper scoreMapper; |
| | | @Autowired |
| | |
| | | private CheckTemplateRuleMapper templateRuleMapper; |
| | | @Autowired |
| | | private CheckRuleMapper ruleMapper; |
| | | @Autowired |
| | | private ICheckIndexCarService indexCarService; |
| | | @Autowired |
| | | private ICheckIndexFaceService indexFaceService; |
| | | @Autowired |
| | | private ICheckIndexVideoService indexVideoService; |
| | | @Autowired |
| | | private ISysDeptService deptService; |
| | | @Autowired |
| | | private PlatformMapper platformMapper; |
| | | |
| | | /** |
| | | * 查询考核积分 |
| | | * |
| | | * 查询考核积分指标 |
| | | * |
| | | * @param id 考核积分主键 |
| | | * @return 考核积分 |
| | | */ |
| | | @Override |
| | | public CheckScoreDetailVO selectCheckScoreById(Long id) |
| | | { |
| | | @DataScope(deptAlias = "d", userAlias = "u") |
| | | public CheckScoreDetailVO selectCheckScoreById(CheckScoreIndexDTO checkScoreIndexDTO) { |
| | | Long checkScoreId = checkScoreIndexDTO.getId(); |
| | | |
| | | CheckScoreDetailVO checkScoreDetailVO = new CheckScoreDetailVO(); |
| | | //根据id读取score |
| | | CheckScore checkScore = scoreMapper.selectCheckScoreById(id); |
| | | CheckScore checkScore = scoreMapper.selectCheckScoreById(checkScoreId); |
| | | Integer templateId = 0; |
| | | //方便切换改为:根据score考核类别和dto考核标签查模板规则和权重,注意同种类同标签只能有一个模板 |
| | | QueryWrapper<CheckTemplate> wrapper = new QueryWrapper<>(); |
| | | wrapper.eq("examine_tag", checkScoreIndexDTO.getExamineTag()); |
| | | wrapper.eq("examine_category", checkScore.getExamineCategory()); |
| | | Optional<CheckTemplate> first = templateMapper.selectList(wrapper).stream().findFirst(); |
| | | if (first.isPresent()) { |
| | | CheckTemplate checkTemplate = first.get(); |
| | | templateId = checkTemplate.getId(); |
| | | } |
| | | //读取规则以及权重 |
| | | List<CheckTemplateRule> templateRuleList = templateRuleMapper.selectListByTemplateId(checkScore.getTemplateId()); |
| | | List<CheckTemplateRule> templateRuleList = templateRuleMapper.selectListByTemplateId(templateId); |
| | | |
| | | //checkRules添加考核对象和考核时间 |
| | | List<CheckRule> checkRules = new ArrayList<>(); |
| | | CheckRule checkRule1 = new CheckRule(); |
| | | checkRule1.setRuleName("考核时间"); |
| | | checkRule1.setRuleIndex("create_time"); |
| | | CheckRule checkRule2 = new CheckRule(); |
| | | checkRule2.setRuleName("考核对象"); |
| | | checkRule2.setRuleIndex("deptId"); |
| | | //读取模板对应所有规则 |
| | | Map<String,Object> scoreMap = new HashMap<>(); |
| | | Map<String, Object> scoreMap = new HashMap<>(); |
| | | List<Integer> ruleIds = templateRuleList.stream().map(checkTemplateRule -> checkTemplateRule.getCheckRuleId()) |
| | | .collect(Collectors.toList()); |
| | | List<CheckRule> ruleIndex = ruleMapper.selectBatchIds(ruleIds); |
| | | |
| | | // checkRules.add(checkRule1); |
| | | // checkRules.add(checkRule2); |
| | | checkRules.addAll(ruleIndex); |
| | | //根据examineCategory 读取不同index表 |
| | | Integer examineCategory = checkScore.getExamineCategory(); |
| | | String[] indexTableArr ={"t_check_index_car","t_check_index_face","t_check_index_video"}; |
| | | Short examineCategory = checkScore.getExamineCategory(); |
| | | String[] indexTableArr = {"", "t_check_index_video", "t_check_index_car", "t_check_index_face"}; |
| | | String tableName = indexTableArr[examineCategory]; |
| | | //TODO:获取当前月份 暂定 后期改为前端传 |
| | | LocalDate now = LocalDate.now(); |
| | | DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM"); |
| | | String date = formatter.format(now); |
| | | List<Map> map = scoreMapper.selectScoreIndex(tableName,checkScore.getDeptId(),date); |
| | | |
| | | scoreMap.put("tableData",checkRules); |
| | | scoreMap.put("dataMap",map); |
| | | ScoreIndexDTO scoreIndexDTO = new ScoreIndexDTO() |
| | | .setTableName(tableName) |
| | | .setDeptId(checkScore.getDeptId()) |
| | | .setDate(checkScoreIndexDTO.getDate()) |
| | | .setQuarter(checkScoreIndexDTO.getQuarter()); |
| | | scoreIndexDTO.setParams(checkScoreIndexDTO.getParams()); |
| | | scoreIndexDTO.setExamineTag(checkScoreIndexDTO.getExamineTag()); |
| | | //获当月份 |
| | | if (StringUtils.isEmpty(scoreIndexDTO.getDate()) && CollectionUtils.isEmpty(checkScoreIndexDTO.getQuarter())) { |
| | | //如果查询条件不含参数,查询积分对应创建时间 |
| | | Date createTime = checkScore.getCreateTime(); |
| | | SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM"); |
| | | scoreIndexDTO.setDate(formatter.format(createTime)); |
| | | } |
| | | |
| | | //权限控制 |
| | | roleControl(scoreIndexDTO); |
| | | List<Map> map = scoreMapper.selectScoreIndex(scoreIndexDTO); |
| | | |
| | | scoreMap.put("tableData", checkRules); |
| | | scoreMap.put("dataMap", map); |
| | | |
| | | checkScoreDetailVO.setCheckRuleList(templateRuleList); |
| | | checkScoreDetailVO.setScoreMap(scoreMap); |
| | |
| | | |
| | | /** |
| | | * 查询考核积分卡片列表 |
| | | * |
| | | * |
| | | * @param checkScore 考核积分 |
| | | * @return 考核积分 |
| | | */ |
| | | @Override |
| | | public Map<Long, List<CheckScore>> selectCheckScoreList(CheckScore checkScore) |
| | | { |
| | | //TODO:数据权限 |
| | | @DataScope(deptAlias = "d", userAlias = "u") |
| | | public Map<Long, List<CheckScore>> selectCheckScoreList(CheckScore checkScore) { |
| | | //区县只能看已发布 |
| | | roleControl(checkScore); |
| | | |
| | | // 获取数据日期时间 |
| | | Calendar calendar = Calendar.getInstance(); |
| | | getCheckScore(checkScore, calendar); |
| | | |
| | | // 一号查询之前的数据 |
| | | if (LocalDateTime.now().getDayOfMonth() == 1) { |
| | | calendar.add(Calendar.DAY_OF_MONTH, -1); |
| | | } |
| | | |
| | | List<CheckScore> checkScores = scoreMapper.selectCheckScoreMap(checkScore); |
| | | |
| | | // 如果数据为空,则查询之前的数据 |
| | | if (checkScores.isEmpty()) { |
| | | CheckScore one = scoreMapper.getLast(checkScore); |
| | | if (Objects.nonNull(one)) { |
| | | calendar.setTime(one.getCreateTime()); |
| | | getCheckScore(checkScore, calendar); |
| | | 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)); |
| | | } |
| | | |
| | | private void getCheckScore(CheckScore checkScore, Calendar calendar) { |
| | | // 0.省厅月度 1.省厅季度 2.市局月度 3.市局季度 4.公安部月度 5.公安部季度 |
| | | switch (checkScore.getExamineTag()) { |
| | | case 0, 2 ,4: |
| | | checkScore.setEndDate(calendar.getTime()); |
| | | calendar.set(Calendar.DAY_OF_MONTH, 1); |
| | | checkScore.setStartDate(calendar.getTime()); |
| | | if(checkScore.getExamineTag() == 0) checkScore.setExamineTag(Integer.valueOf(CheckConstants.Examine_Tag_Province+"")); |
| | | if(checkScore.getExamineTag() == 2) checkScore.setExamineTag(Integer.valueOf(CheckConstants.Examine_Tag_County+"")); |
| | | if(checkScore.getExamineTag() == 4) checkScore.setExamineTag(Integer.valueOf(CheckConstants.Examine_Tag_Dept+"")); |
| | | break; |
| | | case 1, 3, 5: |
| | | checkScore.setStartDate(DateUtils.getQuarterStart(calendar).getTime()); |
| | | checkScore.setEndDate(DateUtils.getQuarterEnd(calendar).getTime()); |
| | | if(checkScore.getExamineTag() == 1) checkScore.setExamineTag(Integer.valueOf(CheckConstants.Examine_Tag_Province+"")); |
| | | if(checkScore.getExamineTag() == 3) checkScore.setExamineTag(Integer.valueOf(CheckConstants.Examine_Tag_County+"")); |
| | | if(checkScore.getExamineTag() == 5) checkScore.setExamineTag(Integer.valueOf(CheckConstants.Examine_Tag_Dept+"")); |
| | | break; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 查询考核积分卡片折线图 |
| | | * |
| | | * @param checkScore 考核积分 |
| | | * @return 考核积分 |
| | | */ |
| | | @Override |
| | | @DataScope(deptAlias = "d", userAlias = "u") |
| | | public Map<Long, List<CheckScore>> selectCheckScoreChart(CheckScore checkScore) { |
| | | //区县只能看已发布 |
| | | roleControl(checkScore); |
| | | |
| | | //查询成绩 |
| | | String date = checkScore.getDate(); |
| | | if (StringUtils.isEmpty(date)) { |
| | | //如果为空查本月的数据 |
| | | Calendar now = Calendar.getInstance(); |
| | | //取昨天 |
| | | // now.add(Calendar.DATE, -1); |
| | | Date yesterday = now.getTime(); |
| | | SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM"); |
| | | date = simpleDateFormat.format(yesterday); |
| | | checkScore.setDate(date); |
| | | } |
| | | List<CheckScore> checkScores = scoreMapper.selectCheckScoreList(checkScore); |
| | | Map<Long, List<CheckScore>> deptMap = checkScores.stream().collect(Collectors.groupingBy(CheckScore::getDeptId)); |
| | | return deptMap; |
| | | //分数保留一位小数 |
| | | checkScores.stream().forEach(item -> item.setScore(item.getScore().setScale(1, RoundingMode.HALF_UP))); |
| | | return checkScores.stream().collect(Collectors.groupingBy(CheckScore::getDeptId)); |
| | | } |
| | | |
| | | /** |
| | | * 区县详情 |
| | | * |
| | |
| | | * @return 考核积分 |
| | | */ |
| | | @Override |
| | | @DataScope(deptAlias = "d", userAlias = "u") |
| | | public List<CheckScore> page(CheckScore checkScore) { |
| | | return scoreMapper.selectCheckScoreList(checkScore); |
| | | } |
| | | /** |
| | | * 新增考核积分 |
| | | * |
| | | * @param checkScore 考核积分 |
| | | * @return 结果 |
| | | */ |
| | | @Override |
| | | public int insertCheckScore(CheckScore checkScore) |
| | | { |
| | | checkScore.setCreateTime(DateUtils.getNowDate()); |
| | | return scoreMapper.insertCheckScore(checkScore); |
| | | //区县只能看已发布 |
| | | roleControl(checkScore); |
| | | List<CheckScore> scoreList = scoreMapper.selectCheckScoreList(checkScore); |
| | | scoreList.stream().forEach(item -> item.setScore(item.getScore().setScale(1, RoundingMode.HALF_UP))); |
| | | return scoreList; |
| | | } |
| | | |
| | | /** |
| | | * 修改考核明细 |
| | | * |
| | | * @param checkScore 考核积分明细 |
| | | * @return 结果 |
| | | */ |
| | | @Override |
| | | public int updateCheckScore(CheckScore checkScore) |
| | | { |
| | | |
| | | return scoreMapper.updateCheckScore(checkScore); |
| | | } |
| | | |
| | | /** |
| | | * 批量删除考核积分 |
| | | * |
| | | * @param ids 需要删除的考核积分主键 |
| | | * @return 结果 |
| | | */ |
| | | @Override |
| | | public int deleteCheckScoreByIds(Long[] ids) |
| | | { |
| | | return scoreMapper.deleteCheckScoreByIds(ids); |
| | | } |
| | | |
| | | /** |
| | | * 删除考核积分信息 |
| | | * |
| | | * @param id 考核积分主键 |
| | | * @return 结果 |
| | | */ |
| | | @Override |
| | | public int deleteCheckScoreById(Long id) |
| | | { |
| | | return scoreMapper.deleteCheckScoreById(id); |
| | | } |
| | | /** |
| | | * 发布考核积分信息 |
| | | * |
| | |
| | | * @return 结果 |
| | | */ |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public int publishCheckScore(CheckScoreDTO checkScoreDTO) { |
| | | if(CollectionUtils.isEmpty(checkScoreDTO.getId())){ |
| | | if (CollectionUtils.isEmpty(checkScoreDTO.getId())) { |
| | | return 0; |
| | | } |
| | | PublishType publishType = null; |
| | | try { |
| | | publishType = PublishType.valueOf(checkScoreDTO.getPublish()); |
| | | } catch (IllegalArgumentException e) { |
| | | log.error("参数类型不匹配"); |
| | | throw new IllegalArgumentException("参数类型不匹配"); |
| | | } |
| | | String code = publishType.getCode(); |
| | | checkScoreDTO.setPublish(code); |
| | | int i = scoreMapper.publishCheckScore(checkScoreDTO); |
| | | //控制index表的发布状态 |
| | | List<Integer> ids = checkScoreDTO.getId(); |
| | | QueryWrapper<CheckScore> queryWrapper = new QueryWrapper<>(); |
| | | queryWrapper.in("id", ids); |
| | | List<CheckScore> scoreList = scoreMapper.selectList(queryWrapper); |
| | | //最多为3次循环 |
| | | for (CheckScore checkScore : scoreList) { |
| | | Short examineCategory = checkScore.getExamineCategory(); |
| | | if (CheckConstants.Rule_Category_Video.equals(examineCategory)) { |
| | | UpdateWrapper<CheckIndexVideo> updateWrapper = new UpdateWrapper<>(); |
| | | updateWrapper.set("publish", code); |
| | | updateWrapper.eq("id", checkScore.getIndexId()); |
| | | indexVideoService.update(updateWrapper); |
| | | } else if (CheckConstants.Rule_Category_Car.equals(examineCategory)) { |
| | | UpdateWrapper<CheckIndexCar> updateWrapper = new UpdateWrapper<>(); |
| | | updateWrapper.set("publish", code); |
| | | updateWrapper.eq("id", checkScore.getIndexId()); |
| | | indexCarService.update(updateWrapper); |
| | | } else if (CheckConstants.Rule_Category_Face.equals(examineCategory)) { |
| | | UpdateWrapper<CheckIndexFace> updateWrapper = new UpdateWrapper<>(); |
| | | updateWrapper.set("publish", code); |
| | | updateWrapper.eq("id", checkScore.getIndexId()); |
| | | indexFaceService.update(updateWrapper); |
| | | } |
| | | } |
| | | return i; |
| | | } |
| | | |
| | | return scoreMapper.publishCheckScore(checkScoreDTO); |
| | | /** |
| | | * 导出指标 |
| | | * |
| | | * @param checkScore 考核积分 |
| | | * @return 考核积分 |
| | | */ |
| | | @Override |
| | | public void exportIndex(HttpServletResponse response, CheckResultExportDTO exportDTO) throws IOException { |
| | | //没有标签默认全导 |
| | | if(CollectionUtils.isEmpty(exportDTO.getExamineTags())){ |
| | | exportDTO.setExamineTags(Arrays.asList(0,1,2)); |
| | | } |
| | | /** 导三张sheet */ |
| | | //车辆 |
| | | List<CheckIndexCar> checkIndexCars = new ArrayList<>(); |
| | | //车辆和人脸没有公安部 |
| | | for (Integer examineTag : exportDTO.getExamineTags()) { |
| | | 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最后 |
| | | if (exportDTO.getAverage() != null && exportDTO.getAverage() && !CollectionUtils.isEmpty(checkIndexCars)) { |
| | | //先区分考核标签,再区分区县 |
| | | List<CheckIndexCar> countyList = checkIndexCars.stream().filter(car -> CheckConstants.Examine_Tag_County.equals(car.getExamineTag())).collect(Collectors.toList()); |
| | | if (!CollectionUtils.isEmpty(countyList)) { |
| | | Map<Long, List<CheckIndexCar>> carMap = countyList.stream().collect(Collectors.groupingBy(CheckIndexCar::getDeptId)); |
| | | List<CheckIndexCar> cars = new ArrayList<>(); |
| | | carMap.forEach((deptId, list) -> { |
| | | CheckIndexCar car = CheckIndexCar.calculateAverage(list); |
| | | cars.add(car); |
| | | }); |
| | | //根据积分降序 |
| | | checkIndexCars.addAll(cars.stream().sorted(Comparator.comparing(CheckIndexCar::getScore).reversed()).collect(Collectors.toList())); |
| | | } |
| | | List<CheckIndexCar> provinceList = checkIndexCars.stream().filter(car -> CheckConstants.Examine_Tag_Province.equals(car.getExamineTag())).collect(Collectors.toList()); |
| | | if (!CollectionUtils.isEmpty(provinceList)) { |
| | | Map<Long, List<CheckIndexCar>> carMap = provinceList.stream().collect(Collectors.groupingBy(CheckIndexCar::getDeptId)); |
| | | List<CheckIndexCar> cars = new ArrayList<>(); |
| | | carMap.forEach((deptId, list) -> { |
| | | CheckIndexCar car = CheckIndexCar.calculateAverage(list); |
| | | cars.add(car); |
| | | }); |
| | | //根据积分降序 |
| | | checkIndexCars.addAll(cars.stream().sorted(Comparator.comparing(CheckIndexCar::getScore).reversed()).collect(Collectors.toList())); |
| | | } |
| | | } |
| | | List<CheckIndexCarVO> checkIndexCarVOS = new ArrayList<>(); |
| | | for (CheckIndexCar indexCar : checkIndexCars) { |
| | | CheckIndexCarVO excelVo = CheckIndexCar.getExcelVo(indexCar); |
| | | checkIndexCarVOS.add(excelVo); |
| | | } |
| | | ExcelExp e1 = new ExcelExp("车辆考核指标数据", checkIndexCarVOS, CheckIndexCarVO.class); |
| | | |
| | | //人脸 |
| | | List<CheckIndexFace> checkIndexFaces = new ArrayList<>(); |
| | | for (Integer examineTag : exportDTO.getExamineTags()) { |
| | | 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最后 |
| | | if (exportDTO.getAverage() != null && exportDTO.getAverage() && !CollectionUtils.isEmpty(checkIndexFaces)) { |
| | | //先区分考核标签,再区分区县 |
| | | List<CheckIndexFace> countyList = checkIndexFaces.stream().filter(face -> CheckConstants.Examine_Tag_County.equals(face.getExamineTag())).collect(Collectors.toList()); |
| | | if (!CollectionUtils.isEmpty(countyList)) { |
| | | Map<Long, List<CheckIndexFace>> faceMap = countyList.stream().collect(Collectors.groupingBy(CheckIndexFace::getDeptId)); |
| | | List<CheckIndexFace> faces = new ArrayList<>(); |
| | | faceMap.forEach((deptId, list) -> { |
| | | CheckIndexFace face = CheckIndexFace.calculateAverage(list); |
| | | faces.add(face); |
| | | }); |
| | | //根据积分降序 |
| | | checkIndexFaces.addAll(faces.stream().sorted(Comparator.comparing(CheckIndexFace::getScore).reversed()).collect(Collectors.toList())); |
| | | } |
| | | List<CheckIndexFace> provinceList = checkIndexFaces.stream().filter(face -> CheckConstants.Examine_Tag_Province.equals(face.getExamineTag())).collect(Collectors.toList()); |
| | | if (!CollectionUtils.isEmpty(provinceList)) { |
| | | Map<Long, List<CheckIndexFace>> faceMap = provinceList.stream().collect(Collectors.groupingBy(CheckIndexFace::getDeptId)); |
| | | List<CheckIndexFace> faces = new ArrayList<>(); |
| | | faceMap.forEach((deptId, list) -> { |
| | | CheckIndexFace face = CheckIndexFace.calculateAverage(list); |
| | | faces.add(face); |
| | | }); |
| | | //根据积分降序 |
| | | checkIndexFaces.addAll(faces.stream().sorted(Comparator.comparing(CheckIndexFace::getScore).reversed()).collect(Collectors.toList())); |
| | | } |
| | | } |
| | | List<CheckIndexFaceVO> checkIndexFaceVOS = new ArrayList<>(); |
| | | for (CheckIndexFace indexFace : checkIndexFaces) { |
| | | CheckIndexFaceVO excelVo = CheckIndexFace.getExcelVo(indexFace); |
| | | checkIndexFaceVOS.add(excelVo); |
| | | } |
| | | ExcelExp e2 = new ExcelExp("人脸考核指标数据", checkIndexFaceVOS, CheckIndexFaceVO.class); |
| | | |
| | | //视频 |
| | | List<CheckIndexVideo> checkIndexVideos = new ArrayList<>(); |
| | | for (Integer examineTag : exportDTO.getExamineTags()) { |
| | | 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最后 |
| | | if (exportDTO.getAverage() != null && exportDTO.getAverage() && !CollectionUtils.isEmpty(checkIndexVideos)) { |
| | | //先区分考核标签,再区分区县 |
| | | List<CheckIndexVideo> countyList = checkIndexVideos.stream().filter(video -> CheckConstants.Examine_Tag_County.equals(video.getExamineTag())).collect(Collectors.toList()); |
| | | if (!CollectionUtils.isEmpty(countyList)) { |
| | | Map<Long, List<CheckIndexVideo>> videoMap = countyList.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> 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); |
| | | videos.add(video); |
| | | }); |
| | | //根据积分降序 |
| | | checkIndexVideos.addAll(videos.stream().sorted(Comparator.comparing(CheckIndexVideo::getScore).reversed()).collect(Collectors.toList())); |
| | | } |
| | | } |
| | | List<CheckIndexVideoVO> checkIndexVideoVOS = new ArrayList<>(); |
| | | for (CheckIndexVideo indexVideo : checkIndexVideos) { |
| | | CheckIndexVideoVO excelVo = CheckIndexVideo.getExcelVo(indexVideo); |
| | | checkIndexVideoVOS.add(excelVo); |
| | | } |
| | | ExcelExp e3 = new ExcelExp("视频考核指标数据", checkIndexVideoVOS, CheckIndexVideoVO.class); |
| | | |
| | | List<ExcelExp> mysheet = new ArrayList<>(); |
| | | mysheet.add(e1); |
| | | mysheet.add(e2); |
| | | mysheet.add(e3); |
| | | //规则明细 |
| | | List<RuleExcelVO> allRuleTemplate = templateRuleMapper.getAllRuleTemplate(); |
| | | //整合数据 |
| | | List<RuleExcelVO> countyRuleList = allRuleTemplate.stream().filter(vo -> vo.getExamineTag().equals(Integer.parseInt(CheckConstants.Examine_Tag_County + ""))).collect(Collectors.toList()); |
| | | List<RuleExcelVO> provinceRuleList = allRuleTemplate.stream().filter(vo -> vo.getExamineTag().equals(Integer.parseInt(CheckConstants.Examine_Tag_Province + ""))).collect(Collectors.toList()); |
| | | //用区县规则做主体展示 |
| | | for (RuleExcelVO countyRule : countyRuleList) { |
| | | countyRule.setCountyWeight(countyRule.getWeight()); |
| | | //筛选同种规则权重 |
| | | for (RuleExcelVO provinceRule : provinceRuleList) { |
| | | if (provinceRule.getRuleId().equals(countyRule.getRuleId()) && provinceRule.getExamineCategory().equals(countyRule.getExamineCategory())) { |
| | | countyRule.setProvinceWeight(provinceRule.getWeight()); |
| | | } |
| | | } |
| | | } |
| | | ExcelExp e4 = new ExcelExp("规则明细", countyRuleList, RuleExcelVO.class); |
| | | mysheet.add(e4); |
| | | ExcelUtilManySheet<List<ExcelExp>> util = new ExcelUtilManySheet<>(mysheet); |
| | | util.exportExcelManySheet(response, mysheet); |
| | | |
| | | } |
| | | |
| | | private void roleControl(CheckIndex checkIndex) { |
| | | List<SysRole> roles = SecurityUtils.getLoginUser().getUser().getRoles(); |
| | | SysUser user = SecurityUtils.getLoginUser().getUser(); |
| | | if (!user.isAdmin()) { |
| | | for (SysRole role : roles) { |
| | | if (role.getPermissions().contains("check:score:role:publish")) { |
| | | Map<String, Object> params = checkIndex.getParams(); |
| | | params.put("publish", PublishType.PUBLISHED.getCode()); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | private void roleControl(BaseEntity checkScore) { |
| | | List<SysRole> roles = SecurityUtils.getLoginUser().getUser().getRoles(); |
| | | SysUser user = SecurityUtils.getLoginUser().getUser(); |
| | | if (!user.isAdmin()) { |
| | | for (SysRole role : roles) { |
| | | if (role.getPermissions().contains("check:score:role:publish")) { |
| | | Map<String, Object> params = checkScore.getParams(); |
| | | params.put("publish", PublishType.PUBLISHED.getCode()); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public List<Map<String, Object>> home() { |
| | | return baseMapper.home(); |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public List<Map<String, Object>> calculate(String category) { |
| | | Calendar calendar = Calendar.getInstance(); |
| | | Date endDate = calendar.getTime(); |
| | | calendar.set(Calendar.DAY_OF_MONTH, 1); |
| | | Date startDate = calendar.getTime(); |
| | | return scoreMapper.calculate(startDate, endDate, category); |
| | | } |
| | | |
| | | //大屏展示考核得分 |
| | | @Override |
| | | public Map<String, Map<String, Object>> dashboard(DashboardQuery dashboardQuery) { |
| | | Date now = new Date(); |
| | | dashboardQuery.setStartTime(DateUtils.getMouthStart(now)); |
| | | dashboardQuery.setEndTime(DateUtils.getMouthEnd(now)); |
| | | List<CheckScore> dashboard = scoreMapper.dashboard(dashboardQuery); |
| | | //初始化各个区县数据 |
| | | Map<String, Map<String, Object>> resultMap = new HashMap<>(); |
| | | for (AreaDeptEnum value : AreaDeptEnum.values()) { |
| | | Map<String, Object> map = new HashMap<>(); |
| | | map.put("score", 0); |
| | | resultMap.put(value.getName(), map); |
| | | } |
| | | //填充各个区县数据 |
| | | for (CheckScore checkScore : dashboard) { |
| | | Map<String, Object> map = new HashMap<>(); |
| | | map.put("score", checkScore.getScore().setScale(1,RoundingMode.HALF_UP)); |
| | | resultMap.put(checkScore.getDeptName(), map); |
| | | } |
| | | return resultMap; |
| | | } |
| | | |
| | | // /** |
| | | // * 新增考核积分 |
| | | // * |
| | | // * @param checkScore 考核积分 |
| | | // * @return 结果 |
| | | // */ |
| | | // @Override |
| | | // public int insertCheckScore(CheckScore checkScore) |
| | | // { |
| | | // checkScore.setCreateTime(DateUtils.getNowDate()); |
| | | // return scoreMapper.insertCheckScore(checkScore); |
| | | // } |
| | | // |
| | | // /** |
| | | // * 修改考核明细 |
| | | // * |
| | | // * @param checkScore 考核积分明细 |
| | | // * @return 结果 |
| | | // */ |
| | | // @Override |
| | | // public int updateCheckScore(CheckScore checkScore) |
| | | // { |
| | | // |
| | | // return scoreMapper.updateCheckScore(checkScore); |
| | | // } |
| | | // |
| | | // /** |
| | | // * 批量删除考核积分 |
| | | // * |
| | | // * @param ids 需要删除的考核积分主键 |
| | | // * @return 结果 |
| | | // */ |
| | | // @Override |
| | | // public int deleteCheckScoreByIds(Long[] ids) |
| | | // { |
| | | // return scoreMapper.deleteCheckScoreByIds(ids); |
| | | // } |
| | | // |
| | | // /** |
| | | // * 删除考核积分信息 |
| | | // * |
| | | // * @param id 考核积分主键 |
| | | // * @return 结果 |
| | | // */ |
| | | // @Override |
| | | // public int deleteCheckScoreById(Long id) |
| | | // { |
| | | // return scoreMapper.deleteCheckScoreById(id); |
| | | // } |
| | | } |