| | |
| | | package com.ycl.calculate; |
| | | |
| | | import com.fasterxml.jackson.databind.ser.Serializers; |
| | | import com.ycl.platform.domain.entity.CheckIndexVideo; |
| | | import com.ycl.platform.domain.result.BaseResult; |
| | | import com.ycl.platform.domain.result.UY.QueryVqdResult; |
| | | import com.ycl.platform.domain.result.UY.VideoOnlineResult; |
| | | import com.ycl.platform.domain.vo.PlatformOnlineVO; |
| | | import com.ycl.platform.mapper.CheckIndexVideoMapper; |
| | | import com.ycl.platform.service.ICheckIndexVideoService; |
| | | import com.ycl.system.mapper.SysDeptMapper; |
| | | import constant.ApiConstants; |
| | | import constant.CheckConstants; |
| | | import enumeration.general.AreaDeptEnum; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Component; |
| | | import org.springframework.util.CollectionUtils; |
| | | import utils.DateUtils; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.ArrayList; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | public class PlatformOnlineCalculation extends IndexCalculationServe implements CalculationStrategy<QueryVqdResult> { |
| | | /** |
| | | * 平台在线率计算 |
| | | * 离线时长每超过30分钟扣百分之十 |
| | | * 不区分区域 |
| | | */ |
| | | @Component |
| | | @Slf4j |
| | | public class PlatformOnlineCalculation extends IndexCalculationUtils implements CalculationStrategy<PlatformOnlineVO> { |
| | | @Autowired |
| | | private SysDeptMapper deptMapper; |
| | | @Autowired |
| | | private CheckIndexVideoMapper videoMapper; |
| | | @Autowired |
| | | private ICheckIndexVideoService checkIndexVideoService; |
| | | |
| | | @Override |
| | | public void calculate(List<QueryVqdResult> list) { |
| | | public void calculate(List<PlatformOnlineVO> list) { |
| | | Map<String,Double> map = new HashMap<>(); |
| | | if (!CollectionUtils.isEmpty(list)) { |
| | | for (PlatformOnlineVO platformOnlineVO : list) { |
| | | String[] areas = platformOnlineVO.getArea().split(","); |
| | | for (String area : areas) { |
| | | Integer deptId = AreaDeptEnum.fromCode(area).getDeptId(); |
| | | //离线时长 |
| | | Integer time = platformOnlineVO.getTodayOutlineSed(); |
| | | //离线时长转换位分钟 |
| | | int num = (time / 60) / 30; |
| | | double score = Math.max(1 - num * 0.1, 0); |
| | | map.put(deptId+"",score); |
| | | map.put(ApiConstants.Province + deptId,score); |
| | | } |
| | | } |
| | | |
| | | //是否已经存在当日数据 |
| | | List<CheckIndexVideo> checkIndexVideos = videoMapper.selectToday(DateUtils.getDate()); |
| | | |
| | | List<CheckIndexVideo> videos = new ArrayList<>(); |
| | | map.forEach((key,score) -> { |
| | | //如果不存在就新增如果存在则复用 |
| | | CheckIndexVideo checkIndex = getCheckIndex(key, checkIndexVideos, CheckIndexVideo.class); |
| | | if (checkIndex != null) { |
| | | checkIndex.setPlatformOnline(new BigDecimal(score)); |
| | | videos.add(checkIndex); |
| | | } |
| | | }); |
| | | checkIndexVideoService.saveOrUpdateBatch(videos); |
| | | }else { |
| | | log.info("数据为空"); |
| | | } |
| | | } |
| | | |
| | | } |