feat: add cdr schedule task
This commit is contained in:
@@ -70,6 +70,11 @@
|
||||
<groupId>org.wfc</groupId>
|
||||
<artifactId>wfc-common-swagger</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.wfc</groupId>
|
||||
<artifactId>wfc-api-user</artifactId>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
package org.wfc.job.task;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.wfc.user.api.RemoteUUserService;
|
||||
|
||||
/**
|
||||
* @description: 话单信息任务
|
||||
* @author: cyc
|
||||
* @since: 2024-12-10
|
||||
*/
|
||||
@Slf4j
|
||||
@Component("cdrInfoTask")
|
||||
public class CdrInfoTask {
|
||||
|
||||
@Autowired
|
||||
private RemoteUUserService remoteUUserService;
|
||||
|
||||
public void addCdrInfo() {
|
||||
log.info("开始执行话单信息任务");
|
||||
remoteUUserService.addCdrInfoByOmadaApi();
|
||||
log.info("话单信息任务执行成功");
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,11 @@
|
||||
package org.wfc.user.controller;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.wfc.common.core.domain.R;
|
||||
import org.wfc.user.service.IUCdrService;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
@@ -15,4 +19,16 @@ import org.springframework.web.bind.annotation.RestController;
|
||||
@RequestMapping("/user/uCdr")
|
||||
public class UCdrController {
|
||||
|
||||
@Autowired
|
||||
private IUCdrService cdrService;
|
||||
|
||||
/**
|
||||
* 添加话单信息通过OmadaApi
|
||||
*/
|
||||
@GetMapping("/addCdrInfo")
|
||||
public R<Boolean> addCdrInfoByOmadaApi() {
|
||||
cdrService.addCdrInfoByOmadaApi();
|
||||
return R.ok(true);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -2,8 +2,9 @@ package org.wfc.user.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.wfc.common.mybatis.domain.BaseData;
|
||||
|
||||
/**
|
||||
@@ -14,8 +15,9 @@ import org.wfc.common.mybatis.domain.BaseData;
|
||||
* @author cyc
|
||||
* @since 2024-12-09
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Builder
|
||||
@TableName("u_cdr")
|
||||
@Schema(name = "UCdr", description = "用户平台_用户话单表")
|
||||
public class UCdr extends BaseData {
|
||||
@@ -35,10 +37,10 @@ public class UCdr extends BaseData {
|
||||
private String ssid;
|
||||
|
||||
@Schema(description = "tx rate ")
|
||||
private Integer rxRate;
|
||||
private Long rxRate;
|
||||
|
||||
@Schema(description = "tx rate")
|
||||
private Integer txRate;
|
||||
private Long txRate;
|
||||
|
||||
@Schema(description = "Number of downstream packets. ")
|
||||
private Long downPacket;
|
||||
|
||||
@@ -1,12 +1,13 @@
|
||||
package org.wfc.user.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
import org.wfc.common.mybatis.domain.BaseData;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.wfc.common.mybatis.domain.BaseData;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
@@ -16,8 +17,9 @@ import lombok.Setter;
|
||||
* @author cyc
|
||||
* @since 2024-12-09
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Builder
|
||||
@TableName("u_cdr_detail")
|
||||
@Schema(name = "UCdrDetail", description = "用户平台_话单明细表")
|
||||
public class UCdrDetail extends BaseData {
|
||||
|
||||
@@ -2,8 +2,9 @@ package org.wfc.user.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.wfc.common.mybatis.domain.BaseData;
|
||||
|
||||
/**
|
||||
@@ -14,8 +15,9 @@ import org.wfc.common.mybatis.domain.BaseData;
|
||||
* @author cyc
|
||||
* @since 2024-12-09
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Builder
|
||||
@TableName("u_client")
|
||||
@Schema(name = "UClient", description = "用户平台_用户设备表")
|
||||
public class UClient extends BaseData {
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
package org.wfc.user.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import java.io.Serializable;
|
||||
import org.wfc.common.mybatis.domain.BaseData;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.wfc.common.mybatis.domain.BaseData;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
@@ -15,8 +15,9 @@ import lombok.Setter;
|
||||
* @author cyc
|
||||
* @since 2024-12-09
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Builder
|
||||
@TableName("u_device")
|
||||
@Schema(name = "UDevice", description = "用户平台_AP设备表")
|
||||
public class UDevice extends BaseData {
|
||||
|
||||
@@ -13,4 +13,6 @@ import com.baomidou.mybatisplus.extension.service.IService;
|
||||
*/
|
||||
public interface IUCdrService extends IService<UCdr> {
|
||||
|
||||
void addCdrInfoByOmadaApi();
|
||||
|
||||
}
|
||||
|
||||
@@ -1,10 +1,35 @@
|
||||
package org.wfc.user.service.impl;
|
||||
|
||||
import org.wfc.user.domain.UCdr;
|
||||
import org.wfc.user.mapper.UCdrMapper;
|
||||
import org.wfc.user.service.IUCdrService;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.wfc.omada.api.client.OmadaClientApi;
|
||||
import org.wfc.omada.api.client.OmadaClientInsightApi;
|
||||
import org.wfc.omada.api.client.model.ClientHistoryInfo;
|
||||
import org.wfc.omada.api.client.model.ClientInfo;
|
||||
import org.wfc.omada.api.client.model.OperationResponseClientGridVoClientInfo;
|
||||
import org.wfc.omada.api.client.model.OperationResponseGridVoClientHistoryInfo;
|
||||
import org.wfc.omada.api.device.OmadaDeviceApi;
|
||||
import org.wfc.omada.api.device.model.DeviceInfo;
|
||||
import org.wfc.omada.api.device.model.OperationResponseGridVoDeviceInfo;
|
||||
import org.wfc.omada.api.organization.OmadaSiteApi;
|
||||
import org.wfc.omada.api.organization.model.OperationResponseGridVoSiteSummaryInfo;
|
||||
import org.wfc.omada.api.organization.model.SiteSummaryInfo;
|
||||
import org.wfc.user.domain.UCdr;
|
||||
import org.wfc.user.domain.UCdrDetail;
|
||||
import org.wfc.user.domain.UClient;
|
||||
import org.wfc.user.domain.UDevice;
|
||||
import org.wfc.user.mapper.UCdrMapper;
|
||||
import org.wfc.user.service.IUCdrDetailService;
|
||||
import org.wfc.user.service.IUCdrService;
|
||||
import org.wfc.user.service.IUClientService;
|
||||
import org.wfc.user.service.IUDeviceService;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
@@ -17,4 +42,139 @@ import org.springframework.stereotype.Service;
|
||||
@Service
|
||||
public class UCdrServiceImpl extends ServiceImpl<UCdrMapper, UCdr> implements IUCdrService {
|
||||
|
||||
@Autowired
|
||||
private OmadaSiteApi omadaSiteApi;
|
||||
|
||||
@Autowired
|
||||
private OmadaDeviceApi omadaDeviceApi;
|
||||
|
||||
@Autowired
|
||||
private OmadaClientApi omadaClientApi;
|
||||
|
||||
@Autowired
|
||||
private OmadaClientInsightApi omadaClientInsightApi;
|
||||
|
||||
@Autowired
|
||||
private IUDeviceService deviceService;
|
||||
|
||||
@Autowired
|
||||
private IUClientService clientService;
|
||||
|
||||
@Autowired
|
||||
private IUCdrDetailService cdrDetailService;
|
||||
|
||||
@Override
|
||||
public void addCdrInfoByOmadaApi() {
|
||||
ResponseEntity<OperationResponseGridVoSiteSummaryInfo> siteResp = omadaSiteApi.getSiteList(1, 1000);
|
||||
if (ObjectUtil.isNull(siteResp.getBody())) {
|
||||
return;
|
||||
}
|
||||
List<SiteSummaryInfo> sites = siteResp.getBody().getResult().getData();
|
||||
// 添加AP设备
|
||||
addDevices(sites);
|
||||
for (SiteSummaryInfo site : sites) {
|
||||
ResponseEntity<OperationResponseClientGridVoClientInfo> clientResp = omadaClientApi.getGridActiveClients(site.getSiteId(), 1, 1000);
|
||||
if (ObjectUtil.isNull(clientResp.getBody())) {
|
||||
continue;
|
||||
}
|
||||
List<ClientInfo> clients = clientResp.getBody().getResult().getData();
|
||||
for (ClientInfo client : clients) {
|
||||
// 添加用户设备
|
||||
Long clientId = addClient(client);
|
||||
// 添加话单
|
||||
Long cdrId = addCdr(client, clientId);
|
||||
// 添加话单明细
|
||||
addCdrDetail(site, client, cdrId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void addCdrDetail(SiteSummaryInfo site, ClientInfo client, Long cdrId) {
|
||||
// 话单明细
|
||||
ResponseEntity<OperationResponseGridVoClientHistoryInfo> pastConnResp = omadaClientInsightApi.getGridPastConnections(site.getSiteId(), 1, 1000, client.getMac());
|
||||
if (ObjectUtil.isNull(pastConnResp.getBody())) {
|
||||
return;
|
||||
}
|
||||
List<ClientHistoryInfo> pastConns = pastConnResp.getBody().getResult().getData();
|
||||
for (ClientHistoryInfo pastConn : pastConns) {
|
||||
UCdrDetail uCdrDetail = cdrDetailService.getOne(Wrappers.<UCdrDetail>lambdaQuery().eq(UCdrDetail::getCdrId, cdrId).eq(UCdrDetail::getStartTime, pastConn.getFirstSeen()), false);
|
||||
if (ObjectUtil.isNotNull(uCdrDetail)) {
|
||||
continue;
|
||||
}
|
||||
UCdrDetail uCdrDetail1 = UCdrDetail.builder().cdrId(cdrId).startTime(new Date(pastConn.getFirstSeen()))
|
||||
.endTime(new Date(pastConn.getLastSeen()))
|
||||
.trafficUp(pastConn.getUpload())
|
||||
.trafficDown(pastConn.getDownload())
|
||||
.duration(pastConn.getDuration())
|
||||
.build();
|
||||
cdrDetailService.save(uCdrDetail1);
|
||||
}
|
||||
}
|
||||
|
||||
private Long addCdr(ClientInfo client, Long clientId) {
|
||||
// 话单
|
||||
UCdr hasUCdr = this.getOne(Wrappers.<UCdr>lambdaQuery().eq(UCdr::getClientId, clientId), false);
|
||||
Long cdrId;
|
||||
if (ObjectUtil.isNull(hasUCdr)) {
|
||||
UDevice hasDevice = deviceService.getOne(Wrappers.<UDevice>lambdaQuery().eq(UDevice::getDeviceMac, client.getApMac()), false);
|
||||
UCdr uCdr = UCdr.builder().clientId(clientId)
|
||||
.deviceId(hasDevice.getId())
|
||||
.ssid(client.getSsid())
|
||||
.rxRate(client.getRxRate())
|
||||
.txRate(client.getTxRate())
|
||||
.lastSeenTime(client.getLastSeen())
|
||||
.upTime(client.getUptime())
|
||||
.upPacket(client.getUpPacket())
|
||||
.downPacket(client.getDownPacket())
|
||||
.trafficDown(client.getTrafficDown())
|
||||
.trafficUp(client.getTrafficUp())
|
||||
.build();
|
||||
this.save(uCdr);
|
||||
cdrId = uCdr.getId();
|
||||
} else {
|
||||
cdrId = hasUCdr.getId();
|
||||
}
|
||||
return cdrId;
|
||||
}
|
||||
|
||||
private Long addClient(ClientInfo client) {
|
||||
// 用户设备
|
||||
UClient hasClient = clientService.getOne(Wrappers.<UClient>lambdaQuery().eq(UClient::getClientMac, client.getMac()), false);
|
||||
Long clientId;
|
||||
if (ObjectUtil.isNull(hasClient)) {
|
||||
UClient uClient = UClient.builder().clientMac(client.getMac())
|
||||
.clientName(client.getName())
|
||||
.clientDeviceType(client.getDeviceType())
|
||||
.build();
|
||||
clientService.save(uClient);
|
||||
clientId = uClient.getId();
|
||||
} else {
|
||||
clientId = hasClient.getId();
|
||||
}
|
||||
return clientId;
|
||||
}
|
||||
|
||||
private void addDevices(List<SiteSummaryInfo> sites) {
|
||||
// ap设备
|
||||
for (SiteSummaryInfo site : sites) {
|
||||
ResponseEntity<OperationResponseGridVoDeviceInfo> deviceResp = omadaDeviceApi.getDeviceList(site.getSiteId(), 1, 1000);
|
||||
if (ObjectUtil.isNull(deviceResp.getBody())) {
|
||||
return;
|
||||
}
|
||||
List<DeviceInfo> devices = deviceResp.getBody().getResult().getData();
|
||||
for (DeviceInfo device : devices) {
|
||||
UDevice hasUDevice = deviceService.getOne(Wrappers.<UDevice>lambdaQuery().eq(UDevice::getDeviceMac, device.getMac()), false);
|
||||
if (ObjectUtil.isNotNull(hasUDevice)) {
|
||||
continue;
|
||||
}
|
||||
UDevice uDevice = UDevice.builder().deviceIp(device.getIp())
|
||||
.deviceMac(device.getMac())
|
||||
.deviceName(device.getName())
|
||||
.deviceModel(device.getModel())
|
||||
.build();
|
||||
deviceService.save(uDevice);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ package org.wfc.user;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.wfc.user.service.IUClientService;
|
||||
import org.wfc.user.service.IUCdrService;
|
||||
|
||||
/**
|
||||
* @description: 设备单元测试
|
||||
@@ -14,10 +14,11 @@ import org.wfc.user.service.IUClientService;
|
||||
public class UClientTest {
|
||||
|
||||
@Autowired
|
||||
private IUClientService clientService;
|
||||
private IUCdrService cdrService;
|
||||
|
||||
@Test
|
||||
public void test() {
|
||||
cdrService.test();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user