支付优化

This commit is contained in:
seesaw
2024-10-23 14:02:47 +08:00
parent d3bc8cc6aa
commit 2dc526dbcc
5 changed files with 89 additions and 24 deletions

View File

@ -2,6 +2,8 @@ package cn.iocoder.yudao.module.member.service.amount;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSONUtil;
import cn.iocoder.yudao.module.member.controller.app.user.vo.AppUserInfoCardVO;
import cn.iocoder.yudao.module.member.dal.dataobject.card.CardDO;
import cn.iocoder.yudao.module.member.dal.dataobject.order.DishOrderDO;
import cn.iocoder.yudao.module.member.dal.dataobject.rechargelog.RechargeLogDO;
@ -16,6 +18,7 @@ import cn.iocoder.yudao.module.member.enums.CostTypeEnum;
import cn.iocoder.yudao.module.member.service.appup.AppUpService;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
@ -41,16 +44,7 @@ public class AmountServiceImpl implements AmountService {
@Resource
private MemberUserMapper userMapper;
@Resource
private DishOrderMapper dishOrderMapper;
@Resource
private CardMapper cardMapper;
@Resource
private IntegralRefundMapper refundMapper;
@Resource
private RechargeLogMapper rechargeLogMapper;
public final static Map<String, Object> userLocks = new WeakHashMap<>();
@Override
public void operateAmount(Long userId, BigDecimal money, BigDecimal cashAmount, BigDecimal giftAmount, BigDecimal wxAmount) {

View File

@ -2,6 +2,8 @@ package cn.iocoder.yudao.module.member.service.amount;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.json.JSONUtil;
import cn.iocoder.yudao.module.member.controller.app.user.vo.AppUserInfoCardVO;
import cn.iocoder.yudao.module.member.dal.dataobject.card.CardDO;
import cn.iocoder.yudao.module.member.dal.dataobject.order.DishOrderDO;
import cn.iocoder.yudao.module.member.dal.dataobject.refund.RefundDO;
@ -14,6 +16,7 @@ import cn.iocoder.yudao.module.member.dal.mysql.user.MemberUserMapper;
import cn.iocoder.yudao.module.member.enums.CostTypeEnum;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@ -45,6 +48,9 @@ public class CashRechargeServiceImpl implements CashRechargeService {
@Resource
private MemberGroupMapper memberGroupMapper;
@Resource
private StringRedisTemplate cashRechargeRedisTemplate;
@Override
public void rechargeByAdmin(List<Long> userIds, Long groupId, BigDecimal money) {
@ -63,6 +69,7 @@ public class CashRechargeServiceImpl implements CashRechargeService {
BigDecimal wxNewMoney;
BigDecimal giftNewMoney;
BigDecimal cashNewAmount;
String name;
synchronized (getUserLock(userId)) {
MemberUserDO memberUserDO = userMapper.selectById(userId);
@ -84,6 +91,7 @@ public class CashRechargeServiceImpl implements CashRechargeService {
wxNewMoney = memberUserDO.getWxAmount();
giftNewMoney = memberUserDO.getGiftAmount();
cashNewAmount = memberUserDO.getCashAmount();
name = memberUserDO.getNickname();
}
//记录明细
@ -98,6 +106,13 @@ public class CashRechargeServiceImpl implements CashRechargeService {
add.setGiftAmount(giftNewMoney);
addList.add(add);
//更新缓存
String redisKey = "USER_" + userId;
AppUserInfoCardVO appUserInfoCardVO = new AppUserInfoCardVO();
appUserInfoCardVO.setName(name);
appUserInfoCardVO.setMoney(newMoney);
cashRechargeRedisTemplate.opsForValue().set(redisKey, JSONUtil.toJsonStr(appUserInfoCardVO));
}
//处理订单

View File

@ -3,21 +3,17 @@ package cn.iocoder.yudao.module.member.service.amount;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import cn.iocoder.yudao.module.member.controller.admin.business.vo.StatisticsVo;
import cn.iocoder.yudao.module.member.controller.app.user.vo.AppUserInfoCardVO;
import cn.iocoder.yudao.module.member.dal.dataobject.card.CardDO;
import cn.iocoder.yudao.module.member.dal.dataobject.order.DishOrderDO;
import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
import cn.iocoder.yudao.module.member.dal.mysql.order.DishOrderMapper;
import cn.iocoder.yudao.module.member.dal.mysql.user.MemberUserMapper;
import cn.iocoder.yudao.module.member.enums.CostTypeEnum;
import cn.iocoder.yudao.module.member.enums.TimePeriodEnum;
import cn.iocoder.yudao.module.member.service.business.BusinessService;
import cn.iocoder.yudao.module.member.service.card.CardService;
import cn.iocoder.yudao.module.member.service.diningplates.DiningPlatesService;
import cn.iocoder.yudao.module.member.service.order.OrderService;
import cn.iocoder.yudao.module.member.service.user.MemberUserService;
import cn.iocoder.yudao.module.member.util.MemberConstants;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.sun.istack.NotNull;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.StringRedisTemplate;
@ -27,7 +23,6 @@ import javax.annotation.Resource;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.CASH_AMOUNT_NOT_ENOUGH;
@ -63,6 +58,8 @@ public class DeductionServiceImpl implements DeductionService {
BigDecimal giftNewMoney;
BigDecimal cashNewMoney;
String name;
synchronized (getUserLock(userId)) {
MemberUserDO user = userService.getUser(userId);
@ -147,6 +144,7 @@ public class DeductionServiceImpl implements DeductionService {
giftNewMoney = user.getGiftAmount();
cashNewMoney = user.getCashAmount();
changeMoney = total;
name = user.getNickname();
}
@ -178,6 +176,9 @@ public class DeductionServiceImpl implements DeductionService {
statisticsVo.setOrderId(dishOrderDO.getId());
businessService.updateStatistics(statisticsVo);
}
//更新redis
updateRedis(userId,name,newMoney);
}
@ -188,6 +189,7 @@ public class DeductionServiceImpl implements DeductionService {
BigDecimal wxNewMoney;
BigDecimal giftNewMoney;
BigDecimal cashNewMoney;
String name;
synchronized (getUserLock(userId)) {
MemberUserDO user = userService.getUser(userId);
@ -202,6 +204,7 @@ public class DeductionServiceImpl implements DeductionService {
wxNewMoney = user.getWxAmount();
giftNewMoney = user.getGiftAmount();
cashNewMoney = user.getCashAmount();
name = user.getNickname();
}
CardDO cardDO = new CardDO();
@ -214,6 +217,9 @@ public class DeductionServiceImpl implements DeductionService {
cardDO.setMoney(newMoney);
cardDO.setCashAmount(cashNewMoney);
cardService.insertOne(cardDO);
//更新redis
updateRedis(userId,name,newMoney);
}
@ -223,6 +229,7 @@ public class DeductionServiceImpl implements DeductionService {
BigDecimal wxNewMoney;
BigDecimal giftNewMoney;
BigDecimal cashNewMoney;
String name;
BigDecimal changeMoney = new BigDecimal(amount).divide(new BigDecimal("100"));
synchronized (getUserLock(userId)) {
@ -234,6 +241,7 @@ public class DeductionServiceImpl implements DeductionService {
wxNewMoney = user.getWxAmount();
giftNewMoney = user.getGiftAmount();
cashNewMoney = user.getCashAmount();
name = user.getNickname();
}
@ -249,6 +257,10 @@ public class DeductionServiceImpl implements DeductionService {
cardDO.setMoney(newMoney);
cardDO.setCashAmount(cashNewMoney);
cardService.insertOne(cardDO);
//更新redis
updateRedis(userId,name,newMoney);
}
@Override
@ -258,6 +270,7 @@ public class DeductionServiceImpl implements DeductionService {
BigDecimal wxNewMoney;
BigDecimal giftNewMoney;
BigDecimal cashNewMoney;
String name;
synchronized (getUserLock(userId)) {
MemberUserDO user = userService.getUser(userId);
@ -309,7 +322,7 @@ public class DeductionServiceImpl implements DeductionService {
wxNewMoney = user.getWxAmount();
giftNewMoney = user.getGiftAmount();
cashNewMoney = user.getCashAmount();
name = user.getNickname();
}
CardDO cardDO = new CardDO();
@ -323,6 +336,9 @@ public class DeductionServiceImpl implements DeductionService {
cardDO.setCashAmount(cashNewMoney);
cardService.insertOne(cardDO);
//更新redis
updateRedis(userId,name,newMoney2);
}
@Override
@ -332,6 +348,7 @@ public class DeductionServiceImpl implements DeductionService {
BigDecimal giftNewAmount;
BigDecimal cashNewAmount;
BigDecimal wxNewAmount;
String name;
synchronized (getUserLock(userId)) {
MemberUserDO user = userService.getUser(userId);
@ -345,6 +362,7 @@ public class DeductionServiceImpl implements DeductionService {
wxNewAmount = user.getWxAmount();
giftNewAmount = user.getGiftAmount();
cashNewAmount = user.getCashAmount();
name = user.getNickname();
}
CardDO cardDO = new CardDO();
cardDO.setUserId(userId);
@ -356,6 +374,9 @@ public class DeductionServiceImpl implements DeductionService {
cardDO.setCashAmount(cashNewAmount);
cardDO.setGiftAmount(giftNewAmount);
cardService.insertOne(cardDO);
//更新redis
updateRedis(userId,name,newMoney);
}
@Override
@ -365,6 +386,7 @@ public class DeductionServiceImpl implements DeductionService {
BigDecimal wxNewMoney;
BigDecimal giftNewMoney;
BigDecimal cashNewMoney;
String name;
synchronized (getUserLock(userId)) {
MemberUserDO user = userService.getUser(userId);
BigDecimal money = user.getMoney();
@ -395,18 +417,34 @@ public class DeductionServiceImpl implements DeductionService {
wxNewMoney = user.getWxAmount();
giftNewMoney = user.getGiftAmount();
cashNewMoney = user.getCashAmount();
name = user.getNickname();
}
CardDO cardDO = new CardDO();
cardDO.setUserId(userId);
cardDO.setChangeMoney(total);
cardDO.setFlag(CardDO.MINUS);
cardService.insertOne(cardDO);
cardDO.setMoney(newMoney);
cardDO.setWxAmount(wxNewMoney);
cardDO.setCashAmount(cashNewMoney);
cardDO.setGiftAmount(giftNewMoney);
cardService.insertOne(cardDO);
//更新redis
updateRedis(userId,name,newMoney);
return cardDO.getMoney();
}
public void updateRedis(Long userId,String name, BigDecimal newMoney) {
//更新缓存
String redisKey = "USER_" + userId;
AppUserInfoCardVO appUserInfoCardVO = new AppUserInfoCardVO();
appUserInfoCardVO.setName(name);
appUserInfoCardVO.setMoney(newMoney);
deductionRedisTemplate.opsForValue().set(redisKey, JSONUtil.toJsonStr(appUserInfoCardVO));
}
}

View File

@ -2,6 +2,8 @@ package cn.iocoder.yudao.module.member.service.amount;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.json.JSONUtil;
import cn.iocoder.yudao.module.member.controller.app.user.vo.AppUserInfoCardVO;
import cn.iocoder.yudao.module.member.dal.dataobject.card.CardDO;
import cn.iocoder.yudao.module.member.dal.dataobject.order.DishOrderDO;
import cn.iocoder.yudao.module.member.dal.dataobject.rechargelog.RechargeLogDO;
@ -15,6 +17,7 @@ import cn.iocoder.yudao.module.member.dal.mysql.user.MemberUserMapper;
import cn.iocoder.yudao.module.member.enums.CostTypeEnum;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@ -46,6 +49,8 @@ public class WxRechargeServiceImpl implements WxRechargeService {
private IntegralRefundMapper refundMapper;
@Resource
private RechargeLogMapper rechargeLogMapper;
@Resource
private StringRedisTemplate wxRechargeRedisTemplate;
@Override
@ -55,7 +60,7 @@ public class WxRechargeServiceImpl implements WxRechargeService {
BigDecimal wxNewMoney;
BigDecimal giftNewMoney;
BigDecimal cashNewAmount;
String name;
synchronized (getUserLock(userId)) {
//获取最新余额
@ -95,7 +100,7 @@ public class WxRechargeServiceImpl implements WxRechargeService {
wxNewMoney = memberUserDO.getWxAmount();
giftNewMoney = memberUserDO.getGiftAmount();
cashNewAmount = memberUserDO.getCashAmount();
name = memberUserDO.getNickname();
}
@ -113,7 +118,12 @@ public class WxRechargeServiceImpl implements WxRechargeService {
handleOrderWx(cardDO.getUserId(), money, wxAmount, giftAmount);
cardMapper.insert(cardDO);
//更新缓存
String redisKey = "USER_" + userId;
AppUserInfoCardVO appUserInfoCardVO = new AppUserInfoCardVO();
appUserInfoCardVO.setName(name);
appUserInfoCardVO.setMoney(newMoney);
wxRechargeRedisTemplate.opsForValue().set(redisKey, JSONUtil.toJsonStr(appUserInfoCardVO));
}

View File

@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.member.service.diningplates;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
import cn.iocoder.yudao.framework.common.exception.ErrorCode;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
@ -308,10 +309,17 @@ public class DiningPlatesServiceImpl implements DiningPlatesService {
}
AppUserInfoCardVO appUserInfoCardVO = new AppUserInfoCardVO();
MemberUserDO memberUserDO = memberUserMapper.selectById(diningPlatesDO.getUserId());
appUserInfoCardVO.setName(memberUserDO.getNickname());
appUserInfoCardVO.setMoney(memberUserDO.getMoney());
String redisKey = "USER_"+diningPlatesDO.getUserId();
String s = stringRedisTemplate.opsForValue().get(redisKey);
if(StrUtil.isNotBlank(s)){
appUserInfoCardVO = JSONUtil.toBean(s, AppUserInfoCardVO.class);
}else {
MemberUserDO memberUserDO = memberUserMapper.selectById(diningPlatesDO.getUserId());
appUserInfoCardVO.setName(memberUserDO.getNickname());
appUserInfoCardVO.setMoney(memberUserDO.getMoney());
stringRedisTemplate.opsForValue().set(redisKey, JSONUtil.toJsonStr(appUserInfoCardVO));
}
//刷新绑定时间
asyncService.flashTime(diningPlatesDO);
return appUserInfoCardVO;