package com.ycl.platform.service.impl;
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.ycl.platform.domain.entity.CheckIndexCar;
|
import com.ycl.platform.domain.entity.TMonitor;
|
import com.ycl.platform.domain.result.HK.SnapshotDataMonitorResult;
|
import com.ycl.platform.mapper.CheckIndexCarMapper;
|
import com.ycl.platform.service.ICheckIndexCarService;
|
import com.ycl.platform.service.ITMonitorService;
|
import com.ycl.system.entity.SysDept;
|
import com.ycl.system.mapper.SysDeptMapper;
|
import constant.ApiConstants;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.util.CollectionUtils;
|
import utils.DateUtils;
|
|
import java.util.ArrayList;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.function.Function;
|
import java.util.stream.Collectors;
|
|
/**
|
* 车辆指标概率数据Service业务层处理
|
*
|
* @author ruoyi
|
* @date 2024-04-29
|
*/
|
@Service
|
public class CheckIndexCarServiceImpl implements ICheckIndexCarService {
|
@Autowired
|
private CheckIndexCarMapper checkIndexCarMapper;
|
@Autowired
|
private ITMonitorService monitorService;
|
@Autowired
|
private SysDeptMapper deptMapper;
|
|
/**
|
* 查询车辆指标概率数据
|
*
|
* @param id 车辆指标概率数据主键
|
* @return 车辆指标概率数据
|
*/
|
@Override
|
public CheckIndexCar selectCheckIndexCarById(Long id) {
|
return checkIndexCarMapper.selectCheckIndexCarById(id);
|
}
|
|
/**
|
* 查询车辆指标概率数据列表
|
*
|
* @param checkIndexCar 车辆指标概率数据
|
* @return 车辆指标概率数据
|
*/
|
@Override
|
public List<CheckIndexCar> selectCheckIndexCarList(CheckIndexCar checkIndexCar) {
|
return checkIndexCarMapper.selectCheckIndexCarList(checkIndexCar);
|
}
|
|
/**
|
* 新增车辆指标概率数据
|
*
|
* @param checkIndexCar 车辆指标概率数据
|
* @return 结果
|
*/
|
@Override
|
public int insertCheckIndexCar(CheckIndexCar checkIndexCar) {
|
checkIndexCar.setCreateTime(DateUtils.getNowDate());
|
return checkIndexCarMapper.insertCheckIndexCar(checkIndexCar);
|
}
|
|
/**
|
* 修改车辆指标概率数据
|
*
|
* @param checkIndexCar 车辆指标概率数据
|
* @return 结果
|
*/
|
@Override
|
public int updateCheckIndexCar(CheckIndexCar checkIndexCar) {
|
return checkIndexCarMapper.updateCheckIndexCar(checkIndexCar);
|
}
|
|
/**
|
* 批量删除车辆指标概率数据
|
*
|
* @param ids 需要删除的车辆指标概率数据主键
|
* @return 结果
|
*/
|
@Override
|
public int deleteCheckIndexCarByIds(Long[] ids) {
|
return checkIndexCarMapper.deleteCheckIndexCarByIds(ids);
|
}
|
|
/**
|
* 删除车辆指标概率数据信息
|
*
|
* @param id 车辆指标概率数据主键
|
* @return 结果
|
*/
|
@Override
|
public int deleteCheckIndexCarById(Long id) {
|
return checkIndexCarMapper.deleteCheckIndexCarById(id);
|
}
|
|
/**
|
* 计算车辆点位在线率、视图库对接稳定性
|
*
|
* @param list
|
*/
|
@Override
|
public void siteOnline(List<SnapshotDataMonitorResult> list) {
|
//设备id
|
List<String> deviceIds = list.stream().map(SnapshotDataMonitorResult::getExternalIndexCode).collect(Collectors.toList());
|
if (!CollectionUtils.isEmpty(deviceIds)) {
|
// 用于存储每个区域统计信息的辅助类
|
class AreaStats {
|
//点位总数
|
int totalSites = 0;
|
//离线点位数
|
int offlineSites = 0;
|
//总抓拍量
|
int totalDataSum = 0;
|
}
|
List<TMonitor> monitors = monitorService.list(new QueryWrapper<TMonitor>().in("serial_number", deviceIds));
|
Map<String, AreaStats> areaStatsMap = new HashMap<>();
|
//获得所有区县deptId
|
List<Long> deptIds = deptMapper.selectByParentId(207L);
|
deptIds.forEach(deptId -> areaStatsMap.put(deptId + "", new AreaStats()));
|
|
//转换为map
|
//TODO:分省厅市局
|
List<String> provinceIds = new ArrayList<>();
|
Map<String, TMonitor> monitorMap = monitors.stream().collect(Collectors.toMap(TMonitor::getSerialNumber, Function.identity()));
|
for (SnapshotDataMonitorResult result : list) {
|
TMonitor monitor = monitorMap.get(result.getExternalIndexCode());
|
AreaStats areaStats = areaStatsMap.get(monitor.getDeptId() + "");
|
String serialNumber = monitor.getSerialNumber();
|
//无数据
|
if (ApiConstants.HK_SnapCount_ResultType_Null == result.getResultType()) {
|
//区域离线点位数
|
areaStats.offlineSites++;
|
} else {
|
//区域总抓拍量
|
areaStats.totalSites += result.getDataCount();
|
}
|
//区域点位总数
|
areaStats.totalDataSum++;
|
//是否是省厅数据
|
if (!CollectionUtils.isEmpty(provinceIds)) {
|
if (provinceIds.contains(serialNumber)) {
|
//省厅数据
|
AreaStats provinceStats = areaStatsMap.get("Province_" + monitor.getDeptId());
|
//无数据
|
if (ApiConstants.HK_SnapCount_ResultType_Null == result.getResultType()) {
|
//区域离线点位数
|
provinceStats.offlineSites++;
|
} else {
|
//区域总抓拍量
|
provinceStats.totalSites += result.getDataCount();
|
}
|
//区域点位总数
|
provinceStats.totalDataSum++;
|
areaStatsMap.put("Province_" + monitor.getDeptId(), areaStats);
|
}
|
}
|
areaStatsMap.put(monitor.getDeptId() + "", areaStats);
|
}
|
|
areaStatsMap.forEach((k, v) -> {
|
if (k.startsWith("Province_")) {
|
|
}
|
});
|
CheckIndexCar checkIndexCar = new CheckIndexCar();
|
|
}
|
}
|
}
|