Quellcode durchsuchen

添加收款,退款和结账

许智捷 vor 2 Jahren
Ursprung
Commit
5e16a631ab

+ 34 - 15
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/BusOrderFeeController.java

@@ -1,22 +1,18 @@
 package org.jeecg.modules.business.controller;
 
 
-import java.time.LocalDate;
-import java.time.format.DateTimeFormatter;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.List;
-import java.util.Optional;
-import java.util.function.Consumer;
+import java.util.*;
 import java.util.stream.Collectors;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 
+import cn.hutool.core.collection.CollUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import org.jeecg.common.api.vo.Result;
-import org.jeecg.common.exception.JeecgBootException;
 import org.jeecg.common.system.query.QueryGenerator;
 import org.jeecg.modules.business.entity.BusOrderFee;
+import org.jeecg.modules.business.enums.FeeType;
 import org.jeecg.modules.business.service.IBusOrderFeeService;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -27,8 +23,6 @@ import lombok.extern.slf4j.Slf4j;
 
 import org.jeecg.common.system.base.controller.JeecgController;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.format.annotation.DateTimeFormat;
-import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.servlet.ModelAndView;
 import io.swagger.annotations.Api;
@@ -48,7 +42,7 @@ import org.jeecg.common.aspect.annotation.AutoLog;
 public class BusOrderFeeController extends JeecgController<BusOrderFee, IBusOrderFeeService> {
 	@Autowired
 	private IBusOrderFeeService busOrderFeeService;
-	
+
 	/**
 	 * 分页列表查询
 	 *
@@ -90,11 +84,19 @@ public class BusOrderFeeController extends JeecgController<BusOrderFee, IBusOrde
 	 @ApiOperation(value="bus_order_fee-添加", notes="bus_order_fee-添加")
 	 //@RequiresPermissions("business:bus_order_fee:add")
 	 @PostMapping(value = "/saveBatch")
-	 public Result<Boolean> add(@RequestBody List<BusOrderFee> busOrderFeeList) {
-		 return Result.OK(busOrderFeeService.saveBatch(busOrderFeeList));
+	 public Result<Boolean> add(@RequestBody List<BusOrderFee> busOrderFeeList, String hotelId) {
+		 return Result.OK(busOrderFeeService.collectionBatch(busOrderFeeList, hotelId));
 	 }
-	
-	/**
+
+	 @AutoLog(value = "bus_order_fee-退款")
+	 @ApiOperation(value="bus_order_fee-退款", notes="bus_order_fee-退款")
+	 //@RequiresPermissions("business:bus_order_fee:add")
+	 @PostMapping(value = "/refundBatch")
+	 public Result<Boolean> refundBatch(@RequestBody List<BusOrderFee> busOrderFeeList) {
+		 return Result.OK(busOrderFeeService.refundBatch(busOrderFeeList));
+	 }
+
+	 /**
 	 *  编辑
 	 *
 	 * @param busOrderFee
@@ -122,6 +124,23 @@ public class BusOrderFeeController extends JeecgController<BusOrderFee, IBusOrde
 		 return Result.OK(busOrderFeeService.strikeBalance(busOrderFeeList));
 	 }
 
+	 /**
+	  *  编辑
+	  *
+	  * @param
+	  * @return
+	  */
+	 @AutoLog(value = "bus_order_fee-退款列表")
+	 @ApiOperation(value="bus_order_fee-退款列表", notes="bus_order_fee-退款列表")
+	 @PostMapping(value = "/refundList")
+	 public Result<List<BusOrderFee>> refundList(@RequestBody List<String> livingOrderIds) {
+		 LambdaQueryWrapper<BusOrderFee> qw = new LambdaQueryWrapper<>();
+		 qw.eq(BusOrderFee::getFeeType, FeeType.COLLECTION.getKey());
+		 qw.in(CollUtil.isNotEmpty(livingOrderIds), BusOrderFee::getLivingOrderId, livingOrderIds);
+		 List<BusOrderFee> orderFees = busOrderFeeService.list(qw);
+		 return Result.OK(orderFees);
+	 }
+
 
 	 /**
 	 *   通过id删除

+ 1 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/dto/UpdateOrderInfoDto.java

@@ -16,6 +16,7 @@ public class UpdateOrderInfoDto {
     private Integer customerType;
     private String customerSource;
     private String remark;
+    private String vipCustomerId;
     private String warranter;
     // 钟点房方案id 麻痹 会死 操ni玛 狗日滴~,该你麻痹,狗东西,看不到头,加你吗的自定义逻辑,想他妈比砍死你~~
     private String fangAnId;

+ 34 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/enums/FeeType.java

@@ -0,0 +1,34 @@
+package org.jeecg.modules.business.enums;
+
+import lombok.Getter;
+
+@Getter
+public enum FeeType {
+    CONSUME(1,"消费"),
+    COLLECTION(2,"收款");
+
+    Integer key;
+
+    String title;
+
+    FeeType(Integer key, String title){
+        this.key = key;
+        this.title = title;
+    }
+    public Integer getKey() {
+        return key;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public static FeeType val(Integer key){
+        for(FeeType team: values()){
+            if(team.key .equals(key)){
+                return team;
+            }
+        }
+        return null;
+    }
+}

+ 4 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/IBusOrderFeeService.java

@@ -14,4 +14,8 @@ import java.util.List;
 public interface IBusOrderFeeService extends IService<BusOrderFee> {
 
     Boolean strikeBalance(List<BusOrderFee> busOrderFeeList);
+
+    Boolean refundBatch(List<BusOrderFee> busOrderFeeList);
+
+    Boolean collectionBatch(List<BusOrderFee> busOrderFeeList, String hotelId);
 }

+ 113 - 5
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/BusOrderFeeServiceImpl.java

@@ -1,19 +1,30 @@
 package org.jeecg.modules.business.service.impl;
 
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import org.jeecg.common.exception.JeecgBootException;
-import org.jeecg.modules.business.entity.BusLivingLayoutDayPrice;
+import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.common.util.TokenUtils;
+import org.jeecg.modules.business.entity.BusMemberBalanceLog;
+import org.jeecg.modules.business.entity.BusMemberCard;
 import org.jeecg.modules.business.entity.BusOrderFee;
+import org.jeecg.modules.business.entity.BusRoomPayType;
 import org.jeecg.modules.business.mapper.BusOrderFeeMapper;
+import org.jeecg.modules.business.service.IBusMemberBalanceLogService;
+import org.jeecg.modules.business.service.IBusMemberCardService;
 import org.jeecg.modules.business.service.IBusOrderFeeService;
-import org.jeecg.modules.business.service.IBusRoomsLivingOrderService;
+import org.jeecg.modules.business.service.IBusRoomPayTypeService;
 import org.springframework.stereotype.Service;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 
-import java.util.Date;
-import java.util.List;
-import java.util.Optional;
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.util.*;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 /**
  * @Description: bus_order_fee
@@ -24,6 +35,14 @@ import java.util.stream.Collectors;
 @Service
 public class BusOrderFeeServiceImpl extends ServiceImpl<BusOrderFeeMapper, BusOrderFee> implements IBusOrderFeeService {
 
+
+
+    @Resource
+    IBusRoomPayTypeService payTypeService;
+    @Resource
+    IBusMemberCardService memberCardService;
+    @Resource
+    IBusMemberBalanceLogService memberBalanceLogService;
     @Override
     public Boolean strikeBalance(List<BusOrderFee> busOrderFeeList) {
         List<String> ids = busOrderFeeList.stream().filter(e -> e.getCreateTime().before(new Date())).
@@ -42,4 +61,93 @@ public class BusOrderFeeServiceImpl extends ServiceImpl<BusOrderFeeMapper, BusOr
 
         return updateBatchById(findBusOrderFees);
     }
+
+    @Override
+    public Boolean refundBatch(List<BusOrderFee> busOrderFeeList) {
+        List<BusRoomPayType> payTypeList = payTypeService.list();
+        Optional<BusRoomPayType> roomPayType = payTypeList.stream().filter(e -> "会员卡".equals(e.getName())).findFirst();
+        roomPayType.ifPresent(e -> {
+            // 会员支付的订单
+            List<BusOrderFee> busOrderFees = busOrderFeeList.stream().filter(fee -> e.getId()
+                            .equals(fee.getPayType())).collect(Collectors.toList());
+            if (CollUtil.isNotEmpty(busOrderFees)){
+                List<String> FeeIds = busOrderFees.stream().map(BusOrderFee::getId).collect(Collectors.toList());
+                List<BusMemberBalanceLog> balanceLogList = memberBalanceLogService.list(Wrappers.<BusMemberBalanceLog>lambdaQuery().in(BusMemberBalanceLog::getOrderFeeId, FeeIds));
+                List<String> memberId = balanceLogList.stream().map(BusMemberBalanceLog::getMemberId).distinct().collect(Collectors.toList());
+                List<BusMemberCard> memberCardList = memberCardService.list(Wrappers.<BusMemberCard>lambdaQuery().in(BusMemberCard::getId, memberId));
+                busOrderFees.forEach(fee -> {
+                    List<BusMemberBalanceLog> balanceLog = balanceLogList.stream().filter(log -> fee.getReturnFeeId()
+                            .equals(log.getOrderFeeId())).collect(Collectors.toList());
+                    if (balanceLog.size() != 1){
+                        throw new JeecgBootException("账单未找到对应的会员支付扣款记录");
+                    }
+                    Optional<BusMemberCard> optional = memberCardList.stream().filter(card -> card.getId().equals(balanceLog.get(0).getMemberId())).findFirst();
+                    optional.ifPresent(card -> {
+                        balanceLog.get(0).setWithhold(balanceLog.get(0).getWithhold().subtract(fee.getMoney()));
+                        balanceLog.get(0).setWithhold(balanceLog.get(0).getBalance().add(fee.getMoney()));
+                        card.setBalance(card.getBalance().add(fee.getMoney()));
+                    });
+                    balanceLog.get(0).setWithhold(balanceLog.get(0).getWithhold().subtract(fee.getMoney()));
+                    balanceLog.get(0).setWithhold(balanceLog.get(0).getBalance().add(fee.getMoney()));
+                });
+                memberBalanceLogService.updateBatchById(balanceLogList);
+                memberCardService.updateBatchById(memberCardList);
+            }
+        });
+        return saveBatch(busOrderFeeList);
+    }
+
+    @Override
+    public Boolean collectionBatch(List<BusOrderFee> busOrderFeeList, String hotelId) {
+        LoginUser user = TokenUtils.getAuthUser();
+        List<BusRoomPayType> payTypeList = payTypeService.list();
+        payTypeList.stream().filter(e -> "会员卡".equals(e.getName())).findFirst().ifPresent(type -> {
+            //找出会员支付的账单,将会员支付的账单中的会员id去重
+            List<BusOrderFee> MemberPayFee = busOrderFeeList.stream().filter(fee -> type.getId().equals(fee.getPayType())).collect(Collectors.toList());
+            List<String> cardIds = MemberPayFee.stream().map(BusOrderFee::getVipCardId).filter(StrUtil::isNotEmpty).distinct().collect(Collectors.toList());
+            List<BusMemberCard> busMemberCards;
+            if (CollUtil.isNotEmpty(cardIds)) {
+                busMemberCards = memberCardService.listByIds(cardIds);
+                if(CollUtil.isEmpty(busMemberCards) || cardIds.size() != busMemberCards.size()) {
+                    throw new JeecgBootException("会员卡匹配异常");
+                }
+                List<BusMemberBalanceLog> busMemberBalanceLogs = new ArrayList<>();
+                // 循环会员支付的账单,修改对应的会员卡余额,添加会员支付日志
+                MemberPayFee.forEach(fee -> {
+                    fee.setId(String.valueOf(IdWorker.getId()));
+                    if (StrUtil.isEmpty(fee.getVipCardId())){
+                        throw new JeecgBootException("支付方式为会员但没有会员id");
+                    }
+                    BusMemberCard busMemberCard = busMemberCards.stream().filter(card -> card.getId().equals(fee.getVipCardId())).findFirst().get();
+                    BigDecimal balance = busMemberCard.getBalance().subtract(fee.getMoney());
+                    if (balance.longValue() < 0){
+                        throw new JeecgBootException("会员卡余额不足");
+                    }
+                    busMemberCard.setBalance(balance);
+
+                    BusMemberBalanceLog balanceLog = new BusMemberBalanceLog();
+                    balanceLog.setOrderFeeId(fee.getId());
+                    balanceLog.setBalance(balance);
+                    balanceLog.setWithhold(fee.getMoney());
+                    balanceLog.setType(2);// 扣费
+                    balanceLog.setMemberId(busMemberCard.getId());
+                    balanceLog.setStatus(1);// TODO:不知道干什么用的 貌似是个啥支付状态
+                    balanceLog.setGiveMoney(new BigDecimal(0));
+                    balanceLog.setRemarks("收费扣款");
+                    balanceLog.setHotelId(hotelId);
+                    if(user!=null) {
+                        balanceLog.setTenantId(user.getRelTenantIds());
+                    }
+                    balanceLog.setPaymentMethod("");
+                    balanceLog.setPayMoney(new BigDecimal(0));
+                    balanceLog.setCode(BusMemberBalanceLogServiceImpl.randomNumber("KF"));
+                    balanceLog.setCreateTime(new Date());
+                    busMemberBalanceLogs.add(balanceLog);
+                });
+                memberCardService.updateBatchById(busMemberCards);
+                memberBalanceLogService.saveBatch(busMemberBalanceLogs);
+            }
+        });
+        return saveBatch(busOrderFeeList);
+    }
 }

+ 91 - 78
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/BusRoomBookingOrdersServiceImpl.java

@@ -107,6 +107,9 @@ public class BusRoomBookingOrdersServiceImpl extends ServiceImpl<BusRoomBookingO
     private IBusMemberCardService memberCardService;
 
     @Resource
+    private IBusMarketMemberService marketMemberService;
+
+    @Resource
     private IBusMemberBalanceLogService memberBalanceLogService;
 
     @Resource
@@ -1432,9 +1435,12 @@ public class BusRoomBookingOrdersServiceImpl extends ServiceImpl<BusRoomBookingO
                     }
                 });
                 BigDecimal m = shoukuan[0].subtract(xiaofei[0]);
-                settleFees.get(0).setMoney(m);
-                if(m.doubleValue() < 0) settleFees.get(0).setCustorerOrderRemark("结账退款");
-                else settleFees.get(0).setCustorerOrderRemark("结账收款");
+                BigDecimal nowMoney = settleFees.stream().map(BusOrderFee::getMoney).reduce(BigDecimal.ZERO,BigDecimal::add);
+                if (new BigDecimal(0).equals(m.add(nowMoney))){
+                    throw new JeecgBootException("账单未平账");
+                }
+//                if(m.doubleValue() < 0) settleFees.get(0).setCustorerOrderRemark("结账退款");
+//                else settleFees.get(0).setCustorerOrderRemark("结账收款");
 //               // 消费账单
 //                List<BusOrderFee> xiaoFeiFees = feeItems.stream().filter(s->s.getFeeType().equals(1)).collect(Collectors.toList());
 //                // 收款
@@ -1963,8 +1969,29 @@ public class BusRoomBookingOrdersServiceImpl extends ServiceImpl<BusRoomBookingO
                 return true;
             }
 
-            if(info.getCustomerType() != null && CustomerTypeEnum.val(info.getCustomerType()) != null) {
+            if(info.getCustomerType() != null && CustomerTypeEnum.val(info.getCustomerType()) != null && !info.getVipCustomerId().isEmpty()) {
+                BusMemberCard memberCard = memberCardService.getById(info.getVipCustomerId());
+                if (ObjectUtil.isEmpty(memberCard)){
+                    throw new JeecgBootException("未找到相应的会员");
+                }
+                BusMarketMember marketMember = marketMemberService.getById(memberCard.getGradeId());
+                if (ObjectUtil.isEmpty(marketMember) || ObjectUtil.isEmpty(marketMember.getDiscount())){
+                    throw new JeecgBootException("会员异常");
+                }
                 order.setCustomerType(info.getCustomerType());
+                // 找出房费订单和每日价格,按会员价算
+                List<BusOrderFee> orderFeeList = feeService.list(Wrappers.<BusOrderFee>lambdaQuery()
+                        .eq(BusOrderFee::getLivingOrderId, order.getId()).eq(BusOrderFee::getSubjectType, FeeSubjectType.MEI_RI_FANG_FEI.getKey()));
+                orderFeeList.forEach(e -> {
+                    e.setMoney(e.getMoney().multiply(marketMember.getDiscount()).divide(BigDecimal.valueOf(100)));
+                });
+                List<BusLivingLayoutDayPrice> livingDayPrice = livingLayoutDayPriceService.list(Wrappers.<BusLivingLayoutDayPrice>lambdaQuery()
+                        .eq(BusLivingLayoutDayPrice::getLivingOrderId, order.getId()));
+                livingDayPrice.forEach(e -> {
+                    e.setPrice(e.getPrice().multiply(marketMember.getDiscount()).divide(BigDecimal.valueOf(100)));
+                });
+                feeService.updateBatchById(orderFeeList);
+                livingLayoutDayPriceService.updateBatchById(livingDayPrice);
                 roomsLivingOrderService.updateById(order);
                 return true;
             }
@@ -2293,90 +2320,76 @@ public class BusRoomBookingOrdersServiceImpl extends ServiceImpl<BusRoomBookingO
         LoginUser user = TokenUtils.getAuthUser();
 //        if(user == null) throw new JeecgBootException("请登录");
         if(hotelId == null) throw  new JeecgBootException("未找到酒店");
-        BusOrderFee preferFeeItem = null;
-        if(settleFees.stream().anyMatch(s-> BooleanUtil.isTrue(s.getIsPreferential()))){
-            preferFeeItem = settleFees.stream().filter(s->s.getIsPreferential().equals(true)).findFirst().get();
-            if(preferFeeItem.getMoney()==null || preferFeeItem.getMoney().compareTo(BigDecimal.valueOf(0)) <= 0) throw new JeecgBootException("优惠价不能小于或等于0");
-            if(preferFeeItem.getCouponscashId() != null && !preferFeeItem.getCouponscashId().isEmpty()) {
-                BusMarketCouponsCashUsed couponTicket = marketCouponsCashUsedService.getById(preferFeeItem.getCouponscashId()); // 优惠票券
-                if(couponTicket == null) throw new JeecgBootException("优惠券不存在");
-                if(!couponTicket.getStatus().equals(CouponsStatusEnum.received.getKey())) {
-                    CouponsStatusEnum couponStatusText = CouponsStatusEnum.val(couponTicket.getStatus());
-                    if(couponStatusText == null) throw new JeecgBootException("优惠券状态异常");
-                    throw new JeecgBootException("优惠券"+ couponStatusText.getTitle());
-                } else {
-                    couponTicket.setStatus(CouponsStatusEnum.used.getKey());
-                    marketCouponsCashUsedService.updateById(couponTicket);
-                }
-            }
-            preferFeeItem.setCreateTime(new Date());
-            preferFeeItem.setSubjectType(FeeSubjectType.YOU_HUI.getKey());
-            preferFeeItem.setFeeType(1);
-            preferFeeItem.setRoomId(mainRoom.getRoomId());
-            preferFeeItem.setPayType(null);
-            preferFeeItem.setMoney(preferFeeItem.getMoney().multiply(BigDecimal.valueOf(-1)));// 消费为负数 就是优惠
-            preferFeeItem.setLivingOrderId(mainRoomOrder.getId());
-            preferFeeItem.setPreferentialStatus(2);
-            preferFeeItem.setHotelId(hotelId);
-            feeService.save(preferFeeItem);
-        }
         List<BusRoomPayType> payTypes = payTypeService.list();
         settleFees.forEach(s->{
-            if(BooleanUtil.isTrue(s.getIsPreferential())) return;
-
-            String payTypeId = s.getPayType();
-            if(payTypeId != null && !payTypeId.isEmpty()) {
-                Optional<BusRoomPayType> opPayType = payTypes.stream().filter(a->a.getId().equals(payTypeId)).findAny();
-                if(!opPayType.isPresent()) throw new JeecgBootException("收款支付方式错误");
-                BusRoomPayType payType = opPayType.get();
-                // 会员卡付费
-                if(payType.getName().equals("会员卡")) {
-                    if(mainRoomOrder.getCustomerType() == null || !mainRoomOrder.getCustomerType().equals(CustomerTypeEnum.VIP.getKey()))
-                        throw new JeecgBootException("客人类型不是会员");
-                    if(mainRoomOrder.getVipCustomerId() == null || mainRoomOrder.getVipCustomerId().isEmpty())
-                        throw new JeecgBootException("会员不存在");
-                    BusMemberCard vipCard = memberCardService.getById(mainRoomOrder.getVipCustomerId());
-                    if(vipCard == null) throw new JeecgBootException("会员不存在");
-                    if(vipCard.getBalance().compareTo(s.getMoney()) < 0) throw new JeecgBootException("会员卡余额不足");
-                    vipCard.setBalance(vipCard.getBalance().subtract(s.getMoney()));
-                    memberCardService.updateById(vipCard);
-                    // log
-                    BusMemberBalanceLog balanceLog = new BusMemberBalanceLog();
-                    balanceLog.setMoney(s.getMoney());
-                    balanceLog.setBalance(vipCard.getBalance());
-                    balanceLog.setType(2);// 扣费
-                    balanceLog.setMemberId(mainRoomOrder.getVipCustomerId());
-                    balanceLog.setStatus(1);// TODO:不知道干什么用的 貌似是个啥支付状态
-                    balanceLog.setGiveMoney(new BigDecimal(0));
-                    balanceLog.setRemarks("房间收费扣款");
-                    balanceLog.setHotelId(hotelId);
-                    if(user!=null) {
-                        balanceLog.setTenantId(user.getRelTenantIds());
+            if(BooleanUtil.isTrue(s.getIsPreferential())) {
+                if(s.getCouponscashId() != null && !s.getCouponscashId().isEmpty()) {
+                    BusMarketCouponsCashUsed couponTicket = marketCouponsCashUsedService.getById(s.getCouponscashId()); // 优惠票券
+                    if(couponTicket == null) throw new JeecgBootException("优惠券不存在");
+                    if(!couponTicket.getStatus().equals(CouponsStatusEnum.received.getKey())) {
+                        CouponsStatusEnum couponStatusText = CouponsStatusEnum.val(couponTicket.getStatus());
+                        if(couponStatusText == null) throw new JeecgBootException("优惠券状态异常");
+                        throw new JeecgBootException("优惠券"+ couponStatusText.getTitle());
+                    } else {
+                        couponTicket.setStatus(CouponsStatusEnum.used.getKey());
+                        marketCouponsCashUsedService.updateById(couponTicket);
                     }
-                    balanceLog.setPaymentMethod("");
-                    balanceLog.setPayMoney(new BigDecimal(0));
-                    balanceLog.setCode(BusMemberBalanceLogServiceImpl.randomNumber("KF"));
-                    balanceLog.setCreateTime(new Date());
-                    memberBalanceLogService.save(balanceLog);
-                    // todo 积分规则
+                }
+                s.setFeeType(1);
+                s.setSubjectType(FeeSubjectType.YOU_HUI.getKey());
+                s.setPayType(null);
+            } else {
+                String payTypeId = s.getPayType();
+                if(payTypeId != null && !payTypeId.isEmpty()) {
+                    Optional<BusRoomPayType> opPayType = payTypes.stream().filter(a->a.getId().equals(payTypeId)).findAny();
+                    if(!opPayType.isPresent()) throw new JeecgBootException("收款支付方式错误");
+                    BusRoomPayType payType = opPayType.get();
+                    // 会员卡付费
+                    if(payType.getName().equals("会员卡")) {
+                        if(mainRoomOrder.getCustomerType() == null || !mainRoomOrder.getCustomerType().equals(CustomerTypeEnum.VIP.getKey()))
+                            throw new JeecgBootException("客人类型不是会员");
+                        if(mainRoomOrder.getVipCustomerId() == null || mainRoomOrder.getVipCustomerId().isEmpty())
+                            throw new JeecgBootException("会员不存在");
+                        BusMemberCard vipCard = memberCardService.getById(mainRoomOrder.getVipCustomerId());
+                        if(vipCard == null) throw new JeecgBootException("会员不存在");
+                        if(vipCard.getBalance().compareTo(s.getMoney()) < 0) throw new JeecgBootException("会员卡余额不足");
+                        vipCard.setBalance(vipCard.getBalance().subtract(s.getMoney()));
+                        memberCardService.updateById(vipCard);
+                        // log
+                        BusMemberBalanceLog balanceLog = new BusMemberBalanceLog();
+                        balanceLog.setMoney(s.getMoney());
+                        balanceLog.setBalance(vipCard.getBalance());
+                        balanceLog.setType(2);// 扣费
+                        balanceLog.setMemberId(mainRoomOrder.getVipCustomerId());
+                        balanceLog.setStatus(1);// TODO:不知道干什么用的 貌似是个啥支付状态
+                        balanceLog.setGiveMoney(new BigDecimal(0));
+                        balanceLog.setRemarks("房间收费扣款");
+                        balanceLog.setHotelId(hotelId);
+                        if(user!=null) {
+                            balanceLog.setTenantId(user.getRelTenantIds());
+                        }
+                        balanceLog.setPaymentMethod("");
+                        balanceLog.setPayMoney(new BigDecimal(0));
+                        balanceLog.setCode(BusMemberBalanceLogServiceImpl.randomNumber("KF"));
+                        balanceLog.setCreateTime(new Date());
+                        memberBalanceLogService.save(balanceLog);
+                        // todo 积分规则
 
+                    }
                 }
+                s.setFeeType(2);
+                s.setSubjectType(FeeSubjectType.JIE_ZHANG.getKey());
+                s.setContactId(mainRoomOrder.getContactId());
             }
-            s.setCreateTime(new Date());
             s.setPreferentialStatus(2);
-            s.setFeeType(2);
-            s.setContactId(mainRoomOrder.getContactId());
-            s.setLivingOrderId(mainRoomOrder.getId());
+            s.setCreateTime(new Date());
             s.setRoomId(mainRoom.getRoomId());
-            s.setSubjectType(FeeSubjectType.JIE_ZHANG.getKey());
-        });
+            s.setLivingOrderId(mainRoomOrder.getId());
+            s.setHotelId(hotelId);
 
-        List<BusOrderFee> jiezhangFees = settleFees.stream().filter(s->s.getIsPreferential() == null || s.getIsPreferential().equals(false)).collect(Collectors.toList());
-        jiezhangFees.forEach(a->{
-            a.setHotelId(hotelId);
         });
-        if(jiezhangFees.size() > 0) {
-            feeService.saveBatch(jiezhangFees);
+        if(settleFees.size() > 0) {
+            feeService.saveBatch(settleFees);
         } else throw new JeecgBootException("参数没有结账收费项目");
         feeItems.forEach(s->{
             s.setPreferentialStatus(2);

+ 1 - 1
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/controller/CesRoomsController.java

@@ -121,7 +121,7 @@ public class CesRoomsController {
         }
     }
 
-    @ApiOperation(value="房间分页列表查询", notes="房间分页列表查询")
+    @ApiOperation(value="批量修改密码", notes="批量修改密码")
     @GetMapping(value = "/batchEditPassword")
     public Result<Boolean> batchEditPassword(CesRoomSearchDto dto, String type, String firstValue, String endValue){
         return Result.ok(roomsService.batchEditPassword(dto, type, firstValue, endValue));