# 常用工具类

# 工具组件

组件名 版本 描述
Jackson 2.9.6 Json解析
hutool-all 5.5.7 Hutool工具包
jjwt 0.9.0 Token生成
cxf 3.2.6 WebService框架
poi 4.1.2 Excel处理
Apache CommonUtils - commons-lang3/common-math3

# 工具类列表

名称 作用
SpringContextUtils 对Spring容器进行各种上下文操作
ThreadLocalManager 通过在ThreadLocal存储map信息,实现维护多个信息,="col">在多线程或异步处理中需要在主线程中手动传递给子线程
DesensitizationUtil 数据脱敏工具类
JwtUtil JWT(JSON Web Token)工具类
ExcelUtils excel导入导出工具类,支持xls与xlsx格式文件导入导出
WebServiceUtil webservice客户端工具,集成了apache cxf框架
HttpUtil http请求工具类,集成了apache httpclient
IPUtils Ip地址工具类
UUIDUtils UUID工具类
MD5Util MD5工具类
CacheTenantUtil与CacheUtil 缓存工具类
RedisTenantUtil与RedisUtil Redis工具类
ExportPdfUtils 导出pdf工具类
AccountUtil 登录账号工具类

# spring上下文工具类-SpringContextUtils

# getBean

/**
 * 根据Bean名称获取Bean对象
 *
 * @param name Bean名称
 * @return 对应名称的Bean对象
 */
SpringContextUtils.getBean(String name) ;

/**
 * 根据Bean的类型获取对应的Bean
 *
 * @param requiredType Bean类型
 * @return 对应类型的Bean对象
 */
SpringContextUtils.getBean(Class<T> requiredType);
/**
 * 根据Bean名称获取指定类型的Bean对象
 *
 * @param name Bean名称
 * @param requiredType Bean类型(可为空)
 * @return 获取对应Bean名称的指定类型Bean对象
 */
SpringContextUtils.getBean(String name, Class<T> requiredType);

# containsBean

/**
 * 判断是否包含对应名称的Bean对象
 *
 * @param name Bean名称
 * @return 包含:返回true,否则返回false。
 */
SpringContextUtils.containsBean(String name);

# getType

/**
 * 获取对应Bean名称的类型
 *
 * @param name Bean名称
 * @return 返回对应的Bean类型
 */
SpringContextUtils.getType(String name);

# ThreadLocal上下文工具类-ThreadLocalManager

# getAll

/**
     * @return 
     */
    ThreadLocalManager.getAll();

# put

    /**
     * 设置一个值到ThreadLocal
     *
     * @param key   键
     * @param value 值
     */
    ThreadLocalManager.put(String key, Object value);

    /**
     * 设置一个值到ThreadLocal
     *
     * @param map map
     * @return 被放入的值
     */
    ThreadLocalManager.put(Map<String, Object> map);

# remove

   /**
     * 删除参数对应的值
     *
     * @param key
     */
    ThreadLocalManager.remove(String key);

# clear

    /**
     * 清空ThreadLocal
     *
     */
    ThreadLocalManager.clear();

# get

    /**
     *
     * @param key   键
     * @return      值
     */
    ThreadLocalManager.get(String key);

    /**
     * 从ThreadLocal中获取值
     * @param key   键
     * @param t     值泛型
     * @param <T>   n 值, 不存在则返回null, 如果类型与泛型不一致, 可能抛出{@link ClassCastException}
     * @return
     */
    ThreadLocalManager.get(String key, Class<T> t);

# getAndRemove

    /**
     * 获取一个值后然后删除掉
     * @param key
     * @return
     */
    ThreadLocalManager.getAndRemove(String key);
}

# 数据脱敏工具类-DesensitizationUtil

# desensitization

    /**
     * 脱敏方法
     * 保留前几位,后几位,中间的替换成*号
     *  手机号 desensitization("13545678910",3,4) return 135****8910
     *  身份证号 desensitization("10522198707294510",6,4) return 105221********4510
     *
     * @param value 原值
     * @param left  左边保留的位数,如果为负数,重置为0
     * @param right 右边保留的位数,如果为负数,重置为0
     * @return
     */
    DesensitizationUtil.desensitization(String value, int left, int right); 

