package com.ruoyi.cai.pay; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ijpay.alipay.AliPayApiConfig; import com.ijpay.alipay.AliPayApiConfigKit; import com.ruoyi.cai.config.CaiProperties; import com.ruoyi.cai.domain.PayConfig; import com.ruoyi.cai.domain.PayTotal; import com.ruoyi.cai.service.PayConfigService; import com.ruoyi.cai.service.PayTotalService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.*; import java.util.stream.Collectors; @Component @Slf4j public class PayConfigManager { @Autowired private PayTotalService payTotalService; @Autowired private PayConfigService payConfigService; @Autowired private CaiProperties caiProperties; public void deletePayConfigAli(PayConfig payConfig) { if(PayTypeEnum.ALI.getCode().equals(payConfig.getPayType())){ AliPayApiConfigKit.removeApiConfig(payConfig.getAppid()); } } public PayConfig getWxConfig(){ List values = payConfigService.listOkByPayType(PayTypeEnum.WX); Map using = new HashMap<>(); for (PayConfig value : values) { using.put(value.getWxMcid(),value); } if(using.isEmpty()){ return null; } Set aliAppIds = using.keySet(); List totals = payTotalService.listByWxMcid(aliAppIds); List payIds = totals.stream() .sorted(Comparator.comparing(PayTotal::getMoney)) .map(PayTotal::getPayId).collect(Collectors.toList()); for (String aliAppId : aliAppIds) { if(!payIds.contains(aliAppId)){ return using.get(aliAppId); } } return using.get(payIds.get(0)); } public PayConfig getAliConfig(){ List values = payConfigService.listOkByPayType(PayTypeEnum.ALI); Map using = new HashMap<>(); for (PayConfig value : values) { using.put(value.getWxMcid(),value); } if(using.isEmpty()){ return null; } Set wxMcidSet = using.keySet(); List totals = payTotalService.listByAliAppId(wxMcidSet); List payIds = totals.stream() .sorted(Comparator.comparing(PayTotal::getMoney)) .map(PayTotal::getPayId).collect(Collectors.toList()); for (String wxMcid : wxMcidSet) { if(!payIds.contains(wxMcid)){ return using.get(wxMcid); } } return using.get(payIds.get(0)); } public boolean initAliPay() { PayConfig payConfig = this.getAliConfig(); if(payConfig == null){ return false; } AliPayApiConfig aliPayApiConfig; try { aliPayApiConfig = AliPayApiConfigKit.getApiConfig(payConfig.getAppid()); } catch (Exception e) { log.error("实例化AliPayApiConfig..."); // 如果Map中没有当前支付宝的实例就初始化并添加到Map中 aliPayApiConfig = AliPayApiConfig.builder() .setAppId(payConfig.getAppid()) .setAliPayPublicKey(payConfig.getPublicKey()) .setCharset("UTF-8") .setPrivateKey(payConfig.getPrivateKey()) .setServiceUrl(payConfig.getNotifyUrl()) .setSignType("RSA2") .build(); } AliPayApiConfigKit.setThreadLocalAliPayApiConfig(aliPayApiConfig); return true; } public PayConfig getAliConfigByAppId(String appId) { return payConfigService.getOne(Wrappers.lambdaQuery(PayConfig.class).eq(PayConfig::getAppid, appId) .last("limit 1")); } public PayConfig getWxConfigByMchId(String mchId) { return payConfigService.getOne(Wrappers.lambdaQuery(PayConfig.class).eq(PayConfig::getWxMcid, mchId) .last("limit 1")); } public Collection getAllPayConfig() { return payConfigService.list(); } }