# 常用工具类

# 工具组件

组件名 版本 描述
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

# MD5Util

/**
 *  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

# 获取登录用户账号id

/**
 * 获取登录用户账号id
 * 对应账号表hos_user_account的id字段值 
 * @return
 */
public static String getAccountId();

# 获取登录名

 /**
 * 获取登录名 
 * 对应账号表hos_user_account的code字段值
 * @return
 */
public static String getAccountCode();

# 获取登录用户的租户Id

 /**
 * 获取登录用户的租户Id
 * 对应账号表hos_user_account的tenant_id字段值
 **/
public static String getTenantId();

# 获取当前登录用户对象

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

HosUser参数说明:

参数名称 参数说明 备注
accountCode 账号code
accountId 账号id
accountName 账号名称
phoneNumber 手机号
userName 账号名称
password 账号密码 为空
tenantId 租户id
activity 是否启用
locked 是否锁定
unlockDate 解锁时间
lastLoginDate 上次登录时间
lastUpdatePassword 上次更新密码时间
needRestPassword 是否需要修改密码
loginDate 登录时间
globalUniqueID 本次登录状态的全局唯一id
personId 唯一标识码
startDate 开始日期
endDate 结束日期
postOneVO 岗位对象
postId 开始日期
postName 结束日期
caInfo ca认证信息 记录登录时的CA认证信息

# 获取登录token对象

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

HosTokenAuthenticationToken参数说明:

参数名称 参数说明 备注
details 客户端信息 记录ip、mac、浏览器、操作系统、主机名称
authenticated true 是否认证成功
uniqueKey 本地登录的全局唯一id
credentials 登录信息记录 客户端信息、登录方式、登录传参信息
principal HosUser对象 登录用户信息
accessToken HosAccessToken对象 包含tokenValue、开始时间、结束时间、tokenType、uniqueKey
name 登录名

# 设置认证信息

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

# 获取认证信息

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

Authentication参数说明:

参数名称 参数说明 备注
details 客户端信息 记录ip、mac、浏览器、操作系统、主机名称
authenticated true 是否认证成功
credentials 登录信息记录 客户端信息、登录方式、登录传参信息
principal HosUser对象 登录用户信息

# 获取登录全局唯一变量id

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

# 获取岗位id

/**
 * 获取岗位id
 * @return
 */
public static String getPostId();

# 获取岗位名称

/**
 * 获取岗位名称
 * @return
 */
public static String getPostName();