fuliqi
2024-04-30 eea5bc9be7deb06106d6274abeb29ebe4b83af44
ycl-server/src/main/java/com/ycl/platform/service/impl/CheckScoreServiceImpl.java
@@ -1,32 +1,45 @@
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业务层处理
@@ -36,7 +49,7 @@
 */
@Service
@Slf4j
public class CheckScoreServiceImpl implements ICheckScoreService
public class CheckScoreServiceImpl extends ServiceImpl<CheckScoreMapper, CheckScore> implements ICheckScoreService
{
    @Autowired
    private CheckScoreMapper scoreMapper;
@@ -46,6 +59,14 @@
    private CheckTemplateRuleMapper templateRuleMapper;
    @Autowired
    private CheckRuleMapper ruleMapper;
    @Autowired
    private ICheckIndexCarService indexCarService;
    @Autowired
    private ICheckIndexFaceService indexFaceService;
    @Autowired
    private ICheckIndexVideoService indexVideoService;
    @Autowired
    private ISysDeptService deptService;
    /**
     * 查询考核积分
     * 
@@ -53,39 +74,36 @@
     * @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);
@@ -109,6 +127,17 @@
        //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;
@@ -124,6 +153,8 @@
        //TODO:数据权限
        return scoreMapper.selectCheckScoreList(checkScore);
    }
    /**
     * 新增考核积分
     * 
@@ -188,7 +219,6 @@
        try {
            publishType = PublishType.valueOf(checkScoreDTO.getPublish());
        } catch (IllegalArgumentException e) {
            log.error("参数类型不匹配");
            throw new IllegalArgumentException("参数类型不匹配");
        }
        String code = publishType.getCode();
@@ -197,5 +227,78 @@
        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, "考核积分明细数据");
    }
}