用户余额充值

This commit is contained in:
admin
2024-06-07 17:17:49 +08:00
parent 463e869534
commit f75c326d10
10 changed files with 115 additions and 29 deletions

View File

@@ -92,6 +92,16 @@ public class PlayCustomUserInfoEntity extends BaseEntity<PlayCustomUserInfoEntit
*/
private BigDecimal accountBalance;
/**
* 累计充值金额
*/
private BigDecimal accumulatedRechargeAmount;
/**
* 累计消费金额
*/
private BigDecimal accumulatedConsumptionAmount;
/**
* 余额状态[0:不存在余额1:存在余额]
*/

View File

@@ -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);
/**
* 修改顾客

View File

@@ -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);
}
/**