From 2dc526dbcce8a700cbbab70457e84f515259fd71 Mon Sep 17 00:00:00 2001 From: seesaw Date: Wed, 23 Oct 2024 14:02:47 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E4=BB=98=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/amount/AmountServiceImpl.java | 12 +--- .../amount/CashRechargeServiceImpl.java | 15 +++++ .../service/amount/DeductionServiceImpl.java | 56 ++++++++++++++++--- .../service/amount/WxRechargeServiceImpl.java | 16 +++++- .../diningplates/DiningPlatesServiceImpl.java | 14 ++++- 5 files changed, 89 insertions(+), 24 deletions(-) diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/AmountServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/AmountServiceImpl.java index c1accb84..f88c42f8 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/AmountServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/AmountServiceImpl.java @@ -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 userLocks = new WeakHashMap<>(); @Override public void operateAmount(Long userId, BigDecimal money, BigDecimal cashAmount, BigDecimal giftAmount, BigDecimal wxAmount) { diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/CashRechargeServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/CashRechargeServiceImpl.java index dde67df0..d8706511 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/CashRechargeServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/CashRechargeServiceImpl.java @@ -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 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)); + } //处理订单 diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/DeductionServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/DeductionServiceImpl.java index ff3f904c..0676e6b6 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/DeductionServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/DeductionServiceImpl.java @@ -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)); + } } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/WxRechargeServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/WxRechargeServiceImpl.java index 05f441b4..e615a21e 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/WxRechargeServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/WxRechargeServiceImpl.java @@ -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)); } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/diningplates/DiningPlatesServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/diningplates/DiningPlatesServiceImpl.java index debc7ad5..85eb3915 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/diningplates/DiningPlatesServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/diningplates/DiningPlatesServiceImpl.java @@ -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;