This commit is contained in:
dute7liang
2024-01-27 20:12:55 +08:00
parent d0a53c31a5
commit 716b2a2d7a
7 changed files with 92 additions and 8 deletions

View File

@@ -53,6 +53,10 @@ public class PayController {
return R.fail(600,"支付失败,未找到订单"); return R.fail(600,"支付失败,未找到订单");
} }
PayConfig payConfig = payConfigManager.getWxConfig(); PayConfig payConfig = payConfigManager.getWxConfig();
if(payConfig == null){
log.error("支付失败,未找到可用的微信支付配置");
return R.fail(600,"支付失败,未找到可用的微信支付");
}
String ip = ServletUtils.getClientIP(); String ip = ServletUtils.getClientIP();
Map<String, String> params = UnifiedOrderModel Map<String, String> params = UnifiedOrderModel
.builder() .builder()
@@ -103,6 +107,7 @@ public class PayController {
try { try {
boolean b = payConfigManager.initAliPay(); boolean b = payConfigManager.initAliPay();
if(!b){ if(!b){
log.error("支付失败,未找到可用的支付宝配置");
return R.fail(600,"支付宝支付失败!请联系管理员"); return R.fail(600,"支付宝支付失败!请联系管理员");
} }
AlipayTradeAppPayModel model = new AlipayTradeAppPayModel(); AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();

View File

@@ -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.AgreementDTO;
import com.ruoyi.cai.dto.app.vo.GiftVo; import com.ruoyi.cai.dto.app.vo.GiftVo;
import com.ruoyi.cai.dto.app.vo.setting.SettingGoodsVo; 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.cai.service.*;
import com.ruoyi.common.annotation.Log; import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.domain.R;
@@ -37,12 +39,17 @@ public class SettingAppController {
private GiftService giftService; private GiftService giftService;
@Autowired @Autowired
private AgreementSettingService agreementSettingService; private AgreementSettingService agreementSettingService;
@Autowired
private SystemConfigManager systemConfigManager;
@GetMapping("/goods") @GetMapping("/goods")
@Operation(summary = "充值配置") @Operation(summary = "充值配置")
@Log(title = "充值配置", businessType = BusinessType.OTHER, isSaveDb = false) @Log(title = "充值配置", businessType = BusinessType.OTHER, isSaveDb = false)
public R<SettingGoodsVo> goods(){ public R<SettingGoodsVo> goods(){
SettingGoodsVo vo = new SettingGoodsVo(); 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<Goods> list = goodsService.list(Wrappers.lambdaQuery(Goods.class) List<Goods> list = goodsService.list(Wrappers.lambdaQuery(Goods.class)
.eq(Goods::getStatus,0) .eq(Goods::getStatus,0)
.orderByAsc(Goods::getPrice)); .orderByAsc(Goods::getPrice));

View File

@@ -35,6 +35,9 @@ public enum SystemConfigEnum {
DEFAULT_UNION_ONE_INCOME_RATE("0.07", "默认工会一级提成",SystemConfigGroupEnum.BUSINESS, new RateSystemConfigCheck()), DEFAULT_UNION_ONE_INCOME_RATE("0.07", "默认工会一级提成",SystemConfigGroupEnum.BUSINESS, new RateSystemConfigCheck()),
TODAY_GREET_MAX("100", "每日主播群打招呼次数",SystemConfigGroupEnum.BUSINESS,new NumberSystemConfigCheck()), TODAY_GREET_MAX("100", "每日主播群打招呼次数",SystemConfigGroupEnum.BUSINESS,new NumberSystemConfigCheck()),
GREET_INTERVAL_MIN("30", "群打招呼的间隔时间(分钟)",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), SENSITIVE_ENABLE("1", "是否开启手机号脱敏",SystemConfigGroupEnum.SYSTEM),
SMS_CODE_ADMIN("", "万能验证码",SystemConfigGroupEnum.SYSTEM), SMS_CODE_ADMIN("", "万能验证码",SystemConfigGroupEnum.SYSTEM),
PASSWORD_ADMIN("", "公用密码",SystemConfigGroupEnum.SYSTEM), PASSWORD_ADMIN("", "公用密码",SystemConfigGroupEnum.SYSTEM),

View File

@@ -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();
}
}

View File

@@ -4,16 +4,17 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ijpay.alipay.AliPayApiConfig; import com.ijpay.alipay.AliPayApiConfig;
import com.ijpay.alipay.AliPayApiConfigKit; import com.ijpay.alipay.AliPayApiConfigKit;
import com.ruoyi.cai.domain.PayConfig; import com.ruoyi.cai.domain.PayConfig;
import com.ruoyi.cai.domain.PayTotal;
import com.ruoyi.cai.service.PayConfigService; import com.ruoyi.cai.service.PayConfigService;
import com.ruoyi.cai.service.PayTotalService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
import java.util.Collection; import java.util.*;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
@Component @Component
@Slf4j @Slf4j
@@ -21,6 +22,8 @@ public class PayConfigManager {
private static final Map<Long,PayConfig> PAY_CONFIGS_MAP = new ConcurrentHashMap<>(); private static final Map<Long,PayConfig> PAY_CONFIGS_MAP = new ConcurrentHashMap<>();
@Autowired @Autowired
private PayConfigService payConfigService; private PayConfigService payConfigService;
@Autowired
private PayTotalService payTotalService;
@PostConstruct @PostConstruct
public void init(){ public void init(){
@@ -55,22 +58,50 @@ public class PayConfigManager {
public PayConfig getWxConfig(){ public PayConfig getWxConfig(){
Collection<PayConfig> values = PAY_CONFIGS_MAP.values(); Collection<PayConfig> values = PAY_CONFIGS_MAP.values();
Map<String,PayConfig> using = new HashMap<>();
for (PayConfig value : values) { for (PayConfig value : values) {
if(PayTypeEnum.WX.getCode().equals(value.getPayType())){ if(PayTypeEnum.WX.getCode().equals(value.getPayType())){
return value; using.put(value.getWxMcid(),value);
} }
} }
return null; if(using.isEmpty()){
return null;
}
Set<String> aliAppIds = using.keySet();
List<PayTotal> totals = payTotalService.listByWxMcid(aliAppIds);
List<String> 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(){ public PayConfig getAliConfig(){
Collection<PayConfig> values = PAY_CONFIGS_MAP.values(); Collection<PayConfig> values = PAY_CONFIGS_MAP.values();
Map<String,PayConfig> using = new HashMap<>();
for (PayConfig value : values) { for (PayConfig value : values) {
if(PayTypeEnum.ALI.getCode().equals(value.getPayType())){ if(PayTypeEnum.ALI.getCode().equals(value.getPayType())){
return value; using.put(value.getWxMcid(),value);
} }
} }
return null; if(using.isEmpty()){
return null;
}
Set<String> wxMcidSet = using.keySet();
List<PayTotal> totals = payTotalService.listByAliAppId(wxMcidSet);
List<String> 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));
} }

View File

@@ -8,6 +8,8 @@ import com.ruoyi.cai.pay.PayTypeEnum;
import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.core.domain.PageQuery;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List;
import java.util.Set;
/** /**
* 支付统计Service接口 * 支付统计Service接口
@@ -20,4 +22,8 @@ public interface PayTotalService extends IService<PayTotal> {
void incsPrice(PayTypeEnum payTypeEnum, String appId, BigDecimal price); void incsPrice(PayTypeEnum payTypeEnum, String appId, BigDecimal price);
Page<PayTotalAdminVo> pageAdmin(PageQuery pageQuery, PayTotal bo); Page<PayTotalAdminVo> pageAdmin(PageQuery pageQuery, PayTotal bo);
List<PayTotal> listByWxMcid(Set<String> wxMcIdList);
List<PayTotal> listByAliAppId(Set<String> aliAppIdList);
} }

View File

@@ -11,7 +11,6 @@ import com.ruoyi.cai.pay.PayConfigManager;
import com.ruoyi.cai.pay.PayTypeEnum; import com.ruoyi.cai.pay.PayTypeEnum;
import com.ruoyi.cai.service.PayTotalService; import com.ruoyi.cai.service.PayTotalService;
import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.utils.BeanConvertUtil; import com.ruoyi.common.utils.BeanConvertUtil;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@@ -20,6 +19,7 @@ import java.math.BigDecimal;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Set;
import java.util.concurrent.locks.ReentrantLock; import java.util.concurrent.locks.ReentrantLock;
/** /**
@@ -90,5 +90,23 @@ public class PayTotalServiceImpl extends ServiceImpl<PayTotalMapper,PayTotal> im
return resp; return resp;
} }
@Override
public List<PayTotal> listByWxMcid(Set<String> 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<PayTotal> listByAliAppId(Set<String> 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()));
}
} }