# email

    /**
     * 邮箱地址脱敏,对@之前的内容进行脱敏
     * email("12345678@163.com",2,2) return12***78@163.com>
     *
     * @param email
     * @return
     */
    DesensitizationUtil.email(String email, int left, int right); 

# jwt工具类-JwtUtil

# generate

    /**
     * 生成token
     *
     * @param claims
     * @return
     */
    JwtUtil.generate(Map<String, Object> claims);

    /**
     * 生成token
     *
     * @param claims
     * @param expireDate
     * @return
     */
    JwtUtil.generate(Map<String, Object> claims, Date expireDate);

    /**
     * 生成token
     *
     * @param header     传入头部信息map
     * @param claims     要传送消息map
     * @param expireDate 过期时间
     * @return
     */
    JwtUtil.generate(Map<String, Object> header, Map<String, Object> claims, Date expireDate);

# getClaim

    /**
     * 解密jwt
     *
     * @param jwt
     * @return
     * @throws Exception
     */
    JwtUtil.getClaim(String jwt)

# isSigned

    /**
     * 校验是不是jwt签名
     *
     * @param token
     * @return
     */
    JwtUtil.isSigned(String token)

# verify

    /**
     * 校验签名是否正确
     *
     * @param token
     * @return
     */
    JwtUtil.verify(String token)

# getHeader

    /**
     * 获取头部信息map
     * 使用方法 : getHeader(token).get("alg");
     *
     * @param token
     * @return
     */
    JwtUtil.getHeader(String token)

# getIssuedAt

    /**
     * 获取jwt发布时间
     */
    JwtUtil.getIssuedAt(String token) 

# getExpiration

    /**
 * 获取jwt失效时间
 */
    JwtUtil.getExpiration(String token)

# isExpired

    /**
     * 验证token是否失效
     *
     * @param token
     * @return true:过期   false:没过期
     */
    JwtUtil.isExpired(String token)

# excel导入导出工具类-ExcelUtils

# export

/**
 * 导出excel到指定目录文件,支持xls或xlsx
 *
 * @param destFilePath 目标文件路径,如 E:/test.xls
 * @param data	       待导出的数据集合,集合中元素类型可以为对象、List<Object>或Map<String,Object>,每个元素代表一行数据,data为多行数据
 * @return
 */
public static void export(String destFilePath, List<?> data) throws IOException;

/**
 * 导出excel到指定目录文件,支持xls或xlsx
 *
 * @param destFilePath 目标文件路径,如 E:/test.xls
 * @param sheetName	   sheet名称,默认为sheet1
 * @param data	       待导出的数据集合,集合中元素类型可以为对象、List<Object>或Map<String,Object>,每个元素代表一行数据,data为多行数据
 * @return
 */
public static void export(String destFilePath, String sheetName, List<?> data) throws IOException;

/**
 * 导出excel到指定目录文件,支持xls或xlsx
 *
 * @param destFilePath 目标文件路径,如 E:/test.xls
 * @param data	       待导出的数据集合,集合中元素类型可以为对象、List<Object>或Map<String,Object>,每个元素代表一行数据,data为多行数据
 * @param aliasMap     可修改导出的excel的标题别名,key为待导出数据的字段名,value为对应标题别名
 *                     注意:仅在集合的元素类型为对象或Map<String,Object>时生效
 * @return
 */
public static void export(String destFilePath, List<?> data, Map<String,String> aliasMap) throws IOException;

/**
 * 导出excel到指定目录文件,支持xls或xlsx
 *
 * @param destFilePath 目标文件路径,如 E:/test.xls
 * @param sheetName	   sheet名称,默认为sheet1
 * @param data	       待导出的数据集合,集合中元素类型可以为对象、List<Object>或Map<String,Object>,每个元素代表一行数据,data为多行数据
 * @param aliasMap     可修改导出的excel的标题别名,key为待导出数据的字段名,value为对应标题别名
 *                     注意:仅在集合的元素类型为对象或Map<String,Object>时生效
 * @return
 */
public static void export(String destFilePath, String sheetName, List<?> data, Map<String,String> aliasMap) throws IOException;

