Newer
Older
huludao / src / main / java / com / newfiber / api / pc / service / impl / PatrolManageConfigServiceImpl.java
package com.newfiber.api.pc.service.impl;

import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.newfiber.api.core.utils.DateUtil;
import com.newfiber.api.pc.dao.RiverManage.PatrolManageConfigMapper;
import com.newfiber.api.pc.model.River.PatrolCountDto;
import com.newfiber.api.pc.model.River.PatrolManageConfig;
import com.newfiber.api.pc.model.River.PatrolManageConfigDto;
import com.newfiber.api.pc.service.PatrolManageConfigService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.util.*;
import java.util.stream.Collectors;


@Service("patrolManageConfigService")
public class PatrolManageConfigServiceImpl extends ServiceImpl<PatrolManageConfigMapper, PatrolManageConfig> implements PatrolManageConfigService {

    @Autowired
    private PatrolManageConfigMapper patrolManageConfigMapper;

    @Override
    public PageInfo<PatrolManageConfig> listForPage(String patrolType, String searchStr, Integer pageNo, Integer pageSize) {
        PageHelper.startPage(pageNo, pageSize);
        EntityWrapper<PatrolManageConfig> wapper = new EntityWrapper<>();
        //name 模糊匹配的字段
        if(!StringUtils.isEmpty(searchStr)){
            wapper.like("project_name", searchStr);
        }
        wapper.eq("patrol_type", patrolType);
        List<PatrolManageConfig> list = patrolManageConfigMapper.selectList(wapper);
        PageInfo<PatrolManageConfig> result = new PageInfo<>();
        if (!list.isEmpty()) {
            result = new PageInfo<PatrolManageConfig>(list);
        }
        return result;
    }

    @Override
    public PageInfo<PatrolManageConfigDto> listPatrolPage(String patrolType, String searchStr, Integer pageNo, Integer pageSize) {
        PageHelper.startPage(pageNo, pageSize);
        EntityWrapper<PatrolManageConfig> wapper = new EntityWrapper<>();
        //name 模糊匹配的字段
        wapper.like("project_name", searchStr);
        wapper.eq("patrol_type", patrolType);
        List<PatrolManageConfig> list = patrolManageConfigMapper.selectList(wapper);
        PageInfo<PatrolManageConfigDto> result = new PageInfo<>();
        List<PatrolManageConfigDto> dtoList = new ArrayList<>();
        if (!list.isEmpty()) {
            List<Long> collect = list.stream().map(PatrolManageConfig::getBindNo).collect(Collectors.toList());
            for (PatrolManageConfig patrolManageConfig : list) {
                PatrolManageConfigDto dto = new PatrolManageConfigDto();
                BeanUtils.copyProperties(patrolManageConfig,dto);
                dtoList.add(dto);
            }

            List<PatrolManageConfigDto> configDtos = patrolManageConfigMapper.selectCountNum(DateUtil.getDayBegin(), DateUtil.getDayEnd(),
                    DateUtil.getFirstDayOfWeek(new Date()), DateUtil.getLastDayOfWeek(new Date()),
                    DateUtil.getMonthBegin(), DateUtil.getMonthEnd(), DateUtil.getBeginDayOfYear(),
                    DateUtil.getEndDayOfYear(), patrolType, collect);
            if(configDtos!=null && configDtos.size()>0){
                Map<Long, List<PatrolManageConfigDto>> map = configDtos.stream().collect(Collectors.groupingBy(PatrolManageConfigDto::getBindNo));
                if(map!=null && map.size()>0){
                    for (PatrolManageConfigDto dto : dtoList) {
                        if(map.get(dto.getBindNo())!=null){
                            PatrolManageConfigDto configDto = map.get(dto.getBindNo()).get(0);
                            setDtoValue(dto,configDto);
                        }
                    }
                }
            }

            result = new PageInfo<PatrolManageConfigDto>(dtoList);
        }
        return result;
    }

