解决分销佣金冻结错误

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")
})
@PostMapping
public ResultMessage<Object> cash(@Max(value = 1000, message = "充值金额单次最多允许提现1000元")
@Min(value = 1, message = "充值金额单次最少提现金额为1元")
public ResultMessage<Object> cash(@Max(value = 1000, message = "提现金额单次最多允许提现1000元")
@Min(value = 1, message = "提现金额单次最少提现金额为1元")
@NotNull @ApiIgnore Double price) {
if (distributionCashService.cash(price)) {
return ResultUtil.success();

View File

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

View File

@ -45,7 +45,7 @@ public class DistributionOrder {
@CreatedDate
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@TableField(fill = FieldFill.INSERT)
@ApiModelProperty(value = "创建时间", hidden = true)
private Date createTime;
@ -91,21 +91,21 @@ public class DistributionOrder {
@ApiModelProperty(value = "商品数量")
private Integer num;
public DistributionOrder(StoreFlow storeFlow){
distributionOrderStatus=DistributionOrderStatusEnum.WAIT_BILL.name();
memberId=storeFlow.getMemberId();
memberName=storeFlow.getMemberName();
rebate=storeFlow.getDistributionRebate();
storeId=storeFlow.getStoreId();
storeName=storeFlow.getStoreName();
orderSn=storeFlow.getOrderSn();
orderItemSn=storeFlow.getOrderItemSn();
goodsId=storeFlow.getGoodsId();
goodsName=storeFlow.getGoodsName();
skuId=storeFlow.getSkuId();
specs=storeFlow.getSpecs();
image=storeFlow.getImage();
num= storeFlow.getNum();
public DistributionOrder(StoreFlow storeFlow) {
distributionOrderStatus = DistributionOrderStatusEnum.WAIT_BILL.name();
memberId = storeFlow.getMemberId();
memberName = storeFlow.getMemberName();
rebate = storeFlow.getDistributionRebate();
storeId = storeFlow.getStoreId();
storeName = storeFlow.getStoreName();
orderSn = storeFlow.getOrderSn();
orderItemSn = storeFlow.getOrderItemSn();
goodsId = storeFlow.getGoodsId();
goodsName = storeFlow.getGoodsName();
skuId = storeFlow.getSkuId();
specs = storeFlow.getSpecs();
image = storeFlow.getImage();
num = storeFlow.getNum();
}
}

View File

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

View File

@ -20,7 +20,9 @@ public interface DistributionOrderMapper extends BaseMapper<DistributionOrder> {
* @param settleCycle 时间
*/
@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);
}

View File

@ -73,7 +73,6 @@ public class DistributionCashServiceImpl extends ServiceImpl<DistributionCashMap
}
//将提现金额存入冻结金额,扣减可提现金额
distribution.setCanRebate(CurrencyUtil.sub(distribution.getCanRebate(), applyMoney));
distribution.setCommissionFrozen(CurrencyUtil.add(distribution.getCommissionFrozen(), applyMoney));
distributionService.updateById(distribution);
//提现申请记录
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())) {
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.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());
} else {
memberWithdrawalMessage.setStatus(WithdrawStatusEnum.FAIL_AUDITING.name());
//分销员佣金解冻
distribution.setCommissionFrozen(CurrencyUtil.sub(distribution.getCommissionFrozen(), distributorCash.getPrice()));
//分销员可提现金额退回
distribution.setCanRebate(CurrencyUtil.add(distribution.getCanRebate(), distributorCash.getPrice()));
distributorCash.setDistributionCashStatus(WithdrawStatusEnum.FAIL_AUDITING.name());

View File

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