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.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.*;
|
import java.util.stream.Collectors;
|
import java.util.stream.Stream;
|
|
/**
|
* 考核积分明细Service业务层处理
|
*
|
* @author ruoyi
|
* @date 2024-04-22
|
*/
|
@Service
|
@Slf4j
|
public class CheckScoreServiceImpl extends ServiceImpl<CheckScoreMapper, CheckScore> implements ICheckScoreService
|
{
|
@Autowired
|
private CheckScoreMapper scoreMapper;
|
@Autowired
|
private CheckTemplateMapper templateMapper;
|
@Autowired
|
private CheckTemplateRuleMapper templateRuleMapper;
|
@Autowired
|
private CheckRuleMapper ruleMapper;
|
@Autowired
|
private ICheckIndexCarService indexCarService;
|
@Autowired
|
private ICheckIndexFaceService indexFaceService;
|
@Autowired
|
private ICheckIndexVideoService indexVideoService;
|
@Autowired
|
private ISysDeptService deptService;
|
/**
|
* 查询考核积分
|
*
|
* @param id 考核积分主键
|
* @return 考核积分
|
*/
|
@Override
|
public CheckScoreDetailVO selectCheckScoreById(CheckScoreIndexDTO checkScoreIndexDTO)
|
{
|
Long checkScoreId = checkScoreIndexDTO.getId();
|
|
CheckScoreDetailVO checkScoreDetailVO = new CheckScoreDetailVO();
|
//根据id读取score
|
CheckScore checkScore = scoreMapper.selectCheckScoreById(checkScoreId);
|
//读取规则以及权重
|
List<CheckTemplateRule> templateRuleList = templateRuleMapper.selectListByTemplateId(checkScore.getTemplateId());
|
|
List<CheckRule> checkRules = new ArrayList<>();
|
//读取模板对应所有规则
|
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.addAll(ruleIndex);
|
//根据examineCategory 读取不同index表
|
Short examineCategory = checkScore.getExamineCategory();
|
String[] indexTableArr ={"","t_check_index_video","t_check_index_car","t_check_index_face"};
|
String tableName = indexTableArr[examineCategory];
|
//获当月份
|
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);
|
scoreMap.put("dataMap",map);
|
|
checkScoreDetailVO.setCheckRuleList(templateRuleList);
|
checkScoreDetailVO.setScoreMap(scoreMap);
|
return checkScoreDetailVO;
|
}
|
|
|
/**
|
* 查询考核积分卡片列表
|
*
|
* @param checkScore 考核积分
|
* @return 考核积分
|
*/
|
@Override
|
public Map<Long, List<CheckScore>> selectCheckScoreList(CheckScore checkScore)
|
{
|
//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;
|
}
|
/**
|
* 区县详情
|
*
|
* @param checkScore 考核积分
|
* @return 考核积分
|
*/
|
@Override
|
public List<CheckScore> page(CheckScore checkScore) {
|
//TODO:数据权限
|
return scoreMapper.selectCheckScoreList(checkScore);
|
}
|
|
|
/**
|
* 新增考核积分
|
*
|
* @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);
|
}
|
/**
|
* 发布考核积分信息
|
*
|
* @param checkScoreDTO 考核积分
|
* @return 结果
|
*/
|
@Override
|
public int publishCheckScore(CheckScoreDTO checkScoreDTO) {
|
if(CollectionUtils.isEmpty(checkScoreDTO.getId())){
|
return 0;
|
}
|
PublishType publishType = null;
|
try {
|
publishType = PublishType.valueOf(checkScoreDTO.getPublish());
|
} catch (IllegalArgumentException e) {
|
throw new IllegalArgumentException("参数类型不匹配");
|
}
|
String code = publishType.getCode();
|
checkScoreDTO.setPublish(code);
|
|
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, "考核积分明细数据");
|
|
}
|
}
|