feat:流量分页;定时写入流量

This commit is contained in:
yanqs 2024-04-15 00:03:27 +08:00
parent 24d45e48f0
commit 03f2e299d4
8 changed files with 205 additions and 2 deletions

View File

@ -0,0 +1,29 @@
package com.bcrjl.miwifi.common.response;
import com.baomidou.mybatisplus.core.metadata.IPage;
import lombok.Data;
import java.io.Serializable;
import java.util.Collections;
import java.util.List;
/**
* @author yanqs
*/
@Data
public class BasePageList<T> implements Serializable {
private long total;
private long page;
private long pageSize;
private List<T> rows = Collections.emptyList();
public static <T> BasePageList<T> of(IPage<T> page) {
BasePageList<T> bladePage = new BasePageList<>();
bladePage.setRows(page.getRecords());
bladePage.setTotal(page.getTotal());
bladePage.setPageSize(page.getSize());
bladePage.setPage(page.getCurrent());
return bladePage;
}
}

View File

@ -0,0 +1,21 @@
package com.bcrjl.miwifi.common.response;
import lombok.Data;
/**
* 分页参数
*
* @author yanqs
*/
@Data
public class Query {
/**
* 当前页
*/
private long page;
/**
* 每页的数量
*/
private long pageSize;
}

View File

@ -0,0 +1,21 @@
package com.bcrjl.miwifi.common.util;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bcrjl.miwifi.common.response.Query;
/**
* @author yanqs
*/
public class Condition {
/**
* 转化成mybatis plus中的Page
*
* @param query 查询条件
* @return IPage
*/
public static <T> IPage<T> getPage(Query query) {
Page<T> page = new Page<>(query.getPage(), query.getPageSize());
return page;
}
}

View File

@ -0,0 +1,43 @@
package com.bcrjl.miwifi.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.bcrjl.miwifi.common.response.BasePageList;
import com.bcrjl.miwifi.common.response.Query;
import com.bcrjl.miwifi.common.response.R;
import com.bcrjl.miwifi.common.util.Condition;
import com.bcrjl.miwifi.model.domain.DeviceDayTraffic;
import com.bcrjl.miwifi.model.param.DeviceDayTrafficParam;
import com.bcrjl.miwifi.service.DeviceDayTrafficService;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
/**
* 设备每日流量统计
*
* @author yanqs
*/
@RestController
@RequestMapping("/api/device/traffic")
public class DeviceDayTrafficController {
@Resource
private DeviceDayTrafficService deviceDayTrafficService;
@PostMapping("/update")
public R updateDeviceDayTraffic(@RequestBody DeviceDayTraffic deviceDayTraffic) {
return R.data("");
}
@GetMapping("/list")
public R list(DeviceDayTrafficParam param, Query query) {
IPage<DeviceDayTraffic> deviceDayTrafficIPage = deviceDayTrafficService.pageList(Condition.getPage(query), param);
return R.data(BasePageList.of(deviceDayTrafficIPage));
}
@GetMapping("test")
public R test(){
deviceDayTrafficService.writeEverydayDeviceTraffic();
return R.success();
}
}

View File

@ -1,7 +1,9 @@
package com.bcrjl.miwifi.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.bcrjl.miwifi.model.domain.DeviceDayTraffic;
import com.bcrjl.miwifi.model.param.DeviceDayTrafficParam;
import org.apache.ibatis.annotations.Mapper;
/**
@ -11,4 +13,6 @@ import org.apache.ibatis.annotations.Mapper;
*/
@Mapper
public interface DeviceDayTrafficMapper extends BaseMapper<DeviceDayTraffic> {
IPage<DeviceDayTraffic> pageList(IPage<DeviceDayTraffic> page, DeviceDayTrafficParam param);
}

View File

@ -11,4 +11,17 @@
<result column="download" jdbcType="VARCHAR" property="download"/>
<result column="total" jdbcType="VARCHAR" property="total"/>
</resultMap>
<select id="pageList" resultMap="BaseResultMap">
SELECT * FROM device_day_traffic
<where>
<if test="param2.date == null or param2.date == ''">
and date = DATE('now', '-1 day')
</if>
<if test="param2.date != null and param2.date != ''">
and date = #{param2.date}
</if>
</where>
ORDER BY ID DESC
</select>
</mapper>

View File

@ -0,0 +1,11 @@
package com.bcrjl.miwifi.model.param;
import com.bcrjl.miwifi.model.domain.DeviceDayTraffic;
import lombok.Data;
/**
* @author yanqs
*/
@Data
public class DeviceDayTrafficParam extends DeviceDayTraffic {
}

