金额修改
This commit is contained in:
@ -69,22 +69,15 @@ public class AmountServiceImpl implements AmountService {
|
|||||||
if (memberUserDO == null) {
|
if (memberUserDO == null) {
|
||||||
throw exception(USER_NOT_EXISTS);
|
throw exception(USER_NOT_EXISTS);
|
||||||
}
|
}
|
||||||
MoneyDO moneyDO = moneyService.getMoney(userId, storeId);
|
return memberUserDO.getMoney();
|
||||||
BigDecimal cashAmount = BigDecimal.ZERO;
|
|
||||||
|
|
||||||
if (moneyDO != null) {
|
|
||||||
cashAmount = moneyDO.getCashAmount();
|
|
||||||
}
|
|
||||||
|
|
||||||
return memberUserDO.getWxAmount().add(cashAmount);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BigDecimal getCashAmount(Long userId,Long storeId) {
|
public BigDecimal getCashAmount(Long userId,Long storeId) {
|
||||||
MoneyDO moneyDO = moneyService.getMoney(userId, storeId);
|
MemberUserDO memberUserDO = userMapper.selectById(userId);
|
||||||
if (moneyDO == null) {
|
if (memberUserDO == null) {
|
||||||
return BigDecimal.ZERO;
|
return BigDecimal.ZERO;
|
||||||
}
|
}
|
||||||
return moneyDO.getCashAmount();
|
return memberUserDO.getCashAmount();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -73,43 +73,27 @@ public class CashRechargeServiceImpl implements CashRechargeService {
|
|||||||
for (Long userId : memberList) {
|
for (Long userId : memberList) {
|
||||||
|
|
||||||
BigDecimal wxNewMoney;
|
BigDecimal wxNewMoney;
|
||||||
BigDecimal giftNewMoney;
|
BigDecimal newMoney;
|
||||||
BigDecimal cashNewAmount;
|
BigDecimal cashNewAmount;
|
||||||
String name;
|
String name;
|
||||||
|
|
||||||
BigDecimal computeMoney = money;
|
|
||||||
|
|
||||||
synchronized (getUserLock(userId)) {
|
synchronized (getUserLock(userId)) {
|
||||||
MemberUserDO memberUserDO = userMapper.selectById(userId);
|
MemberUserDO memberUserDO = userMapper.selectById(userId);
|
||||||
MoneyDO moneyDO = moneyService.getMoney(userId, storeId);
|
//金额变动
|
||||||
BigDecimal debtAmount = BigDecimal.ZERO;
|
BigDecimal oldMoney = memberUserDO.getMoney();
|
||||||
if (ObjectUtil.isEmpty(moneyDO)) {
|
newMoney = oldMoney.add(money);
|
||||||
MoneyDO add = new MoneyDO();
|
memberUserDO.setMoney(newMoney);
|
||||||
add.setCashAmount(computeMoney);
|
|
||||||
add.setDebtAmount(debtAmount);
|
|
||||||
add.setUserId(userId);
|
|
||||||
add.setCarteenId(storeId);
|
|
||||||
moneyService.insertOne(add);
|
|
||||||
cashNewAmount = add.getCashAmount();
|
|
||||||
} else {
|
|
||||||
debtAmount = moneyDO.getDebtAmount();
|
|
||||||
//金额变动
|
|
||||||
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);
|
if(newMoney.compareTo(BigDecimal.ZERO) >= 0){
|
||||||
|
if(oldMoney.compareTo(BigDecimal.ZERO) < 0){
|
||||||
|
memberUserDO.setCashAmount(newMoney);
|
||||||
|
}else {
|
||||||
|
memberUserDO.setCashAmount(memberUserDO.getCashAmount().add(money));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
wxNewMoney = memberUserDO.getWxAmount();
|
wxNewMoney = memberUserDO.getWxAmount();
|
||||||
giftNewMoney = memberUserDO.getGiftAmount();
|
cashNewAmount = memberUserDO.getCashAmount();
|
||||||
name = memberUserDO.getNickname();
|
name = memberUserDO.getNickname();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -121,7 +105,6 @@ public class CashRechargeServiceImpl implements CashRechargeService {
|
|||||||
add.setType(CostTypeEnum.ADMIN_PAY.getCode());
|
add.setType(CostTypeEnum.ADMIN_PAY.getCode());
|
||||||
add.setCashAmount(cashNewAmount);
|
add.setCashAmount(cashNewAmount);
|
||||||
add.setWxAmount(wxNewMoney);
|
add.setWxAmount(wxNewMoney);
|
||||||
add.setGiftAmount(giftNewMoney);
|
|
||||||
add.setCarteenId(storeId);
|
add.setCarteenId(storeId);
|
||||||
add.setGroupId(groupId);
|
add.setGroupId(groupId);
|
||||||
add.setGroupName(ObjectUtil.isNotEmpty(memberGroupDO)?memberGroupDO.getName():null);
|
add.setGroupName(ObjectUtil.isNotEmpty(memberGroupDO)?memberGroupDO.getName():null);
|
||||||
@ -131,7 +114,7 @@ public class CashRechargeServiceImpl implements CashRechargeService {
|
|||||||
String redisKey = "USER_" + userId;
|
String redisKey = "USER_" + userId;
|
||||||
AppUserInfoCardVO appUserInfoCardVO = new AppUserInfoCardVO();
|
AppUserInfoCardVO appUserInfoCardVO = new AppUserInfoCardVO();
|
||||||
appUserInfoCardVO.setName(name);
|
appUserInfoCardVO.setName(name);
|
||||||
appUserInfoCardVO.setMoney(wxNewMoney);
|
appUserInfoCardVO.setMoney(newMoney);
|
||||||
cashRechargeRedisTemplate.opsForValue().set(redisKey, JSONUtil.toJsonStr(appUserInfoCardVO));
|
cashRechargeRedisTemplate.opsForValue().set(redisKey, JSONUtil.toJsonStr(appUserInfoCardVO));
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -153,7 +136,8 @@ public class CashRechargeServiceImpl implements CashRechargeService {
|
|||||||
|
|
||||||
List<DishOrderDO> dishOrderDOS = dishOrderMapper.selectList(Wrappers.<DishOrderDO>lambdaQuery()
|
List<DishOrderDO> dishOrderDOS = dishOrderMapper.selectList(Wrappers.<DishOrderDO>lambdaQuery()
|
||||||
.eq(DishOrderDO::getUserId, userId).eq(DishOrderDO::getOrderStatus, DishOrderDO.TOCOMPLETE)
|
.eq(DishOrderDO::getUserId, userId).eq(DishOrderDO::getOrderStatus, DishOrderDO.TOCOMPLETE)
|
||||||
.eq(DishOrderDO::getStoreId, storeId));
|
// .eq(DishOrderDO::getStoreId, storeId)
|
||||||
|
);
|
||||||
|
|
||||||
if (CollectionUtil.isNotEmpty(dishOrderDOS)) {
|
if (CollectionUtil.isNotEmpty(dishOrderDOS)) {
|
||||||
for (DishOrderDO dishOrderDO : dishOrderDOS) {
|
for (DishOrderDO dishOrderDO : dishOrderDOS) {
|
||||||
|
@ -39,7 +39,12 @@ public interface DeductionService {
|
|||||||
/**
|
/**
|
||||||
* 扣款
|
* 扣款
|
||||||
*/
|
*/
|
||||||
void deduct(Long userId, BigDecimal money,String type,Long storeId);
|
void deduct(Long userId, BigDecimal money,String type,Long storeId,String time);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 太空舱扣款
|
||||||
|
*/
|
||||||
|
void spaceDeduct(Long userId, BigDecimal money,String type,Long storeId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 超市离线扣款
|
* 超市离线扣款
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
package cn.iocoder.yudao.module.member.service.amount;
|
package cn.iocoder.yudao.module.member.service.amount;
|
||||||
|
|
||||||
|
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import cn.hutool.json.JSONUtil;
|
import cn.hutool.json.JSONUtil;
|
||||||
import cn.iocoder.yudao.module.member.controller.admin.business.vo.StatisticsVo;
|
import cn.iocoder.yudao.module.member.controller.admin.business.vo.StatisticsVo;
|
||||||
@ -391,31 +390,37 @@ public class DeductionServiceImpl implements DeductionService {
|
|||||||
BigDecimal cashAmount = user.getCashAmount();
|
BigDecimal cashAmount = user.getCashAmount();
|
||||||
|
|
||||||
BigDecimal money = user.getMoney();
|
BigDecimal money = user.getMoney();
|
||||||
|
BigDecimal judgeAmount;
|
||||||
if (total.compareTo(money) > 0) {
|
boolean judge = judgeShopping(userId);
|
||||||
return money.subtract(total);
|
if (judge) {
|
||||||
|
judgeAmount = wxAmount;
|
||||||
|
} else {
|
||||||
|
judgeAmount = money;
|
||||||
}
|
}
|
||||||
|
|
||||||
//计算金额
|
if (total.compareTo(judgeAmount) > 0) {
|
||||||
if (total.compareTo(cashAmount) <= 0) {
|
return judgeAmount.subtract(total);
|
||||||
user.setCashAmount(cashAmount.subtract(total));
|
}
|
||||||
|
|
||||||
|
//扣除金额
|
||||||
|
if (judge) {
|
||||||
|
user.setMoney(money.subtract(total));
|
||||||
|
user.setWxAmount(wxAmount.subtract(total));
|
||||||
} else {
|
} else {
|
||||||
user.setCashAmount(BigDecimal.ZERO);
|
if (total.compareTo(cashAmount) <= 0) {
|
||||||
BigDecimal total1 = total.subtract(cashAmount);
|
user.setCashAmount(cashAmount.subtract(total));
|
||||||
if (total1.compareTo(giftAmount) <= 0) {
|
|
||||||
user.setGiftAmount(giftAmount.subtract(total1));
|
|
||||||
} else {
|
} else {
|
||||||
user.setGiftAmount(BigDecimal.ZERO);
|
user.setCashAmount(BigDecimal.ZERO);
|
||||||
BigDecimal total2 = total1.subtract(giftAmount);
|
BigDecimal total1 = total.subtract(cashAmount);
|
||||||
user.setWxAmount(wxAmount.subtract(total2));
|
user.setWxAmount(wxAmount.subtract(total1));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
userService.updateById(user);
|
userService.updateById(user);
|
||||||
moneyService.updateById(moneyDO);
|
|
||||||
|
|
||||||
wxNewMoney = user.getWxAmount();
|
wxNewMoney = user.getWxAmount();
|
||||||
giftNewMoney = user.getGiftAmount();
|
newMoney = user.getMoney();
|
||||||
cashNewMoney = moneyDO.getCashAmount();
|
cashNewMoney = user.getCashAmount();
|
||||||
name = user.getNickname();
|
name = user.getNickname();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -426,7 +431,6 @@ public class DeductionServiceImpl implements DeductionService {
|
|||||||
cardDO.setType(CostTypeEnum.SHOPPING.getCode());
|
cardDO.setType(CostTypeEnum.SHOPPING.getCode());
|
||||||
cardDO.setWxAmount(wxNewMoney);
|
cardDO.setWxAmount(wxNewMoney);
|
||||||
cardDO.setCashAmount(cashNewMoney);
|
cardDO.setCashAmount(cashNewMoney);
|
||||||
cardDO.setGiftAmount(giftNewMoney);
|
|
||||||
cardDO.setCarteenId(storeId);
|
cardDO.setCarteenId(storeId);
|
||||||
cardService.insertOne(cardDO);
|
cardService.insertOne(cardDO);
|
||||||
|
|
||||||
@ -434,7 +438,7 @@ public class DeductionServiceImpl implements DeductionService {
|
|||||||
//更新redis
|
//更新redis
|
||||||
updateRedis(userId, name, wxNewMoney);
|
updateRedis(userId, name, wxNewMoney);
|
||||||
|
|
||||||
return wxNewMoney.add(giftNewMoney).add(cashNewMoney);
|
return newMoney;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -448,50 +452,47 @@ 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, String time) {
|
||||||
|
|
||||||
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 total = user.getMoney();
|
||||||
BigDecimal total = moneyDO.getCashAmount().add(user.getWxAmount()).add(user.getGiftAmount());
|
user.setMoney(total.subtract(money));
|
||||||
if (total.compareTo(money) < 0) {
|
if (total.compareTo(money) < 0) {
|
||||||
if (CHECK_LIST.contains(type)) {
|
|
||||||
throw exception(CASH_AMOUNT_NOT_ENOUGH);
|
|
||||||
}
|
|
||||||
user.setWxAmount(BigDecimal.ZERO);
|
user.setWxAmount(BigDecimal.ZERO);
|
||||||
moneyDO.setCashAmount(BigDecimal.ZERO);
|
user.setCashAmount(BigDecimal.ZERO);
|
||||||
user.setGiftAmount(BigDecimal.ZERO);
|
|
||||||
moneyDO.setDebtAmount(total.subtract(money));
|
|
||||||
} else {
|
} else {
|
||||||
BigDecimal wxAmount = user.getWxAmount();
|
BigDecimal wxAmount = user.getWxAmount();
|
||||||
BigDecimal giftAmount = user.getGiftAmount();
|
BigDecimal cashAmount = user.getCashAmount();
|
||||||
BigDecimal cashAmount = moneyDO.getCashAmount();
|
|
||||||
//计算金额
|
//计算金额
|
||||||
if (money.compareTo(cashAmount) <= 0) {
|
if (judge(userId, time)) {
|
||||||
moneyDO.setCashAmount(cashAmount.subtract(money));
|
if (money.compareTo(wxAmount) <= 0) {
|
||||||
} else {
|
user.setWxAmount(wxAmount.subtract(money));
|
||||||
moneyDO.setCashAmount(BigDecimal.ZERO);
|
|
||||||
BigDecimal total1 = money.subtract(cashAmount);
|
|
||||||
if (total1.compareTo(giftAmount) <= 0) {
|
|
||||||
user.setGiftAmount(giftAmount.subtract(total1));
|
|
||||||
} else {
|
} else {
|
||||||
user.setGiftAmount(BigDecimal.ZERO);
|
user.setWxAmount(BigDecimal.ZERO);
|
||||||
BigDecimal total2 = total1.subtract(giftAmount);
|
BigDecimal total1 = money.subtract(wxAmount);
|
||||||
user.setWxAmount(wxAmount.subtract(total2));
|
user.setCashAmount(cashAmount.subtract(total1));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (money.compareTo(cashAmount) <= 0) {
|
||||||
|
user.setCashAmount(cashAmount.subtract(money));
|
||||||
|
} else {
|
||||||
|
user.setCashAmount(BigDecimal.ZERO);
|
||||||
|
BigDecimal total1 = money.subtract(cashAmount);
|
||||||
|
user.setWxAmount(wxAmount.subtract(total1));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
userService.updateById(user);
|
userService.updateById(user);
|
||||||
moneyService.updateById(moneyDO);
|
|
||||||
|
|
||||||
wxNewMoney = user.getWxAmount();
|
wxNewMoney = user.getWxAmount();
|
||||||
giftNewMoney = user.getGiftAmount();
|
newMoney = user.getMoney();
|
||||||
cashNewMoney = moneyDO.getCashAmount();
|
cashNewMoney = user.getCashAmount();
|
||||||
name = user.getNickname();
|
name = user.getNickname();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -501,13 +502,72 @@ 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);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void spaceDeduct(Long userId, BigDecimal money, String type, Long storeId) {
|
||||||
|
BigDecimal wxNewMoney;
|
||||||
|
BigDecimal newMoney;
|
||||||
|
BigDecimal cashNewMoney;
|
||||||
|
String name;
|
||||||
|
|
||||||
|
synchronized (getUserLock(userId)) {
|
||||||
|
MemberUserDO user = userService.getUser(userId);
|
||||||
|
BigDecimal total = user.getMoney();
|
||||||
|
if (total.compareTo(money) < 0) {
|
||||||
|
throw exception(CASH_AMOUNT_NOT_ENOUGH);
|
||||||
|
} else {
|
||||||
|
|
||||||
|
BigDecimal wxAmount = user.getWxAmount();
|
||||||
|
BigDecimal cashAmount = user.getCashAmount();
|
||||||
|
user.setMoney(total.subtract(money));
|
||||||
|
//计算金额
|
||||||
|
if (judgeSpace(userId)) {
|
||||||
|
if (money.compareTo(wxAmount) <= 0) {
|
||||||
|
user.setWxAmount(wxAmount.subtract(money));
|
||||||
|
} else {
|
||||||
|
user.setWxAmount(BigDecimal.ZERO);
|
||||||
|
BigDecimal total1 = money.subtract(wxAmount);
|
||||||
|
user.setCashAmount(cashAmount.subtract(total1));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (money.compareTo(cashAmount) <= 0) {
|
||||||
|
user.setCashAmount(cashAmount.subtract(money));
|
||||||
|
} else {
|
||||||
|
user.setCashAmount(BigDecimal.ZERO);
|
||||||
|
BigDecimal total1 = money.subtract(cashAmount);
|
||||||
|
user.setWxAmount(wxAmount.subtract(total1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
userService.updateById(user);
|
||||||
|
|
||||||
|
wxNewMoney = user.getWxAmount();
|
||||||
|
newMoney = user.getGiftAmount();
|
||||||
|
cashNewMoney = user.getCashAmount();
|
||||||
|
name = user.getNickname();
|
||||||
|
}
|
||||||
|
|
||||||
|
CardDO cardDO = new CardDO();
|
||||||
|
cardDO.setUserId(userId);
|
||||||
|
cardDO.setFlag(CardDO.MINUS);
|
||||||
|
cardDO.setChangeMoney(money);
|
||||||
|
cardDO.setType(type);
|
||||||
|
cardDO.setWxAmount(wxNewMoney);
|
||||||
|
cardDO.setCashAmount(cashNewMoney);
|
||||||
|
cardDO.setCarteenId(storeId);
|
||||||
|
cardService.insertOne(cardDO);
|
||||||
|
|
||||||
|
//更新redis
|
||||||
|
updateRedis(userId, name, newMoney);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -570,38 +630,47 @@ public class DeductionServiceImpl implements DeductionService {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//判断先扣那个金额
|
//判断食堂扣款顺序(true - 微信,false - 现金)
|
||||||
public boolean checkWay(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);
|
|
||||||
}
|
|
||||||
|
|
||||||
//获取门店的金额数据
|
|
||||||
public MoneyDO getStoreMoney(List<MoneyDO> list, Long storeId, Long userId) {
|
|
||||||
Optional<MoneyDO> optionalDebt = list.stream()
|
|
||||||
.filter(debt -> storeId.equals(debt.getCarteenId()))
|
|
||||||
.findFirst();
|
|
||||||
// 如果找到了匹配的元素,则返回,否则新建一个返回
|
|
||||||
return optionalDebt.orElseGet(() -> {
|
|
||||||
MoneyDO add = new MoneyDO();
|
|
||||||
add.setUserId(userId);
|
|
||||||
add.setCarteenId(storeId);
|
|
||||||
moneyService.insertOne(add);
|
|
||||||
return add;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
//判断扣款顺序
|
|
||||||
public boolean judge(Long userId) {
|
public boolean judge(Long userId) {
|
||||||
Integer type = memberGroupService.getGroupTypeByUserId(userId);
|
//获取用户所在组分类
|
||||||
List<Integer> typeList = Arrays.asList(GroupTypeEnum.ADMINISTRATIVE.getCode(), GroupTypeEnum.DISTRICT.getCode());
|
List<Integer> types = memberGroupService.getGroupTypeListByUserId(userId);
|
||||||
//查询今天是否假期
|
//查询今天是否假期
|
||||||
Boolean isHoliday = holidayService.checkHoliday();
|
Boolean isHoliday = holidayService.checkHoliday();
|
||||||
return isHoliday && typeList.contains(type);
|
return isHoliday && (types.contains(GroupTypeEnum.ADMINISTRATIVE.getCode()) || types.contains(GroupTypeEnum.DISTRICT.getCode()));
|
||||||
|
}
|
||||||
|
|
||||||
|
//判断食堂扣款顺序(true - 微信,false - 现金)
|
||||||
|
public boolean judge(Long userId, String time) {
|
||||||
|
//获取用户所在组分类
|
||||||
|
List<Integer> types = memberGroupService.getGroupTypeListByUserId(userId);
|
||||||
|
//查询今天是否假期
|
||||||
|
Boolean isHoliday = holidayService.checkHoliday(time);
|
||||||
|
return isHoliday && (types.contains(GroupTypeEnum.ADMINISTRATIVE.getCode()) || types.contains(GroupTypeEnum.DISTRICT.getCode()));
|
||||||
|
}
|
||||||
|
|
||||||
|
//判断购物付款顺序(true - 微信,false - 现金)
|
||||||
|
public boolean judgeShopping(Long userId) {
|
||||||
|
//获取用户所在组分类
|
||||||
|
List<Integer> types = memberGroupService.getGroupTypeListByUserId(userId);
|
||||||
|
return (types.contains(GroupTypeEnum.YCLH.getCode()) || types.contains(GroupTypeEnum.DISTRICT.getCode()));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//判断太空舱付款顺序(true - 微信,false - 现金)
|
||||||
|
public boolean judgeSpace(Long userId) {
|
||||||
|
//获取用户所在组分类
|
||||||
|
List<Integer> types = memberGroupService.getGroupTypeListByUserId(userId);
|
||||||
|
//查询今天是否假期
|
||||||
|
Boolean isHoliday = holidayService.checkHoliday();
|
||||||
|
//盈创力和不允许
|
||||||
|
if (types.contains(GroupTypeEnum.YCLH.getCode())) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
//行政服务中心只允许工作日
|
||||||
|
if (isHoliday && types.contains(GroupTypeEnum.ADMINISTRATIVE.getCode())) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -62,77 +62,31 @@ public class WxRechargeServiceImpl implements WxRechargeService {
|
|||||||
|
|
||||||
|
|
||||||
BigDecimal wxNewMoney;
|
BigDecimal wxNewMoney;
|
||||||
BigDecimal giftNewMoney;
|
BigDecimal newMoney;
|
||||||
String name;
|
String name;
|
||||||
|
|
||||||
synchronized (getUserLock(userId)) {
|
synchronized (getUserLock(userId)) {
|
||||||
//获取最新余额
|
//获取最新余额
|
||||||
MemberUserDO memberUserDO = userMapper.selectById(userId);
|
MemberUserDO memberUserDO = userMapper.selectById(userId);
|
||||||
List<MoneyDO> allDebt = moneyService.getAllDebt(userId);
|
|
||||||
List<Long> debtId = new ArrayList<>();
|
|
||||||
BigDecimal debtAmount = BigDecimal.ZERO;
|
|
||||||
if(CollectionUtil.isNotEmpty(allDebt)){
|
|
||||||
debtAmount = allDebt.stream().map(MoneyDO::getDebtAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
||||||
debtId= allDebt.stream().map(MoneyDO::getId).collect(Collectors.toList());
|
|
||||||
}
|
|
||||||
BigDecimal wxOldMoney = memberUserDO.getWxAmount();
|
BigDecimal wxOldMoney = memberUserDO.getWxAmount();
|
||||||
BigDecimal giftOldMoney = memberUserDO.getGiftAmount();
|
BigDecimal oldMoney = memberUserDO.getMoney();
|
||||||
|
newMoney = oldMoney.add(money);
|
||||||
BigDecimal computeMoney = money;
|
BigDecimal computeMoney = money;
|
||||||
//处理负债
|
memberUserDO.setMoney(newMoney);
|
||||||
if( computeMoney.add(debtAmount).compareTo(BigDecimal.ZERO) < 0){
|
if( newMoney.compareTo(BigDecimal.ZERO) >= 0){
|
||||||
memberUserDO.setWxAmount(BigDecimal.ZERO);
|
if(oldMoney.compareTo(BigDecimal.ZERO) < 0){
|
||||||
memberUserDO.setGiftAmount(BigDecimal.ZERO);
|
memberUserDO.setWxAmount(newMoney);
|
||||||
|
//处理未完全支付订单
|
||||||
BigDecimal computeWxMoney = wxAmount;
|
handleOrderWx(userId, money, wxAmount, giftAmount,null);
|
||||||
BigDecimal computeGiftMoney = giftAmount;
|
|
||||||
|
|
||||||
for (MoneyDO moneyDO : allDebt) {
|
|
||||||
if (computeMoney.add(moneyDO.getDebtAmount()).compareTo(BigDecimal.ZERO) >= 0) {
|
|
||||||
BigDecimal debtAmount1 = moneyDO.getDebtAmount();
|
|
||||||
computeMoney = computeMoney.add(debtAmount1);
|
|
||||||
moneyDO.setDebtAmount(BigDecimal.ZERO);
|
|
||||||
//处理未完全支付订单
|
|
||||||
BigDecimal paramWxMoney = BigDecimal.ZERO;
|
|
||||||
BigDecimal paramGiftMoney = BigDecimal.ZERO;
|
|
||||||
|
|
||||||
if(computeWxMoney.add(moneyDO.getDebtAmount()).compareTo(BigDecimal.ZERO)>=0){
|
|
||||||
computeWxMoney = computeWxMoney.add(moneyDO.getDebtAmount());
|
|
||||||
paramWxMoney = debtAmount1;
|
|
||||||
}else {
|
|
||||||
paramWxMoney = computeWxMoney;
|
|
||||||
paramGiftMoney = debtAmount1.abs().subtract(paramWxMoney);
|
|
||||||
computeWxMoney = BigDecimal.ZERO;
|
|
||||||
computeGiftMoney = computeGiftMoney.add(moneyDO.getDebtAmount());
|
|
||||||
|
|
||||||
}
|
|
||||||
handleOrderWx(userId, debtAmount1, paramWxMoney, paramGiftMoney,moneyDO.getCarteenId());
|
|
||||||
}else {
|
|
||||||
moneyDO.setDebtAmount(computeMoney.add(moneyDO.getDebtAmount()));
|
|
||||||
|
|
||||||
//处理未完全支付订单
|
|
||||||
handleOrderWx(userId, computeMoney, computeWxMoney, computeGiftMoney,moneyDO.getCarteenId());
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
moneyService.updateList(allDebt);
|
|
||||||
}else {
|
|
||||||
moneyService.cleanDebt(debtId);
|
|
||||||
//处理未完全支付订单
|
|
||||||
handleOrderWx(userId, money, wxAmount, giftAmount,null);
|
|
||||||
if(wxAmount.add(debtAmount).compareTo(BigDecimal.ZERO) >= 0){
|
|
||||||
memberUserDO.setWxAmount(wxAmount.add(debtAmount).add(wxOldMoney));
|
|
||||||
memberUserDO.setGiftAmount(giftAmount.add(giftOldMoney));
|
|
||||||
}else {
|
}else {
|
||||||
memberUserDO.setWxAmount(BigDecimal.ZERO);
|
memberUserDO.setWxAmount(wxOldMoney.add(money));
|
||||||
memberUserDO.setGiftAmount(money.add(debtAmount));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
userMapper.updateById(memberUserDO);
|
userMapper.updateById(memberUserDO);
|
||||||
|
|
||||||
wxNewMoney = memberUserDO.getWxAmount();
|
wxNewMoney = memberUserDO.getWxAmount();
|
||||||
giftNewMoney = memberUserDO.getGiftAmount();
|
|
||||||
name = memberUserDO.getNickname();
|
name = memberUserDO.getNickname();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -143,7 +97,6 @@ public class WxRechargeServiceImpl implements WxRechargeService {
|
|||||||
cardDO.setFlag(CardDO.ADD);
|
cardDO.setFlag(CardDO.ADD);
|
||||||
cardDO.setChangeMoney(money);
|
cardDO.setChangeMoney(money);
|
||||||
cardDO.setType(CostTypeEnum.WX_PAY.getCode());
|
cardDO.setType(CostTypeEnum.WX_PAY.getCode());
|
||||||
cardDO.setGiftAmount(giftNewMoney);
|
|
||||||
cardDO.setWxAmount(wxNewMoney);
|
cardDO.setWxAmount(wxNewMoney);
|
||||||
cardMapper.insert(cardDO);
|
cardMapper.insert(cardDO);
|
||||||
|
|
||||||
@ -152,7 +105,7 @@ public class WxRechargeServiceImpl implements WxRechargeService {
|
|||||||
String redisKey = "USER_" + userId;
|
String redisKey = "USER_" + userId;
|
||||||
AppUserInfoCardVO appUserInfoCardVO = new AppUserInfoCardVO();
|
AppUserInfoCardVO appUserInfoCardVO = new AppUserInfoCardVO();
|
||||||
appUserInfoCardVO.setName(name);
|
appUserInfoCardVO.setName(name);
|
||||||
appUserInfoCardVO.setMoney(wxNewMoney);
|
appUserInfoCardVO.setMoney(newMoney);
|
||||||
wxRechargeRedisTemplate.opsForValue().set(redisKey, JSONUtil.toJsonStr(appUserInfoCardVO));
|
wxRechargeRedisTemplate.opsForValue().set(redisKey, JSONUtil.toJsonStr(appUserInfoCardVO));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -364,13 +364,12 @@ public class DiningPlatesServiceImpl implements DiningPlatesService {
|
|||||||
|
|
||||||
public BigDecimal checkMoney(MemberUserDO memberUserDO,Long storeId) {
|
public BigDecimal checkMoney(MemberUserDO memberUserDO,Long storeId) {
|
||||||
//获取所有现金
|
//获取所有现金
|
||||||
BigDecimal cashAmount = moneyService.getAllMoney(memberUserDO.getId());
|
BigDecimal cashAmount = memberUserDO.getCashAmount();
|
||||||
//获取用户所在组分类
|
//获取用户所在组分类
|
||||||
Integer type = memberGroupService.getGroupTypeByUserId(memberUserDO.getId());
|
List<Integer> types = memberGroupService.getGroupTypeListByUserId(memberUserDO.getId());
|
||||||
List<Integer> typeList = Arrays.asList(GroupTypeEnum.ADMINISTRATIVE.getCode(), GroupTypeEnum.DISTRICT.getCode());
|
|
||||||
//查询今天是否假期
|
//查询今天是否假期
|
||||||
Boolean isHoliday = holidayService.checkHoliday();
|
Boolean isHoliday = holidayService.checkHoliday();
|
||||||
boolean typeHoliday = isHoliday && typeList.contains(type);
|
boolean typeHoliday = isHoliday && (types.contains(GroupTypeEnum.ADMINISTRATIVE.getCode()) || types.contains(GroupTypeEnum.DISTRICT.getCode()));
|
||||||
if(typeHoliday){
|
if(typeHoliday){
|
||||||
cashAmount = BigDecimal.ZERO;
|
cashAmount = BigDecimal.ZERO;
|
||||||
}
|
}
|
||||||
@ -491,12 +490,10 @@ public class DiningPlatesServiceImpl implements DiningPlatesService {
|
|||||||
.last("limit 1"));
|
.last("limit 1"));
|
||||||
MemberUserDO memberUserDO = memberUserMapper.selectById(diningPlatesDO.getUserId());
|
MemberUserDO memberUserDO = memberUserMapper.selectById(diningPlatesDO.getUserId());
|
||||||
|
|
||||||
BigDecimal cashAmount = moneyService.getAllMoney(memberUserDO.getId());
|
|
||||||
|
|
||||||
AppUserInfo appUserInfo = new AppUserInfo();
|
AppUserInfo appUserInfo = new AppUserInfo();
|
||||||
appUserInfo.setNickname(StrUtil.isNotBlank(memberUserDO.getName())?memberUserDO.getName():memberUserDO.getNickname())
|
appUserInfo.setNickname(StrUtil.isNotBlank(memberUserDO.getName())?memberUserDO.getName():memberUserDO.getNickname())
|
||||||
.setMoney(memberUserDO.getWxAmount().add(cashAmount))
|
.setMoney(memberUserDO.getMoney())
|
||||||
.setOrderMoney(new BigDecimal(stringRedisTemplate.opsForValue().get(diningPlatesNum+"-"+storeId)))
|
.setOrderMoney(Optional.ofNullable(stringRedisTemplate.opsForValue().get(diningPlatesNum + "-" + storeId)).map(BigDecimal::new).orElse(BigDecimal.ZERO))
|
||||||
.setReception(memberUserDO.getReception()).setLimitAmount(memberUserDO.getLimitAmount());
|
.setReception(memberUserDO.getReception()).setLimitAmount(memberUserDO.getLimitAmount());
|
||||||
return appUserInfo;
|
return appUserInfo;
|
||||||
}
|
}
|
||||||
|
@ -138,4 +138,6 @@ public interface MemberGroupService {
|
|||||||
* 获取用户所在组类别
|
* 获取用户所在组类别
|
||||||
*/
|
*/
|
||||||
Integer getGroupTypeByUserId(Long userId);
|
Integer getGroupTypeByUserId(Long userId);
|
||||||
|
|
||||||
|
List<Integer> getGroupTypeListByUserId(Long userId);
|
||||||
}
|
}
|
||||||
|
@ -212,4 +212,14 @@ public class MemberGroupServiceImpl implements MemberGroupService {
|
|||||||
List<Integer> collect = groupByUserId.stream().map(MemberGroupDO::getType).collect(Collectors.toList());
|
List<Integer> collect = groupByUserId.stream().map(MemberGroupDO::getType).collect(Collectors.toList());
|
||||||
return collect.get(0);
|
return collect.get(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Integer> getGroupTypeListByUserId(Long userId) {
|
||||||
|
|
||||||
|
List<MemberGroupDO> groupByUserId = memberGroupMapper.getGroupByUserId(userId);
|
||||||
|
if (CollectionUtil.isEmpty(groupByUserId)) {
|
||||||
|
return Collections.singletonList(GroupTypeEnum.PERSON.getCode());
|
||||||
|
}
|
||||||
|
return groupByUserId.stream().map(MemberGroupDO::getType).collect(Collectors.toList());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package cn.iocoder.yudao.module.member.service.holiday;
|
package cn.iocoder.yudao.module.member.service.holiday;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import javax.validation.*;
|
import javax.validation.*;
|
||||||
import cn.iocoder.yudao.module.member.controller.admin.holiday.vo.*;
|
import cn.iocoder.yudao.module.member.controller.admin.holiday.vo.*;
|
||||||
@ -57,4 +58,9 @@ public interface HolidayService {
|
|||||||
* 判断今天是否是假期
|
* 判断今天是否是假期
|
||||||
*/
|
*/
|
||||||
Boolean checkHoliday();
|
Boolean checkHoliday();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 判断指定日期是否是假期
|
||||||
|
*/
|
||||||
|
Boolean checkHoliday(String time);
|
||||||
}
|
}
|
@ -116,4 +116,20 @@ public class HolidayServiceImpl implements HolidayService {
|
|||||||
}
|
}
|
||||||
return isHoliday;
|
return isHoliday;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boolean checkHoliday(String time) {
|
||||||
|
// 创建 DateTimeFormatter 对象
|
||||||
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
||||||
|
LocalDate currentDate = LocalDate.parse(time, formatter);
|
||||||
|
DayOfWeek dayOfWeek =currentDate.getDayOfWeek();
|
||||||
|
// 判断当天是否周末
|
||||||
|
boolean isHoliday = dayOfWeek== DayOfWeek.SATURDAY || dayOfWeek == DayOfWeek.SUNDAY;
|
||||||
|
//获取假期
|
||||||
|
HolidayDO holidayDO = holidayMapper.selectOne(new QueryWrapper<HolidayDO>().eq("date", time).last("LIMIT 1"));
|
||||||
|
if (holidayDO != null) {
|
||||||
|
isHoliday = holidayDO.getHoliday();
|
||||||
|
}
|
||||||
|
return isHoliday;
|
||||||
|
}
|
||||||
}
|
}
|
@ -500,16 +500,16 @@ public class OrderServiceImpl implements OrderService {
|
|||||||
if (memberUserDO == null) {
|
if (memberUserDO == null) {
|
||||||
throw exception(USER_NOT_EXISTS);
|
throw exception(USER_NOT_EXISTS);
|
||||||
}
|
}
|
||||||
|
String dateTime = date;
|
||||||
if(CostTypeEnum.MORNING.getCode().equals(type)){
|
if(CostTypeEnum.MORNING.getCode().equals(type)){
|
||||||
date = date+" 08:00:00";
|
dateTime = dateTime+" 08:00:00";
|
||||||
}else if (CostTypeEnum.NOON.getCode().equals(type)){
|
}else if (CostTypeEnum.NOON.getCode().equals(type)){
|
||||||
date = date+" 12:00:00";
|
dateTime = dateTime+" 12:00:00";
|
||||||
}else if (CostTypeEnum.NIGHT.getCode().equals(type)){
|
}else if (CostTypeEnum.NIGHT.getCode().equals(type)){
|
||||||
date = date+" 17:00:00";
|
dateTime = dateTime+" 17:00:00";
|
||||||
}
|
}
|
||||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
||||||
LocalDateTime now = LocalDateTime.parse(date, formatter);
|
LocalDateTime now = LocalDateTime.parse(dateTime, formatter);
|
||||||
|
|
||||||
|
|
||||||
DishOrderDO dishOrderDO = new DishOrderDO();
|
DishOrderDO dishOrderDO = new DishOrderDO();
|
||||||
@ -532,7 +532,7 @@ public class OrderServiceImpl implements OrderService {
|
|||||||
orderDetailDO.setDishesId(-1L);
|
orderDetailDO.setDishesId(-1L);
|
||||||
orderDetailService.insertOne(orderDetailDO);
|
orderDetailService.insertOne(orderDetailDO);
|
||||||
//扣费处理
|
//扣费处理
|
||||||
deductionService.deduct(memberUserDO.getId(), money, type,carteenId);
|
deductionService.deduct(memberUserDO.getId(), money, type,carteenId,date);
|
||||||
//更新营业数据
|
//更新营业数据
|
||||||
StatisticsVo statisticsVo = new StatisticsVo();
|
StatisticsVo statisticsVo = new StatisticsVo();
|
||||||
statisticsVo.setCarteenId(dishOrderDO.getStoreId());
|
statisticsVo.setCarteenId(dishOrderDO.getStoreId());
|
||||||
|
@ -84,7 +84,7 @@ public class OrderSpaceCapsuleServiceImpl implements OrderSpaceCapsuleService {
|
|||||||
BigDecimal multiply = orderSpaceCapsule.getComboPrice().multiply(BigDecimal.valueOf(orderSpaceCapsule.getComboNum()));
|
BigDecimal multiply = orderSpaceCapsule.getComboPrice().multiply(BigDecimal.valueOf(orderSpaceCapsule.getComboNum()));
|
||||||
orderSpaceCapsule.setMoney(multiply);
|
orderSpaceCapsule.setMoney(multiply);
|
||||||
// 扣除余额
|
// 扣除余额
|
||||||
deductionService.deduct(orderSpaceCapsule.getUserId(), orderSpaceCapsule.getMoney(), CostTypeEnum.SHOPPING.getCode(),createReqVO.getCarteenId());
|
deductionService.spaceDeduct(orderSpaceCapsule.getUserId(), orderSpaceCapsule.getMoney(), CostTypeEnum.SHOPPING.getCode(),createReqVO.getCarteenId());
|
||||||
// 设置变动后的余额
|
// 设置变动后的余额
|
||||||
orderSpaceCapsule.setEndMoney(initialMoney.subtract(orderSpaceCapsule.getMoney()));
|
orderSpaceCapsule.setEndMoney(initialMoney.subtract(orderSpaceCapsule.getMoney()));
|
||||||
// 设置支付方式
|
// 设置支付方式
|
||||||
|
Reference in New Issue
Block a user