member: 佣金失效

plp
owen 2 years ago
parent a708521b9d
commit 9eb7837b67

@ -635,12 +635,12 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
.setRefundStatus(TradeOrderRefundStatusEnum.PART.getStatus()).setRefundPrice(orderRefundPrice));
}
// TODO 芋艿:未来如果有分佣,需要更新相关分佣订单为已失效
// 扣减用户积分
getSelf().reduceUserPointAsync(order.getUserId(), orderRefundPrice, afterSaleId);
// 扣减用户经验
getSelf().reduceUserExperienceAsync(order.getUserId(), orderRefundPrice, afterSaleId);
// 更新分佣记录为已失效
getSelf().cancelBrokerageAsync(order.getUserId(), id);
}
@Override
@ -757,6 +757,11 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
brokerageApi.addBrokerage(userId, list);
}
@Async
protected void cancelBrokerageAsync(Long userId, Long orderItemId) {
brokerageApi.cancelBrokerage(userId, String.valueOf(orderItemId));
}
/**
* AOP
*

@ -27,6 +27,6 @@ public class BrokerageApiImpl implements BrokerageApi {
@Override
public void cancelBrokerage(Long userId, String bizId) {
memberBrokerageRecordService.cancelBrokerage(userId, bizId);
}
}

@ -39,4 +39,9 @@ public interface MemberBrokerageRecordMapper extends BaseMapperX<MemberBrokerage
.eq(MemberBrokerageRecordDO::getId, id)
.eq(MemberBrokerageRecordDO::getStatus, status));
}
default MemberBrokerageRecordDO selectByUserIdAndBizTypeAndBizId(Integer bizType, String bizId) {
return selectOne(MemberBrokerageRecordDO::getBizType, bizType,
MemberBrokerageRecordDO::getBizId, bizId);
}
}

@ -78,6 +78,21 @@ public interface MemberUserMapper extends BaseMapperX<MemberUserDO> {
update(null, lambdaUpdateWrapper);
}
/**
*
*
*
* @param id
* @param incrCount
*/
default void updateBrokeragePriceDecr(Long id, int incrCount) {
Assert.isTrue(incrCount < 0);
LambdaUpdateWrapper<MemberUserDO> lambdaUpdateWrapper = new LambdaUpdateWrapper<MemberUserDO>()
.setSql(" brokerage_price = brokerage_price + " + incrCount) // 负数,所以使用 + 号
.eq(MemberUserDO::getId, id);
update(null, lambdaUpdateWrapper);
}
/**
*
*
@ -94,12 +109,27 @@ public interface MemberUserMapper extends BaseMapperX<MemberUserDO> {
/**
*
*
*
* @param id
* @param incrCount
*/
default void updateFrozenBrokeragePriceDecr(Long id, int incrCount) {
Assert.isTrue(incrCount < 0);
LambdaUpdateWrapper<MemberUserDO> lambdaUpdateWrapper = new LambdaUpdateWrapper<MemberUserDO>()
.setSql(" frozen_brokerage_price = frozen_brokerage_price + " + incrCount) // 负数,所以使用 + 号
.eq(MemberUserDO::getId, id);
update(null, lambdaUpdateWrapper);
}
/**
* ,
*
* @param id
* @param incrCount
* @return
*/
default int updateFrozenBrokeragePriceDecr(Long id, int incrCount) {
default int updateFrozenBrokeragePriceDecrAndBrokeragePriceIncr(Long id, int incrCount) {
Assert.isTrue(incrCount < 0);
LambdaUpdateWrapper<MemberUserDO> lambdaUpdateWrapper = new LambdaUpdateWrapper<MemberUserDO>()
.setSql(" frozen_brokerage_price = frozen_brokerage_price + " + incrCount + // 负数,所以使用 + 号

@ -33,16 +33,22 @@ public interface MemberBrokerageRecordService {
/**
*
*
* @param userId ID
* @param userId
* @param list
*/
void addBrokerage(Long userId, List<BrokerageAddReqDTO> list);
/**
*
* @param userId
* @param bizId
*/
void cancelBrokerage(Long userId, String bizId);
/**
*
*
* @return
*/
int unfreezeRecord();
}

@ -13,6 +13,7 @@ import cn.iocoder.yudao.module.member.dal.dataobject.brokerage.record.MemberBrok
import cn.iocoder.yudao.module.member.dal.dataobject.point.MemberPointConfigDO;
import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
import cn.iocoder.yudao.module.member.dal.mysql.brokerage.record.MemberBrokerageRecordMapper;
import cn.iocoder.yudao.module.member.enums.brokerage.BrokerageRecordBizTypeEnum;
import cn.iocoder.yudao.module.member.enums.brokerage.BrokerageRecordStatusEnum;
import cn.iocoder.yudao.module.member.service.point.MemberPointConfigService;
import cn.iocoder.yudao.module.member.service.user.MemberUserService;
@ -85,6 +86,29 @@ public class MemberBrokerageRecordServiceImpl implements MemberBrokerageRecordSe
addBrokerage(secondUser, list, memberConfig.getBrokerageFrozenDays(), memberConfig.getBrokerageSecondPercent(), BrokerageAddReqDTO::getSkuSecondBrokeragePrice);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void cancelBrokerage(Long userId, String bizId) {
MemberBrokerageRecordDO record = memberBrokerageRecordMapper.selectByUserIdAndBizTypeAndBizId(BrokerageRecordBizTypeEnum.ORDER.getType(), bizId);
if (record == null || ObjectUtil.notEqual(record.getUserId(), userId)) {
log.error("[cancelBrokerage][userId({})][bizId({}) 更新为已失效失败:记录不存在]", userId, bizId);
return;
}
MemberBrokerageRecordDO updateObj = new MemberBrokerageRecordDO().setStatus(BrokerageRecordStatusEnum.CANCEL.getStatus());
int updateRows = memberBrokerageRecordMapper.updateByIdAndStatus(record.getId(), record.getStatus(), updateObj);
if (updateRows == 0) {
log.error("[cancelBrokerage][record({}) 更新为已失效失败]", record.getId());
return;
}
if (BrokerageRecordStatusEnum.WAIT_SETTLEMENT.getStatus().equals(record.getStatus())) {
memberUserService.updateUserFrozenBrokeragePrice(userId, -record.getPrice());
} else if (BrokerageRecordStatusEnum.SETTLEMENT.getStatus().equals(record.getStatus())) {
memberUserService.updateUserBrokeragePrice(userId, -record.getPrice());
}
}
/**
*
*
@ -190,7 +214,7 @@ public class MemberBrokerageRecordServiceImpl implements MemberBrokerageRecordSe
}
// 更新用户冻结佣金
memberUserService.updateUserFrozenBrokeragePrice(record.getUserId(), -record.getPrice());
memberUserService.updateFrozenBrokeragePriceDecrAndBrokeragePriceIncr(record.getUserId(), -record.getPrice());
log.info("[unfreezeRecord][record({}) 更新为已结算成功]", record.getId());
return true;

@ -190,4 +190,12 @@ public interface MemberUserService {
* @param frozenBrokeragePrice
*/
void updateUserFrozenBrokeragePrice(Long id, int frozenBrokeragePrice);
/**
* ,
*
* @param id
* @param frozenBrokeragePrice
*/
void updateFrozenBrokeragePriceDecrAndBrokeragePriceIncr(Long id, int frozenBrokeragePrice);
}

@ -1,5 +1,6 @@
package cn.iocoder.yudao.module.member.service.user;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
@ -272,7 +273,11 @@ public class MemberUserServiceImpl implements MemberUserService {
@Override
@Transactional(rollbackFor = Exception.class)
public void updateUserBrokeragePrice(Long id, int brokeragePrice) {
if (brokeragePrice > 0) {
memberUserMapper.updateBrokeragePriceIncr(id, brokeragePrice);
} else if (brokeragePrice < 0) {
memberUserMapper.updateBrokeragePriceDecr(id, brokeragePrice);
}
}
@Override
@ -281,11 +286,18 @@ public class MemberUserServiceImpl implements MemberUserService {
if (frozenBrokeragePrice > 0) {
memberUserMapper.updateFrozenBrokeragePriceIncr(id, frozenBrokeragePrice);
} else if (frozenBrokeragePrice < 0) {
int updateRows = memberUserMapper.updateFrozenBrokeragePriceDecr(id, frozenBrokeragePrice);
memberUserMapper.updateFrozenBrokeragePriceDecr(id, frozenBrokeragePrice);
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updateFrozenBrokeragePriceDecrAndBrokeragePriceIncr(Long id, int frozenBrokeragePrice) {
Assert.isTrue(frozenBrokeragePrice < 0);
int updateRows = memberUserMapper.updateFrozenBrokeragePriceDecrAndBrokeragePriceIncr(id, frozenBrokeragePrice);
if (updateRows == 0) {
throw exception(MEMBER_FROZEN_BROKERAGE_PRICE_NOT_ENOUGH);
}
}
}
}

Loading…
Cancel
Save