# exportXls

/**
 * excel导出-写出到客户端下载(写出到Servlet),导出为xls格式
 *
 * @param response     HttpServletResponse
 * @param fileName    文件名,不带文件后缀,如 员工信息表
 * @param data        待导出的数据集合,集合中元素类型可以为对象、List<Object>或Map<String,Object>,每个元素代表一行数据,data为多行数据
 */
public static void exportXls(HttpServletResponse response, String fileName, List<?> data) throws IOException;


/**
 * excel导出-写出到客户端下载(写出到Servlet),导出为xls格式
 *
 * @param response     HttpServletResponse
 * @param fileName    文件名,不带文件后缀,如 员工信息表
 * @param data        待导出的数据集合,集合中元素类型可以为对象、List<Object>或Map<String,Object>,每个元素代表一行数据,data为多行数据
 * @param aliasMap    可修改导出的excel的标题别名,key为待导出数据的字段名,value为对应标题别名
 *                    注意:仅在集合的元素类型为对象或Map<String,Object>时生效
 */
public static void exportXls(HttpServletResponse response, String fileName, List<?> data, Map<String,String> aliasMap) throws IOException;

# exportXlsx

/**
 * excel导出-写出到客户端下载(写出到Servlet),导出为xlsx格式
 *
 * @param response     HttpServletResponse
 * @param fileName    文件名,不带文件后缀,如 员工信息表
 * @param data        待导出的数据集合,集合中元素类型可以为对象、List<Object>或Map<String,Object>,每个元素代表一行数据,data为多行数据
 */
public static void exportXlsx(HttpServletResponse response, String fileName, List<?> data) throws IOException;

/**
 * excel导出-写出到客户端下载(写出到Servlet),导出为xlsx格式
 *
 * @param response     HttpServletResponse
 * @param fileName    文件名,不带文件后缀,如 员工信息表
 * @param data        待导出的数据集合,集合中元素类型可以为对象、List<Object>或Map<String,Object>,每个元素代表一行数据,data为多行数据
 * @param aliasMap    可修改导出的excel的标题别名,key为待导出数据的字段名,value为对应标题别名
 *                    注意:仅在集合的元素类型为对象或Map<String,Object>时生效
 */
public static void exportXlsx(HttpServletResponse response, String fileName, List<?> data, Map<String,String> aliasMap) throws IOException;

# getData

/**
 * excel导入,默认导入所有sheet中的数据
 * 注意每个sheet中的数据都要与columNames保持对应
 * 否则慎用此方法,推荐使用getData(MultipartFile file, int sheetIndex, String[] columNames)
 *
 * @param file       excel的MultipartFile对象
 * @param columNames 列对应的字段名
 * @return 返回数据集合
 */
public static List<Map<String, Object>> getData(MultipartFile file, String[] columNames) throws IOException;


/**
 * excel导入
 *
 * @param file       excel的MultipartFile对象
 * @param sheetIndex sheet的编号,0表示第一个Sheet, -1表示全部Sheet
 * @param columNames 列对应的字段名
 * @return 返回数据集合
 */
public static List<Map<String, Object>> getData(MultipartFile file, int sheetIndex, String[] columNames) throws IOException;


/**
 * excel导入,默认导入所有sheet中的数据
 * 注意每个sheet中的数据都要与columNames保持对应
 * 否则慎用此方法,推荐使用getData(String path, int sheetIndex, String[] columNames)
 *
 * @param path       excel文件绝对路径
 * @param columNames 列对应的字段名
 * @return 返回数据集合
 */
public static List<Map<String, Object>> getData(String path, String[] columNames) throws IOException;


/**
 * excel导入
 *
 * @param path       excel文件绝对路径
 * @param sheetIndex sheet的编号,0表示第一个Sheet, -1表示全部Sheet
 * @param columNames 列对应的字段名
 * @return 返回数据集合
 */
public static List<Map<String, Object>> getData(String path, int sheetIndex, String[] columNames) throws IOException;


/**
 * excel导入,默认导入所有sheet中的数据
 * 注意每个sheet中的数据都要与columNames保持对应
 * 否则慎用此方法,推荐使用getData(File file, int sheetIndex, String[] columNames)
 *
 * @param file       excel的File对象
 * @param columNames 列对应的字段名
 * @return 返回数据集合
 */
