金额修改

This commit is contained in:
zt
2025-02-07 15:14:11 +08:00
parent d86dc8c145
commit 2dc8731571

View File

@ -69,19 +69,12 @@ public class DeductionServiceImpl implements DeductionService {
BigDecimal changeMoney;
BigDecimal wxNewMoney;
BigDecimal giftNewMoney;
BigDecimal cashNewMoney;
BigDecimal newMoney;
String name;
synchronized (getUserLock(userId)) {
MemberUserDO user = userService.getUser(userId);
//获取所有现金
List<MoneyDO> allDebt = moneyService.getAllDebt(userId);
BigDecimal cashAmount = allDebt.stream().map(MoneyDO::getCashAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
//获取当前门店的数据
MoneyDO moneyDO =getStoreMoney(allDebt,dishOrderDO.getStoreId(),user.getId());
//新的总价
String s = deductionRedisTemplate.opsForValue().get(dishOrderDO.getDiningPlatesNum() + "-" + dishOrderDO.getStoreId());
BigDecimal total = new BigDecimal(StrUtil.isBlank(s) ? "0" : s);
@ -108,11 +101,13 @@ public class DeductionServiceImpl implements DeductionService {
} else {
total = total.subtract(reductionAmount);
}
//当前金额
BigDecimal wxAmount = user.getWxAmount();
BigDecimal giftAmount = user.getGiftAmount();
BigDecimal money = wxAmount.add(giftAmount).add(cashAmount);
//微信
BigDecimal wxAmount = user.getWxAmount();
//现金
BigDecimal cashAmount = user.getCashAmount();
//当前金额
BigDecimal money = user.getMoney();
//待支付金额 最大退款金额
dishOrderDO.setRefundAmount(total);
@ -125,48 +120,51 @@ public class DeductionServiceImpl implements DeductionService {
dishOrderDO.setRefundAmount(money);
}
}
//扣除金额
user.setMoney(money.subtract(total));
if (total.compareTo(money) > 0) {
dishOrderDO.setOrderStatus(DishOrderDO.TOCOMPLETE);
dishOrderDO.setWxAmount(wxAmount);
dishOrderDO.setCashAmount(cashAmount);
dishOrderDO.setGiftAmount(giftAmount);
user.setWxAmount(BigDecimal.ZERO);
moneyDO.setCashAmount(BigDecimal.ZERO);
user.setGiftAmount(BigDecimal.ZERO);
moneyDO.setDebtAmount(money.subtract(total).add(moneyDO.getDebtAmount()));
user.setCashAmount(BigDecimal.ZERO);
} else {
dishOrderDO.setOrderStatus(DishOrderDO.COMPLETE);
//计算金额 现金->赠送->微信
//扣除具体金额
if (judge(userId)) { //微信->现金
if (total.compareTo(wxAmount) <= 0) {
user.setWxAmount(wxAmount.subtract(total));
dishOrderDO.setWxAmount(total);
} else {
user.setWxAmount(BigDecimal.ZERO);
dishOrderDO.setWxAmount(wxAmount);
BigDecimal total1 = total.subtract(wxAmount);
user.setCashAmount(cashAmount.subtract(total1));
dishOrderDO.setCashAmount(total1);
}
} else { //现金->微信
if (total.compareTo(cashAmount) <= 0) {
moneyDO.setCashAmount(cashAmount.subtract(total));
user.setCashAmount(cashAmount.subtract(total));
dishOrderDO.setCashAmount(total);
} else {
moneyDO.setCashAmount(BigDecimal.ZERO);
user.setCashAmount(BigDecimal.ZERO);
dishOrderDO.setCashAmount(cashAmount);
BigDecimal total1 = total.subtract(cashAmount);
if (total1.compareTo(giftAmount) <= 0) {
user.setGiftAmount(giftAmount.subtract(total1));
dishOrderDO.setGiftAmount(total1);
} else {
user.setGiftAmount(BigDecimal.ZERO);
dishOrderDO.setGiftAmount(giftAmount);
BigDecimal total2 = total1.subtract(giftAmount);
user.setWxAmount(wxAmount.subtract(total1));
dishOrderDO.setWxAmount(total1);
}
}
}
user.setWxAmount(wxAmount.subtract(total2));
dishOrderDO.setWxAmount(total2);
}
}
}
//修改
userService.updateById(user);
moneyService.updateById(moneyDO);
wxNewMoney = user.getWxAmount();
giftNewMoney = user.getGiftAmount();
cashNewMoney = moneyDO.getCashAmount();
cashNewMoney = user.getCashAmount();
changeMoney = total;
newMoney = user.getMoney();
name = user.getNickname();
}
@ -178,7 +176,6 @@ public class DeductionServiceImpl implements DeductionService {
cardDO.setFlag(CardDO.MINUS);
cardDO.setCashAmount(cashNewMoney);
cardDO.setWxAmount(wxNewMoney);
cardDO.setGiftAmount(giftNewMoney);
cardDO.setCarteenId(dishOrderDO.getStoreId());
cardService.insertOne(cardDO);
@ -201,7 +198,7 @@ public class DeductionServiceImpl implements DeductionService {
}
//更新redis
updateRedis(userId, name, wxNewMoney);
updateRedis(userId, name, newMoney);
}
@ -209,23 +206,23 @@ public class DeductionServiceImpl implements DeductionService {
public void cashDraw(Long userId, BigDecimal money, String type, Long storeId) {
BigDecimal wxNewMoney;
BigDecimal giftNewMoney;
BigDecimal cashNewMoney;
BigDecimal newMoney;
String name;
synchronized (getUserLock(userId)) {
MemberUserDO user = userService.getUser(userId);
MoneyDO moneyDO = moneyService.getMoney(userId, storeId);
if (ObjectUtil.isEmpty(moneyDO) || moneyDO.getCashAmount().compareTo(BigDecimal.ZERO) < 1
|| money.compareTo(moneyDO.getCashAmount()) > 0) {
if (user.getCashAmount().compareTo(BigDecimal.ZERO) < 1
|| money.compareTo(user.getCashAmount()) > 0) {
throw exception(CASH_AMOUNT_NOT_ENOUGH);
}
moneyDO.setCashAmount(moneyDO.getCashAmount().subtract(money));
moneyService.updateById(moneyDO);
user.setCashAmount(user.getCashAmount().subtract(money));
user.setMoney(user.getMoney().subtract(money));
userService.updateById(user);
wxNewMoney = user.getWxAmount();
giftNewMoney = user.getGiftAmount();
cashNewMoney = moneyDO.getCashAmount();
cashNewMoney = user.getCashAmount();
newMoney = user.getMoney();
name = user.getNickname();
}
@ -235,13 +232,12 @@ public class DeductionServiceImpl implements DeductionService {
cardDO.setChangeMoney(money);
cardDO.setType(type);
cardDO.setWxAmount(wxNewMoney);
cardDO.setGiftAmount(giftNewMoney);
cardDO.setCashAmount(cashNewMoney);
cardDO.setCarteenId(storeId);
cardService.insertOne(cardDO);
//更新redis
updateRedis(userId, name, wxNewMoney);
updateRedis(userId, name, newMoney);
}
@ -249,17 +245,18 @@ public class DeductionServiceImpl implements DeductionService {
public void wxDraw(Integer amount, Long userId) {
BigDecimal wxNewMoney;
BigDecimal giftNewMoney;
BigDecimal cashNewMoney;
BigDecimal newMoney;
String name;
BigDecimal changeMoney = new BigDecimal(amount).divide(new BigDecimal("100"));
synchronized (getUserLock(userId)) {
MemberUserDO user = userService.getUser(userId);
user.setWxAmount(user.getWxAmount().subtract(changeMoney));
user.setMoney(user.getMoney().subtract(changeMoney));
userService.updateById(user);
wxNewMoney = user.getWxAmount();
giftNewMoney = user.getGiftAmount();
newMoney = user.getMoney();
cashNewMoney = user.getCashAmount();
name = user.getNickname();
}
@ -272,60 +269,49 @@ public class DeductionServiceImpl implements DeductionService {
cardDO.setChangeMoney(changeMoney);
cardDO.setType("7");
cardDO.setWxAmount(wxNewMoney);
cardDO.setGiftAmount(giftNewMoney);
cardDO.setCashAmount(cashNewMoney);
cardService.insertOne(cardDO);
//更新redis
updateRedis(userId, name, wxNewMoney);
updateRedis(userId, name, newMoney);
}
@Override
public void refund(Long userId, BigDecimal money, DishOrderDO dishOrderDO) {
//获取最新余额
BigDecimal wxNewMoney;
BigDecimal giftNewMoney;
BigDecimal newTotalMoney;
BigDecimal cashNewMoney;
String name;
synchronized (getUserLock(userId)) {
MemberUserDO user = userService.getUser(userId);
MoneyDO moneyDO = moneyService.getMoney(userId, dishOrderDO.getStoreId());
//用户当前金额
BigDecimal userMoney = user.getMoney();
BigDecimal wxAmount = user.getWxAmount();
BigDecimal giftAmount = user.getGiftAmount();
BigDecimal cashAmount = moneyDO.getCashAmount();
BigDecimal debtAmount = moneyDO.getDebtAmount();
BigDecimal cashAmount = user.getCashAmount();
//订单消费金额
BigDecimal dishWxAmount = dishOrderDO.getWxAmount();
BigDecimal dishCashAmount = dishOrderDO.getCashAmount();
BigDecimal dishGiftAmount = dishOrderDO.getGiftAmount();
BigDecimal newMoney = money;
if (debtAmount.compareTo(BigDecimal.ZERO) > 0) {
newMoney = debtAmount.add(newMoney);
if (userMoney.compareTo(BigDecimal.ZERO) < 0) {
newMoney = userMoney.add(newMoney);
}
if (newMoney.compareTo(BigDecimal.ZERO) < 0) {
user.setWxAmount(BigDecimal.ZERO);
user.setGiftAmount(BigDecimal.ZERO);
user.setCashAmount(BigDecimal.ZERO);
user.setMoney(newMoney);
} else {
if (newMoney.compareTo(dishGiftAmount) <= 0) {
user.setGiftAmount(giftAmount.add(newMoney));
if (newMoney.compareTo(dishCashAmount) <= 0) {
user.setCashAmount(cashAmount.add(newMoney));
} else {
user.setGiftAmount(giftAmount.add(dishGiftAmount));
BigDecimal money1 = newMoney.subtract(dishGiftAmount);
if (money1.compareTo(dishCashAmount) <= 0) {
moneyDO.setCashAmount(cashAmount.add(money1));
} else {
moneyDO.setCashAmount(cashAmount.add(dishCashAmount));
BigDecimal money2 = money1.subtract(dishCashAmount);
user.setCashAmount(cashAmount.add(dishCashAmount));
BigDecimal money2 = newMoney.subtract(dishCashAmount);
if (money2.compareTo(dishWxAmount) <= 0) {
user.setWxAmount(wxAmount.add(money2));
} else {
@ -333,13 +319,12 @@ public class DeductionServiceImpl implements DeductionService {
}
}
}
}
userService.updateById(user);
moneyService.updateById(moneyDO);
wxNewMoney = user.getWxAmount();
giftNewMoney = user.getGiftAmount();
cashNewMoney = moneyDO.getCashAmount();
newTotalMoney = user.getMoney();
cashNewMoney = user.getCashAmount();
name = user.getNickname();
}
@ -349,36 +334,33 @@ public class DeductionServiceImpl implements DeductionService {
cardDO.setChangeMoney(money);
cardDO.setType(CostTypeEnum.REFUND.getCode());
cardDO.setWxAmount(wxNewMoney);
cardDO.setGiftAmount(giftNewMoney);
cardDO.setCashAmount(cashNewMoney);
cardDO.setCarteenId(dishOrderDO.getStoreId());
cardService.insertOne(cardDO);
//更新redis
updateRedis(userId, name, wxNewMoney);
updateRedis(userId, name, newTotalMoney);
}
@Override
public void reduction(Long userId, BigDecimal money, BigDecimal giftAmount, BigDecimal cashAmount, BigDecimal wxAmount, Long storeId) {
BigDecimal giftNewAmount;
BigDecimal newAmount;
BigDecimal cashNewAmount;
BigDecimal wxNewAmount;
String name;
synchronized (getUserLock(userId)) {
MemberUserDO user = userService.getUser(userId);
MoneyDO moneyDO = moneyService.getMoney(userId, storeId);
moneyDO.setCashAmount(moneyDO.getCashAmount().add(cashAmount));
user.setGiftAmount(user.getGiftAmount().add(giftAmount));
user.setCashAmount(user.getCashAmount().add(cashAmount));
user.setWxAmount(user.getWxAmount().add(wxAmount));
user.setMoney(user.getMoney().add(money));
userService.updateById(user);
moneyService.updateById(moneyDO);
wxNewAmount = user.getWxAmount();
giftNewAmount = user.getGiftAmount();
cashNewAmount = moneyDO.getCashAmount();
newAmount = user.getMoney();
cashNewAmount = user.getCashAmount();
name = user.getNickname();
}
CardDO cardDO = new CardDO();
@ -388,30 +370,27 @@ public class DeductionServiceImpl implements DeductionService {
cardDO.setType(CostTypeEnum.REFUND.getCode());
cardDO.setWxAmount(wxNewAmount);
cardDO.setCashAmount(cashNewAmount);
cardDO.setGiftAmount(giftNewAmount);
cardDO.setCarteenId(storeId);
cardService.insertOne(cardDO);
//更新redis
updateRedis(userId, name, wxNewAmount);
updateRedis(userId, name, newAmount);
}
@Override
public BigDecimal storeDeduction(BigDecimal total, @NotNull Long userId, Long storeId) {
BigDecimal wxNewMoney;
BigDecimal giftNewMoney;
BigDecimal newMoney;
BigDecimal cashNewMoney;
String name;
synchronized (getUserLock(userId)) {
MemberUserDO user = userService.getUser(userId);
MoneyDO moneyDO = moneyService.getMoney(userId, storeId);
BigDecimal wxAmount = user.getWxAmount();
BigDecimal giftAmount = user.getGiftAmount();
BigDecimal cashAmount = moneyDO.getCashAmount();
BigDecimal cashAmount = user.getCashAmount();
BigDecimal money = wxAmount.add(giftAmount).add(cashAmount);
BigDecimal money = user.getMoney();
if (total.compareTo(money) > 0) {
return money.subtract(total);
@ -419,9 +398,9 @@ public class DeductionServiceImpl implements DeductionService {
//计算金额
if (total.compareTo(cashAmount) <= 0) {
moneyDO.setCashAmount(cashAmount.subtract(total));
user.setCashAmount(cashAmount.subtract(total));
} else {
moneyDO.setCashAmount(BigDecimal.ZERO);
user.setCashAmount(BigDecimal.ZERO);
BigDecimal total1 = total.subtract(cashAmount);
if (total1.compareTo(giftAmount) <= 0) {
user.setGiftAmount(giftAmount.subtract(total1));
@ -615,23 +594,14 @@ public class DeductionServiceImpl implements DeductionService {
return add;
});
}
//清零所有门店的金额数据,并把欠款放在当前门店数据上
public void cleanCashAmount(List<MoneyDO> list,Long storeId,BigDecimal debtAmount,MoneyDO moneyDO){
boolean isNotContain = true;
for (MoneyDO money : list) {
if (storeId.equals(money.getCarteenId())) {
money.setDebtAmount(debtAmount.add(money.getDebtAmount()));
isNotContain = false;
//判断扣款顺序
public boolean judge(Long userId) {
Integer type = memberGroupService.getGroupTypeByUserId(userId);
List<Integer> typeList = Arrays.asList(GroupTypeEnum.ADMINISTRATIVE.getCode(), GroupTypeEnum.DISTRICT.getCode());
//查询今天是否假期
Boolean isHoliday = holidayService.checkHoliday();
return isHoliday && typeList.contains(type);
}
money.setCashAmount(BigDecimal.ZERO);
}
if (isNotContain) {
moneyDO.setDebtAmount(debtAmount.add(moneyDO.getDebtAmount()));
moneyDO.setCashAmount(BigDecimal.ZERO);
list.add(moneyDO);
}
moneyService.updateList(list);
}
}