|
@@ -15,6 +15,7 @@ package vip.xiaonuo.biz.modular.consumptionrecord.service.impl;
|
|
|
import cn.hutool.core.bean.BeanUtil;
|
|
|
import cn.hutool.core.collection.CollStreamUtil;
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
+import cn.hutool.core.util.PhoneUtil;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
@@ -23,8 +24,10 @@ import jakarta.annotation.Resource;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
+import vip.xiaonuo.auth.core.util.StpLoginUserUtil;
|
|
|
import vip.xiaonuo.biz.modular.user.entity.BizUser;
|
|
|
import vip.xiaonuo.biz.modular.user.service.BizUserService;
|
|
|
+import vip.xiaonuo.common.cache.CommonCacheOperator;
|
|
|
import vip.xiaonuo.common.enums.CommonSortOrderEnum;
|
|
|
import vip.xiaonuo.common.exception.CommonException;
|
|
|
import vip.xiaonuo.common.page.CommonPageRequest;
|
|
@@ -37,6 +40,7 @@ import vip.xiaonuo.biz.modular.consumptionrecord.param.ConsumptionRecordPagePara
|
|
|
import vip.xiaonuo.biz.modular.consumptionrecord.service.ConsumptionRecordService;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
+import java.util.Date;
|
|
|
import java.util.List;
|
|
|
|
|
|
/**
|
|
@@ -51,17 +55,48 @@ public class ConsumptionRecordServiceImpl extends ServiceImpl<ConsumptionRecordM
|
|
|
@Resource
|
|
|
private BizUserService bizUserService;
|
|
|
|
|
|
+ @Resource
|
|
|
+ private CommonCacheOperator commonCacheOperator;
|
|
|
+
|
|
|
@Override
|
|
|
public Page<ConsumptionRecord> page(ConsumptionRecordPageParam consumptionRecordPageParam) {
|
|
|
QueryWrapper<ConsumptionRecord> queryWrapper = new QueryWrapper<ConsumptionRecord>().checkSqlInjection();
|
|
|
- if(ObjectUtil.isAllNotEmpty(consumptionRecordPageParam.getSortField(), consumptionRecordPageParam.getSortOrder())) {
|
|
|
- CommonSortOrderEnum.validate(consumptionRecordPageParam.getSortOrder());
|
|
|
- queryWrapper.orderBy(true, consumptionRecordPageParam.getSortOrder().equals(CommonSortOrderEnum.ASC.getValue()),
|
|
|
- StrUtil.toUnderlineCase(consumptionRecordPageParam.getSortField()));
|
|
|
+ if(ObjectUtil.isNotEmpty(consumptionRecordPageParam.getUserName())){
|
|
|
+ queryWrapper.like("su.name",consumptionRecordPageParam.getUserName());
|
|
|
+ }
|
|
|
+ if(ObjectUtil.isNotEmpty(consumptionRecordPageParam.getConsumptionOperate())){
|
|
|
+ queryWrapper.eq("cr.consumption_operate",consumptionRecordPageParam.getConsumptionOperate());
|
|
|
+ }
|
|
|
+ if(ObjectUtil.isNotEmpty(consumptionRecordPageParam.getOrgId())){
|
|
|
+ queryWrapper.eq("cr.consumption_org",consumptionRecordPageParam.getOrgId());
|
|
|
+ }
|
|
|
+ if(ObjectUtil.isNotEmpty(consumptionRecordPageParam.getConsumptionTimeBegin()) &&
|
|
|
+ ObjectUtil.isNotEmpty(consumptionRecordPageParam.getConsumptionTimeEnd())){
|
|
|
+ queryWrapper.between("cr.consumption_time",consumptionRecordPageParam.getConsumptionTimeBegin()+" 00:00:00",consumptionRecordPageParam.getConsumptionTimeEnd()+" 23:59:59");
|
|
|
+ }
|
|
|
+ // 校验数据范围
|
|
|
+ List<String> loginUserDataScope = StpLoginUserUtil.getLoginUserDataScope();
|
|
|
+ if (ObjectUtil.isNotEmpty(loginUserDataScope)) {
|
|
|
+ queryWrapper.in("cr.consumption_org", loginUserDataScope);
|
|
|
} else {
|
|
|
- queryWrapper.lambda().orderByAsc(ConsumptionRecord::getId);
|
|
|
+ queryWrapper.in("cr.user_id", StpLoginUserUtil.getLoginUser().getId());
|
|
|
}
|
|
|
- return this.page(CommonPageRequest.defaultPage(), queryWrapper);
|
|
|
+ Page<ConsumptionRecord> pageList = this.getBaseMapper().getPageList(CommonPageRequest.defaultPage(), queryWrapper);
|
|
|
+ for(ConsumptionRecord consumptionRecord : pageList.getRecords()){
|
|
|
+ if(StringUtils.equals(consumptionRecord.getConsumptionOperate(),"3")){
|
|
|
+ //消费结算,设置下说明
|
|
|
+ if(StringUtils.equals(consumptionRecord.getConsumptionType(),"1")){
|
|
|
+ consumptionRecord.setConsumptionRemark("代金券消费"+consumptionRecord.getVoucherMoney().stripTrailingZeros().toPlainString()+"元");
|
|
|
+ }
|
|
|
+ if(StringUtils.equals(consumptionRecord.getConsumptionType(),"2")){
|
|
|
+ consumptionRecord.setConsumptionRemark("账户余额消费"+consumptionRecord.getAccountMoney().stripTrailingZeros().toPlainString()+"元");
|
|
|
+ }
|
|
|
+ if(StringUtils.equals(consumptionRecord.getConsumptionType(),"3")){
|
|
|
+ consumptionRecord.setConsumptionRemark("代金券消费"+consumptionRecord.getVoucherMoney().stripTrailingZeros().toPlainString()+"元"+",账户余额消费"+consumptionRecord.getAccountMoney().stripTrailingZeros().toPlainString()+"元");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return pageList;
|
|
|
}
|
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
@@ -72,38 +107,55 @@ public class ConsumptionRecordServiceImpl extends ServiceImpl<ConsumptionRecordM
|
|
|
ConsumptionRecord consumptionRecord = BeanUtil.toBean(consumptionRecordAddParam, ConsumptionRecord.class);
|
|
|
//获取用户信息
|
|
|
BizUser bizUser = bizUserService.getById(consumptionRecordAddParam.getUserId());
|
|
|
+ consumptionRecord.setVoucherBalance(bizUser.getVoucherBalance());
|
|
|
+ consumptionRecord.setAccountBalance(bizUser.getAccountBalance());
|
|
|
if(StringUtils.equals(consumptionRecordAddParam.getConsumptionOperate(),"1")){
|
|
|
//会员赠送
|
|
|
if(StringUtils.equals(consumptionRecordAddParam.getConsumptionType(),"1")){
|
|
|
//判断当前选择的是代金券还是余额 1:代金券 2:余额
|
|
|
//选择代金券,用户原有代金券金额+本地赠送金额
|
|
|
- bizUser.setVoucherBalance(bizUser.getVoucherBalance().add(consumptionRecordAddParam.getVoucherMoney()));
|
|
|
- consumptionRecord.setConsumptionMoney(consumptionRecordAddParam.getVoucherMoney());
|
|
|
+ bizUser.setVoucherBalance(bizUser.getVoucherBalance().add(consumptionRecordAddParam.getConsumptionMoney()));
|
|
|
+ consumptionRecord.setVoucherMoney(consumptionRecordAddParam.getConsumptionMoney());
|
|
|
}else if(StringUtils.equals(consumptionRecordAddParam.getConsumptionType(),"2")){
|
|
|
//选择余额,用户原有余额+本次赠送余额金额
|
|
|
- bizUser.setAccountBalance(bizUser.getAccountBalance().add(consumptionRecordAddParam.getAccountMoney()));
|
|
|
- consumptionRecord.setConsumptionMoney(consumptionRecordAddParam.getAccountMoney());
|
|
|
+ bizUser.setAccountBalance(bizUser.getAccountBalance().add(consumptionRecordAddParam.getConsumptionMoney()));
|
|
|
+ consumptionRecord.setAccountMoney(consumptionRecordAddParam.getConsumptionMoney());
|
|
|
}
|
|
|
}else if(StringUtils.equals(consumptionRecordAddParam.getConsumptionOperate(),"2")){
|
|
|
//会员扣减
|
|
|
if(StringUtils.equals(consumptionRecordAddParam.getConsumptionType(),"1")){
|
|
|
//选择代金券,用户原有代金券金额-本次扣减金额
|
|
|
- bizUser.setVoucherBalance(bizUser.getVoucherBalance().subtract(consumptionRecordAddParam.getVoucherMoney()));
|
|
|
- consumptionRecord.setConsumptionMoney(consumptionRecordAddParam.getVoucherMoney());
|
|
|
+ bizUser.setVoucherBalance(bizUser.getVoucherBalance().subtract(consumptionRecordAddParam.getConsumptionMoney()));
|
|
|
+ consumptionRecord.setVoucherMoney(consumptionRecordAddParam.getConsumptionMoney());
|
|
|
}else if(StringUtils.equals(consumptionRecordAddParam.getConsumptionType(),"2")){
|
|
|
//选择账户余额,用户原有余额-本次扣减余额
|
|
|
- bizUser.setAccountBalance(bizUser.getAccountBalance().subtract(consumptionRecordAddParam.getAccountMoney()));
|
|
|
- consumptionRecord.setConsumptionMoney(consumptionRecordAddParam.getAccountMoney());
|
|
|
+ bizUser.setAccountBalance(bizUser.getAccountBalance().subtract(consumptionRecordAddParam.getConsumptionMoney()));
|
|
|
+ consumptionRecord.setAccountMoney(consumptionRecordAddParam.getConsumptionMoney());
|
|
|
}
|
|
|
- }else {
|
|
|
+ }else{
|
|
|
//正常消费结算
|
|
|
+ //人工结算需要短信校验,获取手机验证码
|
|
|
+ if(StringUtils.equals(consumptionRecordAddParam.getConsumptionOperate(),"3")){
|
|
|
+ Object code = commonCacheOperator.get(consumptionRecordAddParam.getPhoneNumber());
|
|
|
+ if(!StringUtils.equals(code.toString(),consumptionRecordAddParam.getPhoneCode())){
|
|
|
+ throw new CommonException("验证码不正确!");
|
|
|
+ }else{
|
|
|
+ commonCacheOperator.remove(consumptionRecordAddParam.getPhoneNumber());
|
|
|
+ }
|
|
|
+ }
|
|
|
//判断当前消费金额是否大于代金券金额,优先扣减代金券金额
|
|
|
if(consumptionRecordAddParam.getConsumptionMoney().compareTo(bizUser.getVoucherBalance()) > 0){
|
|
|
+ //判断代金券金额是否大于0
|
|
|
+ if(bizUser.getVoucherBalance().compareTo(BigDecimal.ZERO) > 0){
|
|
|
+ consumptionRecord.setConsumptionType("3");
|
|
|
+ }else{
|
|
|
+ consumptionRecord.setConsumptionType("2");
|
|
|
+ }
|
|
|
//计算本次消费和代金券差额
|
|
|
BigDecimal subtract = consumptionRecordAddParam.getConsumptionMoney().subtract(bizUser.getVoucherBalance());
|
|
|
//如果差额大于账户余额,表示账户余额不足
|
|
|
if(subtract.compareTo(bizUser.getAccountBalance()) > 0){
|
|
|
- throw new CommonException("账户余额不足!");
|
|
|
+ throw new CommonException("账户余额不足,请先充值!");
|
|
|
}
|
|
|
//记录消费信息
|
|
|
consumptionRecord.setVoucherMoney(bizUser.getVoucherBalance());
|
|
@@ -116,9 +168,12 @@ public class ConsumptionRecordServiceImpl extends ServiceImpl<ConsumptionRecordM
|
|
|
//直接扣减代金券
|
|
|
bizUser.setVoucherBalance(bizUser.getVoucherBalance().subtract(consumptionRecordAddParam.getConsumptionMoney()));
|
|
|
consumptionRecord.setVoucherMoney(consumptionRecordAddParam.getConsumptionMoney());
|
|
|
+ consumptionRecord.setConsumptionType("1");
|
|
|
}
|
|
|
}
|
|
|
//保存消费记录
|
|
|
+ consumptionRecord.setConsumptionOrg(StpLoginUserUtil.getLoginUser().getOrgId());
|
|
|
+ consumptionRecord.setConsumptionTime(new Date());
|
|
|
this.save(consumptionRecord);
|
|
|
//修改账户余额
|
|
|
bizUserService.updateById(bizUser);
|
|
@@ -148,6 +203,11 @@ public class ConsumptionRecordServiceImpl extends ServiceImpl<ConsumptionRecordM
|
|
|
if(ObjectUtil.isEmpty(consumptionRecordAddParam.getUserId())){
|
|
|
throw new CommonException("用户userId不能为空!");
|
|
|
}
|
|
|
+ if(ObjectUtil.isNotEmpty(consumptionRecordAddParam.getPhoneNumber())){
|
|
|
+ if (!PhoneUtil.isMobile(consumptionRecordAddParam.getPhoneNumber())) {
|
|
|
+ throw new CommonException("手机号码:{}格式错误", consumptionRecordAddParam.getPhoneNumber());
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|