33333333333

This commit is contained in:
777
2025-02-23 18:18:34 +08:00
parent eb4e33ad24
commit 86c149ca09
10 changed files with 97 additions and 2 deletions

View File

@@ -54,6 +54,7 @@ public class PayTrdConfigServiceImpl extends ServiceImpl<PayTrdConfigMapper, Pay
private final static Map<BigDecimal, AtomicLong> ACCOUNT_MAP = new ConcurrentHashMap<>();
private final static List<PayTrdConfig> PAY_TRD_CONFIG_LIST = new CopyOnWriteArrayList<>();
private final static AtomicLong NO_ACCOUNT_FLAG = new AtomicLong(0);
@PostConstruct
public void init(){
@@ -78,7 +79,7 @@ public class PayTrdConfigServiceImpl extends ServiceImpl<PayTrdConfigMapper, Pay
}
}
if(payTrdConfig == null){
payTrdConfig = getConfig(dto.getPrice(),wx);
payTrdConfig = getConfigV2(wx);
}
if(payTrdConfig == null){
throw new ServiceException("未开启支付,请联系客服");
@@ -92,6 +93,43 @@ public class PayTrdConfigServiceImpl extends ServiceImpl<PayTrdConfigMapper, Pay
return trdPayManager.createOrderAliMerge(dto, payTrdConfig, typeEnum, wx);
}
/**
* 无价格版本
* @param wx
* @return
*/
private static PayTrdConfig getConfigV2(boolean wx){
List<PayTrdConfig> list = new ArrayList<>();
for(PayTrdConfig payTrdConfig : PAY_TRD_CONFIG_LIST){
if(wx){
if(payTrdConfig.getEnableWxStatus() == 0){
continue;
}
}else{
if(payTrdConfig.getEnableStatus() == 0){
continue;
}
}
if(payTrdConfig.getForNum() < 1){
continue;
}
list.add(payTrdConfig);
}
if(list.isEmpty()){
return null;
}
Integer totalWeight = list.stream().map(PayTrdConfig::getForNum).reduce(0, Integer::sum);
long position = NO_ACCOUNT_FLAG.getAndIncrement();
long round = position % totalWeight;
for(PayTrdConfig payTrdConfig : list){
if(round < payTrdConfig.getForNum()){
return payTrdConfig;
}
round = round - payTrdConfig.getForNum();
}
return null;
}
private PayTrdConfig getConfig(BigDecimal amount,boolean wx){
List<PayTrdConfig> list = new ArrayList<>();
for(PayTrdConfig payTrdConfig : PAY_TRD_CONFIG_LIST){