public static List<Map<String, Object>> getData(File file, String[] columNames) throws IOException;


/**
 * excel导入
 *
 * @param file       excel的File对象
 * @param sheetIndex sheet的编号,0表示第一个Sheet, -1表示全部Sheet
 * @param columNames 列对应的字段名
 * @return 返回数据集合
 */
public static List<Map<String, Object>> getData(File file, int sheetIndex, String[] columNames) throws IOException;

# webservice客户端工具类-WebServiceUtil

# 默认超时时间

/**
 * 默认服务器连接超时时间,单位ms
 */
private static final long DEFAULT_CONNECTION_TIMEOUT = 30000;

/**
 * 默认服务器响应超时时间,单位ms
 */
private static final long DEFAULT_RECEIVE_TIMEOUT = 180000;

如果需要自定义超时时间,可调用getClient的重载方法

# getClient

/**
 * 构建客户端
 * 
 * @param url 服务端请求的地址
 * @return    客户端
 */
public static Client getClient(String url);

/**
 * 构建客户端
 *
 * @param url               服务端请求的地址
 * @param connectionTimeout 服务器连接超时时间
 * @param receiveTimeout    服务器响应超时时间
 * @param inInterceptors    in拦截器列表,此处in及out方向是以client的角度来看
 * @param outInterceptors   out拦截器列表
 * @return                  客户端
 */
public static Client getClient(
        String url,
        long connectionTimeout,
        long receiveTimeout,
        List<Interceptor<? extends Message>> inInterceptors,
        List<Interceptor<? extends Message>> outInterceptors);

# send

/**
 * 发送webservice请求
 *
 * @param url    请求URL
 * @param method 请求方法
 * @param params 请求参数
 * @return       响应结果
 */
public static String send(String url, String method, Object... params);

# sendByClient

/**
 * 发送webservice请求
 *
 * @param client  客户端
 * @param method  请求方法
 * @param params  请求参数
 * @return        响应结果
 */
public static String sendByClient(Client client, String method, Object... params);

# sendByQname

/**
 * 通过Qname的方式发送webservice请求
 * 主要针对服务端的SEI(webservice终端接口)和SIB(webservice接口实现bean)不在同一个包内的情况
 *
 * @param url     请求URL
 * @param method  请求方法
 * @param params  请求参数
 * @return        响应结果
 */
public static String sendByQname(String url, String method, Object... params);

# sendByClientQname

/**
 * 通过Qname的方式发送webservice请求
 * 主要针对服务端的SEI(webservice终端接口)和SIB(webservice接口实现bean)不在同一个包内的情况
 *
 * @param client  客户端
 * @param method  请求方法
 * @param params  请求参数
 * @return        响应结果
 */
public static String sendByClientQname(Client client, String method, Object... params);

# getOperateQName

/**
 * 针对服务端的SEI(webservice终端接口)和SIB(webservice接口实现bean)不在同一个包内的情况
 * 需要使用此方法先查找操作对应的Qname,再通过Qname执行对应操作
 *
 * @param client 客户端
 * @param method 方法名
 * @return QName
 */
public static QName getOperateQName(Client client, String method);

# http请求工具类-HttpUtil

# 默认超时时间

/**默认的客户端从服务器读取数据的超时时间,单位ms*/
private static final int DEFAULT_SOCKET_TIMEOUT = 60000;

/**默认的客户端和服务器建立连接的超时时间,单位ms*/
private static final int DEFAULT_CONNECT_TIMEOUT = 10000;

/**默认的从连接池获取连接的超时时间,单位ms*/
private static final int DEFAULT_CONNECTION_REQUEST_TIMEOUT = 10000;

如果需要自定义超时时间,可调用buildRequestConfig方法

# buildRequestConfig

/**
 * 构建RequestConfig,在自定义超时时间时使用
 *
 * @param socketTimeout            客户端从服务器读取数据的超时时间
 * @param connectTimeout           客户端和服务器建立连接的超时时间
 * @param connectionRequestTimeout 从连接池获取连接的超时时间
 * @return                         RequestConfig
 */
