现金充值BUG

This commit is contained in:
zt
2025-01-02 11:07:31 +08:00
parent 6e9c0c21bc
commit 10d4be9be3

View File

@ -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<Long> userIds, Long groupId, BigDecimal money, Long storeId,Boolean group) {
List<Long> memberList = new ArrayList<>();
Set<Long> 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<CardDO> addList = new ArrayList<>();
List<Long> 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);
}