diff --git a/src/main/java/com/bcrjl/miwifi/common/response/BasePageList.java b/src/main/java/com/bcrjl/miwifi/common/response/BasePageList.java new file mode 100644 index 0000000..0166b20 --- /dev/null +++ b/src/main/java/com/bcrjl/miwifi/common/response/BasePageList.java @@ -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 implements Serializable { + + private long total; + private long page; + private long pageSize; + private List rows = Collections.emptyList(); + + public static BasePageList of(IPage page) { + BasePageList bladePage = new BasePageList<>(); + bladePage.setRows(page.getRecords()); + bladePage.setTotal(page.getTotal()); + bladePage.setPageSize(page.getSize()); + bladePage.setPage(page.getCurrent()); + return bladePage; + } +} diff --git a/src/main/java/com/bcrjl/miwifi/common/response/Query.java b/src/main/java/com/bcrjl/miwifi/common/response/Query.java new file mode 100644 index 0000000..35bafb6 --- /dev/null +++ b/src/main/java/com/bcrjl/miwifi/common/response/Query.java @@ -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; +} diff --git a/src/main/java/com/bcrjl/miwifi/common/util/Condition.java b/src/main/java/com/bcrjl/miwifi/common/util/Condition.java new file mode 100644 index 0000000..3aa5731 --- /dev/null +++ b/src/main/java/com/bcrjl/miwifi/common/util/Condition.java @@ -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 IPage getPage(Query query) { + Page page = new Page<>(query.getPage(), query.getPageSize()); + return page; + } +} diff --git a/src/main/java/com/bcrjl/miwifi/controller/DeviceDayTrafficController.java b/src/main/java/com/bcrjl/miwifi/controller/DeviceDayTrafficController.java new file mode 100644 index 0000000..59c5cd0 --- /dev/null +++ b/src/main/java/com/bcrjl/miwifi/controller/DeviceDayTrafficController.java @@ -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 deviceDayTrafficIPage = deviceDayTrafficService.pageList(Condition.getPage(query), param); + return R.data(BasePageList.of(deviceDayTrafficIPage)); + } + + @GetMapping("test") + public R test(){ + deviceDayTrafficService.writeEverydayDeviceTraffic(); + return R.success(); + } +} diff --git a/src/main/java/com/bcrjl/miwifi/mapper/DeviceDayTrafficMapper.java b/src/main/java/com/bcrjl/miwifi/mapper/DeviceDayTrafficMapper.java index b914bb8..e9cf7c4 100644 --- a/src/main/java/com/bcrjl/miwifi/mapper/DeviceDayTrafficMapper.java +++ b/src/main/java/com/bcrjl/miwifi/mapper/DeviceDayTrafficMapper.java @@ -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 { + + IPage pageList(IPage page, DeviceDayTrafficParam param); } diff --git a/src/main/java/com/bcrjl/miwifi/mapper/DeviceDayTrafficMapper.xml b/src/main/java/com/bcrjl/miwifi/mapper/DeviceDayTrafficMapper.xml index 1e70e1c..45ef15e 100644 --- a/src/main/java/com/bcrjl/miwifi/mapper/DeviceDayTrafficMapper.xml +++ b/src/main/java/com/bcrjl/miwifi/mapper/DeviceDayTrafficMapper.xml @@ -11,4 +11,17 @@ + + diff --git a/src/main/java/com/bcrjl/miwifi/model/param/DeviceDayTrafficParam.java b/src/main/java/com/bcrjl/miwifi/model/param/DeviceDayTrafficParam.java new file mode 100644 index 0000000..8605214 --- /dev/null +++ b/src/main/java/com/bcrjl/miwifi/model/param/DeviceDayTrafficParam.java @@ -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 { +} diff --git a/src/main/java/com/bcrjl/miwifi/service/DeviceDayTrafficService.java b/src/main/java/com/bcrjl/miwifi/service/DeviceDayTrafficService.java index 81b561c..520651c 100644 --- a/src/main/java/com/bcrjl/miwifi/service/DeviceDayTrafficService.java +++ b/src/main/java/com/bcrjl/miwifi/service/DeviceDayTrafficService.java @@ -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 pageList(IPage 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 list = this.list(new LambdaQueryWrapper().eq(DeviceDayTraffic::getDate, dateStr)); + if (CollUtil.isEmpty(list)) { + dayTraffic(); + } else { + StatusResult status = miWifiUtil.getStatus(); + List devList = status.getDev(); + List 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 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());