Commit 392806db authored by 黎博's avatar 黎博

新增风控mock接口

parent 4842e442
package cn.qg.holmes.config; package cn.qg.holmes.config;
import cn.qg.holmes.interceptor.RuleEngineInterceptor;
import cn.qg.holmes.interceptor.YeebaoInterceptor; import cn.qg.holmes.interceptor.YeebaoInterceptor;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
...@@ -17,8 +18,14 @@ public class InterceptorConfig implements WebMvcConfigurer { ...@@ -17,8 +18,14 @@ public class InterceptorConfig implements WebMvcConfigurer {
return new YeebaoInterceptor(); return new YeebaoInterceptor();
} }
@Bean
public RuleEngineInterceptor ruleEngineInterceptor() {
return new RuleEngineInterceptor();
}
@Override @Override
public void addInterceptors(InterceptorRegistry registry) { public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(yeebaoInterceptor()).addPathPatterns("/mock/tzt-api/**", "/mock/balance-board/**"); registry.addInterceptor(yeebaoInterceptor()).addPathPatterns("/mock/tzt-api/**", "/mock/balance-board/**");
registry.addInterceptor(ruleEngineInterceptor()).addPathPatterns("/mock/rule_engine/**");
} }
} }
...@@ -39,7 +39,7 @@ public class MockController { ...@@ -39,7 +39,7 @@ public class MockController {
IPage<Mock> page = new Page<>(pageNum, pageSize); IPage<Mock> page = new Page<>(pageNum, pageSize);
IPage<Mock> pageEntity; IPage<Mock> pageEntity;
if (module != null) { if (module != null) {
QueryWrapper queryWrapper = new QueryWrapper(); QueryWrapper<Mock> queryWrapper = new QueryWrapper();
queryWrapper.eq("module", module); queryWrapper.eq("module", module);
pageEntity = mockService.page(page, queryWrapper); pageEntity = mockService.page(page, queryWrapper);
} else { } else {
......
package cn.qg.holmes.interceptor;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class InterceptorUtils {
/**
* 修改返回响应
* @param response HttpServletResponse
* @param result 返回的json或字符串
*/
public static void constructResponse(HttpServletResponse response, String result) {
PrintWriter writer = null;
response.setCharacterEncoding("UTF-8");
// response.setContentType("application/json; charset=utf-8");
try {
writer = response.getWriter();
writer.print(result);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (writer != null) {
writer.close();
}
}
}
/**
* 修改返回响应
* @param response HttpServletResponse
* @param result 返回的json或字符串
* @param contentType content-type
*/
public static void constructResponse(HttpServletResponse response, String result, String contentType) {
PrintWriter writer = null;
response.setCharacterEncoding("UTF-8");
response.setContentType(contentType);
try {
writer = response.getWriter();
writer.print(result);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (writer != null) {
writer.close();
}
}
}
/**
* 将HttpServletRequest的parameterMap由Map<String, String[]>转换成Map<String, Object>
* @param parameterMap request.getParameterMap()
* @return
*/
public static Map<String, Object> convertParameterMap(Map<String, String[]> parameterMap) {
Map<String, Object> map = new HashMap<>();
for (Map.Entry<String, String[]> entry: parameterMap.entrySet()) {
String key = entry.getKey();
String value = entry.getValue()[0];
map.put(key, value);
}
return map;
}
/**
* 解析从数据库获取的响应,赋对应的值
* @param requestMap 请求Map
* @param responseMap 响应Map
* @return
*/
public static Map<String, Object> disposeResponseMap(Map<String, Object> requestMap, Map<String, Object> responseMap) {
for (Map.Entry<String, Object> entry: responseMap.entrySet()) {
if (entry.getValue() instanceof List) {
List<Map> list = (List) entry.getValue();
for (Map<String, Object> map: list) {
for (Map.Entry<String, Object> entry2: map.entrySet()) {
String value2 = entry2.getValue().toString();
if (value2.startsWith("$request")) {
entry2.setValue(requestMap.get(value2.split("\\.")[1]));
}
}
}
} else if (entry.getValue() instanceof String) {
String value = entry.getValue().toString();
if (value.startsWith("$request")) {
entry.setValue(requestMap.get(value.split("\\.")[1]));
}
if (value.equals("true")) {
entry.setValue(true);
}
if (value.equals("false")) {
entry.setValue(false);
}
}
}
return responseMap;
}
}
package cn.qg.holmes.interceptor;
import cn.qg.holmes.entity.mock.Mock;
import cn.qg.holmes.mapper.mock.MockMapper;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.lang.Nullable;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;
/**
* 风控相关接口拦截器
* @author libo
*/
@Slf4j
public class RuleEngineInterceptor implements HandlerInterceptor {
@Autowired
MockMapper mockMapper;
public Map<String, Object> convertParameterMap(Map<String, String[]> parameterMap) {
Map<String, Object> map = new HashMap<>();
for (Map.Entry<String, String[]> entry: parameterMap.entrySet()) {
String key = entry.getKey();
String value = entry.getValue()[0];
map.put(key, value);
}
return map;
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
String uri = request.getRequestURI().substring(5); // 去掉/mock
Map<String, String[]> parameterMap = request.getParameterMap();
Map<String, Object> requestMap = convertParameterMap(parameterMap);
QueryWrapper<Mock> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("url", uri);
Mock mock = mockMapper.selectOne(queryWrapper);
if (uri.equals("/rule_engine/middle_office/audit")) {
Map<String, Object> responseMap = handleRiskAudit(requestMap);
InterceptorUtils.constructResponse(response, JSON.toJSONString(responseMap), "application/json; charset=utf-8");
}
if (mock.getFlag() == 0) {
InterceptorUtils.constructResponse(response, mock.getFail(), "application/json; charset=utf-8");
} else if (mock.getFlag() == 1) {
InterceptorUtils.constructResponse(response, mock.getSuccess(), "application/json; charset=utf-8");
}
return true;
}
public Map<String, Object> handleRiskAudit(Map<String, Object> requestMap) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + 15);
Long openingDeadLine = calendar.getTimeInMillis();
Map<String, Object> bodyMap = new HashMap<>();
Map<String, Object> resultMap = new HashMap<>();
resultMap.put("code", 0);
resultMap.put("msg", "");
bodyMap.put("bizChannel", requestMap.get("bizChannel"));
bodyMap.put("uuid", requestMap.get("uuid"));
bodyMap.put("bizNo", requestMap.get("bizNo"));
bodyMap.put("sceneId", requestMap.get("sceneId"));
bodyMap.put("auditResult", true);
bodyMap.put("amount", 10000);
bodyMap.put("term", 12);
bodyMap.put("validity", 14);
bodyMap.put("deadLine", "4102415999000");
bodyMap.put("extData", null);
bodyMap.put("success", true);
if (requestMap.get("bizType").equals("8")) {
bodyMap.put("allowInstalment", 1);
bodyMap.put("allowInstalmentTerms", "3,6,9,12");
bodyMap.put("openingDeadLine", openingDeadLine);
}
resultMap.put("body", bodyMap);
return resultMap;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
@Nullable ModelAndView modelAndView) throws Exception {
log.info("本次请求返回响应:{}", response);
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
@Nullable Exception ex) throws Exception {
}
}
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