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

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

Maven 配置
工具分享--避免重复造*(一)

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

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

所需参数
工具分享--避免重复造*(一)

导入依赖

<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值得你尝试

上一篇:四步搞定企业安全项目监控和度量文档


下一篇:中招了,重写TreeMap的比较器引发的问题...(下)