支付优化
This commit is contained in:
@ -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) {
|
||||
|
@ -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));
|
||||
|
||||
}
|
||||
|
||||
//处理订单
|
||||
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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));
|
||||
|
||||
}
|
||||
|
||||
|
@ -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();
|
||||
|
||||
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;
|
||||
|
Reference in New Issue
Block a user