金额修改
This commit is contained in:
@ -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));
|
||||
@ -469,7 +448,7 @@ public class DeductionServiceImpl implements DeductionService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deduct(Long userId, BigDecimal money, String type,Long storeId) {
|
||||
public void deduct(Long userId, BigDecimal money, String type, Long storeId) {
|
||||
|
||||
BigDecimal wxNewMoney;
|
||||
BigDecimal giftNewMoney;
|
||||
@ -557,9 +536,9 @@ public class DeductionServiceImpl implements DeductionService {
|
||||
user.setGiftAmount(BigDecimal.ZERO);
|
||||
BigDecimal total2 = total1.subtract(giftAmount);
|
||||
|
||||
if(total2.compareTo(wxAmount) <= 0) {
|
||||
if (total2.compareTo(wxAmount) <= 0) {
|
||||
user.setWxAmount(wxAmount.subtract(total2));
|
||||
}else {
|
||||
} else {
|
||||
user.setWxAmount(BigDecimal.ZERO);
|
||||
moneyDO.setDebtAmount(wxAmount.subtract(total2).add(moneyDO.getDebtAmount()));
|
||||
}
|
||||
@ -592,7 +571,7 @@ public class DeductionServiceImpl implements DeductionService {
|
||||
}
|
||||
|
||||
//判断先扣那个金额
|
||||
public boolean checkWay(Long userId){
|
||||
public boolean checkWay(Long userId) {
|
||||
//获取用户所在组分类
|
||||
Integer type = memberGroupService.getGroupTypeByUserId(userId);
|
||||
List<Integer> typeList = Arrays.asList(GroupTypeEnum.ADMINISTRATIVE.getCode(), GroupTypeEnum.DISTRICT.getCode());
|
||||
@ -602,7 +581,7 @@ public class DeductionServiceImpl implements DeductionService {
|
||||
}
|
||||
|
||||
//获取门店的金额数据
|
||||
public MoneyDO getStoreMoney(List<MoneyDO> list,Long storeId,Long userId){
|
||||
public MoneyDO getStoreMoney(List<MoneyDO> list, Long storeId, Long userId) {
|
||||
Optional<MoneyDO> optionalDebt = list.stream()
|
||||
.filter(debt -> storeId.equals(debt.getCarteenId()))
|
||||
.findFirst();
|
||||
@ -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;
|
||||
}
|
||||
money.setCashAmount(BigDecimal.ZERO);
|
||||
}
|
||||
if (isNotContain) {
|
||||
moneyDO.setDebtAmount(debtAmount.add(moneyDO.getDebtAmount()));
|
||||
moneyDO.setCashAmount(BigDecimal.ZERO);
|
||||
list.add(moneyDO);
|
||||
}
|
||||
moneyService.updateList(list);
|
||||
}
|
||||
|
||||
//判断扣款顺序
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user