工具分享--避免重复造轮子(一)

简介: 开源工具类库,建议收藏,小标题都带有官网链接

feilong-core 让Java开发更简便的工具包

Maven 配置
image.png

com.feilong.core 包
全能校验小帮手 — Validator
常用时间间隔 —TimeInterval
常用时间模式 — DatePattern
常用数字模式 - NumberPattern
字母常量 -- Alphabet
字符编码常量 - CharsetType
uri字符常量 - URIComponents
UncheckedIOException
com.feilong.core.date 包
小巧实用日期处理 - DateUtil
日期扩展 - DateExtensionUtil
com.feilong.core.util 包
集合处理利器 - CollectionsUtil
Map处理利器 - MapUtil
排序专家 - SortUtil
统计专家 - AggregateUtil
正则表达式工具类 - RegexUtil
随机数工具 - RandomUtil
com.feilong.core.lang 包
对象工具 - ObjectUtil
线程助手 - ThreadUtil
com.feilong.core.net 包
参数解析能手 - ParamUtil
com.feilong.core.bean 包
全能类型转换器 - ConvertUtil
BeanUtil
PropertyUtil

Hutool-Java 工具类库

● hutool-aop JDK 动态代理封装,提供非 IOC 下的切面支持
● hutool-bloomFilter 布隆过滤,提供一些 Hash 算法的布隆过滤
● hutool-cache 缓存
● hutool-core 核心,包括 Bean 操作、日期、各种 Util 等
● hutool-cron 定时任务模块,提供类 Crontab 表达式的定时任务
● hutool-crypto 加密解密模块
● hutool-db JDBC 封装后的数据操作,基于 ActiveRecord 思想
● hutool-dfa 基于 DFA 模型的多关键字查找
● hutool-extra 扩展模块,对第三方封装(模板引擎、邮件等)
● hutool-http 基于 HttpUrlConnection 的 Http 客户端封装
● hutool-log 自动识别日志实现的日志门面
● hutool-script 脚本执行封装,例如 Javascript
● hutool-setting 功能更强大的 Setting 配置文件和 Properties 封装
● hutool-system 系统参数调用封装(JVM 信息等)
● hutool-json JSON 实现
● hutool-captcha 图片验证码实现

http客户端框架retrofit-spring-boot-starter

gitee:https://gitee.com/lianjiatech/retrofit-spring-boot-starter
maven引入:

<dependency>
    <groupId>com.github.lianjiatech</groupId>
    <artifactId>retrofit-spring-boot-starter</artifactId>
    <version>2.0.2</version>
</dependency>
  • 自定义注入OkHttpClient
  • 注解式拦截器
  • 连接池管理
  • 日志打印
  • 请求重试
  • 错误解码器
  • 全局拦截器
  • 熔断降级
  • 微服务之间的HTTP调用
  • 调用适配器
  • 数据转换器

支付best-pay-sdk

支持微信支付、支付宝等多种,以微信为例:

所需参数
image.png

导入依赖

<groupId>cn.springboot</groupId>
<artifactId>best-pay-sdk</artifactId>
<version>1.3.0.BETA</version>

配置
WechatAccountConfig.java

@Data
@ConfigurationProperties(prefix = "wechat")
@Component
public class WechatAccountConfig {
    /**
     * 公众账号appid
     * 获取地址 https://mp.weixin.qq.com
     */
    private String mpAppId;
​
    //公众号秘钥
    private String appSecret;
​
    /**
     * 商户号
     * 获取地址 https://pay.weixin.qq.com
     */
    private String mchId;
​
    /**
     * 商户密钥
     */
    private String mchKey;
​
    /**
     * 商户证书路径
     */
    private String keyPath;
​
    /**
     * 微信支付异步通知地址
     */
    private String notifyUrl;
}

PayConfig.java

@Configuration
public class PayConfig {
​
    @Autowired
    private WechatAccountConfig accountConfig;
​
​
    @Bean
    public WxPayConfig wxPayConfig() {
        WxPayConfig wxPayConfig = new WxPayConfig();
        wxPayConfig.setAppId(accountConfig.getMpAppId());
        wxPayConfig.setAppSecret(accountConfig.getAppSecret());
        wxPayConfig.setMchId(accountConfig.getMchId());
        wxPayConfig.setMchKey(accountConfig.getMchKey());
        wxPayConfig.setKeyPath(accountConfig.getKeyPath());
        wxPayConfig.setNotifyUrl(accountConfig.getNotifyUrl());
        return wxPayConfig;
    }
​
​
    @Bean
    public BestPayServiceImpl bestPayService(WxPayConfig wxPayConfig) {
        BestPayServiceImpl bestPayService = new BestPayServiceImpl();
        bestPayService.setWxPayConfig(wxPayConfig);
        return bestPayService;
    }
}

