diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/AmountService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/AmountService.java index 3a89fc20..51d38a8d 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/AmountService.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/amount/AmountService.java @@ -9,5 +9,5 @@ public interface AmountService { BigDecimal getAmount(Long userId); - + BigDecimal getCashAmount(Long userId); } 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 1b3985e2..c72398c6 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 @@ -27,6 +27,9 @@ import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.USER_NOT_EXISTS; + /** * 金额操作 Service 实现类 @@ -66,7 +69,18 @@ public class AmountServiceImpl implements AmountService { @Override public BigDecimal getAmount(Long userId) { MemberUserDO memberUserDO = userMapper.selectById(userId); + if (memberUserDO == null) { + throw exception(USER_NOT_EXISTS); + } return memberUserDO.getMoney(); } + @Override + public BigDecimal getCashAmount(Long userId) { + MemberUserDO memberUserDO = userMapper.selectById(userId); + if (memberUserDO == null) { + throw exception(USER_NOT_EXISTS); + } + return memberUserDO.getCashAmount(); + } } 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 24e06653..2783ba4f 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 @@ -21,4 +21,9 @@ public interface DeductionService { * 微信提现 */ void wxDraw(Integer amount, Long userId); + + /** + * 退款 + */ + void refund(Long userId,BigDecimal money,DishOrderDO dishOrderDO); } 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 480b0c9c..6c9a24d9 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 @@ -7,6 +7,7 @@ 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.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; @@ -247,5 +248,79 @@ public class DeductionServiceImpl implements DeductionService { cardDO.setCashAmount(cashNewAmount); cardService.insertOne(cardDO); } + + @Override + public void refund(Long userId, BigDecimal money, DishOrderDO dishOrderDO) { + //获取最新余额 + BigDecimal newMoney2; + BigDecimal wxNewMoney; + BigDecimal giftNewMoney; + BigDecimal cashNewAmount; + + synchronized (userId){ + MemberUserDO user = userService.getUser(userId); + BigDecimal oldMoney = user.getMoney(); + + user.setMoney(oldMoney.add(money)); + + BigDecimal wxAmount = user.getWxAmount(); + BigDecimal cashAmount = user.getCashAmount(); + BigDecimal giftAmount = user.getGiftAmount(); + + BigDecimal dishWxAmount = dishOrderDO.getWxAmount(); + BigDecimal dishCashAmount = dishOrderDO.getCashAmount(); + BigDecimal dishGiftAmount = dishOrderDO.getGiftAmount(); + + BigDecimal newMoney = money; + if(oldMoney.compareTo(BigDecimal.ZERO)<0){ + newMoney = user.getMoney(); + } + + + if (user.getMoney().compareTo(BigDecimal.ZERO) <= 0) { + user.setWxAmount(BigDecimal.ZERO); + user.setGiftAmount(BigDecimal.ZERO); + user.setCashAmount(BigDecimal.ZERO); + } else { + if (newMoney.compareTo(dishGiftAmount) <= 0) { + user.setGiftAmount(giftAmount.add(newMoney)); + } else { + user.setGiftAmount(giftAmount.add(dishGiftAmount)); + BigDecimal money1 = newMoney.subtract(dishGiftAmount); + + if (money1.compareTo(dishCashAmount) <= 0) { + user.setCashAmount(cashAmount.add(money1)); + } else { + user.setCashAmount(cashAmount.add(dishCashAmount)); + BigDecimal money2 = money1.subtract(dishCashAmount); + if (money2.compareTo(dishWxAmount) <= 0) { + user.setWxAmount(wxAmount.add(money2)); + } else { + user.setWxAmount(wxAmount.add(dishWxAmount)); + } + + } + } + } + userService.updateById(user); + newMoney2 = user.getMoney(); + wxNewMoney = user.getWxAmount(); + giftNewMoney = user.getGiftAmount(); + cashNewAmount = user.getCashAmount(); + + } + + CardDO cardDO = new CardDO(); + cardDO.setUserId(userId); + cardDO.setFlag(CardDO.ADD); + cardDO.setChangeMoney(money); + cardDO.setType(CostTypeEnum.REFUND.getCode()); + cardDO.setWxAmount(wxNewMoney); + cardDO.setGiftAmount(giftNewMoney); + cardDO.setMoney(newMoney2); + cardDO.setCashAmount(cashNewAmount); + + cardService.insertOne(cardDO); + } }