|
|
@@ -244,6 +244,7 @@ public class SubsidySharedPoolServiceImpl implements ISubsidySharedPoolService {
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
@Override
|
|
|
public SubsidySharedPool settlement(Long sharedId, SharedSettlementMode sharedSettlementMode) {
|
|
|
+ log.info("开始执行均摊池到期结算");
|
|
|
SubsidySharedPool subsidySharedPool = loadById(sharedId, false);
|
|
|
if(subsidySharedPool.getSettlemented())
|
|
|
{
|
|
|
@@ -251,58 +252,68 @@ public class SubsidySharedPoolServiceImpl implements ISubsidySharedPoolService {
|
|
|
}
|
|
|
if(subsidySharedPool.getTotalSharedAmount().compareTo(BigDecimal.ZERO)<=0)
|
|
|
{
|
|
|
- return null;
|
|
|
+ log.info("商户当前均摊池为{},无法结算", subsidySharedPool.getTotalSharedAmount());
|
|
|
+ subsidySharedPool.setSettlemented(true);
|
|
|
+ subsidySharedPool.setSettlementMode(sharedSettlementMode);
|
|
|
+ subsidySharedPool.setSettlementTime(new Date());
|
|
|
+ subsidySharedPool.setSettlementRemark("均摊定时补贴到期,但均堆池为零");
|
|
|
+ baseMapper.updateById(subsidySharedPool);
|
|
|
}
|
|
|
- BigDecimal totalSharedAmount = subsidySharedPool.getTotalSharedAmount();
|
|
|
- //开始结算,并把结算剩余还给商家,同时需要记好均摊池改变日志
|
|
|
- BigDecimal remaining = subsidyQueueService.sharedSubsidyCompute(subsidySharedPool.getBusinessId(), subsidySharedPool.getTotalSharedAmount());
|
|
|
-
|
|
|
-
|
|
|
- subsidySharedPool.setReturnBusinessAmount(remaining);
|
|
|
- subsidySharedPool.setSettlemented(true);
|
|
|
- subsidySharedPool.setSettlementMode(sharedSettlementMode);
|
|
|
- subsidySharedPool.setSettlementTime(new Date());
|
|
|
- subsidySharedPool.setSettlementRemark("均摊定时补贴");
|
|
|
- baseMapper.updateById(subsidySharedPool);
|
|
|
-
|
|
|
- //添加均摊池改变日志
|
|
|
- subsidySharedPoolLogService.insertByBo(SubsidySharedPoolLogBo.builder()
|
|
|
- .sharedId(subsidySharedPool.getSharedId())
|
|
|
- .businessId(subsidySharedPool.getBusinessId())
|
|
|
- .behaviorType(SharedPoolBehaviorType.SETTLEMENT_SUBSIDY)
|
|
|
- .prevValue(totalSharedAmount)
|
|
|
- .changeValue(MathUtils.subtract(totalSharedAmount, remaining))
|
|
|
- .resultValue(remaining)
|
|
|
- .remark(SharedSettlementMode.DUE_SETTLEMENT.getMsg()+"给用户")
|
|
|
- .build());
|
|
|
-
|
|
|
- if(remaining.compareTo(BigDecimal.ZERO)>0)
|
|
|
- {
|
|
|
- Long businessId = subsidySharedPool.getBusinessId();
|
|
|
- Business business = businessService.loadById(businessId, false);
|
|
|
- if(ObjectUtil.isNotNull( business)) {
|
|
|
- //用户余额增加
|
|
|
- userService.changeUserBalance(UserChangeBalanceBo.builder()
|
|
|
- .userId(business.getRelationUserId())
|
|
|
- .entryValue(remaining)
|
|
|
- .isAdd(true)
|
|
|
- .sourceType(BalanceSourceType.SUBSIDY_OVERFLOW_RETURN)
|
|
|
- .sourceId(subsidySharedPool.getSharedId())
|
|
|
- .remark("消费排队均摊补贴溢出退回")
|
|
|
- .businessId(businessId)
|
|
|
- .businessName(business.getBusinessName())
|
|
|
- .build());
|
|
|
-
|
|
|
- //均摊池改变日志
|
|
|
- subsidySharedPoolLogService.insertByBo(SubsidySharedPoolLogBo.builder()
|
|
|
- .sharedId(subsidySharedPool.getSharedId())
|
|
|
- .businessId(subsidySharedPool.getBusinessId())
|
|
|
- .behaviorType(SharedPoolBehaviorType.REFUND_SUBSIDY)
|
|
|
- .prevValue(remaining)
|
|
|
- .changeValue(remaining)
|
|
|
- .resultValue(BigDecimal.ZERO)
|
|
|
- .remark("剩余返还给商家")
|
|
|
- .build());
|
|
|
+ else {
|
|
|
+ BigDecimal totalSharedAmount = subsidySharedPool.getTotalSharedAmount();
|
|
|
+ //开始结算,并把结算剩余还给商家,同时需要记好均摊池改变日志
|
|
|
+ log.info("开始结算商户均摊池");
|
|
|
+ BigDecimal remaining = subsidyQueueService.sharedSubsidyCompute(subsidySharedPool.getBusinessId(), subsidySharedPool.getTotalSharedAmount());
|
|
|
+
|
|
|
+ log.info("商户均摊池结算剩余金额{}", remaining);
|
|
|
+ subsidySharedPool.setReturnBusinessAmount(remaining);
|
|
|
+ subsidySharedPool.setSettlemented(true);
|
|
|
+ subsidySharedPool.setSettlementMode(sharedSettlementMode);
|
|
|
+ subsidySharedPool.setSettlementTime(new Date());
|
|
|
+ subsidySharedPool.setSettlementRemark("均摊定时补贴");
|
|
|
+ baseMapper.updateById(subsidySharedPool);
|
|
|
+
|
|
|
+ //添加均摊池改变日志
|
|
|
+ log.info("添加商户均摊池改变日志,均摊给用户");
|
|
|
+ subsidySharedPoolLogService.insertByBo(SubsidySharedPoolLogBo.builder()
|
|
|
+ .sharedId(subsidySharedPool.getSharedId())
|
|
|
+ .businessId(subsidySharedPool.getBusinessId())
|
|
|
+ .behaviorType(SharedPoolBehaviorType.SETTLEMENT_SUBSIDY)
|
|
|
+ .prevValue(totalSharedAmount)
|
|
|
+ .changeValue(MathUtils.subtract(totalSharedAmount, remaining))
|
|
|
+ .resultValue(remaining)
|
|
|
+ .remark(sharedSettlementMode.getMsg() + "给用户")
|
|
|
+ .build());
|
|
|
+
|
|
|
+ if (remaining.compareTo(BigDecimal.ZERO) > 0) {
|
|
|
+ Long businessId = subsidySharedPool.getBusinessId();
|
|
|
+ Business business = businessService.loadById(businessId, false);
|
|
|
+ if (ObjectUtil.isNotNull(business)) {
|
|
|
+ //用户余额增加
|
|
|
+ log.info("用户余额增加{}", remaining);
|
|
|
+ userService.changeUserBalance(UserChangeBalanceBo.builder()
|
|
|
+ .userId(business.getRelationUserId())
|
|
|
+ .entryValue(remaining)
|
|
|
+ .isAdd(true)
|
|
|
+ .sourceType(BalanceSourceType.SUBSIDY_OVERFLOW_RETURN)
|
|
|
+ .sourceId(subsidySharedPool.getSharedId())
|
|
|
+ .remark("消费排队均摊补贴溢出退回")
|
|
|
+ .businessId(businessId)
|
|
|
+ .businessName(business.getBusinessName())
|
|
|
+ .build());
|
|
|
+
|
|
|
+ //均摊池改变日志
|
|
|
+ log.info("添加商户均摊池改变日志:剩余返还给商家");
|
|
|
+ subsidySharedPoolLogService.insertByBo(SubsidySharedPoolLogBo.builder()
|
|
|
+ .sharedId(subsidySharedPool.getSharedId())
|
|
|
+ .businessId(subsidySharedPool.getBusinessId())
|
|
|
+ .behaviorType(SharedPoolBehaviorType.REFUND_SUBSIDY)
|
|
|
+ .prevValue(remaining)
|
|
|
+ .changeValue(remaining)
|
|
|
+ .resultValue(BigDecimal.ZERO)
|
|
|
+ .remark("剩余返还给商家")
|
|
|
+ .build());
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|