From 5d58bf03f280d84a3d6b9d8eaf8226a722c432bd Mon Sep 17 00:00:00 2001 From: seesaw Date: Fri, 18 Oct 2024 14:55:41 +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 | 5 +- .../service/amount/DeductionService.java | 15 +++- .../service/amount/DeductionServiceImpl.java | 82 ++++++++++++++++++- 3 files changed, 96 insertions(+), 6 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 23f46fd7..1b3985e2 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 @@ -65,9 +65,8 @@ public class AmountServiceImpl implements AmountService { @Override public BigDecimal getAmount(Long userId) { - return null; + MemberUserDO memberUserDO = userMapper.selectById(userId); + return memberUserDO.getMoney(); } - //微信充值 - } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/DeductionService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/DeductionService.java index a75c3c6e..24e06653 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/DeductionService.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/DeductionService.java @@ -7,5 +7,18 @@ import java.util.List; public interface DeductionService { - void deduction(DishOrderDO dishOrderDO); + /** + * 餐盘扣减余额 + */ + DishOrderDO deduction(DishOrderDO dishOrderDO); + + /** + * 现金提现 + */ + void cashDraw(Long userId, BigDecimal money); + + /** + * 微信提现 + */ + void wxDraw(Integer amount, Long userId); } 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 e91de825..480b0c9c 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 @@ -1,18 +1,22 @@ package cn.iocoder.yudao.module.member.service.amount; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.iocoder.yudao.module.member.controller.admin.business.vo.StatisticsVo; 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.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 lombok.extern.slf4j.Slf4j; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Service; @@ -22,6 +26,9 @@ 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; + /** * 餐盘统一扣款 Service 实现类 @@ -43,7 +50,7 @@ public class DeductionServiceImpl implements DeductionService { private BusinessService businessService; @Override - public void deduction(DishOrderDO dishOrderDO) { + public DishOrderDO deduction(DishOrderDO dishOrderDO) { Long userId = dishOrderDO.getUserId(); BigDecimal newMoney; @@ -139,7 +146,7 @@ public class DeductionServiceImpl implements DeductionService { } - + //记录消费记录 CardDO cardDO = new CardDO(); cardDO.setType(TimePeriodEnum.getTimePeriod(dishOrderDO.getCreateTime())); cardDO.setUserId(userId); @@ -167,7 +174,78 @@ public class DeductionServiceImpl implements DeductionService { statisticsVo.setOrderId(dishOrderDO.getId()); businessService.updateStatistics(statisticsVo); } + return dishOrderDO; + } + + @Override + public void cashDraw(Long userId, BigDecimal money) { + + BigDecimal newMoney; + BigDecimal wxNewMoney; + BigDecimal giftNewMoney; + BigDecimal cashNewAmount; + + synchronized (userId){ + MemberUserDO user = userService.getUser(userId); + if (ObjectUtil.isEmpty(user) || user.getCashAmount().compareTo(BigDecimal.ZERO) < 1 + || money.compareTo(user.getCashAmount()) > 0) { + throw exception(CASH_AMOUNT_NOT_ENOUGH); + } + user.setMoney(user.getMoney().subtract(money)); + user.setCashAmount(user.getCashAmount().subtract(money)); + userService.updateById(user); + newMoney = user.getMoney(); + wxNewMoney = user.getWxAmount(); + giftNewMoney = user.getGiftAmount(); + cashNewAmount = user.getCashAmount(); + } + + CardDO cardDO = new CardDO(); + cardDO.setUserId(userId); + cardDO.setFlag(CardDO.MINUS); + cardDO.setChangeMoney(money); + cardDO.setType(CostTypeEnum.CASH_WITHDRAW.getCode()); + cardDO.setWxAmount(wxNewMoney); + cardDO.setGiftAmount(giftNewMoney); + cardDO.setMoney(newMoney); + cardDO.setCashAmount(cashNewAmount); + cardService.insertOne(cardDO); + } + + + @Override + public void wxDraw(Integer amount, Long userId) { + BigDecimal newMoney; + BigDecimal wxNewMoney; + BigDecimal giftNewMoney; + BigDecimal cashNewAmount; + BigDecimal changeMoney = new BigDecimal(amount).divide(new BigDecimal("100")); + + synchronized (userId){ + MemberUserDO user = userService.getUser(userId); + user.setWxAmount(user.getWxAmount().subtract(changeMoney)); + user.setMoney(user.getMoney().subtract(changeMoney)); + userService.updateById(user); + newMoney = user.getMoney(); + wxNewMoney = user.getWxAmount(); + giftNewMoney = user.getGiftAmount(); + cashNewAmount = user.getCashAmount(); + } + + + //获取最新余额 + CardDO cardDO = new CardDO(); + cardDO.setUserId(userId); + cardDO.setFlag(CardDO.MINUS); + cardDO.setChangeMoney(changeMoney); + cardDO.setType("7"); + + cardDO.setWxAmount(wxNewMoney); + cardDO.setGiftAmount(giftNewMoney); + cardDO.setMoney(newMoney); + cardDO.setCashAmount(cashNewAmount); + cardService.insertOne(cardDO); } }