解决分销佣金冻结错误

This commit is contained in:
lifenlong 2021-08-12 00:35:39 +08:00
parent d8155b2c15
commit 100d5d3317
7 changed files with 60 additions and 44 deletions

View File

@ -52,8 +52,8 @@ public class DistributionCashBuyerController {
@ApiImplicitParam(name = "price", value = "申请金额", required = true, paramType = "query", dataType = "double") @ApiImplicitParam(name = "price", value = "申请金额", required = true, paramType = "query", dataType = "double")
}) })
@PostMapping @PostMapping
public ResultMessage<Object> cash(@Max(value = 1000, message = "充值金额单次最多允许提现1000元") public ResultMessage<Object> cash(@Max(value = 1000, message = "提现金额单次最多允许提现1000元")
@Min(value = 1, message = "充值金额单次最少提现金额为1元") @Min(value = 1, message = "提现金额单次最少提现金额为1元")
@NotNull @ApiIgnore Double price) { @NotNull @ApiIgnore Double price) {
if (distributionCashService.cash(price)) { if (distributionCashService.cash(price)) {
return ResultUtil.success(); return ResultUtil.success();

View File

@ -67,6 +67,7 @@ public class DistributionOrderExecute implements OrderStatusChangeEvent, EveryDa
.eq(DistributionOrder::getDistributionOrderStatus, DistributionOrderStatusEnum.WAIT_BILL.name()) .eq(DistributionOrder::getDistributionOrderStatus, DistributionOrderStatusEnum.WAIT_BILL.name())
.le(DistributionOrder::getSettleCycle, new DateTime()) .le(DistributionOrder::getSettleCycle, new DateTime())
.set(DistributionOrder::getDistributionOrderStatus, DistributionOrderStatusEnum.WAIT_CASH.name())); .set(DistributionOrder::getDistributionOrderStatus, DistributionOrderStatusEnum.WAIT_CASH.name()));
} }
@Override @Override

View File

@ -91,21 +91,21 @@ public class DistributionOrder {
@ApiModelProperty(value = "商品数量") @ApiModelProperty(value = "商品数量")
private Integer num; private Integer num;
public DistributionOrder(StoreFlow storeFlow){ public DistributionOrder(StoreFlow storeFlow) {
distributionOrderStatus=DistributionOrderStatusEnum.WAIT_BILL.name(); distributionOrderStatus = DistributionOrderStatusEnum.WAIT_BILL.name();
memberId=storeFlow.getMemberId(); memberId = storeFlow.getMemberId();
memberName=storeFlow.getMemberName(); memberName = storeFlow.getMemberName();
rebate=storeFlow.getDistributionRebate(); rebate = storeFlow.getDistributionRebate();
storeId=storeFlow.getStoreId(); storeId = storeFlow.getStoreId();
storeName=storeFlow.getStoreName(); storeName = storeFlow.getStoreName();
orderSn=storeFlow.getOrderSn(); orderSn = storeFlow.getOrderSn();
orderItemSn=storeFlow.getOrderItemSn(); orderItemSn = storeFlow.getOrderItemSn();
goodsId=storeFlow.getGoodsId(); goodsId = storeFlow.getGoodsId();
goodsName=storeFlow.getGoodsName(); goodsName = storeFlow.getGoodsName();
skuId=storeFlow.getSkuId(); skuId = storeFlow.getSkuId();
specs=storeFlow.getSpecs(); specs = storeFlow.getSpecs();
image=storeFlow.getImage(); image = storeFlow.getImage();
num= storeFlow.getNum(); num = storeFlow.getNum();
} }
} }

View File

@ -16,18 +16,19 @@ public interface DistributionMapper extends BaseMapper<Distribution> {
/** /**
* 修改分销员可提现金额 * 修改分销员可提现金额
* *
* @param canRebate 提现金额 * @param commissionFrozen 分销金额
* @param distributionId 分销员ID * @param distributionId 分销员ID
*/ */
@Update("UPDATE li_distribution set can_rebate = can_rebate+#{canRebate} WHERE id = #{distributionId}") @Update("UPDATE li_distribution set commission_frozen = (commission_frozen+#{commissionFrozen}) , rebate_total=(rebate_total+#{commissionFrozen}) WHERE id = #{distributionId}")
void subCanRebate(Double canRebate, String distributionId); void subCanRebate(Double commissionFrozen, String distributionId);
/** /**
* 添加可提现金额 * 添加分销金额
* *
* @param canRebate 提现金额 * @param commissionFrozen 分销金额
* @param distributionId 分销员ID * @param distributionId 分销员ID
*/ */
@Update("UPDATE li_distribution set can_rebate = (can_rebate+#{canRebate}) , rebate_total=(rebate_total+#{canRebate}) , distribution_order_count=(distribution_order_count+1) WHERE id = #{distributionId}") @Update("UPDATE li_distribution set commission_frozen = (commission_frozen+#{commissionFrozen}) , rebate_total=(rebate_total+#{commissionFrozen}) , distribution_order_count=(distribution_order_count+1) WHERE id = #{distributionId}")
void addCanRebate(Double canRebate, String distributionId); void addCanRebate(Double commissionFrozen, String distributionId);
} }

