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 getRandom(int size, int num) { if (num > size) { num = size; } List al = new ArrayList<>(); List 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 getObjFromReq(Class clazz) { String s = JSON.toJSONString(getParameterMap()); return JSON.parseObject(StringEscapeUtils.unescapeHtml4(s), clazz); }*/ public static T getObjFromReq(Class 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 getObjFromReqBody(Class 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 ""; } }