View File

@ -2,10 +2,13 @@ package com.bcrjl.miwifi.service;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.bcrjl.miwifi.common.util.MiWifiUtil;
import com.bcrjl.miwifi.mapper.DeviceDayTrafficMapper;
import com.bcrjl.miwifi.model.domain.DeviceDayTraffic;
import com.bcrjl.miwifi.model.param.DeviceDayTrafficParam;
import com.bcrjl.miwifi.model.result.StatusResult;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
@ -26,11 +29,68 @@ public class DeviceDayTrafficService extends ServiceImpl<DeviceDayTrafficMapper,
private final MiWifiUtil miWifiUtil;
public IPage<DeviceDayTraffic> pageList(IPage<DeviceDayTraffic> page, DeviceDayTrafficParam param) {
return this.baseMapper.pageList(page, param);
}
/**
* 定时任务写入每日数据
*/
public void writeEverydayDeviceTraffic() {
dayTraffic();
Date date = DateUtil.date();
Date firstYesterday = DateUtil.offsetDay(date, -2);
Date yesterday = DateUtil.offsetDay(date, -1);
String dateStr = DateUtil.format(firstYesterday, "yyyy-MM-dd");
String yesterdayDateStr = DateUtil.format(yesterday, "yyyy-MM-dd");
List<DeviceDayTraffic> list = this.list(new LambdaQueryWrapper<DeviceDayTraffic>().eq(DeviceDayTraffic::getDate, dateStr));
if (CollUtil.isEmpty(list)) {
dayTraffic();
} else {
StatusResult status = miWifiUtil.getStatus();
List<StatusResult.Dev> devList = status.getDev();
List<DeviceDayTraffic> dbList = new ArrayList<>();
for (DeviceDayTraffic dayTraffic : list) {
StatusResult.Dev device = devList.stream().filter(t -> t.getMac().equals(dayTraffic.getMac())).findFirst().orElse(null);
DeviceDayTraffic deviceDayTraffic = new DeviceDayTraffic();
deviceDayTraffic.setDate(yesterdayDateStr);
if (Objects.isNull(device)) {
deviceDayTraffic.setMac(dayTraffic.getMac());
deviceDayTraffic.setDeviceName(dayTraffic.getDeviceName());
deviceDayTraffic.setUpload("0");
deviceDayTraffic.setDownload("0");
deviceDayTraffic.setTotal("0");
dbList.add(deviceDayTraffic);
} else {
// 如果不是null 则今日流量减去昨日流量 等于今日流量
deviceDayTraffic.setMac(device.getMac());
deviceDayTraffic.setDeviceName(device.getDevName());
long download = Long.parseLong(device.getDownload());
long upload = Long.parseLong(device.getUpload());
long total = download + upload;
long yesterdayTotal = Long.parseLong(dayTraffic.getTotal());
if (total - yesterdayTotal <= 0) {
// 今日流量就是当日流量
upload = Long.parseLong(device.getUpload());
download = Long.parseLong(device.getDownload());
total = download + upload;
deviceDayTraffic.setDownload(device.getDownload());
deviceDayTraffic.setUpload(device.getUpload());
deviceDayTraffic.setTotal(String.valueOf(total));
dbList.add(deviceDayTraffic);
} else {
// 减去的数据就是今日流量
deviceDayTraffic.setTotal(String.valueOf(total - yesterdayTotal));
upload = Long.parseLong(device.getUpload()) - Long.parseLong(dayTraffic.getUpload());
deviceDayTraffic.setUpload(String.valueOf(upload));
download = Long.parseLong(device.getDownload()) - Long.parseLong(dayTraffic.getDownload());
deviceDayTraffic.setDownload(String.valueOf(download));
dbList.add(deviceDayTraffic);
}
}
}
this.saveBatch(dbList);
}
}
/**
@ -51,7 +111,8 @@ public class DeviceDayTrafficService extends ServiceImpl<DeviceDayTrafficMapper,
if (Objects.nonNull(status) && CollUtil.isNotEmpty(status.getDev())) {
List<DeviceDayTraffic> dbList = new ArrayList<>();
Date date = DateUtil.date();
String dateStr = DateUtil.format(date, "yyyy-MM-dd");
Date yesterday = DateUtil.offsetDay(date, -1);
String dateStr = DateUtil.format(yesterday, "yyyy-MM-dd");
status.getDev().forEach(dev -> {
DeviceDayTraffic deviceDayTraffic = new DeviceDayTraffic();
deviceDayTraffic.setMac(dev.getMac());