Commit 6330de54 by yuwei

2.0.0项目初始化

parent 4aba1a96
...@@ -6,11 +6,30 @@ import javax.servlet.http.HttpServletRequest; ...@@ -6,11 +6,30 @@ import javax.servlet.http.HttpServletRequest;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.InputStream; import java.io.InputStream;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
@Slf4j @Slf4j
public class HttpUtil { public class HttpUtil {
public static final String METHOD_POST = "POST";
public static final String METHOD_GET = "GET";
public static String getBodyString(HttpServletRequest request) { public static String getBodyString(HttpServletRequest request) {
String method = request.getMethod();
String bodyString;
if (METHOD_GET.equals(method)) {
bodyString = doGet(request);
} else if (METHOD_POST.equals(method)) {
bodyString = doPost(request);
} else {
// 其他请求方式暂不处理
return null;
}
return bodyString;
}
private static String doPost(HttpServletRequest request) {
StringBuffer sb = new StringBuffer(); StringBuffer sb = new StringBuffer();
InputStream inputStream; InputStream inputStream;
BufferedReader bufferedReader; BufferedReader bufferedReader;
...@@ -19,7 +38,7 @@ public class HttpUtil { ...@@ -19,7 +38,7 @@ public class HttpUtil {
inputStream = request.getInputStream(); inputStream = request.getInputStream();
//将字节数组当做输出的目的地 //将字节数组当做输出的目的地
//字节流转换为字符流(处理流) //字节流转换为字符流(处理流)
bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
String line = ""; String line = "";
while ((line = bufferedReader.readLine()) != null) { while ((line = bufferedReader.readLine()) != null) {
sb.append(line); sb.append(line);
...@@ -29,4 +48,8 @@ public class HttpUtil { ...@@ -29,4 +48,8 @@ public class HttpUtil {
} }
return sb.toString(); return sb.toString();
} }
private static String doGet(HttpServletRequest request) {
return null;
}
} }
package cn.datax.common.log.aspectj; package cn.datax.common.log.aspectj;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
import cn.datax.common.log.annotation.LogAop; import cn.datax.common.log.annotation.LogAop;
import cn.datax.common.utils.RequestHolder; import cn.datax.common.utils.RequestHolder;
...@@ -9,9 +11,10 @@ import cn.datax.service.system.api.dto.LogDto; ...@@ -9,9 +11,10 @@ import cn.datax.service.system.api.dto.LogDto;
import cn.datax.service.system.api.feign.LogServiceFeign; import cn.datax.service.system.api.feign.LogServiceFeign;
import cn.hutool.core.util.URLUtil; import cn.hutool.core.util.URLUtil;
import cn.hutool.extra.servlet.ServletUtil; import cn.hutool.extra.servlet.ServletUtil;
import cn.hutool.http.HttpUtil;
import cn.hutool.http.useragent.UserAgent; import cn.hutool.http.useragent.UserAgent;
import cn.hutool.http.useragent.UserAgentUtil; import cn.hutool.http.useragent.UserAgentUtil;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.aspectj.lang.JoinPoint; import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.Signature; import org.aspectj.lang.Signature;
...@@ -20,6 +23,7 @@ import org.aspectj.lang.reflect.MethodSignature; ...@@ -20,6 +23,7 @@ import org.aspectj.lang.reflect.MethodSignature;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
...@@ -30,6 +34,9 @@ public class LogAspect { ...@@ -30,6 +34,9 @@ public class LogAspect {
@Autowired @Autowired
private LogServiceFeign logServiceFeign; private LogServiceFeign logServiceFeign;
@Autowired
private ObjectMapper objectMapper;
// 配置织入点 // 配置织入点
@Pointcut("@annotation(cn.datax.common.log.annotation.LogAop)") @Pointcut("@annotation(cn.datax.common.log.annotation.LogAop)")
public void logPointCut() {} public void logPointCut() {}
...@@ -73,7 +80,6 @@ public class LogAspect { ...@@ -73,7 +80,6 @@ public class LogAspect {
UserAgent ua = UserAgentUtil.parse(request.getHeader("User-Agent")); UserAgent ua = UserAgentUtil.parse(request.getHeader("User-Agent"));
log.setBrowser(ua.getBrowser().toString()); log.setBrowser(ua.getBrowser().toString());
log.setOs(ua.getOs().toString()); log.setOs(ua.getOs().toString());
log.setParams(HttpUtil.toParams(request.getParameterMap()));
return log; return log;
} }
...@@ -88,7 +94,10 @@ public class LogAspect { ...@@ -88,7 +94,10 @@ public class LogAspect {
String methodName = joinPoint.getSignature().getName(); String methodName = joinPoint.getSignature().getName();
logDto.setModule(logAop.module()).setTitle(logAop.value()) logDto.setModule(logAop.module()).setTitle(logAop.value())
.setClassName(className).setMethodName(methodName); .setClassName(className).setMethodName(methodName);
try {
logDto.setParams(objectMapper.writeValueAsString(getRequestParams(joinPoint)));
} catch (JsonProcessingException e) {
}
// 保存数据库 // 保存数据库
logServiceFeign.saveLog(logDto); logServiceFeign.saveLog(logDto);
} }
...@@ -105,5 +114,27 @@ public class LogAspect { ...@@ -105,5 +114,27 @@ public class LogAspect {
} }
return null; return null;
} }
/**
* 获取入参
* */
private Map<String, Object> getRequestParams(JoinPoint joinPoint) {
Map<String, Object> requestParams = new HashMap<>();
// 参数名
String[] paramNames = ((MethodSignature)joinPoint.getSignature()).getParameterNames();
// 参数值
Object[] paramValues = joinPoint.getArgs();
for (int i = 0; i < paramNames.length; i++) {
Object value = paramValues[i];
// 如果是文件对象
if (value instanceof MultipartFile) {
MultipartFile file = (MultipartFile) value;
// 获取文件名
value = file.getOriginalFilename();
}
requestParams.put(paramNames[i], value);
}
return requestParams;
}
} }
...@@ -98,6 +98,8 @@ public class ApiInterceptor implements HandlerInterceptor { ...@@ -98,6 +98,8 @@ public class ApiInterceptor implements HandlerInterceptor {
} }
} }
} }
Map<String, String[]> parameterMap = request.getParameterMap();
System.out.println("parameterMap:" + objectMapper.writeValueAsString(parameterMap));
// 接收参数 // 接收参数
String bodyString = HttpUtil.getBodyString(request); String bodyString = HttpUtil.getBodyString(request);
Map<String, Object> params = null; Map<String, Object> params = null;
......
...@@ -159,9 +159,11 @@ export default { ...@@ -159,9 +159,11 @@ export default {
getApiMask(id).then(response => { getApiMask(id).then(response => {
if (response.success) { if (response.success) {
this.form = response.data this.form = response.data
this.resParamList = this.apiOptions.filter(item => item.id === this.form.apiId).map(function (item) { console.log(this.form)
return item.resParams console.log(this.apiOptions)
}) this.resParamList = this.apiOptions.find(function (item) {
return item.id === this.form.apiId
}).resParams
this.form.rules.forEach(rule => { this.form.rules.forEach(rule => {
let fieldParamIndex = this.resParamList.findIndex((param) => { let fieldParamIndex = this.resParamList.findIndex((param) => {
return param.fieldName === rule.fieldName return param.fieldName === rule.fieldName
......
...@@ -165,7 +165,7 @@ ...@@ -165,7 +165,7 @@
<el-button size="mini" type="primary" @click="sqlParse">SQL解析</el-button> <el-button size="mini" type="primary" @click="sqlParse">SQL解析</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-form ref="form3" :model="form3" :rules="rules3" label-width="80px" v-if="active == 3"> <el-form ref="form3" :model="form3" label-width="80px" v-if="active == 3">
<el-divider content-position="left">请求参数</el-divider> <el-divider content-position="left">请求参数</el-divider>
<el-table :data="form3.reqParams" stripe border <el-table :data="form3.reqParams" stripe border
:max-height="300" :max-height="300"
...@@ -186,44 +186,36 @@ ...@@ -186,44 +186,36 @@
</el-table-column> </el-table-column>
<el-table-column prop="paramType" label="参数类型" align="center" show-overflow-tooltip > <el-table-column prop="paramType" label="参数类型" align="center" show-overflow-tooltip >
<template slot-scope="scope"> <template slot-scope="scope">
<el-form-item :prop=" 'reqParams.' + scope.$index + '.paramType' " :rules="rules3.paramType"> <el-select v-model="scope.row.paramType" placeholder="请选择参数类型">
<el-select v-model="scope.row.paramType" placeholder="请选择参数类型"> <el-option
<el-option v-for="dict in paramTypeOptions"
v-for="dict in paramTypeOptions" :key="dict.id"
:key="dict.id" :label="dict.itemValue"
:label="dict.itemValue" :value="dict.itemText"
:value="dict.itemText" ></el-option>
></el-option> </el-select>
</el-select>
</el-form-item>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="whereType" label="操作符" align="center" show-overflow-tooltip > <el-table-column prop="whereType" label="操作符" align="center" show-overflow-tooltip >
<template slot-scope="scope"> <template slot-scope="scope">
<el-form-item :prop=" 'reqParams.' + scope.$index + '.whereType' " :rules="rules3.whereType"> <el-select v-model="scope.row.whereType" placeholder="请选择操作符">
<el-select v-model="scope.row.whereType" placeholder="请选择操作符"> <el-option
<el-option v-for="dict in whereTypeOptions"
v-for="dict in whereTypeOptions" :key="dict.id"
:key="dict.id" :label="dict.itemValue"
:label="dict.itemValue" :value="dict.itemText"
:value="dict.itemText" ></el-option>
></el-option> </el-select>
</el-select>
</el-form-item>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="exampleValue" label="示例值" align="center" show-overflow-tooltip > <el-table-column prop="exampleValue" label="示例值" align="center" show-overflow-tooltip >
<template slot-scope="scope"> <template slot-scope="scope">
<el-form-item :prop=" 'reqParams.' + scope.$index + '.exampleValue' " :rules="rules3.exampleValue"> <el-input v-model="scope.row.exampleValue" placeholder="请输入示例值" />
<el-input v-model="scope.row.exampleValue" placeholder="请输入示例值" />
</el-form-item>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="defaultValue" label="默认值" align="center" show-overflow-tooltip > <el-table-column prop="defaultValue" label="默认值" align="center" show-overflow-tooltip >
<template slot-scope="scope"> <template slot-scope="scope">
<el-form-item :prop=" 'reqParams.' + scope.$index + '.defaultValue' " :rules="rules3.defaultValue"> <el-input v-model="scope.row.defaultValue" placeholder="请输入默认值" />
<el-input v-model="scope.row.defaultValue" placeholder="请输入默认值" />
</el-form-item>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
...@@ -244,9 +236,7 @@ ...@@ -244,9 +236,7 @@
</el-table-column> </el-table-column>
<el-table-column prop="exampleValue" label="示例值" align="center" show-overflow-tooltip > <el-table-column prop="exampleValue" label="示例值" align="center" show-overflow-tooltip >
<template slot-scope="scope"> <template slot-scope="scope">
<el-form-item :prop=" 'resParams.' + scope.$index + '.exampleValue' " :rules="rules3.exampleValue"> <el-input v-model="scope.row.exampleValue" placeholder="请输入示例值" />
<el-input v-model="scope.row.exampleValue" placeholder="请输入示例值" />
</el-form-item>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
...@@ -354,20 +344,6 @@ export default { ...@@ -354,20 +344,6 @@ export default {
reqParams: [], reqParams: [],
resParams: [] resParams: []
}, },
rules3: {
paramType: [
{ required: true, message: '参数类型不能为空', trigger: 'change' }
],
whereType: [
{ required: true, message: '操作符不能为空', trigger: 'change' }
],
exampleValue: [
{ required: true, message: '示例值不能为空', trigger: 'blur' }
],
defaultValue: [
{ required: true, message: '默认值不能为空', trigger: 'blur' }
]
},
// 请求方式数据字典 // 请求方式数据字典
reqMethodOptions: [], reqMethodOptions: [],
// 返回格式数据字典 // 返回格式数据字典
......
...@@ -326,7 +326,6 @@ export default { ...@@ -326,7 +326,6 @@ export default {
reqParams: [], reqParams: [],
resParams: [] resParams: []
}, },
rules3: {},
// 请求方式数据字典 // 请求方式数据字典
reqMethodOptions: [], reqMethodOptions: [],
// 返回格式数据字典 // 返回格式数据字典
......
...@@ -165,7 +165,7 @@ ...@@ -165,7 +165,7 @@
<el-button size="mini" type="primary" @click="sqlParse">SQL解析</el-button> <el-button size="mini" type="primary" @click="sqlParse">SQL解析</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-form ref="form3" :model="form3" :rules="rules3" label-width="80px" v-if="active == 3"> <el-form ref="form3" :model="form3" label-width="80px" v-if="active == 3">
<el-divider content-position="left">请求参数</el-divider> <el-divider content-position="left">请求参数</el-divider>
<el-table :data="form3.reqParams" stripe border <el-table :data="form3.reqParams" stripe border
:max-height="300" :max-height="300"
...@@ -186,44 +186,36 @@ ...@@ -186,44 +186,36 @@
</el-table-column> </el-table-column>
<el-table-column prop="paramType" label="参数类型" align="center" show-overflow-tooltip > <el-table-column prop="paramType" label="参数类型" align="center" show-overflow-tooltip >
<template slot-scope="scope"> <template slot-scope="scope">
<el-form-item :prop=" 'reqParams.' + scope.$index + '.paramType' " :rules="rules3.paramType"> <el-select v-model="scope.row.paramType" placeholder="请选择参数类型">
<el-select v-model="scope.row.paramType" placeholder="请选择参数类型"> <el-option
<el-option v-for="dict in paramTypeOptions"
v-for="dict in paramTypeOptions" :key="dict.id"
:key="dict.id" :label="dict.itemValue"
:label="dict.itemValue" :value="dict.itemText"
:value="dict.itemText" ></el-option>
></el-option> </el-select>
</el-select>
</el-form-item>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="whereType" label="操作符" align="center" show-overflow-tooltip > <el-table-column prop="whereType" label="操作符" align="center" show-overflow-tooltip >
<template slot-scope="scope"> <template slot-scope="scope">
<el-form-item :prop=" 'reqParams.' + scope.$index + '.whereType' " :rules="rules3.whereType"> <el-select v-model="scope.row.whereType" placeholder="请选择操作符">
<el-select v-model="scope.row.whereType" placeholder="请选择操作符"> <el-option
<el-option v-for="dict in whereTypeOptions"
v-for="dict in whereTypeOptions" :key="dict.id"
:key="dict.id" :label="dict.itemValue"
:label="dict.itemValue" :value="dict.itemText"
:value="dict.itemText" ></el-option>
></el-option> </el-select>
</el-select>
</el-form-item>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="exampleValue" label="示例值" align="center" show-overflow-tooltip > <el-table-column prop="exampleValue" label="示例值" align="center" show-overflow-tooltip >
<template slot-scope="scope"> <template slot-scope="scope">
<el-form-item :prop=" 'reqParams.' + scope.$index + '.exampleValue' " :rules="rules3.exampleValue"> <el-input v-model="scope.row.exampleValue" placeholder="请输入示例值" />
<el-input v-model="scope.row.exampleValue" placeholder="请输入示例值" />
</el-form-item>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="defaultValue" label="默认值" align="center" show-overflow-tooltip > <el-table-column prop="defaultValue" label="默认值" align="center" show-overflow-tooltip >
<template slot-scope="scope"> <template slot-scope="scope">
<el-form-item :prop=" 'reqParams.' + scope.$index + '.defaultValue' " :rules="rules3.defaultValue"> <el-input v-model="scope.row.defaultValue" placeholder="请输入默认值" />
<el-input v-model="scope.row.defaultValue" placeholder="请输入默认值" />
</el-form-item>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
...@@ -244,9 +236,7 @@ ...@@ -244,9 +236,7 @@
</el-table-column> </el-table-column>
<el-table-column prop="exampleValue" label="示例值" align="center" show-overflow-tooltip > <el-table-column prop="exampleValue" label="示例值" align="center" show-overflow-tooltip >
<template slot-scope="scope"> <template slot-scope="scope">
<el-form-item :prop=" 'resParams.' + scope.$index + '.exampleValue' " :rules="rules3.exampleValue"> <el-input v-model="scope.row.exampleValue" placeholder="请输入示例值" />
<el-input v-model="scope.row.exampleValue" placeholder="请输入示例值" />
</el-form-item>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
...@@ -354,20 +344,6 @@ export default { ...@@ -354,20 +344,6 @@ export default {
reqParams: [], reqParams: [],
resParams: [] resParams: []
}, },
rules3: {
paramType: [
{ required: true, message: '参数类型不能为空', trigger: 'change' }
],
whereType: [
{ required: true, message: '操作符不能为空', trigger: 'change' }
],
exampleValue: [
{ required: true, message: '示例值不能为空', trigger: 'blur' }
],
defaultValue: [
{ required: true, message: '默认值不能为空', trigger: 'blur' }
]
},
// 请求方式数据字典 // 请求方式数据字典
reqMethodOptions: [], reqMethodOptions: [],
// 返回格式数据字典 // 返回格式数据字典
......
...@@ -345,11 +345,11 @@ export default { ...@@ -345,11 +345,11 @@ export default {
/** 刷新缓存 */ /** 刷新缓存 */
handleDictRefresh () { handleDictRefresh () {
refreshDict().then(response => { refreshDict().then(response => {
if (response.success) { if (response.success) {
this.$message.success('刷新缓存成功') this.$message.success('刷新缓存成功')
} else { } else {
this.$message.error('刷新缓存失败') this.$message.error('刷新缓存失败')
} }
}) })
}, },
/** 删除按钮操作 */ /** 删除按钮操作 */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment