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("未达标"); } } }