public static RequestConfig buildRequestConfig(int socketTimeout, int connectTimeout, int connectionRequestTimeout);

# get

/**
 * get请求
 *
 * @param url url(可以不带参数,也可以带参数如ip:port/demo?name=张三&age=20 或者是 ip:port/demo/{张三}/{20})
 * @return    响应结果
 */
public static String get(String url);

/**
 * get请求
 *
 * @param url    url(不带参数)
 * @param params 参数
 * @return       响应结果
 */
public static String get(String url, Map<String, String> params);

/**
 * get请求
 *
 * @param url	  url(不带参数)
 * @param headers header键值对
 * @param params  参数
 * @return        响应结果
 */
public static String get(String url, Map<String, String> headers, Map<String, String> params);

/**
 * get请求
 *
 * @param url	        url(不带参数)
 * @param headers       header键值对
 * @param params        参数
 * @param requestConfig 请求配置信息,可配置超时时间
 * @return              响应结果
 */
public static String get(String url, Map<String, String> headers, Map<String, String> params, RequestConfig requestConfig);

# postForm

/**
 * post请求-form提交参数
 *
 * @param url	   url
 * @param params   参数
 * @return
 */
public static String postForm(String url, Map<String, String> params);

/**
 * post请求-form提交参数
 *
 * @param url	   url
 * @param headers  header键值对
 * @param params   参数
 * @return
 */
public static String postForm(String url, Map<String, String> headers, Map<String, String> params);

/**
 * post请求-form提交参数
 *
 * @param url	        url
 * @param headers       header键值对
 * @param params        参数
 * @param requestConfig 请求配置信息,可配置超时时间
 * @return
 */
public static String postForm(String url, Map<String, String> headers, Map<String, String> params, RequestConfig requestConfig);

# postJson

/**
 * post请求-json提交参数
 *
 * @param url	url
 * @param json  参数
 * @return
 */
public static String postJson(String url, String json);

/**
 * post请求-json提交参数
 *
 * @param url	   url
 * @param headers  header键值对
 * @param json     参数
 * @return
 */
public static String postJson(String url, Map<String, String> headers, String json);

/**
 * post请求-json提交参数
 *
 * @param url	        url
 * @param headers       header键值对
 * @param json          参数
 * @param requestConfig 请求配置信息,可配置超时时间
 * @return
 */
public static String postJson(String url, Map<String, String> headers, String json, RequestConfig requestConfig);

# postXml

/**
 * post请求-xml提交参数
 *
 * @param url url
 * @param xml 参数
 * @return
 */
public static String postXml(String url, String xml);

/**
 * post请求-xml提交参数
 *
 * @param url	   url
 * @param headers  header键值对
 * @param xml      参数
 * @return
 */
public static String postXml(String url, Map<String, String> headers, String xml);

/**
 * post请求-xml提交参数
 *
 * @param url	        url
 * @param headers       header键值对
 * @param xml           参数
 * @param requestConfig 请求配置信息,可配置超时时间
 * @return
 */
public static String postXml(String url, Map<String, String> headers, String xml, RequestConfig requestConfig);

# putForm

/**
 * put请求-form提交参数
 *
 * @param url	   url
 * @param params   参数
 * @return
 */
public static String putForm(String url, Map<String, String> params);

/**
 * put请求-form提交参数
 *
 * @param url	   url
 * @param headers  header键值对
 * @param params   参数
 * @return
 */
public static String putForm(String url, Map<String, String> headers, Map<String, String> params);

/**
 * put请求-form提交参数
 *
 * @param url	        url
 * @param headers       header键值对
 * @param params        参数
 * @param requestConfig 请求配置信息,可配置超时时间
 * @return
 */
public static String putForm(String url, Map<String, String> headers, Map<String, String> params, RequestConfig requestConfig);

# putJson

/**
 * put请求-json提交参数
 *
 * @param url	url
 * @param json  参数
 * @return
 */
public static String putJson(String url, String json);

/**
 * put请求-json提交参数
 *
 * @param url	   url
 * @param headers  header键值对
 * @param json     参数
 * @return
 */
public static String putJson(String url, Map<String, String> headers, String json);

