feat:流量分页;定时写入流量
This commit is contained in:
parent
24d45e48f0
commit
03f2e299d4
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,7 +1,9 @@
|
||||||
package com.bcrjl.miwifi.mapper;
|
package com.bcrjl.miwifi.mapper;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
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.domain.DeviceDayTraffic;
|
||||||
|
import com.bcrjl.miwifi.model.param.DeviceDayTrafficParam;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -11,4 +13,6 @@ import org.apache.ibatis.annotations.Mapper;
|
||||||
*/
|
*/
|
||||||
@Mapper
|
@Mapper
|
||||||
public interface DeviceDayTrafficMapper extends BaseMapper<DeviceDayTraffic> {
|
public interface DeviceDayTrafficMapper extends BaseMapper<DeviceDayTraffic> {
|
||||||
|
|
||||||
|
IPage<DeviceDayTraffic> pageList(IPage<DeviceDayTraffic> page, DeviceDayTrafficParam param);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,4 +11,17 @@
|
||||||
<result column="download" jdbcType="VARCHAR" property="download"/>
|
<result column="download" jdbcType="VARCHAR" property="download"/>
|
||||||
<result column="total" jdbcType="VARCHAR" property="total"/>
|
<result column="total" jdbcType="VARCHAR" property="total"/>
|
||||||
</resultMap>
|
</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>
|
</mapper>
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
||||||
|
}
|
||||||
|
|
@ -2,10 +2,13 @@ package com.bcrjl.miwifi.service;
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import cn.hutool.core.date.DateUtil;
|
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.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import com.bcrjl.miwifi.common.util.MiWifiUtil;
|
import com.bcrjl.miwifi.common.util.MiWifiUtil;
|
||||||
import com.bcrjl.miwifi.mapper.DeviceDayTrafficMapper;
|
import com.bcrjl.miwifi.mapper.DeviceDayTrafficMapper;
|
||||||
import com.bcrjl.miwifi.model.domain.DeviceDayTraffic;
|
import com.bcrjl.miwifi.model.domain.DeviceDayTraffic;
|
||||||
|
import com.bcrjl.miwifi.model.param.DeviceDayTrafficParam;
|
||||||
import com.bcrjl.miwifi.model.result.StatusResult;
|
import com.bcrjl.miwifi.model.result.StatusResult;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
@ -26,11 +29,68 @@ public class DeviceDayTrafficService extends ServiceImpl<DeviceDayTrafficMapper,
|
||||||
|
|
||||||
private final MiWifiUtil miWifiUtil;
|
private final MiWifiUtil miWifiUtil;
|
||||||
|
|
||||||
|
public IPage<DeviceDayTraffic> pageList(IPage<DeviceDayTraffic> page, DeviceDayTrafficParam param) {
|
||||||
|
return this.baseMapper.pageList(page, param);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 定时任务写入每日数据
|
* 定时任务写入每日数据
|
||||||
*/
|
*/
|
||||||
public void writeEverydayDeviceTraffic() {
|
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())) {
|
if (Objects.nonNull(status) && CollUtil.isNotEmpty(status.getDev())) {
|
||||||
List<DeviceDayTraffic> dbList = new ArrayList<>();
|
List<DeviceDayTraffic> dbList = new ArrayList<>();
|
||||||
Date date = DateUtil.date();
|
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 -> {
|
status.getDev().forEach(dev -> {
|
||||||
DeviceDayTraffic deviceDayTraffic = new DeviceDayTraffic();
|
DeviceDayTraffic deviceDayTraffic = new DeviceDayTraffic();
|
||||||
deviceDayTraffic.setMac(dev.getMac());
|
deviceDayTraffic.setMac(dev.getMac());
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue