You've already forked FrameTour-BE
对景区摄像头进行统计
This commit is contained in:
@@ -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);
|
||||
}
|
@@ -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;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user