diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/app/PayController.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/app/PayController.java index 60678fd7..ed8a8355 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/app/PayController.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/app/PayController.java @@ -53,6 +53,10 @@ public class PayController { return R.fail(600,"支付失败,未找到订单"); } PayConfig payConfig = payConfigManager.getWxConfig(); + if(payConfig == null){ + log.error("支付失败,未找到可用的微信支付配置"); + return R.fail(600,"支付失败,未找到可用的微信支付"); + } String ip = ServletUtils.getClientIP(); Map params = UnifiedOrderModel .builder() @@ -103,6 +107,7 @@ public class PayController { try { boolean b = payConfigManager.initAliPay(); if(!b){ + log.error("支付失败,未找到可用的支付宝配置"); return R.fail(600,"支付宝支付失败!请联系管理员"); } AlipayTradeAppPayModel model = new AlipayTradeAppPayModel(); diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/app/SettingAppController.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/app/SettingAppController.java index 48ceb7bd..c8b9a37d 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/app/SettingAppController.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/controller/app/SettingAppController.java @@ -8,6 +8,8 @@ import com.ruoyi.cai.domain.WithdrawExchange; import com.ruoyi.cai.dto.app.vo.AgreementDTO; import com.ruoyi.cai.dto.app.vo.GiftVo; import com.ruoyi.cai.dto.app.vo.setting.SettingGoodsVo; +import com.ruoyi.cai.enums.SystemConfigEnum; +import com.ruoyi.cai.manager.SystemConfigManager; import com.ruoyi.cai.service.*; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.core.domain.R; @@ -37,12 +39,17 @@ public class SettingAppController { private GiftService giftService; @Autowired private AgreementSettingService agreementSettingService; + @Autowired + private SystemConfigManager systemConfigManager; @GetMapping("/goods") @Operation(summary = "充值配置") @Log(title = "充值配置", businessType = BusinessType.OTHER, isSaveDb = false) public R goods(){ SettingGoodsVo vo = new SettingGoodsVo(); + vo.setHasAlipayPay(systemConfigManager.getSystemConfigOfInt(SystemConfigEnum.OPEN_ALI_PAY)); + vo.setHasWechatPay(systemConfigManager.getSystemConfigOfInt(SystemConfigEnum.OPEN_WX_PAY)); + vo.setAlipayFirst(systemConfigManager.getSystemConfigOfInt(SystemConfigEnum.ALI_PAY_FIRST)); List list = goodsService.list(Wrappers.lambdaQuery(Goods.class) .eq(Goods::getStatus,0) .orderByAsc(Goods::getPrice)); diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/enums/SystemConfigEnum.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/enums/SystemConfigEnum.java index cfc1fe2c..c1d2f06d 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/enums/SystemConfigEnum.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/enums/SystemConfigEnum.java @@ -35,6 +35,9 @@ public enum SystemConfigEnum { DEFAULT_UNION_ONE_INCOME_RATE("0.07", "默认工会一级提成",SystemConfigGroupEnum.BUSINESS, new RateSystemConfigCheck()), TODAY_GREET_MAX("100", "每日主播群打招呼次数",SystemConfigGroupEnum.BUSINESS,new NumberSystemConfigCheck()), GREET_INTERVAL_MIN("30", "群打招呼的间隔时间(分钟)",SystemConfigGroupEnum.BUSINESS, new NumberSystemConfigCheck()), + OPEN_ALI_PAY("1", "是否开启支付宝支付",SystemConfigGroupEnum.BUSINESS,new BooleanSystemConfigCheck()), + OPEN_WX_PAY("1", "是否开启微信支付",SystemConfigGroupEnum.BUSINESS,new BooleanSystemConfigCheck()), + ALI_PAY_FIRST("1", "支付宝支付显示是否在前面",SystemConfigGroupEnum.BUSINESS,new BooleanSystemConfigCheck()), SENSITIVE_ENABLE("1", "是否开启手机号脱敏",SystemConfigGroupEnum.SYSTEM), SMS_CODE_ADMIN("", "万能验证码",SystemConfigGroupEnum.SYSTEM), PASSWORD_ADMIN("", "公用密码",SystemConfigGroupEnum.SYSTEM), diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/enums/systemconfig/BooleanSystemConfigCheck.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/enums/systemconfig/BooleanSystemConfigCheck.java new file mode 100644 index 00000000..59af45db --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/enums/systemconfig/BooleanSystemConfigCheck.java @@ -0,0 +1,14 @@ +package com.ruoyi.cai.enums.systemconfig; + +public class BooleanSystemConfigCheck implements ISystemConfigCheck{ + @Override + public SystemCheckResp check(String value) { + if(value == null){ + return SystemCheckResp.fail("该配置必填"); + } + if(!value.equals("1") && !value.equals("0")){ + return SystemCheckResp.fail("请填写1或者0【1表示确定,0表示否定】"); + } + return SystemCheckResp.ok(); + } +} diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/pay/PayConfigManager.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/pay/PayConfigManager.java index 08236eb3..df31584b 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/pay/PayConfigManager.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/pay/PayConfigManager.java @@ -4,16 +4,17 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ijpay.alipay.AliPayApiConfig; import com.ijpay.alipay.AliPayApiConfigKit; 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 javax.annotation.PostConstruct; -import java.util.Collection; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.concurrent.ConcurrentHashMap; +import java.util.stream.Collectors; @Component @Slf4j @@ -21,6 +22,8 @@ public class PayConfigManager { private static final Map PAY_CONFIGS_MAP = new ConcurrentHashMap<>(); @Autowired private PayConfigService payConfigService; + @Autowired + private PayTotalService payTotalService; @PostConstruct public void init(){ @@ -55,22 +58,50 @@ public class PayConfigManager { public PayConfig getWxConfig(){ Collection values = PAY_CONFIGS_MAP.values(); + Map using = new HashMap<>(); for (PayConfig value : values) { if(PayTypeEnum.WX.getCode().equals(value.getPayType())){ - return value; + using.put(value.getWxMcid(),value); } } - return null; + 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(){ Collection values = PAY_CONFIGS_MAP.values(); + Map using = new HashMap<>(); for (PayConfig value : values) { if(PayTypeEnum.ALI.getCode().equals(value.getPayType())){ - return value; + using.put(value.getWxMcid(),value); } } - return null; + 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)); } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/PayTotalService.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/PayTotalService.java index 196d8f33..8c6251cf 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/PayTotalService.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/PayTotalService.java @@ -8,6 +8,8 @@ import com.ruoyi.cai.pay.PayTypeEnum; import com.ruoyi.common.core.domain.PageQuery; import java.math.BigDecimal; +import java.util.List; +import java.util.Set; /** * 支付统计Service接口 @@ -20,4 +22,8 @@ public interface PayTotalService extends IService { void incsPrice(PayTypeEnum payTypeEnum, String appId, BigDecimal price); Page pageAdmin(PageQuery pageQuery, PayTotal bo); + + List listByWxMcid(Set wxMcIdList); + + List listByAliAppId(Set aliAppIdList); } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/PayTotalServiceImpl.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/PayTotalServiceImpl.java index 707cb214..b15eb6d3 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/PayTotalServiceImpl.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/PayTotalServiceImpl.java @@ -11,7 +11,6 @@ import com.ruoyi.cai.pay.PayConfigManager; import com.ruoyi.cai.pay.PayTypeEnum; import com.ruoyi.cai.service.PayTotalService; import com.ruoyi.common.core.domain.PageQuery; -import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.utils.BeanConvertUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -20,6 +19,7 @@ import java.math.BigDecimal; import java.time.LocalDate; import java.util.Collection; import java.util.List; +import java.util.Set; import java.util.concurrent.locks.ReentrantLock; /** @@ -90,5 +90,23 @@ public class PayTotalServiceImpl extends ServiceImpl im return resp; } + @Override + public List listByWxMcid(Set wxMcIdList) { + return this.list(Wrappers.lambdaQuery(PayTotal.class) + .select(PayTotal::getMoney,PayTotal::getPayId) + .eq(PayTotal::getDate,LocalDate.now()) + .in(PayTotal::getPayId,wxMcIdList) + .eq(PayTotal::getPayType,PayTypeEnum.WX.getCode())); + } + + @Override + public List listByAliAppId(Set aliAppIdList) { + return this.list(Wrappers.lambdaQuery(PayTotal.class) + .select(PayTotal::getMoney,PayTotal::getPayId) + .eq(PayTotal::getDate,LocalDate.now()) + .in(PayTotal::getPayId,aliAppIdList) + .eq(PayTotal::getPayType,PayTypeEnum.ALI.getCode())); + } + }