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;
|
||||
|
||||
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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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.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());
|
||||
|
|
|
|||
Loading…
Reference in New Issue