package com.aiapp.common.utils;
import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.Random;
import java.util.concurrent.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.servlet.http.HttpServletRequest;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import org.apache.commons.lang3.StringUtils;
import com.alibaba.fastjson2.JSON;
import com.google.common.collect.Maps;
/**
* 自己写的工具服务类,超好用的哦
* @author Administrator
*/
public class MyUtils {
private static final ThreadFactory THREAD_FACTORY = new ThreadFactoryBuilder().setNameFormat("trans-pool-%d").build();
public static final ExecutorService POOL = new ThreadPoolExecutor(240, 1000, 60L, TimeUnit.SECONDS, new LinkedBlockingQueue<>(1024), THREAD_FACTORY, new ThreadPoolExecutor.AbortPolicy());
/**
* @Title: getRequestParamsMap
* @Description: 获取请求参数信息
* @param isPage 是否同时包含分页参数信息
* @return 请求参数与值
*/
public static Map<String, Object> getRequestParamsMap(boolean isPage, HttpServletRequest request) {
Map<String, Object> paramsMap = new HashMap<>(8);
Map<String, String[]> requestParamsMap = request.getParameterMap();
// 如果有请求参数
if (requestParamsMap != null && !requestParamsMap.isEmpty()) {
for (String key : requestParamsMap.keySet()) {
String[] value = requestParamsMap.get(key);
String paramValue = value[0];
paramValue = paramValue == null ? "" : paramValue.trim();
if (isMessyCode(paramValue)) {
paramValue = new String(paramValue.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);
}
// 判断是否需要加入分页所需参数信息
if (isPage) {
paramsMap.put(key, paramValue);
} else {
if (!"pageNum".equalsIgnoreCase(key) && !"pageSize".equalsIgnoreCase(key)) {
paramsMap.put(key, paramValue);
}
}
}
}
return paramsMap;
}
/**
* @Title: isMessyCode
* @Description: 判断乱码
* @Date: 2012-11-1
* @param strName 要判断的字符
* @return true, 乱码
*/
public static boolean isMessyCode(String strName) {
final String str = "\\s*|\t*|\r*|\n*";
final Pattern p = Pattern.compile(str);
Matcher m = p.matcher(strName);
String after = m.replaceAll("");
String temp = after.replaceAll("\\p{P}", "");
char[] ch = temp.trim().toCharArray();
float chLength = ch.length;
float count = 0;
for (char c : ch) {
if (!Character.isLetterOrDigit(c)) {
if (!MyUtils.isChinese(c)) {
count = count + 1;
System.out.print(c);
}
}
}
float result = count / chLength;
return (result > 0.2);
}
/***
* @Title: string2MD5
* @Description: MD5加码 生成32位md5码
* @Date 2017年3月8日_下午4:36:57
* @param inStr 要加密码的字符串
* @return 加密后的字符串
*/
public static String string2Md5(String inStr) {
byte[] md5Bytes = getMd5Bytes(inStr);
StringBuilder hexValue = new StringBuilder();
for (byte md5Byte : md5Bytes) {
int val = (md5Byte) & 0xff;
if (val < 16) {
hexValue.append("0");
}
hexValue.append(Integer.toHexString(val));
}
return hexValue.toString();
}
public static byte[] getMd5Bytes(String inStr){
MessageDigest md5;
try {
md5 = MessageDigest.getInstance("MD5");
} catch (Exception e) {
e.printStackTrace();
return new byte[0];
}
char[] charArray = inStr.toCharArray();
byte[] byteArray = new byte[charArray.length];
for (int i = 0; i < charArray.length; i++) {
byteArray[i] = (byte) charArray[i];
}
return md5.digest(byteArray);
}
/**
* @Title: getRequestParamsString
* @Description: 获取请求参数(不打印请求信息)
* @Date 2018年5月17日_上午2:59:23
* @param request 请求
* @return 请求参数
*/
public static String getRequestParamsString(HttpServletRequest request) throws RuntimeException {
if (!"post".equalsIgnoreCase(request.getMethod())) {
return JSON.toJSONString(getRequestParamsMap(true, request));
}
StringBuilder responseStrBuilder = new StringBuilder();
try (InputStream is = request.getInputStream(); BufferedReader streamReader = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8))) {
String inputStr;
while ((inputStr = streamReader.readLine()) != null) {
responseStrBuilder.append(inputStr);
}
} catch (Exception e) {
return JSON.toJSONString(getRequestParamsMap(true, request));
}
return responseStrBuilder.toString();
}
public static String getStringValue(Object object) {
if (object != null) {
String tempStr = object.toString();
if (StringUtils.isNotBlank(tempStr)) {
tempStr = tempStr.trim();
}
return tempStr;
}
return null;
}
public static String getStringValue(Map<?, ?> mp, String key) {
if (mp != null) {
Object obj = mp.get(key);
if (obj != null) {
String tempStr = obj.toString();
if (StringUtils.isNotBlank(tempStr)) {
tempStr = tempStr.trim();
}
return tempStr;
}
}
return null;
}
public static Long getLongValue(Map<?, ?> mp, String key) {
try {
if (mp != null) {
Object obj = mp.get(key);
if (obj != null) {
long value = 0L;
String tempStr = obj.toString();
if (StringUtils.isNotBlank(tempStr)) {
value = Long.parseLong(tempStr.trim());
}
return value;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return 0L;
}
public static Long getLongValue(Object object) {
try {
if (object != null) {
long value = 0L;
String tempStr = object.toString();
if (StringUtils.isNotBlank(tempStr)) {
value = Long.parseLong(tempStr.trim());
}
return value;
}
} catch (Exception e) {
e.printStackTrace();
}
return 0L;
}
public static boolean isBlank(Long value) {
return (value == null || value == 0L);
}
public static int getIntValue(Map<?, ?> mp, String key) {
if (mp != null) {
Object obj = mp.get(key);
if (obj != null) {
int value = 0;
String tempStr = obj.toString();
if (StringUtils.isNotBlank(tempStr)) {
value = Integer.parseInt(tempStr.trim());
}
return value;
}
}
return 0;
}
public static int getIntValue(Object object) {
if (object != null) {
String tempStr = object.toString();
if (StringUtils.isNotBlank(tempStr)) {
tempStr = tempStr.trim();
}
return Integer.parseInt(tempStr);
}
return 0;
}
/**
* @Description: 验证是否空或者0
* @Title: validate
* @Author ZouBin
* @Date 2020年5月9日
* @param value 整型参数
* @return true 空的
*/
public static boolean isBlank(Integer value) {
if (StringUtils.isEmpty(getStringValue(value))) {
return true;
}
return getIntValue(value) == 0;
}
public static boolean equals(Integer value1, Integer value2) {
if (value1 == null && value2 == null) {
return true;
}
if (value1 == null || value2 == null) {
return false;
}
return value1.compareTo(value2) == 0;
}
public static double getDoubleValue(Map<?, ?> mp, String key) {
if (mp != null) {
Object obj = mp.get(key);
if (obj != null) {
return getDoubleValue(obj);
}
}
return 0d;
}
public static double getDoubleValue(Object object) {
if (object != null) {
if (object instanceof String) {
String tempStr = object.toString();
if (StringUtils.isNotBlank(tempStr)) {
tempStr = tempStr.trim();
}
return Double.parseDouble(tempStr);
} else if (object instanceof Double) {
return (Double) object;
} else {
return Double.parseDouble(object.toString());
}
}
return 0d;
}
/**
* @Description: 验证是否空或者0
* @Title: isBlank
* @Author ZouBin
* @Date 2020年5月9日
* @param value 浮点参数
* @return true 空的
*/
public static boolean isBlank(Double value) {
if (value == null) {
return true;
} else {
if (StringUtils.isEmpty(getStringValue(value))) {
return true;
}
return getDoubleValue(value) == 0d;
}
}
public static Date getDateValue(Map<?, ?> mp, String key) {
return getDateValue(mp, key, null);
}
public static Date getDateValue(Map<?, ?> mp, String key, String fmt) {
Date date = null;
if (mp != null) {
Object obj = mp.get(key);
if (obj != null && StringUtils.isNotBlank(obj.toString())) {
try {
if (String.valueOf(obj).split(" ").length == 1) {
if (StringUtils.isEmpty(fmt)) {
fmt = "yyyy-MM-dd";
}
date = new SimpleDateFormat(fmt).parse(String.valueOf(obj));
} else if (String.valueOf(obj).split(" ").length == 2) {
if (StringUtils.isEmpty(fmt)) {
fmt = "yyyy-MM-dd HH:mm:ss";
}
date = new SimpleDateFormat(fmt).parse(String.valueOf(obj));
} else {
return null;
}
} catch (ParseException e) {
e.printStackTrace();
return null;
}
}
}
return date;
}
public static Date getTimestampValue(Object object) {
if (object != null) {
return (Date) object;
}
return null;
}
public static int getRandom() {
Random rand = new Random();
return rand.nextInt(32) + 40;
}
/**
* @Description: 计算分佣金额
* @Title: getPercentage
* @Author ZouBin
* @Date 2020年5月9日
* @param divideAgent 金额
* @param scale 比例
* @return 计算后的金额
*/
public static BigDecimal getPercentage(BigDecimal divideAgent, BigDecimal scale) {
BigDecimal xiaoshu = new BigDecimal(100);
scale = scale.divide(xiaoshu, RoundingMode.UP);
return divideAgent.multiply(scale);
}
/**
* @Description: bean2map
* @Title: convertBean
* @Author ZouBin
* @Date 2018年6月4日_上午3:49:32
* @param bean 实体对象
* @return 转换后的结果
*/
public static Map<String, Object> convertBean(Object bean) throws IntrospectionException, IllegalAccessException, InvocationTargetException {
Class<?> type = bean.getClass();
Map<String, Object> returnMap = Maps.newHashMap();
BeanInfo beanInfo = Introspector.getBeanInfo(type);
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
for (PropertyDescriptor descriptor : propertyDescriptors) {
String propertyName = descriptor.getName();
if (!"class".equals(propertyName)) {
Method readMethod = descriptor.getReadMethod();
Object result = readMethod.invoke(bean);
returnMap.put(propertyName, Objects.requireNonNullElse(result, ""));
}
}
return returnMap;
}
public static String getRandomCode(int length) {
// 加上一些字母,就可以生成pc站的验证码了
String sources = "0123456789";
Random rand = new Random();
StringBuilder flag = new StringBuilder();
for (int j = 0; j < length; j++) {
flag.append(sources.charAt(rand.nextInt(9)));
}
return flag.toString();
}
public static String getFileType(String fileExt) {
String fileType = "other";
if (!StringUtils.isNotBlank(fileExt)) {
return fileType;
}
String files = ".7z.aiff.asf.avi.csv.doc.docx.fla.gz.gzip.mid.mov.amr.mp3.mp4.mpc.mpeg.mpg.ods.odt.pdf.ppt.pptx.pxd.qt.ram.rar.rm.rmi.rmvb.rtf.sdc.sitd.swf.sxc.sxw.tar.tgz.tif.tiff.txt.vsd.wav.wma.wmv.xls.xlsx.zip";
String images = ".bmp.gif.jpeg.jpg.pngbmp.gif.jpeg.jpg.png";
String flash = ".swf.flv";
if (files.contains(fileExt)) {
fileType = "files";
} else if (images.contains(fileExt)) {
fileType = "images";
} else if (flash.contains(fileExt)) {
fileType = "flash";
}
return fileType;
}
public static String getAttachmentType(String fileName) {
if (!StringUtils.isNotBlank(fileName)) {
return null;
}
if (".mov.mp3.mp4".contains(fileName)) {
return "mp4";
} else if (".bmp.gif.jpeg.jpg.png".contains(fileName)) {
return "images";
}
return null;
}
/**
* @Description: 判断字符串是否是中文
* @Title: isChinese
* @Author ZouBin
* @Date 2018年6月30日_下午11:14:27
* @param param 字符串
* @return true 是
*/
public static boolean isChinese(String param) {
if (StringUtils.isBlank(param)) {
return false;
}
char[] ch = param.trim().toCharArray();
if (ch.length >= 2 && (isChinese(ch[0]) || isChinese(ch[1]))) {
return true;
}
return ch.length >= 1 && isChinese(ch[0]);
}
/**
* @Title: isChinese
* @Description: 判断中文
* @param c 字符
* @return true 是
*/
public static boolean isChinese(char c) {
Character.UnicodeBlock ub = Character.UnicodeBlock.of(c);
return (ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS || ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A || ub == Character.UnicodeBlock.GENERAL_PUNCTUATION || ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION || ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS);
}
/**
* @Description: 判断字符串是否是英文
* @Title: isEnglish
* @Author ZouBin
* @Date 2018年7月1日_上午12:42:59
* @param str 字符串
* @return true 是
*/
public static boolean isEnglish(String str) {
if (StringUtils.isNotBlank(str)) {
final String rex = "^[a-zA-Z]*";
Pattern pattern = Pattern.compile(rex);
return pattern.matcher(str.substring(0, 2)).matches();
}
return false;
}
/**
* @Description: 判断是否为整数
* @Title: isInteger
* @Author ZouBin
* @Date 2018年7月1日_上午12:42:59
* @param str 传入的字符串
* @return 是整数返回true, 否则返回false
*/
public static boolean isInteger(String str) {
if (StringUtils.isNotBlank(str)) {
final String reg = "^[-\\+]?[\\d]*$";
Pattern pattern = Pattern.compile(reg);
return pattern.matcher(str.substring(0, 2)).matches();
}
return false;
}
}
分享一个非常实用的工具类(判断map里面的值是否存在,不存在这返回null)
最新推荐文章于 2024-05-14 09:16:45 发布