用户余额充值
This commit is contained in:
@@ -92,6 +92,16 @@ public class PlayCustomUserInfoEntity extends BaseEntity<PlayCustomUserInfoEntit
|
||||
*/
|
||||
private BigDecimal accountBalance;
|
||||
|
||||
/**
|
||||
* 累计充值金额
|
||||
*/
|
||||
private BigDecimal accumulatedRechargeAmount;
|
||||
|
||||
/**
|
||||
* 累计消费金额
|
||||
*/
|
||||
private BigDecimal accumulatedConsumptionAmount;
|
||||
|
||||
/**
|
||||
* 余额状态[0:不存在余额,1:存在余额]
|
||||
*/
|
||||
|
||||
@@ -29,6 +29,25 @@ public interface IPlayCustomUserInfoService extends IService<PlayCustomUserInfoE
|
||||
*/
|
||||
PlayCustomUserInfoEntity selectByOpenid(String openId);
|
||||
|
||||
/**
|
||||
* 根据顾客等级,查询顾客充值余额时,实际支付金额
|
||||
*
|
||||
* @param rechargeAmount 重置金额,单位分
|
||||
* @param customId 顾客ID
|
||||
* @return 实际支付金额
|
||||
*/
|
||||
BigDecimal getCustomPaymentAmount(BigDecimal rechargeAmount, String customId);
|
||||
|
||||
|
||||
/**
|
||||
* 顾客账户余额充值
|
||||
*
|
||||
* @param rechargeAmount 充值金额,单位分
|
||||
* @param customId 顾客ID
|
||||
* @param orderId 订单ID
|
||||
*/
|
||||
void customAccountBalanceRecharge(BigDecimal rechargeAmount, String customId, String orderId);
|
||||
|
||||
/**
|
||||
* 查询顾客
|
||||
*
|
||||
@@ -90,11 +109,12 @@ public interface IPlayCustomUserInfoService extends IService<PlayCustomUserInfoE
|
||||
* @param balanceBeforeOperation 操作前余额
|
||||
* @param balanceAfterOperation 操作后余额
|
||||
* @param operationType 操作类型(0:充值;1:消费;2:服务)
|
||||
* @param operationAction 操作动作
|
||||
* @param operationAction 操作动作
|
||||
* @param balanceMoney 操作金额
|
||||
* @param giftAmount 赠送金额
|
||||
* @param orderId 订单ID
|
||||
*/
|
||||
void updateAccountBalanceById(String userId, BigDecimal balanceBeforeOperation, BigDecimal balanceAfterOperation, String operationType, String operationAction, BigDecimal balanceMoney, String orderId);
|
||||
void updateAccountBalanceById(String userId, BigDecimal balanceBeforeOperation, BigDecimal balanceAfterOperation, String operationType, String operationAction, BigDecimal balanceMoney, BigDecimal giftAmount,String orderId);
|
||||
|
||||
/**
|
||||
* 修改顾客
|
||||
|
||||
@@ -17,10 +17,12 @@ import com.starry.admin.modules.custom.module.vo.PlayCustomRankingQueryVo;
|
||||
import com.starry.admin.modules.custom.module.vo.PlayCustomRankingReturnVo;
|
||||
import com.starry.admin.modules.custom.module.vo.PlayCustomUserQueryVo;
|
||||
import com.starry.admin.modules.custom.module.vo.PlayCustomUserReturnVo;
|
||||
import com.starry.admin.modules.custom.service.IPlayCustomLevelInfoService;
|
||||
import com.starry.admin.modules.custom.service.IPlayCustomUserInfoService;
|
||||
import com.starry.admin.modules.order.module.entity.PlayOrderInfoEntity;
|
||||
import com.starry.admin.modules.order.service.impl.PlayOrderInfoServiceImpl;
|
||||
import com.starry.common.utils.IdUtils;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
@@ -35,6 +37,7 @@ import java.util.stream.Collectors;
|
||||
* @author admin
|
||||
* @since 2024-04-08
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
public class PlayCustomUserInfoServiceImpl extends ServiceImpl<PlayCustomUserInfoMapper, PlayCustomUserInfoEntity> implements IPlayCustomUserInfoService {
|
||||
@Resource
|
||||
@@ -43,11 +46,11 @@ public class PlayCustomUserInfoServiceImpl extends ServiceImpl<PlayCustomUserInf
|
||||
@Resource
|
||||
private PlayOrderInfoServiceImpl playOrderInfoService;
|
||||
|
||||
|
||||
@Resource
|
||||
private IPlayBalanceDetailsInfoService playBalanceDetailsInfoService;
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public PlayCustomUserInfoEntity selectByOpenid(String openId) {
|
||||
LambdaQueryWrapper<PlayCustomUserInfoEntity> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
@@ -55,6 +58,38 @@ public class PlayCustomUserInfoServiceImpl extends ServiceImpl<PlayCustomUserInf
|
||||
return this.baseMapper.selectOne(lambdaQueryWrapper);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public BigDecimal getCustomPaymentAmount(BigDecimal rechargeAmount, String customId) {
|
||||
//根据顾客ID,查询顾客对应等级
|
||||
MPJLambdaWrapper<PlayCustomUserInfoEntity> lambdaQueryWrapper = new MPJLambdaWrapper<>();
|
||||
lambdaQueryWrapper.selectAll(PlayCustomLevelInfoEntity.class);
|
||||
lambdaQueryWrapper.leftJoin(PlayCustomLevelInfoEntity.class, PlayCustomLevelInfoEntity::getId, PlayCustomUserInfoEntity::getLevelId);
|
||||
lambdaQueryWrapper.eq(PlayCustomUserInfoEntity::getId, customId);
|
||||
PlayCustomLevelInfoEntity entity = this.baseMapper.selectJoinOne(PlayCustomLevelInfoEntity.class, lambdaQueryWrapper);
|
||||
if (entity == null) {
|
||||
log.error("未查询当前顾客的充值优惠金额,支付金额等于充值金额,rechargeAmount={},customId={}", rechargeAmount, customId);
|
||||
return rechargeAmount;
|
||||
}
|
||||
try {
|
||||
BigDecimal paymentAmount = BigDecimal.valueOf(entity.getDiscount()).divide(new BigDecimal(100), 4, RoundingMode.HALF_UP).add(rechargeAmount);
|
||||
log.info("等级为{}的顾客{},充值{}元,实际应该支付{}元", entity.getName(), customId, rechargeAmount, paymentAmount);
|
||||
return paymentAmount;
|
||||
} catch (Exception e) {
|
||||
log.error("计算顾客充值优惠金额发生异常,支付金额等于充值金额,rechargeAmount={},customId={}", rechargeAmount, customId);
|
||||
return rechargeAmount;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void customAccountBalanceRecharge(BigDecimal rechargeAmount, String customId, String orderId) {
|
||||
PlayCustomUserInfoEntity userInfo = this.selectById(customId);
|
||||
//查询充值赠送金额(暂是设置为0)
|
||||
BigDecimal giftAmount = BigDecimal.ZERO;
|
||||
//修改用户账户余额
|
||||
this.updateAccountBalanceById(customId, userInfo.getAccountBalance(), userInfo.getAccountBalance().add(rechargeAmount).add(giftAmount), "0", "重置", rechargeAmount.add(giftAmount), giftAmount, orderId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询顾客
|
||||
*
|
||||
@@ -236,11 +271,15 @@ public class PlayCustomUserInfoServiceImpl extends ServiceImpl<PlayCustomUserInf
|
||||
|
||||
|
||||
@Override
|
||||
public void updateAccountBalanceById(String userId, BigDecimal balanceBeforeOperation, BigDecimal balanceAfterOperation, String operationType, String operationAction, BigDecimal balanceMoney, String orderId) {
|
||||
public void updateAccountBalanceById(String userId, BigDecimal balanceBeforeOperation, BigDecimal balanceAfterOperation, String operationType, String operationAction, BigDecimal balanceMoney, BigDecimal giftAmount, String orderId) {
|
||||
//更新余额
|
||||
this.baseMapper.updateById(new PlayCustomUserInfoEntity(userId, balanceAfterOperation));
|
||||
PlayCustomUserInfoEntity entity = new PlayCustomUserInfoEntity();
|
||||
entity.setId(userId);
|
||||
entity.setAccountBalance(balanceAfterOperation);
|
||||
entity.setAccountState(balanceAfterOperation.compareTo(new BigDecimal(0)) > 0 ? "`" : "0");
|
||||
this.baseMapper.updateById(entity);
|
||||
//记录余额变更记录
|
||||
playBalanceDetailsInfoService.create("1", userId, balanceBeforeOperation, balanceAfterOperation, operationType, operationAction, balanceMoney, orderId);
|
||||
playBalanceDetailsInfoService.insertBalanceDetailsInfo("1", userId, balanceBeforeOperation, balanceAfterOperation, operationType, operationAction, balanceMoney, giftAmount, orderId);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user