qh %!s(int64=2) %!d(string=hai) anos
pai
achega
0110c23d56

+ 11 - 1
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/BusRoomBookingOrdersController.java

@@ -287,7 +287,17 @@ public class BusRoomBookingOrdersController extends JeecgController<BusRoomBooki
 	 	if(bookingOrderId == null || bookingOrderId.isEmpty()) throw new JeecgBootException("参数错误");
 	 	return Result.ok(service.getLivingOrderFee(bookingOrderId));
 	 }
-
+	 /**
+	  * 全部结账
+	  * @param bookingOrderId
+	  * @return
+	  */
+	 @ApiOperation(value="酒店预定订单-全部结账", notes="酒店预定订单-全部结账")
+	 @RequestMapping(value = "/settle-checkout",method = RequestMethod.POST)
+	 public Result<Boolean> settleCheckout(@RequestBody List<BusOrderFee> fees, String bookingOrderId) {
+	 	Boolean isOk = service.settleBillCheckOut(fees,bookingOrderId);
+	 	return Result.OK(isOk);
+	 }
 
 
  }

+ 19 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/BusOrderFee.java

@@ -89,4 +89,23 @@ public class BusOrderFee implements Serializable {
     @DateTimeFormat(pattern="yyyy-MM-dd")
     @ApiModelProperty(value = "收款时间")
     private Date payTime;
+
+	// 以下的内容只会出现在优惠的账单里面
+    @ApiModelProperty(value = "是否优惠")
+	private Boolean isPreferential;
+    @ApiModelProperty(value = "优惠类型:1抹零2减现3打折  折扣率自动根据优惠金额计算")
+    private Integer preferentialType;
+    @ApiModelProperty(value = "优惠金额")
+    private BigDecimal preferentialMoney;
+    @ApiModelProperty(value = "是否使用优惠券")
+    private Boolean allowCouponscash;
+    @ApiModelProperty(value = "是否使用优惠券")
+    private String couponscashId;
+    @ApiModelProperty(value = "付款人ID")
+    private String contactId;
+    @ApiModelProperty(value = "结账状态,1未结账2已结账")
+    private Integer preferentialStatus;
+
+
+
 }

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

@@ -9,6 +9,8 @@ public enum FeeSubjectType {
 
     YA_JIN(1,"押金"),
     YU_SHOU(2,"预收房费"),
+    YOU_HUI(4,"优惠金额"),
+    JIE_ZHANG(5,"结账收款"),
     MEI_RI_FANG_FEI(3,"每日房费");
 
     Integer key;

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

@@ -12,6 +12,7 @@ import org.jeecg.modules.business.vo.BookingOrderEditVo;
 import org.jeecg.modules.rooms.Vo.FloorBuildingRoomVo;
 import org.jeecg.modules.rooms.entity.CesRooms;
 
+import java.math.BigDecimal;
 import java.util.List;
 import java.util.Map;
 
@@ -47,4 +48,7 @@ public interface IBusRoomBookingOrdersService extends IService<BusRoomBookingOrd
     List<BusOrderFee> getLivingOrderFee(String orderId);
 
     Boolean syncDayRoomOrder(String hotelId);
+
+    BigDecimal getOrderFeeTotal(String livingOrderId,String bookingOrderId);
+    Boolean settleBillCheckOut(List<BusOrderFee> settleFees, String bookingOrderId);
 }

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

@@ -1030,6 +1030,75 @@ public class BusRoomBookingOrdersServiceImpl extends ServiceImpl<BusRoomBookingO
         return null;
     }
 
+    @Override
+    public BigDecimal getOrderFeeTotal(String livingOrderId, String bookingOrderId) {
+
+        return null;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean settleBillCheckOut(List<BusOrderFee> settleFees, String bookingOrderId) {
+        if(bookingOrderId != null && !bookingOrderId.isEmpty()) {
+            List<BusRoomsLivingOrder> livingOrders = roomsLivingOrderService.list(Wrappers.<BusRoomsLivingOrder>query()
+            .eq("booking_order_id",bookingOrderId));
+            BusBookingRooms mainRoom = bookingRoomsService.getOne(Wrappers.<BusBookingRooms>query().eq("is_main", true)
+            .eq("booking_orders_id",bookingOrderId));
+            if(mainRoom == null) throw new JeecgBootException("没有找到主房");
+            Optional<BusRoomsLivingOrder> opMainRoomOrder = livingOrders.stream().filter(s->s.getBookingRoomId().equals(mainRoom.getId())).findFirst();
+            if(!opMainRoomOrder.isPresent()) throw new JeecgBootException("没有找到主房订单");
+            BusRoomsLivingOrder mainRoomOrder = opMainRoomOrder.get();
+            if(livingOrders.size() > 0) {
+               List<BusOrderFee> feeItems = getLivingOrderFee(bookingOrderId).stream().filter(
+                       s->s.getPreferentialStatus().equals(1)// 找到未结账的
+                ).collect(Collectors.toList());
+               // 消费账单
+                List<BusOrderFee> xiaoFeiFees = feeItems.stream().filter(s->s.getFeeType().equals(1)).collect(Collectors.toList());
+                // 收款
+                List<BusOrderFee> shouKuanFees = feeItems.stream().filter(s->s.getFeeType().equals(2)).collect(Collectors.toList());
+                if(settleFees.size() == 0) throw new JeecgBootException("参数错误");
+                BusOrderFee preferFeeItem = null;
+                if(settleFees.stream().anyMatch(s->s.getIsPreferential().equals(true))){
+                    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");
+                    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);
+                    feeService.save(preferFeeItem);
+                }
+
+                settleFees.forEach(s->{
+                    if(s.getIsPreferential().equals(true)) return;
+                    s.setCreateTime(new Date());
+                    s.setPreferentialStatus(2);
+                    s.setFeeType(2);
+                    s.setContactId(mainRoomOrder.getContactId());
+                    s.setLivingOrderId(mainRoomOrder.getId());
+                    s.setRoomId(mainRoom.getRoomId());
+                    s.setSubjectType(FeeSubjectType.JIE_ZHANG.getKey());
+                });
+
+                List<BusOrderFee> jiezhangFees = settleFees.stream().filter(s->s.getIsPreferential() == null || s.getIsPreferential().equals(false)).collect(Collectors.toList());
+                if(jiezhangFees.size() > 0) {
+                    feeService.saveBatch(jiezhangFees);
+                } else throw new JeecgBootException("参数没有结账收费项目");
+                feeItems.forEach(s->{
+                    s.setPreferentialStatus(2);
+                });
+                feeService.updateBatchById(feeItems);
+                // todo 对账
+            } else throw new JeecgBootException("未找到任何入住订单");
+        } else {
+
+        }
+        return true;
+    }
+
     private Map<String,String> bookingRoomToLiving(BookingOrderSaveDto livingData, List<ExtendBusBookingRoomsVo> roomIds, BookingOrderEditVo bookingOrderVo) {
         Map<String,String> results = new HashMap<>();