package com.ycl.calculate; import com.ycl.platform.domain.result.BaseResult; import com.ycl.platform.domain.vo.TMonitorVO; import com.ycl.platform.mapper.TMonitorMapper; import constant.ApiConstants; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; /** * 抽出各区域统计数量方法 */ @Component @Slf4j public abstract class IndexCalculationServe extends IndexCalculationUtils { @Autowired private TMonitorMapper monitorMapper; //抽象方法,由子类编写具体逻辑算法 protected abstract void updateAreaStats(Map areaStatsMap, String key, T result); protected Map getAreaStatsMap(List list, Boolean needDept) { if (CollectionUtils.isEmpty(list)) { log.info("数据为空"); return null; } //返回以国标码为key的设备map Map monitorMap = monitorMapper.selectListByIds(list.stream().map(BaseResult::getNo).collect(Collectors.toList())) .stream().collect(Collectors.toMap(TMonitorVO::getSerialNumber, Function.identity())); Map areaStatsMap = new HashMap<>(); for (T result : list) { //获取设备所属部门 TMonitorVO monitor = monitorMap.get(result.getNo()); if (monitor == null) continue; String deptId = monitor.getDeptId().toString(); updateAreaStats(areaStatsMap, deptId, result); // 处理省厅考核数据 if (result.getProvinceTag() != null && result.getProvinceTag()) { String provinceKey = ApiConstants.Province + deptId; updateAreaStats(areaStatsMap, provinceKey, result); } // 处理公安部考核数据(公安部数据只有视频才有,所以这里定义了needDept来决定是否需要处理部级数据) if (needDept) { if (result.getDeptTag() != null && result.getDeptTag()) { String deptKey = ApiConstants.Dept + deptId; updateAreaStats(areaStatsMap, deptKey, result); } } } return areaStatsMap; } }