/**
 * put请求-json提交参数
 *
 * @param url	        url
 * @param headers       header键值对
 * @param json          参数
 * @param requestConfig 请求配置信息,可配置超时时间
 * @return
 */
public static String putJson(String url, Map<String, String> headers, String json, RequestConfig requestConfig);

# putXml

/**
 * put请求-xml提交参数
 *
 * @param url url
 * @param xml 参数
 * @return
 */
public static String putXml(String url, String xml);

/**
 * put请求-xml提交参数
 *
 * @param url	   url
 * @param headers  header键值对
 * @param xml      参数
 * @return
 */
public static String putXml(String url, Map<String, String> headers, String xml);

/**
 * put请求-xml提交参数
 *
 * @param url	        url
 * @param headers       header键值对
 * @param xml           参数
 * @param requestConfig 请求配置信息,可配置超时时间
 * @return
 */
public static String putXml(String url, Map<String, String> headers, String xml, RequestConfig requestConfig);

# delete

/**
 * delete请求
 *
 * @param url url(可以不带参数,也可以带参数如ip:port/demo?name=张三&age=20 或者是 ip:port/demo/{张三}/{20})
 * @return    响应结果
 */
public static String delete(String url);

/**
 * delete请求
 *
 * @param url    url(不带参数)
 * @param params 参数
 * @return       响应结果
 */
public static String delete(String url, Map<String, String> params);

/**
 * delete请求
 *
 * @param url	  url(不带参数)
 * @param headers header键值对
 * @param params  参数
 * @return        响应结果
 */
public static String delete(String url, Map<String, String> headers, Map<String, String> params);

/**
 * delete请求
 *
 * @param url	        url(不带参数)
 * @param headers       header键值对
 * @param params        参数
 * @param requestConfig 请求配置信息,可配置超时时间
 * @return              响应结果
 */
public static String delete(String url, Map<String, String> headers, Map<String, String> params, RequestConfig requestConfig);

# http工具类使用注意事项

1.header传递的数据含有中文时,为防止乱码,建议放入数据前将数据编码,取出数据后将数据解码。

例如放入header时

headers.put("author", URLEncoder.encode("张三", "UTF-8"));

从header取出数据后

URLDecoder.decode(request.getHeader("author"), "UTF-8")

2.springboot环境下,服务端若想接收以form表单形式发送过来的putdelete请求的参数,需要添加一个过滤器FormContentFilter或其子类OrderedFormContentFilter,否则无法接收到参数。

@Bean
public OrderedFormContentFilter orderedFormContentFilter() {
	return new OrderedFormContentFilter();
}

# Ip地址工具类-IPUtils

# ipExistsInRange

    /**
 * 验证IP是否属于某个IP段
 * @param ip        所验证的IP号码
 * @param ipSection IP段(以'-'分隔)
 * @return
 */
public static boolean ipExistsInRange(String ip, String ipSection)

# getIpAddr

    /**
 * 获取IP地址
 * <p>
 * 使用Nginx等反向代理软件, 则不能通过request.getRemoteAddr()获取IP地址
 * 如果使用了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP地址,X-Forwarded-For中第一个非unknown的有效IP字符串,则为真实IP地址
 */
public static String getIpAddr(HttpServletRequest request)

# getClientIp

    /**
 * 获取客户端本地ip,需要客户端手动获取后放到header中
 * @param request
 * @return
 */
public static String getClientIp(HttpServletRequest request)

# getClientMAC

/**
 * 获取客户端本地Mac地址,需要客户端手动获取后放到header中
 * @param request
 * @return
 */
public static String getClientMAC(HttpServletRequest request)

# UUID工具类-UUIDUtils

# getUUID

    /***
 * 生成去除"-"的uuid主键
 * @return
 */
public static String getUUID()

# MD5工具类-MD5Util

# getUUID

/**
 *  md5加密
 * @param origin        要加密的原文
 * @param charsetname   编码
 * @return
 */
public static String MD5Encode(String origin, String charsetname)

# 导出pdf工具类

