33333333333
This commit is contained in:
@@ -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){
|
||||
|
||||
Reference in New Issue
Block a user