View File

@ -20,7 +20,9 @@ public interface DistributionOrderMapper extends BaseMapper<DistributionOrder> {
* @param settleCycle 时间 * @param settleCycle 时间
*/ */
@Update("UPDATE li_distribution AS d " + @Update("UPDATE li_distribution AS d " +
"SET d.can_rebate =(d.can_rebate +(SELECT SUM( dorder.rebate ) FROM li_distribution_order AS dorder WHERE dorder.distribution_id = d.id AND dorder.distribution_order_status=#{distributionOrderStatus} AND dorder.settle_cycle< #{settleCycle} ))") "SET d.can_rebate =(d.can_rebate +(SELECT SUM( dorder.rebate ) " +
"SET d.commission_frozen =(d.commission_frozen -(SELECT SUM( dorder.rebate ) " +
"FROM li_distribution_order AS dorder WHERE dorder.distribution_id = d.id AND dorder.distribution_order_status=#{distributionOrderStatus} AND dorder.settle_cycle< #{settleCycle} ))")
void rebate(String distributionOrderStatus, DateTime settleCycle); void rebate(String distributionOrderStatus, DateTime settleCycle);
} }

View File

@ -73,7 +73,6 @@ public class DistributionCashServiceImpl extends ServiceImpl<DistributionCashMap
} }
//将提现金额存入冻结金额,扣减可提现金额 //将提现金额存入冻结金额,扣减可提现金额
distribution.setCanRebate(CurrencyUtil.sub(distribution.getCanRebate(), applyMoney)); distribution.setCanRebate(CurrencyUtil.sub(distribution.getCanRebate(), applyMoney));
distribution.setCommissionFrozen(CurrencyUtil.add(distribution.getCommissionFrozen(), applyMoney));
distributionService.updateById(distribution); distributionService.updateById(distribution);
//提现申请记录 //提现申请记录
DistributionCash distributionCash = new DistributionCash("D" + SnowFlake.getId(), distribution.getId(), applyMoney, distribution.getMemberName()); DistributionCash distributionCash = new DistributionCash("D" + SnowFlake.getId(), distribution.getId(), applyMoney, distribution.getMemberName());
@ -127,12 +126,6 @@ public class DistributionCashServiceImpl extends ServiceImpl<DistributionCashMap
//审核通过 //审核通过
if (result.equals(WithdrawStatusEnum.VIA_AUDITING.name())) { if (result.equals(WithdrawStatusEnum.VIA_AUDITING.name())) {
memberWithdrawalMessage.setStatus(WithdrawStatusEnum.VIA_AUDITING.name()); memberWithdrawalMessage.setStatus(WithdrawStatusEnum.VIA_AUDITING.name());
//审核通过需要校验冻结金额不足情况
if (distribution.getCommissionFrozen() < distributorCash.getPrice()) {
throw new ServiceException(ResultCode.WALLET_WITHDRAWAL_INSUFFICIENT);
}
//分销员佣金解冻
distribution.setCommissionFrozen(CurrencyUtil.sub(distribution.getCommissionFrozen(), distributorCash.getPrice()));
//分销记录操作 //分销记录操作
distributorCash.setDistributionCashStatus(WithdrawStatusEnum.VIA_AUDITING.name()); distributorCash.setDistributionCashStatus(WithdrawStatusEnum.VIA_AUDITING.name());
distributorCash.setPayTime(new Date()); distributorCash.setPayTime(new Date());
@ -140,8 +133,6 @@ public class DistributionCashServiceImpl extends ServiceImpl<DistributionCashMap
memberWalletService.increase(distributorCash.getPrice(), distribution.getMemberId(), "分销[" + distributorCash.getSn() + "]佣金提现到余额[" + distributorCash.getPrice() + "]", DepositServiceTypeEnum.WALLET_COMMISSION.name()); memberWalletService.increase(distributorCash.getPrice(), distribution.getMemberId(), "分销[" + distributorCash.getSn() + "]佣金提现到余额[" + distributorCash.getPrice() + "]", DepositServiceTypeEnum.WALLET_COMMISSION.name());
} else { } else {
memberWithdrawalMessage.setStatus(WithdrawStatusEnum.FAIL_AUDITING.name()); memberWithdrawalMessage.setStatus(WithdrawStatusEnum.FAIL_AUDITING.name());
//分销员佣金解冻
distribution.setCommissionFrozen(CurrencyUtil.sub(distribution.getCommissionFrozen(), distributorCash.getPrice()));
//分销员可提现金额退回 //分销员可提现金额退回
distribution.setCanRebate(CurrencyUtil.add(distribution.getCanRebate(), distributorCash.getPrice())); distribution.setCanRebate(CurrencyUtil.add(distribution.getCanRebate(), distributorCash.getPrice()));
distributorCash.setDistributionCashStatus(WithdrawStatusEnum.FAIL_AUDITING.name()); distributorCash.setDistributionCashStatus(WithdrawStatusEnum.FAIL_AUDITING.name());

View File

@ -72,7 +72,7 @@ public class DistributionOrderServiceImpl extends ServiceImpl<DistributionOrderM
/** /**
* 1.查看订单是否为分销订单 * 1.查看订单是否为分销订单
* 2.查看店铺流水计算分销总佣金 * 2.查看店铺流水计算分销总佣金
* 3.修改分销员的分销总金额可提现金额 * 3.修改分销员的分销总金额冻结金额
* *
* @param orderSn 订单编号 * @param orderSn 订单编号
*/ */
@ -102,15 +102,36 @@ public class DistributionOrderServiceImpl extends ServiceImpl<DistributionOrderM
//设置结算天数(解冻日期) //设置结算天数(解冻日期)
Setting setting = settingService.get(SettingEnum.DISTRIBUTION_SETTING.name()); Setting setting = settingService.get(SettingEnum.DISTRIBUTION_SETTING.name());
DistributionSetting distributionSetting = JSONUtil.toBean(setting.getSettingValue(), DistributionSetting.class); DistributionSetting distributionSetting = JSONUtil.toBean(setting.getSettingValue(), DistributionSetting.class);
DateTime dateTime = new DateTime();
//默认解冻1天 //默认解冻1天
if (distributionSetting.getCashDay().equals(0)) {
distributionOrder.setSettleCycle(new DateTime());
} else {
DateTime dateTime = new DateTime();
dateTime.offsetNew(DateField.DAY_OF_MONTH, distributionSetting.getCashDay()); dateTime.offsetNew(DateField.DAY_OF_MONTH, distributionSetting.getCashDay());
distributionOrder.setSettleCycle(dateTime); distributionOrder.setSettleCycle(dateTime);
this.save(distributionOrder);
} }
//如果包含分销商品则记录会员的分销总额
//添加分销订单
this.save(distributionOrder);
//记录会员的分销总额
if (rebate != 0.0) { if (rebate != 0.0) {
distributionService.addRebate(rebate, order.getDistributionId()); distributionService.addRebate(rebate, order.getDistributionId());
//如果天数写0则立即进行结算
if (distributionSetting.getCashDay().equals(0)) {
//计算分销提佣
this.baseMapper.rebate(DistributionOrderStatusEnum.WAIT_BILL.name(), new DateTime());
//修改分销订单状态
this.update(new LambdaUpdateWrapper<DistributionOrder>()
.eq(DistributionOrder::getDistributionOrderStatus, DistributionOrderStatusEnum.WAIT_BILL.name())
.le(DistributionOrder::getSettleCycle, new DateTime())
.set(DistributionOrder::getDistributionOrderStatus, DistributionOrderStatusEnum.WAIT_CASH.name()));
}
}
} }
} }
@ -145,7 +166,7 @@ public class DistributionOrderServiceImpl extends ServiceImpl<DistributionOrderM
//如果包含分销商品则记录会员的分销总额 //如果包含分销商品则记录会员的分销总额
if (rebate != 0.0) { if (rebate != 0.0) {
distributionService.addRebate(CurrencyUtil.sub(0, rebate), order.getDistributionId()); distributionService.subCanRebate(CurrencyUtil.sub(0, rebate), order.getDistributionId());
} }
} }