package com.yqzx.common.util;
|
// @formatter:off
|
|
import cn.hutool.core.convert.Convert;
|
import cn.hutool.core.io.IoUtil;
|
import cn.hutool.core.util.RandomUtil;
|
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.crypto.SecureUtil;
|
import cn.jiguang.common.utils.StringUtils;
|
import com.alibaba.fastjson.JSON;
|
import com.yqzx.common.constants.SystemConstants;
|
import org.apache.commons.text.StringEscapeUtils;
|
import org.springframework.web.context.request.RequestContextHolder;
|
import org.springframework.web.context.request.ServletRequestAttributes;
|
|
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletResponse;
|
import java.io.IOException;
|
import java.lang.reflect.Field;
|
import java.nio.charset.Charset;
|
import java.text.NumberFormat;
|
import java.util.*;
|
import java.util.regex.Matcher;
|
import java.util.regex.Pattern;
|
|
/**
|
* .-~~~~~~~~~-._ _.-~~~~~~~~~-.
|
* __.' @Author ~. .~ 代码无Bug `.__
|
* .'// liu.q \./ (秘籍) \\`.
|
* .'// [916000612@qq.com] | 欲练神功 引刀自宫 \\`.
|
* .'// .-~"""""""~~~~-._ | _,-~~~~"""""""~-. \\`.
|
* .'//.-" 2019-04-09 `-. | .-' 10:48 "-.\\`.
|
* .'//______.============-.. \ | / ..-============.______\\`.
|
*.'______________________________\|/______________________________`.
|
*
|
* @Description :
|
*/
|
// @formatter:on
|
public class CommonUtil {
|
|
/**
|
* @Author : liuq
|
* @Date : Create in 2018/7/1 上午1:20
|
* @Description : 驼峰转下划线
|
*/
|
public static String camel2Underline(String line) {
|
if (line == null || "".equals(line)) {
|
return "";
|
}
|
line = String.valueOf(line.charAt(0)).toUpperCase().concat(line.substring(1));
|
StringBuffer sb = new StringBuffer(512);
|
Pattern pattern = Pattern.compile("[A-Z]([a-z\\d]+)?");
|
Matcher matcher = pattern.matcher(line);
|
while (matcher.find()) {
|
String word = matcher.group();
|
sb.append(word.toUpperCase());
|
sb.append(matcher.end() == line.length() ? "" : "_");
|
}
|
return sb.toString();
|
}
|
|
/*
|
* @Author : liu.q [916000612@qq.com]
|
*
|
* @Date : 2019-04-29 16:45
|
*
|
* @Description : 下划线转驼峰
|
*/
|
public static String Underline2camel(String para) {
|
StringBuilder result = new StringBuilder();
|
String a[] = para.split("_");
|
for (String s : a) {
|
if (!para.contains("_")) {
|
result.append(s);
|
continue;
|
}
|
if (result.length() == 0) {
|
result.append(s.toLowerCase());
|
} else {
|
result.append(s.substring(0, 1).toUpperCase());
|
result.append(s.substring(1).toLowerCase());
|
}
|
}
|
return result.toString();
|
}
|
|
/**
|
* @Author : liu.q
|
* @Date : 2019-03-01 09:49
|
* @Description : 获取request
|
*/
|
public static HttpServletRequest getRequest() {
|
ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
|
if(requestAttributes == null){
|
return null;
|
}
|
HttpServletRequest request = requestAttributes.getRequest();
|
return request;
|
}
|
|
/**
|
* @Author : liu.q
|
* @Date : 2019-03-01 09:49
|
* @Description : response
|
*/
|
public static HttpServletResponse getResponse() {
|
ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder
|
.getRequestAttributes();
|
HttpServletResponse response = requestAttributes.getResponse();
|
return response;
|
}
|
|
/**
|
* @Author : liu.q
|
* @Date : 2019-03-01 09:51
|
* @Description : 获取访问地址
|
*/
|
public static String getHost() {
|
HttpServletRequest request = getRequest();
|
String scheme = request.getHeader("X-Forwarded-Scheme");
|
if (scheme == null) {
|
scheme = request.getScheme();
|
}
|
String port = request.getHeader("X-Forwarded-port");
|
if (port == null) {
|
port = request.getServerPort() + "";
|
}
|
if ("443".equals(port) || "80".equals(port)) {
|
return scheme + "://" + request.getServerName();
|
}
|
return scheme + "://" + request.getServerName() + ":" + port;// +request.getRequestURI();
|
}
|
|
/**
|
* 获取请求参数
|
*
|
* @return
|
*/
|
public static Map getParameterMap() {
|
// 参数Map
|
Map properties = CommonUtil.getRequest().getParameterMap();
|
// 返回值Map
|
Map returnMap = new HashMap();
|
Iterator entries = properties.entrySet().iterator();
|
Map.Entry entry;
|
String name = "";
|
String value = "";
|
while (entries.hasNext()) {
|
entry = (Map.Entry) entries.next();
|
name = (String) entry.getKey();
|
Object valueObj = entry.getValue();
|
if (null == valueObj) {
|
continue;
|
} else if (valueObj instanceof String[]) {
|
String[] values = (String[]) valueObj;
|
for (int i = 0; i < values.length; i++) {
|
value = values[i] + ",";
|
}
|
value = value.substring(0, value.length() - 1);
|
} else {
|
value = valueObj.toString();
|
}
|
if ("".equals(value)) {
|
continue;
|
}
|
returnMap.put(name, value);
|
}
|
// 判断排序asc和desc
|
if (returnMap.containsKey("sortOrder") && returnMap.get("sortOrder") != null && returnMap.get("sortOrder") != "") {
|
if (!"DESC".equals(Convert.toStr(returnMap.get("sortOrder")).toUpperCase())
|
&& !"ASC".equals(Convert.toStr(returnMap.get("sortOrder")).toUpperCase())) {
|
returnMap.put("sortOrder", "");
|
}
|
}
|
return returnMap;
|
}
|
|
/*public static String getRequestBodyByReader(){
|
HttpServletRequest request = getRequest();
|
String tempLine;
|
String result = "";
|
try {
|
if(request != null) {
|
while ((tempLine = request.getReader().readLine()) != null) {
|
result += tempLine;
|
}
|
}
|
} catch (IOException e) {
|
|
return result;
|
} finally {
|
try {
|
if(request.getReader() != null) {
|
request.getReader().close();
|
}
|
} catch (IOException e) {
|
|
}
|
}
|
return result;
|
}*/
|
|
public static String getExportSign(String url, String timestamp) {
|
return Convert
|
.toStr(SecureUtil.md5(SecureUtil.md5(url + timestamp) + SystemConstants.EXPORT_SIGN_K).hashCode());
|
}
|
|
public static String getIpAddress() {
|
HttpServletRequest request = getRequest();
|
String Xip = request.getHeader("X-Real-IP");
|
String XFor = request.getHeader("X-Forwarded-For");
|
if (StrUtil.isNotEmpty(XFor) && !"unKnown".equalsIgnoreCase(XFor)) {
|
// 多次反向代理后会有多个ip值,第一个ip才是真实ip
|
int index = XFor.indexOf(",");
|
if (index != -1) {
|
return XFor.substring(0, index);
|
} else {
|
return XFor;
|
}
|
}
|
XFor = Xip;
|
if (StringUtils.isNotEmpty(XFor) && !"unKnown".equalsIgnoreCase(XFor)) {
|
return XFor;
|
}
|
if (StrUtil.isBlank(XFor) || "unknown".equalsIgnoreCase(XFor)) {
|
XFor = request.getHeader("Proxy-Client-IP");
|
}
|
if (StrUtil.isBlank(XFor) || "unknown".equalsIgnoreCase(XFor)) {
|
XFor = request.getHeader("WL-Proxy-Client-IP");
|
}
|
if (StrUtil.isBlank(XFor) || "unknown".equalsIgnoreCase(XFor)) {
|
XFor = request.getHeader("HTTP_CLIENT_IP");
|
}
|
if (StrUtil.isBlank(XFor) || "unknown".equalsIgnoreCase(XFor)) {
|
XFor = request.getHeader("HTTP_X_FORWARDED_FOR");
|
}
|
if (StrUtil.isBlank(XFor) || "unknown".equalsIgnoreCase(XFor)) {
|
XFor = request.getRemoteAddr();
|
}
|
return XFor;
|
}
|
|
/**
|
* 获取百分比
|
*
|
* @param numerator
|
* @param denominator
|
* @return
|
*/
|
public static String getPercentage(int numerator, int denominator) {
|
// 创建一个数值格式化对象
|
NumberFormat numberFormat = NumberFormat.getInstance();
|
// 设置精确到小数点后2位
|
numberFormat.setMaximumFractionDigits(2);
|
String result = numberFormat.format((float) numerator / (float) denominator * 100);
|
return result + "%";
|
}
|
|
/**
|
* 获取随机数
|
*
|
* @param size
|
* 随机数取值范围
|
* @param num
|
* 随机数个数
|
* @return
|
*/
|
public static List<Integer> getRandom(int size, int num) {
|
if (num > size) {
|
num = size;
|
}
|
List<Integer> al = new ArrayList<>();
|
List<Integer> result = new ArrayList<>();
|
for (int i = 0; i < size; i++) {
|
al.add(i);
|
}
|
for (int i = 0; i < num; i++) {
|
int m = (int) (RandomUtil.randomDouble() * al.size());
|
result.add(al.get(m));
|
al.remove(m);
|
}
|
return result;
|
}
|
|
/*public static <T> T getObjFromReq(Class<T> clazz) {
|
String s = JSON.toJSONString(getParameterMap());
|
return JSON.parseObject(StringEscapeUtils.unescapeHtml4(s), clazz);
|
}*/
|
|
public static <T> T getObjFromReq(Class<T> clazz) {
|
Map parameterMap = getParameterMap();
|
String s = JSON.toJSONString(parameterMap);
|
T t = JSON.parseObject(StringEscapeUtils.unescapeHtml4(s), clazz);
|
String sortName = String.valueOf(parameterMap.get("sortName"));
|
if (StringUtils.isNotEmpty(sortName) && !("null").equals(sortName)) {
|
try {
|
if (clazz != null) {
|
Field declaredField = clazz.getDeclaredField(sortName);
|
}
|
} catch (NoSuchFieldException e) {
|
e.printStackTrace();
|
// 传入排序字段 并不在该query类中
|
parameterMap.put("sortName", null);
|
}
|
}
|
return t;
|
}
|
|
public static <T> T getObjFromReqBody(Class<T> clazz) {
|
String body = StringEscapeUtils.unescapeHtml4(getRequestBody(CommonUtil.getRequest()));
|
return JSON.parseObject(body, clazz);
|
}
|
|
/**
|
* 获取request body值
|
* @param request
|
* @return
|
*/
|
public static String getRequestBody(HttpServletRequest request) {
|
try {
|
return IoUtil.read(request.getInputStream(), Charset.forName("UTF-8"));
|
} catch (IOException e) {
|
|
}
|
return "";
|
}
|
|
}
|