发起支付
这里有个openid项目一开始便获取到的,因为项目也做了微信授权登录,所以在那边先获取到了openid存进了数据库,这里需要便取出。

如果有需要的话,可以后面写如何获取openid的

@Autowired
 private BestPayServiceImpl bestPayService;  
​
 /**
  * 微信支付接口
  */
 @GetMapping("/pay")
 @ResponseBody
 public Result pay(@ApiParam(value = "订单号") @RequestParam("orderNo") String orderNo) {
     //支付请求参数
     PayRequest request = new PayRequest();
     //中间的参数为自己根据项目需求来获取
     
     request.setPayTypeEnum(BestPayTypeEnum.WXPAY_MP);
     request.setOrderId(orderNo);
     request.setOrderName("微信公众账号支付订单");
     request.setOrderAmount(0.01);
     request.setOpenid("openid_xxxxxx");
     
     log.info("【发起支付】request={}", JsonUtil.toJson(request));
​
     PayResponse payResponse = bestPayService.pay(request);
     log.info("【发起支付】response={}", JsonUtil.toJson(payResponse));
     return ResultGenerator.genSuccessResult(payResponse);
 }

支付成功回调

/**
   * 异步回调
   */
  @PostMapping(value = "/notify")
  public Result notify(@RequestBody String notifyData) {
      log.info("【异步通知】支付平台的数据request={}", notifyData);
      PayResponse response = bestPayService.asyncNotify(notifyData);
      log.info("【异步通知】处理后的数据data={}", JsonUtil.toJson(response));
​
      String orderNo = response.getOrderId();
      //支付方式--微信支付
      int payType = 2;
​
      //返回成功信息给支付平台,否则会不停的异步通知
      if (response.getPayPlatformEnum() == BestPayPlatformEnum.WX) {
          String payResult = orderService.paySuccess(orderNo, payType);
          if (ServiceResultEnum.SUCCESS.getResult().equals(payResult)) {
              return ResultGenerator.genSuccessResult();
          } else {
              return ResultGenerator.genFailResult(payResult);
          }
      }
      throw new RuntimeException("错误的支付平台");
  }

easypoi导入导出excel

POI 工具类,Excel的快速导入导出,Excel模板导出,Word模板导出,可以仅仅5行代码就可以完成Excel的导入导出,修改导出格式简单粗暴,快速有效,easypoi值得你尝试

目录
相关文章
|
6月前
|
存储 缓存 算法
【CMake 疑难解决 】解决 查找重复 的问题以及优化技巧
【CMake 疑难解决 】解决 查找重复 的问题以及优化技巧
108 0
|
3月前
|
Python
答应我,用了这个jupyter插件,别再重复造轮子了
答应我,用了这个jupyter插件,别再重复造轮子了
|
3月前
|
设计模式 测试技术
工程代码编写问题之需求的拆分和组合如何解决
工程代码编写问题之需求的拆分和组合如何解决
19 1
|
4月前
codereview开发问题之CodeReview中如何判断注释问题如何解决
codereview开发问题之CodeReview中如何判断注释问题如何解决
|
4月前
|
Python
告别混乱!Python上下文管理器的自定义实践,让你的代码更加整洁有序
【7月更文挑战第6天】Python的上下文管理器通过`__enter__`和`__exit__`方法自动处理资源的获取与释放,如文件操作。使用with语句结合自定义类(如`FileManager`示例),能确保文件在使用后正确关闭,防止资源泄漏,提升代码整洁度和健壮性。自定义上下文管理器是代码模块化和错误处理的好实践。
32 0
|
开发工具
代码重构之重复代码处理
介绍使用IDEA去重构重复的代码块
代码重构之重复代码处理
|
Java Spring
再也不用重复造轮子了 一个Spring注解轻松解决
再也不用重复造轮子了 一个Spring注解轻松解决
71 0
|
SQL 缓存 安全
如何避免写重复代码:善用抽象和组合
通过抽象和组合,我们可以编写出更加简洁、易于理解和稳定的代码;类似于金字塔的建筑过程,我们总是可以在一层抽象之上再叠加一层,从而达到自己的目标。但是在日常的开发工作中,我们如何进行实践呢?本文将以笔者在Akka项目中的一段社区贡献作为引子分享笔者的一点心得。
161 0
如何避免写重复代码:善用抽象和组合
|
数据库
【高效编码】查询日志的命令老是记不住?没关系,这篇文章帮你记
您好,我是码农飞哥,一直想飞暂时在跑个那个老哥。
259 0
【高效编码】查询日志的命令老是记不住?没关系,这篇文章帮你记
|
XML JSON 安全
写Go最近踩的坑 | 日志、内聚和复用、gjson、调整心态
今天分享一下最近遇到的坑:以下代码示例使用GoFrame框架,下文简称为gf框架。
写Go最近踩的坑 | 日志、内聚和复用、gjson、调整心态