    @Override
    public List<PatrolManageConfigDto> listPatrolAll(String patrolType, Integer type) {
        Map<String,Object> result = new HashMap<>();
        Date startTime = null;
        Date endTime = null;
        if(type == 1){
            startTime = DateUtil.getDayBegin();
            endTime = DateUtil.getDayEnd();
        }else if(type == 2){
            startTime = DateUtil.getFirstDayOfWeek(new Date());
            endTime = DateUtil.getLastDayOfWeek(new Date());
        }else if(type == 3){
            startTime = DateUtil.getMonthBegin();
            endTime = DateUtil.getMonthEnd();
        }else if(type == 4){
            startTime = DateUtil.getBeginDayOfYear();
            endTime = DateUtil.getEndDayOfYear();
        }
        //name 模糊匹配的字段
        List<PatrolManageConfig> list = patrolManageConfigMapper.selectByType(patrolType);
        List<PatrolManageConfigDto> dtoList = new ArrayList<>();
        if (!list.isEmpty()) {
            List<Long> collect = list.stream().map(PatrolManageConfig::getBindNo).collect(Collectors.toList());
            for (PatrolManageConfig patrolManageConfig : list) {
                PatrolManageConfigDto dto = new PatrolManageConfigDto();
                BeanUtils.copyProperties(patrolManageConfig,dto);
                dtoList.add(dto);
            }
            List<PatrolCountDto> configDtos = patrolManageConfigMapper.listPatrolAll(patrolType,startTime,endTime);

            if(configDtos!=null && configDtos.size()>0){
                Map<Long, List<PatrolCountDto>> map = configDtos.stream().collect(Collectors.groupingBy(PatrolCountDto::getBindNo));
                if(map!=null && map.size()>0){
                    for (PatrolManageConfigDto dto : dtoList) {
                        if(map.get(dto.getBindNo())!=null){
                            PatrolCountDto configDto = map.get(dto.getBindNo()).get(0);
                            setDtoValue(type,dto,configDto);
                        }else{
                            dto.setIsReachStr("未达标");
                            dto.setIsReach(1);
                        }
                    }
                }
            }
        }
        return dtoList;
    }

    /**
     * 计算和统计
     * @param dto
     * @param configDto
     */
    private void setDtoValue(Integer type,PatrolManageConfigDto dto, PatrolCountDto configDto) {
        if(type ==1){
            dto.setDayNum(configDto.getCountNum());
            dto.setDayPercent(divide(dto.getDayNum(),dto.getDayCount()));
            isReach(dto.getDayNum(),dto.getDayCount(),dto);
        }else if(type == 2){
            dto.setWeekNum(configDto.getCountNum());
            dto.setWeekPercent(divide(dto.getWeekNum(),dto.getWeekCount()));
            isReach(dto.getWeekNum(),dto.getWeekCount(),dto);
        }else if(type == 3){
            dto.setMonthNum(configDto.getCountNum());
            dto.setMonthPercent(divide(dto.getMonthNum(),dto.getMonthCount()));
            isReach(dto.getMonthNum(),dto.getMonthCount(),dto);
        }else if(type == 4){
            dto.setYearNum(configDto.getCountNum());
            dto.setYearPercent(divide(dto.getYearNum(),dto.getYearCount()));
            isReach(dto.getYearNum(),dto.getYearCount(),dto);
        }
    }

    /**
     * 计算和赋值参数
     * @param dto
     * @param configDto
     */
    private void setDtoValue(PatrolManageConfigDto dto, PatrolManageConfigDto configDto) {
        if(configDto.getDayNum()!=null){
            dto.setDayNum(configDto.getDayNum());
            dto.setDayPercent(divide(dto.getDayNum(),dto.getDayCount()));
        }
        if(configDto.getWeekNum()!=null){
            dto.setWeekNum(configDto.getWeekNum());
            dto.setWeekPercent(divide(dto.getWeekNum(),dto.getWeekCount()));
        }
        if(configDto.getMonthNum()!=null){
            dto.setMonthNum(configDto.getMonthNum());
            dto.setMonthPercent(divide(dto.getMonthNum(),dto.getMonthCount()));
        }
        if(configDto.getYearNum()!=null){
            dto.setYearNum(configDto.getYearNum());
            dto.setYearPercent(divide(dto.getYearNum(),dto.getYearCount()));
        }
    }

    /**
     * 小数转百分比
     * @param num1
     * @param num2
     * @return
     */
    public static String divide(Integer num1,Integer num2) {
        if(StringUtils.isEmpty(num2) || num2 == 0){
            return "0%";
        }
        BigDecimal bigDecimal1 = new BigDecimal(num1);
        BigDecimal bigDecimal2 = new BigDecimal(num2);
        BigDecimal divide = bigDecimal1.divide(bigDecimal2, 2, RoundingMode.HALF_UP);
        DecimalFormat df = new DecimalFormat("0.00%");
        return df.format(divide);
    }

    public static void isReach(Integer num1,Integer num2,PatrolManageConfigDto dto) {
        if(num1!=null && num2!=null && num1>=num2){
            dto.setIsReach(0);
            dto.setIsReachStr("已达标");
        }else{
            dto.setIsReach(1);
            dto.setIsReachStr("未达标");
        }
    }
}