添加API请求记录导出功能
This commit is contained in:
parent
78f8396f58
commit
f601365450
|
|
@ -50,6 +50,35 @@ public class AppRecordApiRequestDao extends ServiceImpl<AppRecordApiRequestMappe
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询数据
|
||||||
|
*
|
||||||
|
* @param request 筛选参数
|
||||||
|
* @return 数据
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public List<AppRecordApiRequest> queryByRequest(QueryRecordApiRequestReq request) {
|
||||||
|
if(request == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
LambdaQueryWrapper<AppRecordApiRequest> queryWrapper = new LambdaQueryWrapper<>();
|
||||||
|
queryWrapper.eq(request.getSuccess() != null, AppRecordApiRequest::getSuccess, request.getSuccess());
|
||||||
|
if(AppStringUtils.isNotEmpty(request.getQueryStr())) {
|
||||||
|
queryWrapper.like(AppRecordApiRequest::getApiKey, request.getQueryStr())
|
||||||
|
.or().like(AppRecordApiRequest::getRequestMsg, request.getQueryStr())
|
||||||
|
.or().like(AppRecordApiRequest::getResponseMsg, request.getQueryStr());
|
||||||
|
}
|
||||||
|
if(request.getRequestTimes() != null && request.getRequestTimes().length == 2) {
|
||||||
|
queryWrapper.between(AppRecordApiRequest::getRequestTime, request.getRequestTimes()[0], request.getRequestTimes()[1]);
|
||||||
|
}
|
||||||
|
queryWrapper.orderByDesc(AppRecordApiRequest::getRequestTime);
|
||||||
|
try {
|
||||||
|
return super.baseMapper.selectList(queryWrapper);
|
||||||
|
} catch (Exception e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 插入数据
|
* 插入数据
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@ public interface AppRecordApiRequestService extends IService<AppRecordApiRequest
|
||||||
|
|
||||||
|
|
||||||
Tuple2<Long, List<AppRecordApiRequest>> queryByPage(QueryRecordApiRequestReq request, Integer pageSize, Integer pageIndex);
|
Tuple2<Long, List<AppRecordApiRequest>> queryByPage(QueryRecordApiRequestReq request, Integer pageSize, Integer pageIndex);
|
||||||
|
List<AppRecordApiRequest> queryByRequest(QueryRecordApiRequestReq request);
|
||||||
int insert(AppRecordApiRequest record); // 插入数据
|
int insert(AppRecordApiRequest record); // 插入数据
|
||||||
|
|
||||||
int deleteBySaveDays(int saveDays); // 删除指定天数前的数据
|
int deleteBySaveDays(int saveDays); // 删除指定天数前的数据
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,90 @@
|
||||||
|
package org.wcs.model.vo.serve.recordApi;
|
||||||
|
|
||||||
|
import cn.afterturn.easypoi.excel.annotation.Excel;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出记录API请求列表
|
||||||
|
*/
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
public class ExportRecordApiRequestVo {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 记录ID
|
||||||
|
*/
|
||||||
|
@Excel(name = "记录编号")
|
||||||
|
private String recordId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* API KEY
|
||||||
|
*/
|
||||||
|
@Excel(name = "API KEY")
|
||||||
|
private String apiKey;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 请求URL
|
||||||
|
*/
|
||||||
|
@Excel(name = "请求地址")
|
||||||
|
private String requestUrl;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 请求是否成功
|
||||||
|
*/
|
||||||
|
@Excel(name = "请求是否成功")
|
||||||
|
private String success;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 请求方式
|
||||||
|
*/
|
||||||
|
@Excel(name = "请求方式")
|
||||||
|
private String method;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* url参数
|
||||||
|
*/
|
||||||
|
@Excel(name = "URL参数")
|
||||||
|
private String urlParam;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 请求参数
|
||||||
|
*/
|
||||||
|
@Excel(name = "请求数据")
|
||||||
|
private String requestMsg;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 响应内容
|
||||||
|
*/
|
||||||
|
@Excel(name = "响应内容")
|
||||||
|
private String responseMsg;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 请求时间
|
||||||
|
*/
|
||||||
|
@Excel(name = "请求时间")
|
||||||
|
private LocalDateTime requestTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 响应时间
|
||||||
|
*/
|
||||||
|
@Excel(name = "响应时间")
|
||||||
|
private LocalDateTime responseTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 耗时
|
||||||
|
*/
|
||||||
|
@Excel(name = "耗时")
|
||||||
|
private BigDecimal useTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 错误信息
|
||||||
|
*/
|
||||||
|
@Excel(name = "错误信息")
|
||||||
|
private String errMsg;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
package org.wcs.serve.controller.app;
|
package org.wcs.serve.controller.app;
|
||||||
|
|
||||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||||
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import org.wcs.model.dto.serve.recordApi.QueryRecordApiRequestReq;
|
import org.wcs.model.dto.serve.recordApi.QueryRecordApiRequestReq;
|
||||||
|
|
@ -20,7 +21,7 @@ import org.wcs.serve.service.intf.IRecordApiService;
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class RecordApiController {
|
public class RecordApiController {
|
||||||
|
|
||||||
private final IRecordApiService recordApiRequestService;
|
private final IRecordApiService recordApiService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询 API 请求记录
|
* 查询 API 请求记录
|
||||||
|
|
@ -32,7 +33,7 @@ public class RecordApiController {
|
||||||
@SaCheckPermission("recordApiRequest:query")
|
@SaCheckPermission("recordApiRequest:query")
|
||||||
@PostMapping("/queryApiRequestWithPage")
|
@PostMapping("/queryApiRequestWithPage")
|
||||||
public AppServeDataResponse<PageDataResponse<RecordApiRequestVo>> queryRecordApiRequest(@RequestBody QueryRecordApiRequestReq request, @RequestParam("pageSize") Integer pageSize, @RequestParam("pageIndex") Integer pageIndex) {
|
public AppServeDataResponse<PageDataResponse<RecordApiRequestVo>> queryRecordApiRequest(@RequestBody QueryRecordApiRequestReq request, @RequestParam("pageSize") Integer pageSize, @RequestParam("pageIndex") Integer pageIndex) {
|
||||||
return recordApiRequestService.queryRecordApiRequest(request, pageSize, pageIndex);
|
return recordApiService.queryRecordApiRequest(request, pageSize, pageIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -45,7 +46,18 @@ public class RecordApiController {
|
||||||
@SaCheckPermission("recordApiResponse:query")
|
@SaCheckPermission("recordApiResponse:query")
|
||||||
@PostMapping("/queryApiResponseWithPage")
|
@PostMapping("/queryApiResponseWithPage")
|
||||||
public AppServeDataResponse<PageDataResponse<RecordApiResponseVo>> queryRecordApiResponse(@RequestBody QueryRecordApiResponseReq request, @RequestParam("pageSize") Integer pageSize, @RequestParam("pageIndex") Integer pageIndex) {
|
public AppServeDataResponse<PageDataResponse<RecordApiResponseVo>> queryRecordApiResponse(@RequestBody QueryRecordApiResponseReq request, @RequestParam("pageSize") Integer pageSize, @RequestParam("pageIndex") Integer pageIndex) {
|
||||||
return recordApiRequestService.queryRecordApiResponse(request, pageSize, pageIndex);
|
return recordApiService.queryRecordApiResponse(request, pageSize, pageIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出 API 请求记录
|
||||||
|
* @param response 响应
|
||||||
|
* @param request 查询参数
|
||||||
|
*/
|
||||||
|
@SaCheckPermission("recordApiRequest:export")
|
||||||
|
@PostMapping("/exportApiRequest")
|
||||||
|
public void exportApiRequest(HttpServletResponse response, @RequestBody QueryRecordApiRequestReq request) {
|
||||||
|
recordApiService.exportApiRequest(response, request);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,10 @@
|
||||||
package org.wcs.serve.service.impl;
|
package org.wcs.serve.service.impl;
|
||||||
|
|
||||||
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.wcs.constant.enums.common.TrueOrFalseEnum;
|
||||||
import org.wcs.factory.AppServeResponseFactory;
|
import org.wcs.factory.AppServeResponseFactory;
|
||||||
import org.wcs.mapper.intf.AppRecordApiRequestService;
|
import org.wcs.mapper.intf.AppRecordApiRequestService;
|
||||||
import org.wcs.mapper.intf.AppRecordApiResponseService;
|
import org.wcs.mapper.intf.AppRecordApiResponseService;
|
||||||
|
|
@ -12,12 +14,15 @@ import org.wcs.model.po.app.AppRecordApiRequest;
|
||||||
import org.wcs.model.po.app.AppRecordApiResponse;
|
import org.wcs.model.po.app.AppRecordApiResponse;
|
||||||
import org.wcs.model.vo.serve.AppServeDataResponse;
|
import org.wcs.model.vo.serve.AppServeDataResponse;
|
||||||
import org.wcs.model.vo.serve.common.PageDataResponse;
|
import org.wcs.model.vo.serve.common.PageDataResponse;
|
||||||
|
import org.wcs.model.vo.serve.recordApi.ExportRecordApiRequestVo;
|
||||||
import org.wcs.model.vo.serve.recordApi.RecordApiRequestVo;
|
import org.wcs.model.vo.serve.recordApi.RecordApiRequestVo;
|
||||||
import org.wcs.model.vo.serve.recordApi.RecordApiResponseVo;
|
import org.wcs.model.vo.serve.recordApi.RecordApiResponseVo;
|
||||||
|
import org.wcs.plugin.excel.ExcelPoi;
|
||||||
import org.wcs.serve.service.intf.IRecordApiService;
|
import org.wcs.serve.service.intf.IRecordApiService;
|
||||||
import org.wcs.model.bo.tuple.Tuple2;
|
import org.wcs.model.bo.tuple.Tuple2;
|
||||||
import org.wcs.utils.AppBeanUtils;
|
import org.wcs.utils.AppBeanUtils;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
|
|
@ -27,6 +32,7 @@ public class RecordApiService implements IRecordApiService {
|
||||||
|
|
||||||
private final AppRecordApiRequestService recordApiRequestService;
|
private final AppRecordApiRequestService recordApiRequestService;
|
||||||
private final AppRecordApiResponseService recordApiResponseService;
|
private final AppRecordApiResponseService recordApiResponseService;
|
||||||
|
private final ExcelPoi excelPoi;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询记录API请求列表
|
* 查询记录API请求列表
|
||||||
|
|
@ -76,5 +82,41 @@ public class RecordApiService implements IRecordApiService {
|
||||||
return AppServeResponseFactory.success("查询成功", response);
|
return AppServeResponseFactory.success("查询成功", response);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出记录API请求列表
|
||||||
|
* @param response 响应
|
||||||
|
* @param request 查询参数
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void exportApiRequest(HttpServletResponse response, QueryRecordApiRequestReq request) {
|
||||||
|
List<AppRecordApiRequest> recordApiRequests = recordApiRequestService.queryByRequest(request);
|
||||||
|
if(recordApiRequests == null) {
|
||||||
|
log.error("导出API请求数据时查询数据失败");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
List<ExportRecordApiRequestVo> recordApiRequestVos = new ArrayList<>();
|
||||||
|
for (AppRecordApiRequest recordApiRequest : recordApiRequests) {
|
||||||
|
ExportRecordApiRequestVo recordApiRequestVo = new ExportRecordApiRequestVo();
|
||||||
|
recordApiRequestVo.setRecordId(recordApiRequest.getRecordId());
|
||||||
|
recordApiRequestVo.setApiKey(recordApiRequest.getApiKey());
|
||||||
|
recordApiRequestVo.setRequestUrl(recordApiRequest.getRequestUrl());
|
||||||
|
recordApiRequestVo.setSuccess(TrueOrFalseEnum.getByCode(recordApiRequest.getSuccess()).getMsg());
|
||||||
|
recordApiRequestVo.setMethod(recordApiRequest.getMethod());
|
||||||
|
recordApiRequestVo.setUrlParam(recordApiRequest.getUrlParam());
|
||||||
|
recordApiRequestVo.setRequestMsg(recordApiRequest.getRequestMsg());
|
||||||
|
recordApiRequestVo.setResponseMsg(recordApiRequest.getResponseMsg());
|
||||||
|
recordApiRequestVo.setRequestTime(recordApiRequest.getRequestTime());
|
||||||
|
recordApiRequestVo.setResponseTime(recordApiRequest.getResponseTime());
|
||||||
|
recordApiRequestVo.setUseTime(recordApiRequest.getUseTime());
|
||||||
|
recordApiRequestVo.setErrMsg(recordApiRequest.getErrMsg());
|
||||||
|
recordApiRequestVos.add(recordApiRequestVo);
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
excelPoi.doWriteExcel("API请求数据", response, recordApiRequestVos, ExportRecordApiRequestVo.class);
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("导出API请求数据时发生异常", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
package org.wcs.serve.service.intf;
|
package org.wcs.serve.service.intf;
|
||||||
|
|
||||||
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
import org.wcs.model.dto.serve.recordApi.QueryRecordApiRequestReq;
|
import org.wcs.model.dto.serve.recordApi.QueryRecordApiRequestReq;
|
||||||
import org.wcs.model.dto.serve.recordApi.QueryRecordApiResponseReq;
|
import org.wcs.model.dto.serve.recordApi.QueryRecordApiResponseReq;
|
||||||
import org.wcs.model.vo.serve.AppServeDataResponse;
|
import org.wcs.model.vo.serve.AppServeDataResponse;
|
||||||
|
|
@ -11,4 +12,6 @@ public interface IRecordApiService {
|
||||||
|
|
||||||
AppServeDataResponse<PageDataResponse<RecordApiRequestVo>> queryRecordApiRequest(QueryRecordApiRequestReq request, Integer pageSize, Integer pageIndex);
|
AppServeDataResponse<PageDataResponse<RecordApiRequestVo>> queryRecordApiRequest(QueryRecordApiRequestReq request, Integer pageSize, Integer pageIndex);
|
||||||
AppServeDataResponse<PageDataResponse<RecordApiResponseVo>> queryRecordApiResponse(QueryRecordApiResponseReq request, Integer pageSize, Integer pageIndex);
|
AppServeDataResponse<PageDataResponse<RecordApiResponseVo>> queryRecordApiResponse(QueryRecordApiResponseReq request, Integer pageSize, Integer pageIndex);
|
||||||
|
|
||||||
|
void exportApiRequest(HttpServletResponse response, QueryRecordApiRequestReq request); // 导出 API 请求记录
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -21,5 +21,12 @@ export default class RecordApi {
|
||||||
pageIndex: pageIndex
|
pageIndex: pageIndex
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
};
|
||||||
|
|
||||||
|
static downLoadApiRequest(query: IRecordApiRequestSearch) {
|
||||||
|
return axiosInstance.post('/app/recordApi/exportApiRequest', query, {
|
||||||
|
responseType: 'blob',
|
||||||
|
timeout: 30000
|
||||||
|
})
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
@ -13,6 +13,7 @@ import MessageUtils from "@/utils/MessageUtils.ts";
|
||||||
import RecordApiRequestDetail from "@/components/page/recordApi/RecordApiRequestDetail.vue";
|
import RecordApiRequestDetail from "@/components/page/recordApi/RecordApiRequestDetail.vue";
|
||||||
import {menuStore} from "@/stores/menu.ts";
|
import {menuStore} from "@/stores/menu.ts";
|
||||||
import AppPermission from "@/components/manage/AppPermission.vue";
|
import AppPermission from "@/components/manage/AppPermission.vue";
|
||||||
|
import StackerLocationApi from "@/api/stackerLocation.ts";
|
||||||
|
|
||||||
const menuStoreInstance = menuStore();
|
const menuStoreInstance = menuStore();
|
||||||
const trueFalseTagStyleFormatter = new TrueFalseTagStyleFormatter();
|
const trueFalseTagStyleFormatter = new TrueFalseTagStyleFormatter();
|
||||||
|
|
@ -73,6 +74,21 @@ const handleEdit = (index: number, row: any) => {
|
||||||
};
|
};
|
||||||
showDetail.value = true;
|
showDetail.value = true;
|
||||||
};
|
};
|
||||||
|
// 导出数据
|
||||||
|
const exportData = () => {
|
||||||
|
MessageUtils.confirmMessageBox('确定导出数据?','导出确认').then(() => {
|
||||||
|
RecordApi.downLoadApiRequest(querySearch.value).then(res => {
|
||||||
|
const url = window.URL.createObjectURL(new Blob([res.data]));
|
||||||
|
const link = document.createElement('a');
|
||||||
|
link.href = url;
|
||||||
|
link.setAttribute('download', '接口请求信息下载.xlsx');
|
||||||
|
document.body.appendChild(link);
|
||||||
|
link.click();
|
||||||
|
MessageUtils.successMessage('您的下载将尽快开始,请稍后');
|
||||||
|
document.body.removeChild(link);
|
||||||
|
}).catch(() => {})
|
||||||
|
}).catch(() => {})
|
||||||
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
@ -104,7 +120,7 @@ const handleEdit = (index: number, row: any) => {
|
||||||
<el-button-group style="width: 100%;margin-left: 10px; margin-bottom: 10px">
|
<el-button-group style="width: 100%;margin-left: 10px; margin-bottom: 10px">
|
||||||
<app-permission permission="recordApiRequest:query"><el-button type="primary" @click="query">查询/刷新</el-button></app-permission>
|
<app-permission permission="recordApiRequest:query"><el-button type="primary" @click="query">查询/刷新</el-button></app-permission>
|
||||||
<el-button type="warning" @click="resetInput">重置查询参数</el-button>
|
<el-button type="warning" @click="resetInput">重置查询参数</el-button>
|
||||||
<app-permission permission="recordApiRequest:export"><el-button type="info" >导出数据</el-button></app-permission>
|
<app-permission permission="recordApiRequest:export"><el-button type="info" @click="exportData">导出数据</el-button></app-permission>
|
||||||
</el-button-group>
|
</el-button-group>
|
||||||
</el-row>
|
</el-row>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user