对景区摄像头进行统计

This commit is contained in:
2025-05-27 14:42:07 +08:00
parent 0292b754fe
commit 06a07514cc
11 changed files with 296 additions and 0 deletions

View File

@@ -0,0 +1,9 @@
package com.ycwl.basic.service.pc;
import com.ycwl.basic.model.pc.scenicDeviceStats.resp.ScenicDeviceStatsListResp;
import java.util.Date;
public interface DeviceStatsService {
ScenicDeviceStatsListResp queryByScenicId(Long scenicId, Date start, Date end);
}

View File

@@ -0,0 +1,46 @@
package com.ycwl.basic.service.pc.impl;
import cn.hutool.core.date.DateUtil;
import com.ycwl.basic.mapper.ScenicDeviceStatsMapper;
import com.ycwl.basic.model.pc.scenicDeviceStats.resp.ScenicDeviceStatsListResp;
import com.ycwl.basic.model.pc.scenicDeviceStats.resp.ScenicDeviceStatsResp;
import com.ycwl.basic.service.pc.DeviceStatsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Date;
import java.util.List;
@Service
public class DeviceStatsServiceImpl implements DeviceStatsService {
@Autowired
private ScenicDeviceStatsMapper mapper;
@Override
public ScenicDeviceStatsListResp queryByScenicId(Long scenicId, Date start, Date end) {
if (start == null) {
start = DateUtil.beginOfDay(new Date());
}
if (end == null) {
end = DateUtil.endOfDay(new Date());
}
ScenicDeviceStatsListResp resp = new ScenicDeviceStatsListResp();
if (DateUtil.isIn(start, DateUtil.tomorrow(), DateUtil.yesterday()) && DateUtil.isIn(start, DateUtil.tomorrow(), DateUtil.yesterday())) {
resp.setRealtime(true);
List<ScenicDeviceStatsResp> data = mapper.countRealtimeStatsByScenicId(scenicId, start, end);
resp.setData(data);
} else {
resp.setRealtime(false);
List<ScenicDeviceStatsResp> data = mapper.countCachedStatsByScenicId(scenicId, start, end);
resp.setData(data);
}
resp.getData().stream().mapToInt(ScenicDeviceStatsResp::getCount).max().ifPresent((max) -> {
resp.getData().forEach(item -> {
item.setRate(BigDecimal.valueOf(item.getCount()).divide(BigDecimal.valueOf(max), 6, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)));
});
});
return resp;
}
}