|
@@ -142,11 +142,14 @@ public class PartitionCrashServiceImpl implements PartitionCrashService {
|
|
|
@Override
|
|
|
public void calcCrash(List<Long> userId) {
|
|
|
|
|
|
+ Map<Long, Long> userHighQuotaMap = new HashMap<>();
|
|
|
+
|
|
|
// 获取所有的营销用户
|
|
|
List<DuserDO> duserDOS = duserService.selectAllUser();
|
|
|
if (duserDOS.isEmpty()) {
|
|
|
return;
|
|
|
}
|
|
|
+ //记录所有用户的id和积分
|
|
|
List<HashMap<Long, Long>> afterCrashMap = new ArrayList<>();
|
|
|
// 获取当前合赢奖百分比
|
|
|
OrderPercentageDO orderPercentageDO = orderPercentageService.queryStatus();
|
|
@@ -266,7 +269,10 @@ public class PartitionCrashServiceImpl implements PartitionCrashService {
|
|
|
BigDecimal multiply = smallBigDecimal.divide(new BigDecimal("2.0"), 4, RoundingMode.DOWN);
|
|
|
if (compare(highQuota, multiply) && multiply.longValue() != 0) {
|
|
|
integralDO.setCurrentQuota(integralDO.getCurrentQuota() + multiply.intValue());
|
|
|
-// integralDO.setHighQuota(integralDO.getHighQuota() - multiply.intValue());
|
|
|
+ integralDO.setHighQuota(integralDO.getHighQuota() - multiply.intValue());
|
|
|
+
|
|
|
+ addHighQuota(userHighQuotaMap, integralDO.getUserId(), (long) multiply.intValue());
|
|
|
+
|
|
|
integralDO.setAccumulatedQuota(integralDO.getAccumulatedQuota() + multiply.intValue());
|
|
|
// 碰撞后的额度添加到日志中 增加日志模块
|
|
|
integralService.updateIntegral(BeanUtils.toBean(integralDO, IntegralSaveReqVO.class));
|
|
@@ -275,16 +281,19 @@ public class PartitionCrashServiceImpl implements PartitionCrashService {
|
|
|
if (compare(parentHighQuota, multiply) && multiply.longValue() != 0) {
|
|
|
// 减去最高额度
|
|
|
parentIntegralDo.setCurrentQuota(parentIntegralDo.getCurrentQuota() + multiply.intValue());
|
|
|
-// parentIntegralDo.setHighQuota(parentIntegralDo.getHighQuota() - multiply.intValue());
|
|
|
+ parentIntegralDo.setHighQuota(parentIntegralDo.getHighQuota() - multiply.intValue());
|
|
|
+
|
|
|
+ addHighQuota(userHighQuotaMap, parentIntegralDo.getUserId(), (long) multiply.intValue());
|
|
|
+
|
|
|
parentIntegralDo.setAccumulatedQuota(parentIntegralDo.getAccumulatedQuota() + multiply.intValue());
|
|
|
// 碰撞后的额度添加到日志中 增加日志模块
|
|
|
integralService.updateIntegral(BeanUtils.toBean(parentIntegralDo, IntegralSaveReqVO.class));
|
|
|
ptProfitLogService.addMessage(parentIntegralDo.getUserId(), CaclEnum.SMALL_QUOTA_CRASH, Long.parseLong(String.valueOf(multiply.intValue())), parentIntegralDo.getCurrentQuota(), JsonUtils.toJsonString(orderPercentageDO));
|
|
|
}
|
|
|
- if(highQuota < multiply.longValue() && multiply.longValue() != 0L){
|
|
|
+ if (highQuota < multiply.longValue() && multiply.longValue() != 0L) {
|
|
|
calcIntegral(multiply.longValue(), integralDO.getUserId(), JsonUtils.toJsonString(orderPercentageDO));
|
|
|
}
|
|
|
- if(parentHighQuota < multiply.longValue() && multiply.longValue() != 0L){
|
|
|
+ if (parentHighQuota < multiply.longValue() && multiply.longValue() != 0L) {
|
|
|
calcIntegral(multiply.longValue(), parentIntegralDo.getUserId(), JsonUtils.toJsonString(orderPercentageDO));
|
|
|
}
|
|
|
|
|
@@ -336,32 +345,41 @@ public class PartitionCrashServiceImpl implements PartitionCrashService {
|
|
|
// 获取当前用户的钱包
|
|
|
IntegralDO integralDO = integralDOMap.get(entry.getKey());
|
|
|
// 获取当前父亲的钱包
|
|
|
- Long parent = sonAndParent.get(entry.getKey());
|
|
|
- IntegralDO parentIntegralDo = integralDOMap.get(parent);
|
|
|
+// Long parent = sonAndParent.get(entry.getKey());
|
|
|
+// IntegralDO parentIntegralDo = integralDOMap.get(parent);
|
|
|
Long highQuota = integralDO.getHighQuota() + new BigDecimal(orderPercentageDO.getBaseMaxQuota()).longValue(); //加上基础的最大额度值
|
|
|
- Long parentHighQuota = parentIntegralDo.getHighQuota() + new BigDecimal(orderPercentageDO.getBaseMaxQuota()).longValue();
|
|
|
- if(highQuota < entry.getValue()){
|
|
|
- continue;
|
|
|
- }
|
|
|
- if(parentHighQuota < entry.getValue()){
|
|
|
- continue;
|
|
|
+
|
|
|
+ for (Long key : userHighQuotaMap.keySet()) {
|
|
|
+ if (key.equals(entry.getKey())) {
|
|
|
+ if (userHighQuotaMap.get(key) > 0L) {
|
|
|
+ highQuota = highQuota + entry.getValue();
|
|
|
+ userHighQuotaMap.put(key, userHighQuotaMap.get(key) - entry.getValue());
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- integralDO.setHighQuota(integralDO.getHighQuota() - entry.getValue());
|
|
|
- parentIntegralDo.setHighQuota(parentIntegralDo.getHighQuota() - entry.getValue());
|
|
|
- integralService.updateIntegral(BeanUtils.toBean(integralDO, IntegralSaveReqVO.class));
|
|
|
- integralService.updateIntegral(BeanUtils.toBean(parentIntegralDo, IntegralSaveReqVO.class));
|
|
|
-
|
|
|
- // 扣除平台收益
|
|
|
- log.info("扣除平台收益[合赢奖] " + "用户 " + entry.getKey() + "额度: " + entry.getValue());
|
|
|
- ptProfit.setPtGrossAdd(ptProfit.getPtGrossAdd() - entry.getValue());
|
|
|
- // 平台扣除积分
|
|
|
- ptProfit.setPtTotalAdd(ptProfit.getPtTotalAdd() - entry.getValue());
|
|
|
- // 碰撞后的额度添加到日志中 增加日志模块
|
|
|
- ptProfitLogService.addMessage(entry.getKey(), CaclEnum.AFTER_CRASH_CALC_PT_TOTAL_QUOTA
|
|
|
- , -entry.getValue(), ptProfit.getPtTotalAdd(), JsonUtils.toJsonString(orderPercentageDO));
|
|
|
- ptProfitLogService.addMessage(entry.getKey(), CaclEnum.AFTER_CRASH_CALC_PT_TOTAL_GROSS_QUOTA
|
|
|
- , -entry.getValue(), ptProfit.getPtTotalAdd(), JsonUtils.toJsonString(orderPercentageDO));
|
|
|
+// Long parentHighQuota = parentIntegralDo.getHighQuota() + new BigDecimal(orderPercentageDO.getBaseMaxQuota()).longValue();
|
|
|
+ if (highQuota >= entry.getValue()) {
|
|
|
+// integralDO.setHighQuota(integralDO.getHighQuota() - entry.getValue());
|
|
|
+ integralService.updateIntegral(BeanUtils.toBean(integralDO, IntegralSaveReqVO.class));
|
|
|
+// if (parentHighQuota >= entry.getValue()) {
|
|
|
+// parentIntegralDo.setHighQuota(parentIntegralDo.getHighQuota() - entry.getValue());
|
|
|
+// integralService.updateIntegral(BeanUtils.toBean(parentIntegralDo, IntegralSaveReqVO.class));
|
|
|
+// }
|
|
|
+
|
|
|
+
|
|
|
+ // 扣除平台收益
|
|
|
+ log.info("扣除平台收益[合赢奖] " + "用户 " + entry.getKey() + "额度: " + entry.getValue());
|
|
|
+ ptProfit.setPtGrossAdd(ptProfit.getPtGrossAdd() - entry.getValue());
|
|
|
+ // 平台扣除积分
|
|
|
+ ptProfit.setPtTotalAdd(ptProfit.getPtTotalAdd() - entry.getValue());
|
|
|
+ // 碰撞后的额度添加到日志中 增加日志模块
|
|
|
+ ptProfitLogService.addMessage(entry.getKey(), CaclEnum.AFTER_CRASH_CALC_PT_TOTAL_QUOTA
|
|
|
+ , -entry.getValue(), ptProfit.getPtTotalAdd(), JsonUtils.toJsonString(orderPercentageDO));
|
|
|
+ ptProfitLogService.addMessage(entry.getKey(), CaclEnum.AFTER_CRASH_CALC_PT_TOTAL_GROSS_QUOTA
|
|
|
+ , -entry.getValue(), ptProfit.getPtTotalAdd(), JsonUtils.toJsonString(orderPercentageDO));
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
ptProfitService.updatePtProfit(PtProfitSaveReqVO.builder().id(ptProfit.getId())
|
|
@@ -382,6 +400,17 @@ public class PartitionCrashServiceImpl implements PartitionCrashService {
|
|
|
createPtProfitDailyStatisticsLog(sum);
|
|
|
}
|
|
|
|
|
|
+ //向集合中放用户获取的积分
|
|
|
+ private void addHighQuota(Map<Long, Long> map, Long userId, Long value) {
|
|
|
+ for (Long key : map.keySet()) {
|
|
|
+ if (key.equals(userId)) {
|
|
|
+ map.put(key, map.get(key) + value);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ map.put(userId, value);
|
|
|
+ }
|
|
|
+
|
|
|
private void calcIntegral(Long multiply, Long userId, String jsonString) {
|
|
|
PtProfitDO ptProfit = ptProfitService.getPtProfit();
|
|
|
ptProfitLogService.addMessage(userId, CaclEnum.GROSS_PROFIT_BONUS_QUOTA_PERC_EXCEED_MAXIMUM_LIMIT, multiply,
|