# exportPDF

   /**
     * 导出pdf工具方法
     *
     * @param name          导出文件名称
     * @param list          导出的数据
     * @param invoker       导出的类实例
     * @param expInfoMethod 导出文件的方法
     * @param response      HttpServletResponse
     * @param <T>           泛型方法声明
     */
    public static <T> void exportPDF(String name, List<T> list, Object invoker, Method expInfoMethod, HttpServletResponse response)

# 调用示例:


        //导出pdf文件
        try {
            Object invoker = this.getClass().newInstance();
            Method expInfoMethod = this.getClass().getMethod("addEachOpenApiInfo", OpenapiInfo.class, Document.class, Font.class, Font.class);
            ExportPdfUtils.exportPDF("接口信息列表.pdf", openapiInfoList, invoker, expInfoMethod, response);
        } catch (NoSuchMethodException | IllegalAccessException | InstantiationException e) {
            e.printStackTrace();
            log.error(ExceptionUtils.getMessage(e));
        }

# Excel自定义导入工具类-HosExcelUtil

# getDataMap

    /**
 * 获取数据,返回 Map格式类型
 * @param sheetManagement --SheetManager对象,sheet配置信息,自定义sheet的SheetExecute中获取
 * @param wb--workbook对象
 * @return 从sheet中读取的数据
 */
public static List<Map<String,Object>> getDataMap(SheetManagement sheetManagement, Workbook wb)

# 二维码工具-QRCodeUtil

# CreatQrImage

生成自定义大小中间没有logo的二维码图片,如下图

QRwithoutLogo.png

 /**
 * 生成自定义大小中间没有logo的二维码图片
 */
public  static File CreatQrImage(String content,String format,String outFileUri,int ...size) throws IOException, WriterException{
        return CreatQrImage(content,format,outFileUri,"",size);
        }

# CreatQrImage

生成默认大小中间有logo的二维码图片,如下图

QRwithLogo.png

/**
 * 生成默认大小中间有logo的二维码图片
 */
public  static File CreatQrImage(String content,String format,String outFileUri,String logoUri) throws IOException, WriterException{
        return CreatQrImage(content,format,outFileUri,logoUri,new int[]{});
        }

# CreatQrImage

生成默认大小中间没有logo的二维码图片,如下图

QRwithoutLogo.png

 /**
 * 生成默认大小中间没有logo的二维码图片
 */
public  static File CreatQrImage(String content,String format,String outFileUri) throws IOException, WriterException{
        return CreatQrImage(content,format,outFileUri,"",new int[]{});
        }

# CreatQrImage

生成自定义大小中间有logo的二维码图片,如下图

QRwithLogo.png

 /**
 * 创建我们的二维码图片
 * @param content            二维码内容
 * @param format             生成二维码的格式
 * @param outFileUri         二维码的生成地址
 * @param logoUri            二维码中间的logo
 * @param size               用于设定图片大小(可变参数,宽,高)
 * @throws IOException       抛出io异常
 * @throws WriterException   抛出书写异常
 */
public  static File CreatQrImage(String content,String format,String outFileUri,String logoUri, int ...size);

# parseQRImg

解析二维码中内容

  /**
 * 解析二维码中的内容
 * @param filePath
 * @return
 * @throws IOException
 * @throws NotFoundException
 */
public static String parseQRImg(String filePath) throws IOException,NotFoundException

# 登录账号工具类-AccountUtil

# getAccountId

/**
 * 获取登录用户账号id
 * @return
 */
public static String getAccountId();

# getAccountCode

 /**
 * 获取登录账号
 * @return
 */
public static String getAccountCode();

# getTenantId

 /**
 * 获取登录用户的租户Id
 **/
public static String getTenantId();

# getLoginUser

  /**
 * 获取当前登录用户
 **/
 public static HosUser getLoginUser();

# getToken

 /**
 * 获取token对象
 * @return
 */
public static HosTokenAuthenticationToken getToken();

# setAuthentication

/**
 * 设置认证信息
 * @return
 */
public static void setAuthentication(Authentication authentication);

# getAuthentication

/**
 * 获取认证信息
 * @return
 */
public static Authentication getAuthentication();

# getGlobalUniqueID

/**
 * 获取登录全局唯一变量id
 * @return
 */
public static String getGlobalUniqueID();