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 5da9d835..d4dc3e0a 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 @@ -26,9 +26,7 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; import static cn.iocoder.yudao.module.member.service.amount.LockManager.getUserLock; @@ -61,16 +59,17 @@ public class CashRechargeServiceImpl implements CashRechargeService { @Override public void rechargeByAdmin(List userIds, Long groupId, BigDecimal money, Long storeId,Boolean group) { - List memberList = new ArrayList<>(); + + Set memberSet = new HashSet<>(); MemberGroupDO memberGroupDO = memberGroupMapper.selectById(groupId); if (group) { - memberList.addAll(memberGroupMapper.getMemberList(groupId)); + memberSet.addAll(memberGroupMapper.getMemberList(groupId)); } else { - memberList.addAll(userIds); + memberSet.addAll(userIds); } //明细列表 ArrayList addList = new ArrayList<>(); - + List memberList = new ArrayList<>(memberSet); for (Long userId : memberList) { BigDecimal wxNewMoney; @@ -78,13 +77,15 @@ public class CashRechargeServiceImpl implements CashRechargeService { BigDecimal cashNewAmount; String name; + BigDecimal computeMoney = money; + synchronized (getUserLock(userId)) { MemberUserDO memberUserDO = userMapper.selectById(userId); MoneyDO moneyDO = moneyService.getMoney(userId, storeId); BigDecimal debtAmount = BigDecimal.ZERO; if (ObjectUtil.isEmpty(moneyDO)) { MoneyDO add = new MoneyDO(); - add.setCashAmount(money); + add.setCashAmount(computeMoney); add.setDebtAmount(debtAmount); add.setUserId(userId); add.setCarteenId(storeId); @@ -93,10 +94,17 @@ public class CashRechargeServiceImpl implements CashRechargeService { } else { debtAmount = moneyDO.getDebtAmount(); //金额变动 - money = money.add(debtAmount); - moneyDO.setCashAmount(money.add(moneyDO.getCashAmount())); - moneyDO.setDebtAmount(BigDecimal.ZERO); - cashNewAmount = moneyDO.getCashAmount(); + computeMoney = computeMoney.add(debtAmount); + if(computeMoney.compareTo(BigDecimal.ZERO) < 0){ + moneyDO.setCashAmount(BigDecimal.ZERO); + moneyDO.setDebtAmount(computeMoney); + cashNewAmount = BigDecimal.ZERO; + }else { + moneyDO.setCashAmount(computeMoney.add(moneyDO.getCashAmount())); + moneyDO.setDebtAmount(BigDecimal.ZERO); + cashNewAmount = moneyDO.getCashAmount(); + } + moneyService.updateById(moneyDO); }