金额修改
This commit is contained in:
@ -69,22 +69,15 @@ public class AmountServiceImpl implements AmountService {
|
||||
if (memberUserDO == null) {
|
||||
throw exception(USER_NOT_EXISTS);
|
||||
}
|
||||
MoneyDO moneyDO = moneyService.getMoney(userId, storeId);
|
||||
BigDecimal cashAmount = BigDecimal.ZERO;
|
||||
|
||||
if (moneyDO != null) {
|
||||
cashAmount = moneyDO.getCashAmount();
|
||||
}
|
||||
|
||||
return memberUserDO.getWxAmount().add(cashAmount);
|
||||
return memberUserDO.getMoney();
|
||||
}
|
||||
|
||||
@Override
|
||||
public BigDecimal getCashAmount(Long userId,Long storeId) {
|
||||
MoneyDO moneyDO = moneyService.getMoney(userId, storeId);
|
||||
if (moneyDO == null) {
|
||||
MemberUserDO memberUserDO = userMapper.selectById(userId);
|
||||
if (memberUserDO == null) {
|
||||
return BigDecimal.ZERO;
|
||||
}
|
||||
return moneyDO.getCashAmount();
|
||||
return memberUserDO.getCashAmount();
|
||||
}
|
||||
}
|
||||
|
@ -73,43 +73,27 @@ public class CashRechargeServiceImpl implements CashRechargeService {
|
||||
for (Long userId : memberList) {
|
||||
|
||||
BigDecimal wxNewMoney;
|
||||
BigDecimal giftNewMoney;
|
||||
BigDecimal newMoney;
|
||||
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(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();
|
||||
}
|
||||
//金额变动
|
||||
BigDecimal oldMoney = memberUserDO.getMoney();
|
||||
newMoney = oldMoney.add(money);
|
||||
memberUserDO.setMoney(newMoney);
|
||||
|
||||
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();
|
||||
giftNewMoney = memberUserDO.getGiftAmount();
|
||||
cashNewAmount = memberUserDO.getCashAmount();
|
||||
name = memberUserDO.getNickname();
|
||||
}
|
||||
|
||||
@ -121,7 +105,6 @@ public class CashRechargeServiceImpl implements CashRechargeService {
|
||||
add.setType(CostTypeEnum.ADMIN_PAY.getCode());
|
||||
add.setCashAmount(cashNewAmount);
|
||||
add.setWxAmount(wxNewMoney);
|
||||
add.setGiftAmount(giftNewMoney);
|
||||
add.setCarteenId(storeId);
|
||||
add.setGroupId(groupId);
|
||||
add.setGroupName(ObjectUtil.isNotEmpty(memberGroupDO)?memberGroupDO.getName():null);
|
||||
@ -131,7 +114,7 @@ public class CashRechargeServiceImpl implements CashRechargeService {
|
||||
String redisKey = "USER_" + userId;
|
||||
AppUserInfoCardVO appUserInfoCardVO = new AppUserInfoCardVO();
|
||||
appUserInfoCardVO.setName(name);
|
||||
appUserInfoCardVO.setMoney(wxNewMoney);
|
||||
appUserInfoCardVO.setMoney(newMoney);
|
||||
cashRechargeRedisTemplate.opsForValue().set(redisKey, JSONUtil.toJsonStr(appUserInfoCardVO));
|
||||
|
||||
}
|
||||
@ -153,7 +136,8 @@ public class CashRechargeServiceImpl implements CashRechargeService {
|
||||
|
||||
List<DishOrderDO> dishOrderDOS = dishOrderMapper.selectList(Wrappers.<DishOrderDO>lambdaQuery()
|
||||
.eq(DishOrderDO::getUserId, userId).eq(DishOrderDO::getOrderStatus, DishOrderDO.TOCOMPLETE)
|
||||
.eq(DishOrderDO::getStoreId, storeId));
|
||||
// .eq(DishOrderDO::getStoreId, storeId)
|
||||
);
|
||||
|
||||
if (CollectionUtil.isNotEmpty(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;
|
||||
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
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 money = user.getMoney();
|
||||
|
||||
if (total.compareTo(money) > 0) {
|
||||
return money.subtract(total);
|
||||
BigDecimal judgeAmount;
|
||||
boolean judge = judgeShopping(userId);
|
||||
if (judge) {
|
||||
judgeAmount = wxAmount;
|
||||
} else {
|
||||
judgeAmount = money;
|
||||
}
|
||||
|
||||
//计算金额
|
||||
if (total.compareTo(cashAmount) <= 0) {
|
||||
user.setCashAmount(cashAmount.subtract(total));
|
||||
if (total.compareTo(judgeAmount) > 0) {
|
||||
return judgeAmount.subtract(total);
|
||||
}
|
||||
|
||||
//扣除金额
|
||||
if (judge) {
|
||||
user.setMoney(money.subtract(total));
|
||||
user.setWxAmount(wxAmount.subtract(total));
|
||||
} else {
|
||||
user.setCashAmount(BigDecimal.ZERO);
|
||||
BigDecimal total1 = total.subtract(cashAmount);
|
||||
if (total1.compareTo(giftAmount) <= 0) {
|
||||
user.setGiftAmount(giftAmount.subtract(total1));
|
||||
if (total.compareTo(cashAmount) <= 0) {
|
||||
user.setCashAmount(cashAmount.subtract(total));
|
||||
} else {
|
||||
user.setGiftAmount(BigDecimal.ZERO);
|
||||
BigDecimal total2 = total1.subtract(giftAmount);
|
||||
user.setWxAmount(wxAmount.subtract(total2));
|
||||
user.setCashAmount(BigDecimal.ZERO);
|
||||
BigDecimal total1 = total.subtract(cashAmount);
|
||||
user.setWxAmount(wxAmount.subtract(total1));
|
||||
}
|
||||
}
|
||||
|
||||
userService.updateById(user);
|
||||
moneyService.updateById(moneyDO);
|
||||
|
||||
wxNewMoney = user.getWxAmount();
|
||||
giftNewMoney = user.getGiftAmount();
|
||||
cashNewMoney = moneyDO.getCashAmount();
|
||||
newMoney = user.getMoney();
|
||||
cashNewMoney = user.getCashAmount();
|
||||
name = user.getNickname();
|
||||
}
|
||||
|
||||
@ -426,7 +431,6 @@ public class DeductionServiceImpl implements DeductionService {
|
||||
cardDO.setType(CostTypeEnum.SHOPPING.getCode());
|
||||
cardDO.setWxAmount(wxNewMoney);
|
||||
cardDO.setCashAmount(cashNewMoney);
|
||||
cardDO.setGiftAmount(giftNewMoney);
|
||||
cardDO.setCarteenId(storeId);
|
||||
cardService.insertOne(cardDO);
|
||||
|
||||
@ -434,7 +438,7 @@ public class DeductionServiceImpl implements DeductionService {
|
||||
//更新redis
|
||||
updateRedis(userId, name, wxNewMoney);
|
||||
|
||||
return wxNewMoney.add(giftNewMoney).add(cashNewMoney);
|
||||
return newMoney;
|
||||
}
|
||||
|
||||
|
||||
@ -448,50 +452,47 @@ 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, String time) {
|
||||
|
||||
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 total = moneyDO.getCashAmount().add(user.getWxAmount()).add(user.getGiftAmount());
|
||||
BigDecimal total = user.getMoney();
|
||||
user.setMoney(total.subtract(money));
|
||||
if (total.compareTo(money) < 0) {
|
||||
if (CHECK_LIST.contains(type)) {
|
||||
throw exception(CASH_AMOUNT_NOT_ENOUGH);
|
||||
}
|
||||
user.setWxAmount(BigDecimal.ZERO);
|
||||
moneyDO.setCashAmount(BigDecimal.ZERO);
|
||||
user.setGiftAmount(BigDecimal.ZERO);
|
||||
moneyDO.setDebtAmount(total.subtract(money));
|
||||
user.setCashAmount(BigDecimal.ZERO);
|
||||
} else {
|
||||
BigDecimal wxAmount = user.getWxAmount();
|
||||
BigDecimal giftAmount = user.getGiftAmount();
|
||||
BigDecimal cashAmount = moneyDO.getCashAmount();
|
||||
BigDecimal cashAmount = user.getCashAmount();
|
||||
//计算金额
|
||||
if (money.compareTo(cashAmount) <= 0) {
|
||||
moneyDO.setCashAmount(cashAmount.subtract(money));
|
||||
} else {
|
||||
moneyDO.setCashAmount(BigDecimal.ZERO);
|
||||
BigDecimal total1 = money.subtract(cashAmount);
|
||||
if (total1.compareTo(giftAmount) <= 0) {
|
||||
user.setGiftAmount(giftAmount.subtract(total1));
|
||||
if (judge(userId, time)) {
|
||||
if (money.compareTo(wxAmount) <= 0) {
|
||||
user.setWxAmount(wxAmount.subtract(money));
|
||||
} else {
|
||||
user.setGiftAmount(BigDecimal.ZERO);
|
||||
BigDecimal total2 = total1.subtract(giftAmount);
|
||||
user.setWxAmount(wxAmount.subtract(total2));
|
||||
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);
|
||||
moneyService.updateById(moneyDO);
|
||||
|
||||
wxNewMoney = user.getWxAmount();
|
||||
giftNewMoney = user.getGiftAmount();
|
||||
cashNewMoney = moneyDO.getCashAmount();
|
||||
newMoney = user.getMoney();
|
||||
cashNewMoney = user.getCashAmount();
|
||||
name = user.getNickname();
|
||||
}
|
||||
|
||||
@ -501,13 +502,72 @@ 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);
|
||||
}
|
||||
|
||||
@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
|
||||
@ -570,38 +630,47 @@ public class DeductionServiceImpl implements DeductionService {
|
||||
|
||||
}
|
||||
|
||||
//判断先扣那个金额
|
||||
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;
|
||||
});
|
||||
}
|
||||
|
||||
//判断扣款顺序
|
||||
//判断食堂扣款顺序(true - 微信,false - 现金)
|
||||
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();
|
||||
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 giftNewMoney;
|
||||
BigDecimal newMoney;
|
||||
String name;
|
||||
|
||||
synchronized (getUserLock(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 giftOldMoney = memberUserDO.getGiftAmount();
|
||||
|
||||
BigDecimal oldMoney = memberUserDO.getMoney();
|
||||
newMoney = oldMoney.add(money);
|
||||
BigDecimal computeMoney = money;
|
||||
//处理负债
|
||||
if( computeMoney.add(debtAmount).compareTo(BigDecimal.ZERO) < 0){
|
||||
memberUserDO.setWxAmount(BigDecimal.ZERO);
|
||||
memberUserDO.setGiftAmount(BigDecimal.ZERO);
|
||||
|
||||
BigDecimal computeWxMoney = wxAmount;
|
||||
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));
|
||||
memberUserDO.setMoney(newMoney);
|
||||
if( newMoney.compareTo(BigDecimal.ZERO) >= 0){
|
||||
if(oldMoney.compareTo(BigDecimal.ZERO) < 0){
|
||||
memberUserDO.setWxAmount(newMoney);
|
||||
//处理未完全支付订单
|
||||
handleOrderWx(userId, money, wxAmount, giftAmount,null);
|
||||
}else {
|
||||
memberUserDO.setWxAmount(BigDecimal.ZERO);
|
||||
memberUserDO.setGiftAmount(money.add(debtAmount));
|
||||
memberUserDO.setWxAmount(wxOldMoney.add(money));
|
||||
}
|
||||
}
|
||||
|
||||
userMapper.updateById(memberUserDO);
|
||||
|
||||
wxNewMoney = memberUserDO.getWxAmount();
|
||||
giftNewMoney = memberUserDO.getGiftAmount();
|
||||
name = memberUserDO.getNickname();
|
||||
}
|
||||
|
||||
@ -143,7 +97,6 @@ public class WxRechargeServiceImpl implements WxRechargeService {
|
||||
cardDO.setFlag(CardDO.ADD);
|
||||
cardDO.setChangeMoney(money);
|
||||
cardDO.setType(CostTypeEnum.WX_PAY.getCode());
|
||||
cardDO.setGiftAmount(giftNewMoney);
|
||||
cardDO.setWxAmount(wxNewMoney);
|
||||
cardMapper.insert(cardDO);
|
||||
|
||||
@ -152,7 +105,7 @@ public class WxRechargeServiceImpl implements WxRechargeService {
|
||||
String redisKey = "USER_" + userId;
|
||||
AppUserInfoCardVO appUserInfoCardVO = new AppUserInfoCardVO();
|
||||
appUserInfoCardVO.setName(name);
|
||||
appUserInfoCardVO.setMoney(wxNewMoney);
|
||||
appUserInfoCardVO.setMoney(newMoney);
|
||||
wxRechargeRedisTemplate.opsForValue().set(redisKey, JSONUtil.toJsonStr(appUserInfoCardVO));
|
||||
|
||||
}
|
||||
|
@ -364,13 +364,12 @@ public class DiningPlatesServiceImpl implements DiningPlatesService {
|
||||
|
||||
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> typeList = Arrays.asList(GroupTypeEnum.ADMINISTRATIVE.getCode(), GroupTypeEnum.DISTRICT.getCode());
|
||||
List<Integer> types = memberGroupService.getGroupTypeListByUserId(memberUserDO.getId());
|
||||
//查询今天是否假期
|
||||
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){
|
||||
cashAmount = BigDecimal.ZERO;
|
||||
}
|
||||
@ -491,12 +490,10 @@ public class DiningPlatesServiceImpl implements DiningPlatesService {
|
||||
.last("limit 1"));
|
||||
MemberUserDO memberUserDO = memberUserMapper.selectById(diningPlatesDO.getUserId());
|
||||
|
||||
BigDecimal cashAmount = moneyService.getAllMoney(memberUserDO.getId());
|
||||
|
||||
AppUserInfo appUserInfo = new AppUserInfo();
|
||||
appUserInfo.setNickname(StrUtil.isNotBlank(memberUserDO.getName())?memberUserDO.getName():memberUserDO.getNickname())
|
||||
.setMoney(memberUserDO.getWxAmount().add(cashAmount))
|
||||
.setOrderMoney(new BigDecimal(stringRedisTemplate.opsForValue().get(diningPlatesNum+"-"+storeId)))
|
||||
.setMoney(memberUserDO.getMoney())
|
||||
.setOrderMoney(Optional.ofNullable(stringRedisTemplate.opsForValue().get(diningPlatesNum + "-" + storeId)).map(BigDecimal::new).orElse(BigDecimal.ZERO))
|
||||
.setReception(memberUserDO.getReception()).setLimitAmount(memberUserDO.getLimitAmount());
|
||||
return appUserInfo;
|
||||
}
|
||||
|
@ -138,4 +138,6 @@ public interface MemberGroupService {
|
||||
* 获取用户所在组类别
|
||||
*/
|
||||
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());
|
||||
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;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.util.*;
|
||||
import javax.validation.*;
|
||||
import cn.iocoder.yudao.module.member.controller.admin.holiday.vo.*;
|
||||
@ -57,4 +58,9 @@ public interface HolidayService {
|
||||
* 判断今天是否是假期
|
||||
*/
|
||||
Boolean checkHoliday();
|
||||
|
||||
/**
|
||||
* 判断指定日期是否是假期
|
||||
*/
|
||||
Boolean checkHoliday(String time);
|
||||
}
|
@ -116,4 +116,20 @@ public class HolidayServiceImpl implements HolidayService {
|
||||
}
|
||||
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) {
|
||||
throw exception(USER_NOT_EXISTS);
|
||||
}
|
||||
|
||||
String dateTime = date;
|
||||
if(CostTypeEnum.MORNING.getCode().equals(type)){
|
||||
date = date+" 08:00:00";
|
||||
dateTime = dateTime+" 08:00:00";
|
||||
}else if (CostTypeEnum.NOON.getCode().equals(type)){
|
||||
date = date+" 12:00:00";
|
||||
dateTime = dateTime+" 12:00:00";
|
||||
}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");
|
||||
LocalDateTime now = LocalDateTime.parse(date, formatter);
|
||||
LocalDateTime now = LocalDateTime.parse(dateTime, formatter);
|
||||
|
||||
|
||||
DishOrderDO dishOrderDO = new DishOrderDO();
|
||||
@ -532,7 +532,7 @@ public class OrderServiceImpl implements OrderService {
|
||||
orderDetailDO.setDishesId(-1L);
|
||||
orderDetailService.insertOne(orderDetailDO);
|
||||
//扣费处理
|
||||
deductionService.deduct(memberUserDO.getId(), money, type,carteenId);
|
||||
deductionService.deduct(memberUserDO.getId(), money, type,carteenId,date);
|
||||
//更新营业数据
|
||||
StatisticsVo statisticsVo = new StatisticsVo();
|
||||
statisticsVo.setCarteenId(dishOrderDO.getStoreId());
|
||||
|
@ -84,7 +84,7 @@ public class OrderSpaceCapsuleServiceImpl implements OrderSpaceCapsuleService {
|
||||
BigDecimal multiply = orderSpaceCapsule.getComboPrice().multiply(BigDecimal.valueOf(orderSpaceCapsule.getComboNum()));
|
||||
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()));
|
||||
// 设置支付方式
|
||||
|
Reference in New Issue
Block a user