金额修改
This commit is contained in:
@ -69,19 +69,12 @@ public class DeductionServiceImpl implements DeductionService {
|
|||||||
|
|
||||||
BigDecimal changeMoney;
|
BigDecimal changeMoney;
|
||||||
BigDecimal wxNewMoney;
|
BigDecimal wxNewMoney;
|
||||||
BigDecimal giftNewMoney;
|
|
||||||
BigDecimal cashNewMoney;
|
BigDecimal cashNewMoney;
|
||||||
|
BigDecimal newMoney;
|
||||||
|
|
||||||
String name;
|
String name;
|
||||||
|
|
||||||
synchronized (getUserLock(userId)) {
|
synchronized (getUserLock(userId)) {
|
||||||
MemberUserDO user = userService.getUser(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());
|
String s = deductionRedisTemplate.opsForValue().get(dishOrderDO.getDiningPlatesNum() + "-" + dishOrderDO.getStoreId());
|
||||||
BigDecimal total = new BigDecimal(StrUtil.isBlank(s) ? "0" : s);
|
BigDecimal total = new BigDecimal(StrUtil.isBlank(s) ? "0" : s);
|
||||||
@ -108,11 +101,13 @@ public class DeductionServiceImpl implements DeductionService {
|
|||||||
} else {
|
} else {
|
||||||
total = total.subtract(reductionAmount);
|
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);
|
dishOrderDO.setRefundAmount(total);
|
||||||
@ -125,48 +120,51 @@ public class DeductionServiceImpl implements DeductionService {
|
|||||||
dishOrderDO.setRefundAmount(money);
|
dishOrderDO.setRefundAmount(money);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//扣除金额
|
||||||
|
user.setMoney(money.subtract(total));
|
||||||
if (total.compareTo(money) > 0) {
|
if (total.compareTo(money) > 0) {
|
||||||
dishOrderDO.setOrderStatus(DishOrderDO.TOCOMPLETE);
|
dishOrderDO.setOrderStatus(DishOrderDO.TOCOMPLETE);
|
||||||
dishOrderDO.setWxAmount(wxAmount);
|
dishOrderDO.setWxAmount(wxAmount);
|
||||||
dishOrderDO.setCashAmount(cashAmount);
|
dishOrderDO.setCashAmount(cashAmount);
|
||||||
dishOrderDO.setGiftAmount(giftAmount);
|
|
||||||
|
|
||||||
user.setWxAmount(BigDecimal.ZERO);
|
user.setWxAmount(BigDecimal.ZERO);
|
||||||
moneyDO.setCashAmount(BigDecimal.ZERO);
|
user.setCashAmount(BigDecimal.ZERO);
|
||||||
user.setGiftAmount(BigDecimal.ZERO);
|
|
||||||
moneyDO.setDebtAmount(money.subtract(total).add(moneyDO.getDebtAmount()));
|
|
||||||
} else {
|
} else {
|
||||||
dishOrderDO.setOrderStatus(DishOrderDO.COMPLETE);
|
dishOrderDO.setOrderStatus(DishOrderDO.COMPLETE);
|
||||||
//计算金额 现金->赠送->微信
|
//扣除具体金额
|
||||||
if (total.compareTo(cashAmount) <= 0) {
|
if (judge(userId)) { //微信->现金
|
||||||
moneyDO.setCashAmount(cashAmount.subtract(total));
|
if (total.compareTo(wxAmount) <= 0) {
|
||||||
dishOrderDO.setCashAmount(total);
|
user.setWxAmount(wxAmount.subtract(total));
|
||||||
} else {
|
dishOrderDO.setWxAmount(total);
|
||||||
moneyDO.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 {
|
} else {
|
||||||
user.setGiftAmount(BigDecimal.ZERO);
|
user.setWxAmount(BigDecimal.ZERO);
|
||||||
dishOrderDO.setGiftAmount(giftAmount);
|
dishOrderDO.setWxAmount(wxAmount);
|
||||||
BigDecimal total2 = total1.subtract(giftAmount);
|
BigDecimal total1 = total.subtract(wxAmount);
|
||||||
|
user.setCashAmount(cashAmount.subtract(total1));
|
||||||
|
dishOrderDO.setCashAmount(total1);
|
||||||
|
}
|
||||||
|
|
||||||
user.setWxAmount(wxAmount.subtract(total2));
|
} else { //现金->微信
|
||||||
dishOrderDO.setWxAmount(total2);
|
if (total.compareTo(cashAmount) <= 0) {
|
||||||
|
user.setCashAmount(cashAmount.subtract(total));
|
||||||
|
dishOrderDO.setCashAmount(total);
|
||||||
|
} else {
|
||||||
|
user.setCashAmount(BigDecimal.ZERO);
|
||||||
|
dishOrderDO.setCashAmount(cashAmount);
|
||||||
|
BigDecimal total1 = total.subtract(cashAmount);
|
||||||
|
user.setWxAmount(wxAmount.subtract(total1));
|
||||||
|
dishOrderDO.setWxAmount(total1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//修改
|
//修改
|
||||||
userService.updateById(user);
|
userService.updateById(user);
|
||||||
moneyService.updateById(moneyDO);
|
|
||||||
|
|
||||||
wxNewMoney = user.getWxAmount();
|
wxNewMoney = user.getWxAmount();
|
||||||
giftNewMoney = user.getGiftAmount();
|
cashNewMoney = user.getCashAmount();
|
||||||
cashNewMoney = moneyDO.getCashAmount();
|
|
||||||
changeMoney = total;
|
changeMoney = total;
|
||||||
|
newMoney = user.getMoney();
|
||||||
name = user.getNickname();
|
name = user.getNickname();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -178,7 +176,6 @@ public class DeductionServiceImpl implements DeductionService {
|
|||||||
cardDO.setFlag(CardDO.MINUS);
|
cardDO.setFlag(CardDO.MINUS);
|
||||||
cardDO.setCashAmount(cashNewMoney);
|
cardDO.setCashAmount(cashNewMoney);
|
||||||
cardDO.setWxAmount(wxNewMoney);
|
cardDO.setWxAmount(wxNewMoney);
|
||||||
cardDO.setGiftAmount(giftNewMoney);
|
|
||||||
cardDO.setCarteenId(dishOrderDO.getStoreId());
|
cardDO.setCarteenId(dishOrderDO.getStoreId());
|
||||||
|
|
||||||
cardService.insertOne(cardDO);
|
cardService.insertOne(cardDO);
|
||||||
@ -201,7 +198,7 @@ public class DeductionServiceImpl implements DeductionService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//更新redis
|
//更新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) {
|
public void cashDraw(Long userId, BigDecimal money, String type, Long storeId) {
|
||||||
|
|
||||||
BigDecimal wxNewMoney;
|
BigDecimal wxNewMoney;
|
||||||
BigDecimal giftNewMoney;
|
|
||||||
BigDecimal cashNewMoney;
|
BigDecimal cashNewMoney;
|
||||||
|
BigDecimal newMoney;
|
||||||
String name;
|
String name;
|
||||||
|
|
||||||
synchronized (getUserLock(userId)) {
|
synchronized (getUserLock(userId)) {
|
||||||
MemberUserDO user = userService.getUser(userId);
|
MemberUserDO user = userService.getUser(userId);
|
||||||
MoneyDO moneyDO = moneyService.getMoney(userId, storeId);
|
if (user.getCashAmount().compareTo(BigDecimal.ZERO) < 1
|
||||||
if (ObjectUtil.isEmpty(moneyDO) || moneyDO.getCashAmount().compareTo(BigDecimal.ZERO) < 1
|
|| money.compareTo(user.getCashAmount()) > 0) {
|
||||||
|| money.compareTo(moneyDO.getCashAmount()) > 0) {
|
|
||||||
throw exception(CASH_AMOUNT_NOT_ENOUGH);
|
throw exception(CASH_AMOUNT_NOT_ENOUGH);
|
||||||
}
|
}
|
||||||
moneyDO.setCashAmount(moneyDO.getCashAmount().subtract(money));
|
user.setCashAmount(user.getCashAmount().subtract(money));
|
||||||
moneyService.updateById(moneyDO);
|
user.setMoney(user.getMoney().subtract(money));
|
||||||
|
userService.updateById(user);
|
||||||
|
|
||||||
wxNewMoney = user.getWxAmount();
|
wxNewMoney = user.getWxAmount();
|
||||||
giftNewMoney = user.getGiftAmount();
|
cashNewMoney = user.getCashAmount();
|
||||||
cashNewMoney = moneyDO.getCashAmount();
|
newMoney = user.getMoney();
|
||||||
name = user.getNickname();
|
name = user.getNickname();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -235,13 +232,12 @@ public class DeductionServiceImpl implements DeductionService {
|
|||||||
cardDO.setChangeMoney(money);
|
cardDO.setChangeMoney(money);
|
||||||
cardDO.setType(type);
|
cardDO.setType(type);
|
||||||
cardDO.setWxAmount(wxNewMoney);
|
cardDO.setWxAmount(wxNewMoney);
|
||||||
cardDO.setGiftAmount(giftNewMoney);
|
|
||||||
cardDO.setCashAmount(cashNewMoney);
|
cardDO.setCashAmount(cashNewMoney);
|
||||||
cardDO.setCarteenId(storeId);
|
cardDO.setCarteenId(storeId);
|
||||||
cardService.insertOne(cardDO);
|
cardService.insertOne(cardDO);
|
||||||
|
|
||||||
//更新redis
|
//更新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) {
|
public void wxDraw(Integer amount, Long userId) {
|
||||||
|
|
||||||
BigDecimal wxNewMoney;
|
BigDecimal wxNewMoney;
|
||||||
BigDecimal giftNewMoney;
|
|
||||||
BigDecimal cashNewMoney;
|
BigDecimal cashNewMoney;
|
||||||
|
BigDecimal newMoney;
|
||||||
String name;
|
String name;
|
||||||
BigDecimal changeMoney = new BigDecimal(amount).divide(new BigDecimal("100"));
|
BigDecimal changeMoney = new BigDecimal(amount).divide(new BigDecimal("100"));
|
||||||
|
|
||||||
synchronized (getUserLock(userId)) {
|
synchronized (getUserLock(userId)) {
|
||||||
MemberUserDO user = userService.getUser(userId);
|
MemberUserDO user = userService.getUser(userId);
|
||||||
user.setWxAmount(user.getWxAmount().subtract(changeMoney));
|
user.setWxAmount(user.getWxAmount().subtract(changeMoney));
|
||||||
|
user.setMoney(user.getMoney().subtract(changeMoney));
|
||||||
userService.updateById(user);
|
userService.updateById(user);
|
||||||
wxNewMoney = user.getWxAmount();
|
wxNewMoney = user.getWxAmount();
|
||||||
giftNewMoney = user.getGiftAmount();
|
newMoney = user.getMoney();
|
||||||
cashNewMoney = user.getCashAmount();
|
cashNewMoney = user.getCashAmount();
|
||||||
name = user.getNickname();
|
name = user.getNickname();
|
||||||
}
|
}
|
||||||
@ -272,74 +269,62 @@ public class DeductionServiceImpl implements DeductionService {
|
|||||||
cardDO.setChangeMoney(changeMoney);
|
cardDO.setChangeMoney(changeMoney);
|
||||||
cardDO.setType("7");
|
cardDO.setType("7");
|
||||||
cardDO.setWxAmount(wxNewMoney);
|
cardDO.setWxAmount(wxNewMoney);
|
||||||
cardDO.setGiftAmount(giftNewMoney);
|
|
||||||
cardDO.setCashAmount(cashNewMoney);
|
cardDO.setCashAmount(cashNewMoney);
|
||||||
cardService.insertOne(cardDO);
|
cardService.insertOne(cardDO);
|
||||||
|
|
||||||
//更新redis
|
//更新redis
|
||||||
updateRedis(userId, name, wxNewMoney);
|
updateRedis(userId, name, newMoney);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void refund(Long userId, BigDecimal money, DishOrderDO dishOrderDO) {
|
public void refund(Long userId, BigDecimal money, DishOrderDO dishOrderDO) {
|
||||||
//获取最新余额
|
//获取最新余额
|
||||||
BigDecimal wxNewMoney;
|
BigDecimal wxNewMoney;
|
||||||
BigDecimal giftNewMoney;
|
BigDecimal newTotalMoney;
|
||||||
BigDecimal cashNewMoney;
|
BigDecimal cashNewMoney;
|
||||||
String name;
|
String name;
|
||||||
|
|
||||||
synchronized (getUserLock(userId)) {
|
synchronized (getUserLock(userId)) {
|
||||||
MemberUserDO user = userService.getUser(userId);
|
MemberUserDO user = userService.getUser(userId);
|
||||||
MoneyDO moneyDO = moneyService.getMoney(userId, dishOrderDO.getStoreId());
|
|
||||||
|
|
||||||
//用户当前金额
|
//用户当前金额
|
||||||
|
BigDecimal userMoney = user.getMoney();
|
||||||
BigDecimal wxAmount = user.getWxAmount();
|
BigDecimal wxAmount = user.getWxAmount();
|
||||||
BigDecimal giftAmount = user.getGiftAmount();
|
BigDecimal cashAmount = user.getCashAmount();
|
||||||
BigDecimal cashAmount = moneyDO.getCashAmount();
|
|
||||||
BigDecimal debtAmount = moneyDO.getDebtAmount();
|
|
||||||
|
|
||||||
|
|
||||||
//订单消费金额
|
//订单消费金额
|
||||||
BigDecimal dishWxAmount = dishOrderDO.getWxAmount();
|
BigDecimal dishWxAmount = dishOrderDO.getWxAmount();
|
||||||
BigDecimal dishCashAmount = dishOrderDO.getCashAmount();
|
BigDecimal dishCashAmount = dishOrderDO.getCashAmount();
|
||||||
BigDecimal dishGiftAmount = dishOrderDO.getGiftAmount();
|
|
||||||
|
|
||||||
BigDecimal newMoney = money;
|
BigDecimal newMoney = money;
|
||||||
|
|
||||||
if (debtAmount.compareTo(BigDecimal.ZERO) > 0) {
|
if (userMoney.compareTo(BigDecimal.ZERO) < 0) {
|
||||||
newMoney = debtAmount.add(newMoney);
|
newMoney = userMoney.add(newMoney);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (newMoney.compareTo(BigDecimal.ZERO) < 0) {
|
if (newMoney.compareTo(BigDecimal.ZERO) < 0) {
|
||||||
user.setWxAmount(BigDecimal.ZERO);
|
user.setWxAmount(BigDecimal.ZERO);
|
||||||
user.setGiftAmount(BigDecimal.ZERO);
|
|
||||||
user.setCashAmount(BigDecimal.ZERO);
|
user.setCashAmount(BigDecimal.ZERO);
|
||||||
|
user.setMoney(newMoney);
|
||||||
} else {
|
} else {
|
||||||
if (newMoney.compareTo(dishGiftAmount) <= 0) {
|
if (newMoney.compareTo(dishCashAmount) <= 0) {
|
||||||
user.setGiftAmount(giftAmount.add(newMoney));
|
user.setCashAmount(cashAmount.add(newMoney));
|
||||||
} else {
|
} else {
|
||||||
user.setGiftAmount(giftAmount.add(dishGiftAmount));
|
user.setCashAmount(cashAmount.add(dishCashAmount));
|
||||||
BigDecimal money1 = newMoney.subtract(dishGiftAmount);
|
BigDecimal money2 = newMoney.subtract(dishCashAmount);
|
||||||
|
if (money2.compareTo(dishWxAmount) <= 0) {
|
||||||
if (money1.compareTo(dishCashAmount) <= 0) {
|
user.setWxAmount(wxAmount.add(money2));
|
||||||
moneyDO.setCashAmount(cashAmount.add(money1));
|
|
||||||
} else {
|
} else {
|
||||||
moneyDO.setCashAmount(cashAmount.add(dishCashAmount));
|
user.setWxAmount(wxAmount.add(dishWxAmount));
|
||||||
BigDecimal money2 = money1.subtract(dishCashAmount);
|
|
||||||
if (money2.compareTo(dishWxAmount) <= 0) {
|
|
||||||
user.setWxAmount(wxAmount.add(money2));
|
|
||||||
} else {
|
|
||||||
user.setWxAmount(wxAmount.add(dishWxAmount));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
userService.updateById(user);
|
userService.updateById(user);
|
||||||
moneyService.updateById(moneyDO);
|
|
||||||
wxNewMoney = user.getWxAmount();
|
wxNewMoney = user.getWxAmount();
|
||||||
giftNewMoney = user.getGiftAmount();
|
newTotalMoney = user.getMoney();
|
||||||
cashNewMoney = moneyDO.getCashAmount();
|
cashNewMoney = user.getCashAmount();
|
||||||
name = user.getNickname();
|
name = user.getNickname();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -349,36 +334,33 @@ public class DeductionServiceImpl implements DeductionService {
|
|||||||
cardDO.setChangeMoney(money);
|
cardDO.setChangeMoney(money);
|
||||||
cardDO.setType(CostTypeEnum.REFUND.getCode());
|
cardDO.setType(CostTypeEnum.REFUND.getCode());
|
||||||
cardDO.setWxAmount(wxNewMoney);
|
cardDO.setWxAmount(wxNewMoney);
|
||||||
cardDO.setGiftAmount(giftNewMoney);
|
|
||||||
cardDO.setCashAmount(cashNewMoney);
|
cardDO.setCashAmount(cashNewMoney);
|
||||||
cardDO.setCarteenId(dishOrderDO.getStoreId());
|
cardDO.setCarteenId(dishOrderDO.getStoreId());
|
||||||
cardService.insertOne(cardDO);
|
cardService.insertOne(cardDO);
|
||||||
|
|
||||||
//更新redis
|
//更新redis
|
||||||
updateRedis(userId, name, wxNewMoney);
|
updateRedis(userId, name, newTotalMoney);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void reduction(Long userId, BigDecimal money, BigDecimal giftAmount, BigDecimal cashAmount, BigDecimal wxAmount, Long storeId) {
|
public void reduction(Long userId, BigDecimal money, BigDecimal giftAmount, BigDecimal cashAmount, BigDecimal wxAmount, Long storeId) {
|
||||||
|
|
||||||
BigDecimal giftNewAmount;
|
BigDecimal newAmount;
|
||||||
BigDecimal cashNewAmount;
|
BigDecimal cashNewAmount;
|
||||||
BigDecimal wxNewAmount;
|
BigDecimal wxNewAmount;
|
||||||
String name;
|
String name;
|
||||||
|
|
||||||
synchronized (getUserLock(userId)) {
|
synchronized (getUserLock(userId)) {
|
||||||
MemberUserDO user = userService.getUser(userId);
|
MemberUserDO user = userService.getUser(userId);
|
||||||
MoneyDO moneyDO = moneyService.getMoney(userId, storeId);
|
|
||||||
|
|
||||||
moneyDO.setCashAmount(moneyDO.getCashAmount().add(cashAmount));
|
user.setCashAmount(user.getCashAmount().add(cashAmount));
|
||||||
user.setGiftAmount(user.getGiftAmount().add(giftAmount));
|
|
||||||
user.setWxAmount(user.getWxAmount().add(wxAmount));
|
user.setWxAmount(user.getWxAmount().add(wxAmount));
|
||||||
|
user.setMoney(user.getMoney().add(money));
|
||||||
userService.updateById(user);
|
userService.updateById(user);
|
||||||
moneyService.updateById(moneyDO);
|
|
||||||
|
|
||||||
wxNewAmount = user.getWxAmount();
|
wxNewAmount = user.getWxAmount();
|
||||||
giftNewAmount = user.getGiftAmount();
|
newAmount = user.getMoney();
|
||||||
cashNewAmount = moneyDO.getCashAmount();
|
cashNewAmount = user.getCashAmount();
|
||||||
name = user.getNickname();
|
name = user.getNickname();
|
||||||
}
|
}
|
||||||
CardDO cardDO = new CardDO();
|
CardDO cardDO = new CardDO();
|
||||||
@ -388,30 +370,27 @@ public class DeductionServiceImpl implements DeductionService {
|
|||||||
cardDO.setType(CostTypeEnum.REFUND.getCode());
|
cardDO.setType(CostTypeEnum.REFUND.getCode());
|
||||||
cardDO.setWxAmount(wxNewAmount);
|
cardDO.setWxAmount(wxNewAmount);
|
||||||
cardDO.setCashAmount(cashNewAmount);
|
cardDO.setCashAmount(cashNewAmount);
|
||||||
cardDO.setGiftAmount(giftNewAmount);
|
|
||||||
cardDO.setCarteenId(storeId);
|
cardDO.setCarteenId(storeId);
|
||||||
cardService.insertOne(cardDO);
|
cardService.insertOne(cardDO);
|
||||||
|
|
||||||
//更新redis
|
//更新redis
|
||||||
updateRedis(userId, name, wxNewAmount);
|
updateRedis(userId, name, newAmount);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BigDecimal storeDeduction(BigDecimal total, @NotNull Long userId, Long storeId) {
|
public BigDecimal storeDeduction(BigDecimal total, @NotNull Long userId, Long storeId) {
|
||||||
|
|
||||||
BigDecimal wxNewMoney;
|
BigDecimal wxNewMoney;
|
||||||
BigDecimal giftNewMoney;
|
BigDecimal newMoney;
|
||||||
BigDecimal cashNewMoney;
|
BigDecimal cashNewMoney;
|
||||||
String name;
|
String name;
|
||||||
synchronized (getUserLock(userId)) {
|
synchronized (getUserLock(userId)) {
|
||||||
MemberUserDO user = userService.getUser(userId);
|
MemberUserDO user = userService.getUser(userId);
|
||||||
MoneyDO moneyDO = moneyService.getMoney(userId, storeId);
|
|
||||||
|
|
||||||
BigDecimal wxAmount = user.getWxAmount();
|
BigDecimal wxAmount = user.getWxAmount();
|
||||||
BigDecimal giftAmount = user.getGiftAmount();
|
BigDecimal cashAmount = user.getCashAmount();
|
||||||
BigDecimal cashAmount = moneyDO.getCashAmount();
|
|
||||||
|
|
||||||
BigDecimal money = wxAmount.add(giftAmount).add(cashAmount);
|
BigDecimal money = user.getMoney();
|
||||||
|
|
||||||
if (total.compareTo(money) > 0) {
|
if (total.compareTo(money) > 0) {
|
||||||
return money.subtract(total);
|
return money.subtract(total);
|
||||||
@ -419,9 +398,9 @@ public class DeductionServiceImpl implements DeductionService {
|
|||||||
|
|
||||||
//计算金额
|
//计算金额
|
||||||
if (total.compareTo(cashAmount) <= 0) {
|
if (total.compareTo(cashAmount) <= 0) {
|
||||||
moneyDO.setCashAmount(cashAmount.subtract(total));
|
user.setCashAmount(cashAmount.subtract(total));
|
||||||
} else {
|
} else {
|
||||||
moneyDO.setCashAmount(BigDecimal.ZERO);
|
user.setCashAmount(BigDecimal.ZERO);
|
||||||
BigDecimal total1 = total.subtract(cashAmount);
|
BigDecimal total1 = total.subtract(cashAmount);
|
||||||
if (total1.compareTo(giftAmount) <= 0) {
|
if (total1.compareTo(giftAmount) <= 0) {
|
||||||
user.setGiftAmount(giftAmount.subtract(total1));
|
user.setGiftAmount(giftAmount.subtract(total1));
|
||||||
@ -469,7 +448,7 @@ public class DeductionServiceImpl implements DeductionService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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 wxNewMoney;
|
||||||
BigDecimal giftNewMoney;
|
BigDecimal giftNewMoney;
|
||||||
@ -557,9 +536,9 @@ public class DeductionServiceImpl implements DeductionService {
|
|||||||
user.setGiftAmount(BigDecimal.ZERO);
|
user.setGiftAmount(BigDecimal.ZERO);
|
||||||
BigDecimal total2 = total1.subtract(giftAmount);
|
BigDecimal total2 = total1.subtract(giftAmount);
|
||||||
|
|
||||||
if(total2.compareTo(wxAmount) <= 0) {
|
if (total2.compareTo(wxAmount) <= 0) {
|
||||||
user.setWxAmount(wxAmount.subtract(total2));
|
user.setWxAmount(wxAmount.subtract(total2));
|
||||||
}else {
|
} else {
|
||||||
user.setWxAmount(BigDecimal.ZERO);
|
user.setWxAmount(BigDecimal.ZERO);
|
||||||
moneyDO.setDebtAmount(wxAmount.subtract(total2).add(moneyDO.getDebtAmount()));
|
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);
|
Integer type = memberGroupService.getGroupTypeByUserId(userId);
|
||||||
List<Integer> typeList = Arrays.asList(GroupTypeEnum.ADMINISTRATIVE.getCode(), GroupTypeEnum.DISTRICT.getCode());
|
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()
|
Optional<MoneyDO> optionalDebt = list.stream()
|
||||||
.filter(debt -> storeId.equals(debt.getCarteenId()))
|
.filter(debt -> storeId.equals(debt.getCarteenId()))
|
||||||
.findFirst();
|
.findFirst();
|
||||||
@ -615,23 +594,14 @@ public class DeductionServiceImpl implements DeductionService {
|
|||||||
return add;
|
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