龚焕茏
2024-08-30 dffa4edacd228bb7aa385525e4a30db2384bc78f
ycl-server/src/main/java/com/ycl/platform/service/impl/CheckScoreServiceImpl.java
@@ -1,10 +1,11 @@
package com.ycl.platform.service.impl;
import annotation.DataScope;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
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.dto.ScoreIndexDTO;
import com.ycl.platform.domain.entity.*;
import com.ycl.platform.domain.vo.CheckScoreDetailVO;
import com.ycl.platform.mapper.CheckRuleMapper;
@@ -15,14 +16,11 @@
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.DateUtils;
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;
@@ -30,20 +28,17 @@
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.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
 * 考核积分明细Service业务层处理
 *
 *
 * @author ruoyi
 * @date 2024-04-22
 */
@@ -68,12 +63,13 @@
    @Autowired
    private ISysDeptService deptService;
    /**
     * 查询考核积分
     *
     * 查询考核积分指标
     *
     * @param id 考核积分主键
     * @return 考核积分
     */
    @Override
    @DataScope(deptAlias = "d",userAlias = "u")
    public CheckScoreDetailVO selectCheckScoreById(CheckScoreIndexDTO checkScoreIndexDTO)
    {
        Long checkScoreId = checkScoreIndexDTO.getId();
@@ -96,15 +92,23 @@
        Short examineCategory = checkScore.getExamineCategory();
        String[] indexTableArr ={"","t_check_index_video","t_check_index_car","t_check_index_face"};
        String tableName = indexTableArr[examineCategory];
        ScoreIndexDTO scoreIndexDTO = new ScoreIndexDTO()
                .setTableName(tableName)
                .setDeptId(checkScore.getDeptId())
                .setDate(checkScoreIndexDTO.getDate())
                .setQuarter(checkScoreIndexDTO.getQuarter());
        scoreIndexDTO.setParams(checkScoreIndexDTO.getParams());
        //获当月份
        String date = checkScoreIndexDTO.getDate();
        if(StringUtils.isEmpty(date)){
        if(StringUtils.isEmpty(scoreIndexDTO.getDate()) && CollectionUtils.isEmpty(checkScoreIndexDTO.getQuarter())){
            //如果查询条件不含参数,查询积分对应创建时间
            Date createTime = checkScore.getCreateTime();
            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM");
            date = formatter.format(createTime);
            scoreIndexDTO.setDate(formatter.format(createTime));
        }
        List<Map> map = scoreMapper.selectScoreIndex(tableName,checkScore.getDeptId(),date);
        List<Map> map = scoreMapper.selectScoreIndex(scoreIndexDTO);
        scoreMap.put("tableData",checkRules);
        scoreMap.put("dataMap",map);
@@ -117,14 +121,66 @@
    /**
     * 查询考核积分卡片列表
     *
     *
     * @param checkScore 考核积分
     * @return 考核积分
     */
    @Override
    @DataScope(deptAlias = "d",userAlias = "u")
    public Map<Long, List<CheckScore>> selectCheckScoreList(CheckScore checkScore)
    {
        //TODO:数据权限
        //区县只能看已发布
        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 = new LambdaQueryChainWrapper<>(baseMapper).select(CheckScore::getCreateTime).last("order by create_time desc limit 1").one();
            if (Objects.nonNull(one)) {
                calendar.setTime(one.getCreateTime());
                getCheckScore(checkScore, calendar);
                checkScores = scoreMapper.selectCheckScoreMap(checkScore);
            }
        }
        return checkScores.stream().collect(Collectors.groupingBy(CheckScore::getDeptId));
    }
    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;
        }
    }
    /**
     * 查询考核积分卡片列表
     *
     * @param checkScore 考核积分
     * @return 考核积分
     */
    @Override
    @DataScope(deptAlias = "d",userAlias = "u")
    public Map<Long, List<CheckScore>> selectCheckScoreChart(CheckScore checkScore)
    {
        //区县只能看已发布
        roleControl(checkScore);
        //查询成绩
        String date = checkScore.getDate();
@@ -132,16 +188,16 @@
            //如果为空查本月的数据
            Calendar now = Calendar.getInstance();
            //取昨天
            now.add(Calendar.DATE, -1);
            // 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;
        return checkScores.stream().collect(Collectors.groupingBy(CheckScore::getDeptId));
    }
    /**
     * 区县详情
     *
@@ -149,61 +205,13 @@
     * @return 考核积分
     */
    @Override
    @DataScope(deptAlias = "d",userAlias = "u")
    public List<CheckScore> page(CheckScore checkScore) {
        //TODO:数据权限
        //区县只能看已发布
        roleControl(checkScore);
        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);
    }
    /**
     * 发布考核积分信息
     *
@@ -237,27 +245,30 @@
    public void exportIndex(HttpServletResponse response,CheckScore checkScoreDTO) throws IOException {
        String date = checkScoreDTO.getDate();
        //如果请求参数时间为空,查这条记录的时间
        if(StringUtils.isEmpty(date)) {
        if(StringUtils.isEmpty(checkScoreDTO.getDate()) && CollectionUtils.isEmpty(checkScoreDTO.getQuarter())){
            CheckScore checkScore = getById(checkScoreDTO.getId());
            Date createTime = checkScore.getCreateTime();
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM");
            date = simpleDateFormat.format(createTime);
            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM");
            date = formatter.format(createTime);
        }
        /** 导三张sheet */
        //车辆
        CheckIndexCar checkIndexCar = new CheckIndexCar();
        checkIndexCar.setDate(date);
        checkIndexCar.setQuarter(checkScoreDTO.getQuarter());
        List<CheckIndexCar> checkIndexCars = indexCarService.selectCheckIndexCarList(checkIndexCar);
        ExcelExp e1 = new ExcelExp("车辆考核指标数据",checkIndexCars,CheckIndexCar.class);
        //人脸
        CheckIndexFace checkIndexFace = new CheckIndexFace();
        checkIndexFace.setDate(date);
        checkIndexFace.setQuarter(checkScoreDTO.getQuarter());
        List<CheckIndexFace> checkIndexFaces = indexFaceService.selectCheckIndexFaceList(checkIndexFace);
        ExcelExp e2 = new ExcelExp("人脸考核指标数据",checkIndexFaces,CheckIndexFace.class);
        //视频
        CheckIndexVideo checkIndexVideo = new CheckIndexVideo();
        checkIndexVideo.setDate(date);
        checkIndexVideo.setQuarter(checkScoreDTO.getQuarter());
        List<CheckIndexVideo> checkIndexVideos = indexVideoService.selectCheckIndexVideoList(checkIndexVideo);
        ExcelExp e3 = new ExcelExp("视频考核指标数据",checkIndexVideos,CheckIndexVideo.class);
@@ -268,37 +279,79 @@
        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, "考核积分明细数据");
    private void roleControl(CheckScore checkScore) {
        List<SysRole> roles = SecurityUtils.getLoginUser().getUser().getRoles();
        SysRole sysRole = roles.get(0);
        if("zg_province".equals(sysRole.getRoleKey())){
            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);
    }
    //    /**
//     * 新增考核积分
//     *
//     * @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);
//    }
}