| | |
| | | package com.ycl.platform.service.impl; |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.ycl.platform.base.BaseSelect; |
| | | import com.ycl.platform.base.CheckIndex; |
| | | 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.dto.CheckScoreIndexDTO; |
| | | import com.ycl.platform.domain.entity.*; |
| | | 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.service.ICheckIndexCarService; |
| | | import com.ycl.platform.service.ICheckIndexFaceService; |
| | | import com.ycl.platform.service.ICheckIndexVideoService; |
| | | import com.ycl.platform.service.ICheckScoreService; |
| | | import com.ycl.system.Result; |
| | | import com.ycl.system.entity.SysRole; |
| | | import com.ycl.system.service.ISysDeptService; |
| | | import com.ycl.utils.SecurityUtils; |
| | | import com.ycl.utils.StringUtils; |
| | | import com.ycl.utils.poi.ExcelUtil; |
| | | import constant.CheckConstants; |
| | | import enumeration.general.CheckScoreType; |
| | | 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.util.CollectionUtils; |
| | | import pojo.ExcelExp; |
| | | import utils.DateUtils; |
| | | import utils.poi.ExcelUtilManySheet; |
| | | |
| | | import java.io.IOException; |
| | | import java.text.SimpleDateFormat; |
| | | 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.util.*; |
| | | import java.util.stream.Collectors; |
| | | import java.util.stream.Stream; |
| | | |
| | | /** |
| | | * 考核积分明细Service业务层处理 |
| | |
| | | */ |
| | | @Service |
| | | @Slf4j |
| | | public class CheckScoreServiceImpl implements ICheckScoreService |
| | | public class CheckScoreServiceImpl extends ServiceImpl<CheckScoreMapper, CheckScore> implements ICheckScoreService |
| | | { |
| | | @Autowired |
| | | private CheckScoreMapper scoreMapper; |
| | |
| | | private CheckTemplateRuleMapper templateRuleMapper; |
| | | @Autowired |
| | | private CheckRuleMapper ruleMapper; |
| | | @Autowired |
| | | private ICheckIndexCarService indexCarService; |
| | | @Autowired |
| | | private ICheckIndexFaceService indexFaceService; |
| | | @Autowired |
| | | private ICheckIndexVideoService indexVideoService; |
| | | @Autowired |
| | | private ISysDeptService deptService; |
| | | /** |
| | | * 查询考核积分 |
| | | * |
| | |
| | | * @return 考核积分 |
| | | */ |
| | | @Override |
| | | public CheckScoreDetailVO selectCheckScoreById(Long id) |
| | | 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); |
| | | //读取规则以及权重 |
| | | List<CheckTemplateRule> templateRuleList = templateRuleMapper.selectListByTemplateId(checkScore.getTemplateId()); |
| | | |
| | | //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<>(); |
| | | 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); |
| | | //获当月份 |
| | | String date = checkScoreIndexDTO.getDate(); |
| | | if(StringUtils.isEmpty(date)){ |
| | | //如果查询条件不含参数,查询积分对应创建时间 |
| | | Date createTime = checkScore.getCreateTime(); |
| | | SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM"); |
| | | date = formatter.format(createTime); |
| | | } |
| | | List<Map> map = scoreMapper.selectScoreIndex(tableName,checkScore.getDeptId(),date); |
| | | |
| | | scoreMap.put("tableData",checkRules); |
| | |
| | | //TODO:数据权限 |
| | | |
| | | //查询成绩 |
| | | 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; |
| | |
| | | //TODO:数据权限 |
| | | return scoreMapper.selectCheckScoreList(checkScore); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 新增考核积分 |
| | | * |
| | |
| | | try { |
| | | publishType = PublishType.valueOf(checkScoreDTO.getPublish()); |
| | | } catch (IllegalArgumentException e) { |
| | | log.error("参数类型不匹配"); |
| | | throw new IllegalArgumentException("参数类型不匹配"); |
| | | } |
| | | String code = publishType.getCode(); |
| | |
| | | return scoreMapper.publishCheckScore(checkScoreDTO); |
| | | } |
| | | |
| | | /** |
| | | * 导出指标 |
| | | * |
| | | * @param checkScore 考核积分 |
| | | * @return 考核积分 |
| | | */ |
| | | @Override |
| | | public void exportIndex(HttpServletResponse response,CheckScore checkScoreDTO) throws IOException { |
| | | String date = checkScoreDTO.getDate(); |
| | | //如果请求参数时间为空,查这条记录的时间 |
| | | if(StringUtils.isEmpty(date)) { |
| | | CheckScore checkScore = getById(checkScoreDTO.getId()); |
| | | Date createTime = checkScore.getCreateTime(); |
| | | SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM"); |
| | | date = simpleDateFormat.format(createTime); |
| | | } |
| | | |
| | | /** 导三张sheet */ |
| | | //车辆 |
| | | CheckIndexCar checkIndexCar = new CheckIndexCar(); |
| | | checkIndexCar.setDate(date); |
| | | List<CheckIndexCar> checkIndexCars = indexCarService.selectCheckIndexCarList(checkIndexCar); |
| | | ExcelExp e1 = new ExcelExp("车辆考核指标数据",checkIndexCars,CheckIndexCar.class); |
| | | //人脸 |
| | | CheckIndexFace checkIndexFace = new CheckIndexFace(); |
| | | checkIndexFace.setDate(date); |
| | | List<CheckIndexFace> checkIndexFaces = indexFaceService.selectCheckIndexFaceList(checkIndexFace); |
| | | ExcelExp e2 = new ExcelExp("人脸考核指标数据",checkIndexFaces,CheckIndexFace.class); |
| | | //视频 |
| | | CheckIndexVideo checkIndexVideo = new CheckIndexVideo(); |
| | | checkIndexVideo.setDate(date); |
| | | List<CheckIndexVideo> checkIndexVideos = indexVideoService.selectCheckIndexVideoList(checkIndexVideo); |
| | | ExcelExp e3 = new ExcelExp("视频考核指标数据",checkIndexVideos,CheckIndexVideo.class); |
| | | |
| | | List<ExcelExp> mysheet = new ArrayList<>(); |
| | | mysheet.add(e1); |
| | | mysheet.add(e2); |
| | | mysheet.add(e3); |
| | | ExcelUtilManySheet<List<ExcelExp>> util = new ExcelUtilManySheet<>(mysheet); |
| | | util.exportExcelManySheet(response,mysheet); |
| | | |
| | | //导单sheet的方式 |
| | | // switch (CheckScoreType.fromValue(examineCategory)){ |
| | | // case CHECK_SCORE_TYPE_CAR: |
| | | // //查车辆 |
| | | // List<CheckIndexCar> checkIndexCars = indexCarService.selectCheckIndexCarList(new CheckIndexCar()); |
| | | // export(response, depts, checkIndexCars,CheckIndexCar.class); |
| | | // break; |
| | | // case CHECK_SCORE_TYPE_FACE: |
| | | // // 查人脸 |
| | | // List<CheckIndexFace> checkIndexFaces = indexFaceService.selectCheckIndexFaceList(new CheckIndexFace()); |
| | | // export(response, depts, checkIndexFaces,CheckIndexFace.class); |
| | | // break; |
| | | // case CHECK_SCORE_TYPE_VIDEO: |
| | | // // 查视频 |
| | | // List<CheckIndexVideo> checkIndexVideos = indexVideoService.selectCheckIndexVideoList(new CheckIndexVideo()); |
| | | // export(response, depts, checkIndexVideos,CheckIndexVideo.class); |
| | | // break; |
| | | // } |
| | | } |
| | | |
| | | private <T extends CheckIndex> void export(HttpServletResponse response, List<BaseSelect> depts, List<T> checkIndexes,Class<T> checkIndexClass) { |
| | | //暂时没用,如果数据过大,在server层翻译,避免连表 |
| | | checkIndexes.forEach(checkIndex->{ |
| | | Optional<BaseSelect> first = depts.stream().filter(baseSelect -> checkIndex.getDeptId().equals(Long.valueOf(baseSelect.getId()+""))).findFirst(); |
| | | if(first.isPresent()){ |
| | | checkIndex.setDeptName(first.get().getValue()); |
| | | } |
| | | }); |
| | | |
| | | ExcelUtil<T> util = new ExcelUtil<T>(checkIndexClass); |
| | | util.exportExcel(response, checkIndexes, "考核积分明细数据"); |
| | | |
| | | } |
| | | } |