Forráskód Böngészése

处理文档中提出的问题

许智捷 2 éve
szülő
commit
7eaf1fdf37
27 módosított fájl, 466 hozzáadás és 99 törlés
  1. 2 1
      jeecg-mall-api/src/main/java/org/jeecg/modules/bus/controller/HotelController.java
  2. 0 13
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/BusBookingRoomsController.java
  3. 41 15
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/BusRoomBookingOrdersController.java
  4. 1 1
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/BusRoomsLivingOrder.java
  5. 36 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/enums/TeamEnum.java
  6. 13 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/BusOrderFeeGoodsMapper.java
  7. 11 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/BusRoomBookingOrdersMapper.java
  8. 5 2
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/BusRoomBookingOrdersMapper.xml
  9. 4 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/IBusOrderFeeGoodsService.java
  10. 12 3
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/IBusRoomBookingOrdersService.java
  11. 7 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/BusOrderFeeGoodsServiceImpl.java
  12. 173 55
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/BusRoomBookingOrdersServiceImpl.java
  13. 23 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/vo/BusOrderFeeGoodsVo.java
  14. 25 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/vo/BusOrderFeeVo.java
  15. 3 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/vo/RoomLivingQueryVo.java
  16. 3 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/fw/controller/FwRoomExamineController.java
  17. 12 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/fw/entity/FwRoomExamine.java
  18. 2 2
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/Enum/RoomStatusEnum.java
  19. 7 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/Vo/CesHousePriceSchemeVo.java
  20. 6 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/controller/CesHousePriceSchemeController.java
  21. 13 2
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/controller/CesRoomsController.java
  22. 4 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/mapper/CesHousePriceSchemeMapper.java
  23. 8 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/mapper/CesRoomsMapper.java
  24. 13 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/mapper/xml/CesHousePriceSchemeMapper.xml
  25. 18 3
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/service/CesHousePriceSchemeServiceImpl.java
  26. 17 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/service/CesRoomsServiceImpl.java
  27. 7 2
      pom.xml

+ 2 - 1
jeecg-mall-api/src/main/java/org/jeecg/modules/bus/controller/HotelController.java

@@ -35,6 +35,7 @@ import org.jeecg.modules.business.enums.CheckInTypeEnum;
 import org.jeecg.modules.business.service.*;
 import org.jeecg.modules.business.service.*;
 import org.jeecg.modules.business.service.impl.BusMarketMemberServiceImpl;
 import org.jeecg.modules.business.service.impl.BusMarketMemberServiceImpl;
 import org.jeecg.modules.business.service.impl.BusRoomPayTypeServiceImpl;
 import org.jeecg.modules.business.service.impl.BusRoomPayTypeServiceImpl;
+import org.jeecg.modules.business.vo.BusOrderFeeVo;
 import org.jeecg.modules.business.vo.KeLiItemVo;
 import org.jeecg.modules.business.vo.KeLiItemVo;
 import org.jeecg.modules.mall.entity.*;
 import org.jeecg.modules.mall.entity.*;
 import org.jeecg.modules.mall.service.*;
 import org.jeecg.modules.mall.service.*;
@@ -973,7 +974,7 @@ public class HotelController extends WebConfig {
     @ApiLogin
     @ApiLogin
     public Result<HashMap> getLivingOrderFees(String bookingOrderId) {
     public Result<HashMap> getLivingOrderFees(String bookingOrderId) {
         if (bookingOrderId == null || bookingOrderId.isEmpty()) throw new JeecgBootException("参数错误");
         if (bookingOrderId == null || bookingOrderId.isEmpty()) throw new JeecgBootException("参数错误");
-        List<BusOrderFee> list = busRoomBookingOrdersService.getLivingOrderFee(bookingOrderId);
+        List<BusOrderFeeVo> list = busRoomBookingOrdersService.getLivingOrderFee(bookingOrderId);
         HashMap<String, BigDecimal> obj = new HashMap<String, BigDecimal>();
         HashMap<String, BigDecimal> obj = new HashMap<String, BigDecimal>();
         obj.put("xf", BigDecimal.ZERO);
         obj.put("xf", BigDecimal.ZERO);
         obj.put("sk", BigDecimal.ZERO);
         obj.put("sk", BigDecimal.ZERO);

+ 0 - 13
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/BusBookingRoomsController.java

@@ -176,17 +176,4 @@ public class BusBookingRoomsController extends JeecgController<BusBookingRooms,
         return super.exportXls(request, busBookingRooms, BusBookingRooms.class, "预定订单关联房间");
         return super.exportXls(request, busBookingRooms, BusBookingRooms.class, "预定订单关联房间");
     }
     }
 
 
-    /**
-      * 通过excel导入数据
-    *
-    * @param request
-    * @param response
-    * @return
-    */
-    //@RequiresPermissions("business:bus_booking_rooms:importExcel")
-    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
-    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
-        return super.importExcel(request, response, BusBookingRooms.class);
-    }
-
 }
 }

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

@@ -20,6 +20,7 @@ import org.jeecg.modules.business.dto.BookingOrderSaveDto;
 import org.jeecg.modules.business.dto.UpdateOrderInfoDto;
 import org.jeecg.modules.business.dto.UpdateOrderInfoDto;
 import org.jeecg.modules.business.dto.UpdateOrderPriceDto;
 import org.jeecg.modules.business.dto.UpdateOrderPriceDto;
 import org.jeecg.modules.business.entity.*;
 import org.jeecg.modules.business.entity.*;
+import org.jeecg.modules.business.service.IBusBookingRoomsService;
 import org.jeecg.modules.business.service.IBusRoomBookingOrdersService;
 import org.jeecg.modules.business.service.IBusRoomBookingOrdersService;
 
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -27,7 +28,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 
 
-import org.jeecg.modules.business.service.impl.BusRoomBookingOrdersServiceImpl;
+import org.jeecg.modules.business.service.impl.BusBookingRoomsServiceImpl;
+import org.jeecg.modules.business.service.impl.BusOrderFeeServiceImpl;
 import org.jeecg.modules.business.vo.*;
 import org.jeecg.modules.business.vo.*;
 import org.jeecgframework.poi.excel.ExcelImportUtil;
 import org.jeecgframework.poi.excel.ExcelImportUtil;
 import org.jeecgframework.poi.excel.def.NormalExcelConstants;
 import org.jeecgframework.poi.excel.def.NormalExcelConstants;
@@ -62,6 +64,7 @@ public class BusRoomBookingOrdersController extends JeecgController<BusRoomBooki
 	@Resource
 	@Resource
 	private IBusRoomBookingOrdersService busRoomBookingOrdersService;
 	private IBusRoomBookingOrdersService busRoomBookingOrdersService;
 
 
+	private IBusBookingRoomsService busBookingRoomsService;
 	/**
 	/**
 	 * 分页列表查询
 	 * 分页列表查询
 	 *
 	 *
@@ -97,6 +100,7 @@ public class BusRoomBookingOrdersController extends JeecgController<BusRoomBooki
 	public Result<String> add(@RequestBody BookingOrderSaveDto busRoomBookingOrders,String hotelId) {
 	public Result<String> add(@RequestBody BookingOrderSaveDto busRoomBookingOrders,String hotelId) {
 		Boolean isTeam = busRoomBookingOrders.getOrderInfo().getBookingOrdersType().equals(2);
 		Boolean isTeam = busRoomBookingOrders.getOrderInfo().getBookingOrdersType().equals(2);
 		busRoomBookingOrders.getOrderInfo().setBookingOrdersType(1);
 		busRoomBookingOrders.getOrderInfo().setBookingOrdersType(1);
+		busRoomBookingOrders.getOrderInfo().setBookingStatus(1);
 		return Result.OK("预定成功",busRoomBookingOrdersService.bookingOrderSave(busRoomBookingOrders,isTeam,false,hotelId));
 		return Result.OK("预定成功",busRoomBookingOrdersService.bookingOrderSave(busRoomBookingOrders,isTeam,false,hotelId));
 	}
 	}
 	 /**
 	 /**
@@ -260,7 +264,7 @@ public class BusRoomBookingOrdersController extends JeecgController<BusRoomBooki
 	 @ApiOperation(value="酒店预定订单-预约房间入住", notes="酒店预定订单-预约房间入住")
 	 @ApiOperation(value="酒店预定订单-预约房间入住", notes="酒店预定订单-预约房间入住")
 	 @RequestMapping(value = "booking-to-live",method = RequestMethod.POST)
 	 @RequestMapping(value = "booking-to-live",method = RequestMethod.POST)
 	 public  Result<String> bookingRoomToLive(String bookingRoomId, @RequestBody List<BusLivingCustomer> customers,String hotelId) {
 	 public  Result<String> bookingRoomToLive(String bookingRoomId, @RequestBody List<BusLivingCustomer> customers,String hotelId) {
-		 return  Result.OK("入住成功",service.bookingToLive(bookingRoomId, customers,hotelId,true,null));
+		 return Result.OK("入住成功",service.bookingToLive(bookingRoomId, customers,hotelId,true,null));
 	 }
 	 }
 
 
 	 /**
 	 /**
@@ -283,7 +287,7 @@ public class BusRoomBookingOrdersController extends JeecgController<BusRoomBooki
 	  */
 	  */
 	 @ApiOperation(value="酒店预定订单-获取入住订单费用账单", notes="酒店预定订单-获取入住订单费用账单")
 	 @ApiOperation(value="酒店预定订单-获取入住订单费用账单", notes="酒店预定订单-获取入住订单费用账单")
 	 @RequestMapping(value = "/living-fees",method = RequestMethod.GET)
 	 @RequestMapping(value = "/living-fees",method = RequestMethod.GET)
-	 public Result<List<BusOrderFee>> getLivingOrderFees(String bookingOrderId) {
+	 public Result getLivingOrderFees(String bookingOrderId) {
 	 	if(bookingOrderId == null || bookingOrderId.isEmpty()) throw new JeecgBootException("参数错误");
 	 	if(bookingOrderId == null || bookingOrderId.isEmpty()) throw new JeecgBootException("参数错误");
 	 	return Result.ok(service.getLivingOrderFee(bookingOrderId));
 	 	return Result.ok(service.getLivingOrderFee(bookingOrderId));
 	 }
 	 }
@@ -299,6 +303,15 @@ public class BusRoomBookingOrdersController extends JeecgController<BusRoomBooki
 	 	return Result.OK(isOk);
 	 	return Result.OK(isOk);
 	 }
 	 }
 
 
+	 /**
+	  * 续住前判断是否被预约
+	  */
+	 @ApiOperation(value="续住前判断是否被预约", notes="续住前判断是否被预约")
+	 @RequestMapping(value = "/isBooked",method = RequestMethod.POST)
+	 public Result isBooked(String livingOrderId,@RequestParam(name = "dueOutTime") @DateTimeFormat(pattern="yyyy-MM-dd HH:mm") Date dueOutTime){
+		 BookingOrderEditVo bookingOrderVo = service.roomIdBooked(livingOrderId, dueOutTime);
+		 return Result.ok(bookingOrderVo);
+	 }
 
 
 	 /**
 	 /**
 	  * 续住/提前
 	  * 续住/提前
@@ -343,8 +356,8 @@ public class BusRoomBookingOrdersController extends JeecgController<BusRoomBooki
 	 @ApiOperation(value="酒店预定订单-拆分房间", notes="酒店预定订单-拆分房间")
 	 @ApiOperation(value="酒店预定订单-拆分房间", notes="酒店预定订单-拆分房间")
 	 @RequestMapping(value = "/split-living",method = RequestMethod.POST)
 	 @RequestMapping(value = "/split-living",method = RequestMethod.POST)
 	 public Result<Boolean> splitLiving(String livingOrderId) {
 	 public Result<Boolean> splitLiving(String livingOrderId) {
-		 Boolean isOk = service.splitLiving(livingOrderId);
-		 return Result.OK(isOk);
+		 String bookingOrdersId = service.splitLiving(livingOrderId);
+		 return Result.OK(bookingOrdersId);
 	 }
 	 }
 
 
 	 /**
 	 /**
@@ -407,8 +420,8 @@ public class BusRoomBookingOrdersController extends JeecgController<BusRoomBooki
 	  */
 	  */
 	 @ApiOperation(value="酒店预定订单-合并联房", notes="酒店预定订单-合并联房")
 	 @ApiOperation(value="酒店预定订单-合并联房", notes="酒店预定订单-合并联房")
 	 @RequestMapping(value = "/merge-order",method = RequestMethod.POST)
 	 @RequestMapping(value = "/merge-order",method = RequestMethod.POST)
-	 public Result<Boolean> mergeOrder(String livingRoomId,@RequestBody List<String> livingOrderIds ){
-	 	return  Result.OK(service.mergeOrder(livingRoomId,livingOrderIds));
+	 public Result<Boolean> mergeOrder(String hotelId, String livingRoomId,@RequestBody List<String> livingOrderIds ){
+	 	return  Result.OK(service.mergeOrder(hotelId,livingRoomId,livingOrderIds));
 	 }
 	 }
 
 
 	 /**
 	 /**
@@ -516,13 +529,26 @@ public class BusRoomBookingOrdersController extends JeecgController<BusRoomBooki
 	 	return  Result.OK(service.reverseLiving(livingOrderId,hotelId));
 	 	return  Result.OK(service.reverseLiving(livingOrderId,hotelId));
 	 }
 	 }
 
 
+//
+//	 @ApiOperation(value="联房数量", notes="联房数量")
+//	 @RequestMapping(value = "/bookingOrdersCount",method = RequestMethod.GET)
+//	 public  Result<Long> bookingOrdersCount(String bookingOrderId,String hotelId) {
+//		 busRoomBookingOrdersService.count(bookingOrderId, hotelId);
+//
+//		 return  Result.OK(busRoomBookingOrdersService.count(bookingOrderId, hotelId));
+//	 }
+
+	 @ApiOperation(value="是否可以单独结算", notes="联房数量")
+	 @RequestMapping(value = "/canOnlyPaySelf",method = RequestMethod.GET)
+	 public  Result<Boolean> canOnlyPaySelf(String bookingOrderId, String hotelId, String roomId) {
+		 Boolean onlyPaySelf = service.canOnlyPaySelf(bookingOrderId, hotelId, roomId);
+		 return  Result.OK(onlyPaySelf);
+	 }
 
 
-
-
-
-
-
-
-
-
+	 @ApiOperation(value="结算部分费用", notes="联房数量")
+	 @RequestMapping(value = "/payPortionFee",method = RequestMethod.POST)
+	 public  Result<Boolean> payPortionFee(@RequestBody List<String> feeIds) {
+		 Boolean onlyPaySelf = service.payPortionFee(feeIds);
+		 return  Result.OK(onlyPaySelf);
+	 }
  }
  }

+ 1 - 1
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/BusRoomsLivingOrder.java

@@ -196,7 +196,7 @@ public class BusRoomsLivingOrder implements Serializable {
     private String beforeMergeBookingOrderId;
     private String beforeMergeBookingOrderId;
 
 
     /**定价房间id*/
     /**定价房间id*/
-    @Excel(name = "定价房间id", width = 15)
+    @Excel(name = "定价房间id",  width = 15)
     @ApiModelProperty(value = "定价房间id")
     @ApiModelProperty(value = "定价房间id")
     private String bookingRoomId;
     private String bookingRoomId;
     /**批次id*/
     /**批次id*/

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

@@ -0,0 +1,36 @@
+package org.jeecg.modules.business.enums;
+
+/**
+ * @author xuzhijie
+ * @description
+ * @data 2023/7/31 10:28
+ */
+public enum TeamEnum {
+    GROUP(1,"团"),
+    UNITE(2,"联");
+
+    Integer key;
+
+    String title;
+
+    TeamEnum(Integer key, String title){
+        this.key = key;
+        this.title = title;
+    }
+    public Integer getKey() {
+        return key;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public static TeamEnum val(Integer key){
+        for(TeamEnum team: values()){
+            if(team.key .equals(key)){
+                return team;
+            }
+        }
+        return null;
+    }
+}

+ 13 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/BusOrderFeeGoodsMapper.java

@@ -2,8 +2,21 @@ package org.jeecg.modules.business.mapper;
 
 
 
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Select;
 import org.jeecg.modules.business.entity.BusOrderFeeGoods;
 import org.jeecg.modules.business.entity.BusOrderFeeGoods;
+import org.jeecg.modules.business.vo.BusOrderFeeGoodsVo;
+
+import java.util.List;
 
 
 public interface BusOrderFeeGoodsMapper  extends BaseMapper<BusOrderFeeGoods> {
 public interface BusOrderFeeGoodsMapper  extends BaseMapper<BusOrderFeeGoods> {
 
 
+    @Select("<script> select bofg.*,cg.name as name,cg.selling_price as originalPrice " +
+            " from bus_order_fee_goods bofg " +
+            "inner join ces_goods cg on cg.id = bofg.goods_id " +
+            "where living_order_id in " +
+            "<foreach collection='livingOrderIds' item='id' open='(' separator=',' close=')'> " +
+            "#{id} " +
+            "</foreach> " +
+            " </script>")
+    List<BusOrderFeeGoodsVo> queryOrderGoodDetail(List<String> livingOrderIds);
 }
 }

+ 11 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/BusRoomBookingOrdersMapper.java

@@ -18,6 +18,8 @@ import org.jeecg.modules.business.vo.*;
 import org.jeecg.modules.rooms.entity.CesRooms;
 import org.jeecg.modules.rooms.entity.CesRooms;
 import org.springframework.format.annotation.DateTimeFormat;
 import org.springframework.format.annotation.DateTimeFormat;
 
 
+import javax.xml.crypto.Data;
+
 /**
 /**
  * @Description: 酒店预定订单
  * @Description: 酒店预定订单
  * @Author: jeecg-boot
  * @Author: jeecg-boot
@@ -66,4 +68,13 @@ public interface BusRoomBookingOrdersMapper extends BaseMapper<BusRoomBookingOrd
             "</script>")
             "</script>")
     public List<HashMap<String, Object>> ruZhuHistoryList(Page<HashMap<String, Object>> page, @Param("hotelId") String hotelId, @Param("phone") String phone);
     public List<HashMap<String, Object>> ruZhuHistoryList(Page<HashMap<String, Object>> page, @Param("hotelId") String hotelId, @Param("phone") String phone);
 
 
+    @Select("select brbo.* from bus_room_booking_orders brbo " +
+            "inner join bus_booking_rooms bbr on bbr.booking_orders_id = brbo.id " +
+            "where brbo.arrival_time > #{arrivalTimeStr} " +
+            "and brbo.booking_status = 1 "+
+            "and bbr.room_id in " +
+            "(select cr.id from bus_booking_rooms bbr " +
+            "inner join ces_rooms cr on cr.id = bbr.room_id " +
+            "where bbr.id = #{bookingRoomId}) ")
+    List<BusRoomBookingOrders> findBookingOrderByRoom(String bookingRoomId, String arrivalTimeStr);
 }
 }

+ 5 - 2
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/BusRoomBookingOrdersMapper.xml

@@ -48,7 +48,9 @@
         tb.customer_id,
         tb.customer_id,
         tb.customer_name,
         tb.customer_name,
         SUM(IF(t.fee_type = 1,t.mny,0)) as xf,
         SUM(IF(t.fee_type = 1,t.mny,0)) as xf,
-        SUM(IF(t.fee_type = 2,t.mny,0)) as sk
+        SUM(IF(t.fee_type = 2,t.mny,0)) as sk,
+        bt.rel_type,
+        bt.sort_index
 
 
         FROM
         FROM
         bus_rooms_living_order o
         bus_rooms_living_order o
@@ -72,11 +74,12 @@
         o.id,
         o.id,
         f.fee_type
         f.fee_type
         ) AS t ON t.id = o.id
         ) AS t ON t.id = o.id
+        left join bus_team bt on bt.booking_order_id =  o.booking_order_id
         where o.hotel_id = #{hotelId}
         where o.hotel_id = #{hotelId}
         <if test="keyw != null and keyw != ''">
         <if test="keyw != null and keyw != ''">
             and (o.living_order_no like '%#{keyw}%' or rm.`name` like '%#{keyw}%' or tb.customer_name like '%#{keyw}%')
             and (o.living_order_no like '%#{keyw}%' or rm.`name` like '%#{keyw}%' or tb.customer_name like '%#{keyw}%')
         </if>
         </if>
-        GROUP BY o.id,tb.living_order_id,rm.id,tb.customer_id,tb.customer_name
+        GROUP BY o.id,tb.living_order_id,rm.id,tb.customer_id,tb.customer_name,bt.rel_type,bt.sort_index
 
 
 
 
     </select>
     </select>

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

@@ -2,6 +2,10 @@ package org.jeecg.modules.business.service;
 
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.service.IService;
 import org.jeecg.modules.business.entity.BusOrderFeeGoods;
 import org.jeecg.modules.business.entity.BusOrderFeeGoods;
+import org.jeecg.modules.business.vo.BusOrderFeeGoodsVo;
+
+import java.util.List;
 
 
 public interface IBusOrderFeeGoodsService extends IService<BusOrderFeeGoods> {
 public interface IBusOrderFeeGoodsService extends IService<BusOrderFeeGoods> {
+    List<BusOrderFeeGoodsVo> queryOrderGoodDetail(List<String> livingOrderIds);
 }
 }

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

@@ -1,5 +1,6 @@
 package org.jeecg.modules.business.service;
 package org.jeecg.modules.business.service;
 
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.jeecg.modules.business.dto.BatchOrderSavaDto;
 import org.jeecg.modules.business.dto.BatchOrderSavaDto;
@@ -48,7 +49,7 @@ public interface IBusRoomBookingOrdersService extends IService<BusRoomBookingOrd
 
 
     List<FloorBuildingRoomVo> getRealtimeInfo(List<CesRooms> rooms);
     List<FloorBuildingRoomVo> getRealtimeInfo(List<CesRooms> rooms);
 
 
-    List<BusOrderFee> getLivingOrderFee(String orderId);
+    List<BusOrderFeeVo> getLivingOrderFee(String orderId);
 
 
     Boolean syncDayRoomOrder(String hotelId);
     Boolean syncDayRoomOrder(String hotelId);
 
 
@@ -57,7 +58,7 @@ public interface IBusRoomBookingOrdersService extends IService<BusRoomBookingOrd
     Boolean continueLiving(BusOrderFee settleFee, Date dueOutTime,String livingOrderId,String hotelId);
     Boolean continueLiving(BusOrderFee settleFee, Date dueOutTime,String livingOrderId,String hotelId);
     Boolean livingSettleBillCheckOut(List<BusOrderFee> settleFees, String livingOrderId);
     Boolean livingSettleBillCheckOut(List<BusOrderFee> settleFees, String livingOrderId);
     Boolean partialSettle(PartialSettleVo param);
     Boolean partialSettle(PartialSettleVo param);
-    Boolean splitLiving(String livingOrderId);
+    String splitLiving(String livingOrderId);
     Boolean leaveNotSettle(String bookingOrderId, String livingOrderId);
     Boolean leaveNotSettle(String bookingOrderId, String livingOrderId);
 
 
     IPage<RoomLivingQueryVo> getLivingPageData(Integer status,String keyw, Page<RoomLivingQueryVo> page,String hotelId);
     IPage<RoomLivingQueryVo> getLivingPageData(Integer status,String keyw, Page<RoomLivingQueryVo> page,String hotelId);
@@ -65,7 +66,7 @@ public interface IBusRoomBookingOrdersService extends IService<BusRoomBookingOrd
     IPage<KeLiItemVo> getBookingOrderKL(Integer status,String keyw,String hotelId,String thirdUserId, Page<KeLiItemVo> page);
     IPage<KeLiItemVo> getBookingOrderKL(Integer status,String keyw,String hotelId,String thirdUserId, Page<KeLiItemVo> page);
     Boolean setLivingOrderFee(List<BusOrderFee> fees,String livingOrderId,String hotelId);
     Boolean setLivingOrderFee(List<BusOrderFee> fees,String livingOrderId,String hotelId);
     Boolean unionOrder(String roomId,String targetRoomId, String bookingOrderId, String hotelId);
     Boolean unionOrder(String roomId,String targetRoomId, String bookingOrderId, String hotelId);
-    Boolean mergeOrder(String livingRoomId, List<String> livingOrderId);
+    Boolean mergeOrder(String hotelId, String livingRoomId, List<String> livingOrderId);
     ForwardFangTaiVo forwardFangTai(String start, String end, String hotelId,Boolean isContainLeave);
     ForwardFangTaiVo forwardFangTai(String start, String end, String hotelId,Boolean isContainLeave);
     RiLiFangTaiResultVo riliFangTai(String start, String end, String hotelId);
     RiLiFangTaiResultVo riliFangTai(String start, String end, String hotelId);
     Boolean updateOrderInfo(Integer type, UpdateOrderInfoDto info);
     Boolean updateOrderInfo(Integer type, UpdateOrderInfoDto info);
@@ -86,4 +87,12 @@ public interface IBusRoomBookingOrdersService extends IService<BusRoomBookingOrd
      String delBusData(String hotelId);
      String delBusData(String hotelId);
      Boolean 退你妈的单(List<String> feeId);
      Boolean 退你妈的单(List<String> feeId);
      Boolean reverseLiving(String livingOrderId, String hotelId);
      Boolean reverseLiving(String livingOrderId, String hotelId);
+
+//    Long count(String bookingOrderId,String hotelId);
+
+    Boolean canOnlyPaySelf(String bookingOrderId,String hotelId,String roomId);
+
+    BookingOrderEditVo roomIdBooked(String livingOrderId, Date newDueOutTime);
+
+    Boolean payPortionFee(List<String> feeIds);
 }
 }

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

@@ -4,8 +4,15 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.jeecg.modules.business.entity.BusOrderFeeGoods;
 import org.jeecg.modules.business.entity.BusOrderFeeGoods;
 import org.jeecg.modules.business.mapper.BusOrderFeeGoodsMapper;
 import org.jeecg.modules.business.mapper.BusOrderFeeGoodsMapper;
 import org.jeecg.modules.business.service.IBusOrderFeeGoodsService;
 import org.jeecg.modules.business.service.IBusOrderFeeGoodsService;
+import org.jeecg.modules.business.vo.BusOrderFeeGoodsVo;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
+import java.util.List;
+
 @Service
 @Service
 public class BusOrderFeeGoodsServiceImpl extends ServiceImpl<BusOrderFeeGoodsMapper, BusOrderFeeGoods> implements IBusOrderFeeGoodsService {
 public class BusOrderFeeGoodsServiceImpl extends ServiceImpl<BusOrderFeeGoodsMapper, BusOrderFeeGoods> implements IBusOrderFeeGoodsService {
+    @Override
+    public List<BusOrderFeeGoodsVo> queryOrderGoodDetail(List<String> livingOrderIds) {
+        return baseMapper.queryOrderGoodDetail(livingOrderIds);
+    }
 }
 }

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

@@ -1,12 +1,20 @@
 package org.jeecg.modules.business.service.impl;
 package org.jeecg.modules.business.service.impl;
 
 
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateTime;
+import cn.hutool.core.util.BooleanUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.SneakyThrows;
 import lombok.SneakyThrows;
+import net.sf.saxon.expr.instruct.ForEach;
 import org.jeecg.common.exception.JeecgBootException;
 import org.jeecg.common.exception.JeecgBootException;
 import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.common.util.DateUtils;
 import org.jeecg.common.util.DateUtils;
@@ -18,6 +26,7 @@ import org.jeecg.modules.business.mapper.BusRoomBookingOrdersMapper;
 import org.jeecg.modules.business.service.*;
 import org.jeecg.modules.business.service.*;
 import org.jeecg.modules.business.util.MxTools;
 import org.jeecg.modules.business.util.MxTools;
 import org.jeecg.modules.business.vo.*;
 import org.jeecg.modules.business.vo.*;
+import org.jeecg.modules.finance.vo.OrderFeeVo;
 import org.jeecg.modules.fw.entity.FwRoomClean;
 import org.jeecg.modules.fw.entity.FwRoomClean;
 import org.jeecg.modules.fw.entity.FwRoomExamine;
 import org.jeecg.modules.fw.entity.FwRoomExamine;
 import org.jeecg.modules.fw.entity.FwRoomLock;
 import org.jeecg.modules.fw.entity.FwRoomLock;
@@ -44,8 +53,12 @@ import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.math.BigDecimal;
 import java.text.ParseException;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.text.SimpleDateFormat;
+import java.time.Duration;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
+import java.time.ZoneId;
 import java.util.*;
 import java.util.*;
+import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
 /**
 /**
@@ -109,6 +122,9 @@ public class BusRoomBookingOrdersServiceImpl extends ServiceImpl<BusRoomBookingO
     private CesAllDayPriceRuleServiceImpl allDayPriceRuleService;
     private CesAllDayPriceRuleServiceImpl allDayPriceRuleService;
 
 
     @Resource
     @Resource
+    private CesGoodsServiceImpl cesGoodsServiceImpl;
+
+    @Resource
     private IBusAgreementOrderFeeService agreementOrderFeeService;
     private IBusAgreementOrderFeeService agreementOrderFeeService;
 
 
     @Resource
     @Resource
@@ -312,25 +328,7 @@ public class BusRoomBookingOrdersServiceImpl extends ServiceImpl<BusRoomBookingO
                 teamService.save(team);
                 teamService.save(team);
             } else {
             } else {
                 if(isLiving && item.getRoomIds().size() > 1) {
                 if(isLiving && item.getRoomIds().size() > 1) {
-                    BusTeam team = new BusTeam();
-                    List<BusTeam> existTeams = teamService.list(Wrappers.<BusTeam>query().eq("is_delete", 0).eq("hotel_id", hotelId)
-                            .eq("rel_type",2)); // 1团队房,2联房
-                    Integer sortIndex = 1;
-                    List<Integer> indexs = existTeams.stream().map(s->s.getSortIndex()).collect(Collectors.toList());
-                    while(true){
-                        Integer finalSortIndex = sortIndex;
-                        if(indexs.stream().filter(s->s.equals(finalSortIndex)).count() == 0) {
-                            break;
-                        }
-                        sortIndex++;
-                    }
-                    team.setBookingOrderId(bookingId);
-                    team.setIsDelete(0);
-                    team.setHotelId(hotelId);
-                    team.setSortIndex(sortIndex);
-                    team.setRelType(2);
-
-                    teamService.save(team);
+                    addBusTeams(bookingId, hotelId);
                 }
                 }
             }
             }
             //</editor-fold>
             //</editor-fold>
@@ -413,6 +411,28 @@ public class BusRoomBookingOrdersServiceImpl extends ServiceImpl<BusRoomBookingO
         }
         }
     }
     }
 
 
+    public void addBusTeams(String hotelId, String bookingId){
+        BusTeam team = new BusTeam();
+        List<BusTeam> existTeams = teamService.list(Wrappers.<BusTeam>query().eq("is_delete", 0).eq("hotel_id", hotelId)
+                .eq("rel_type",2)); // 1团队房,2联房
+        Integer sortIndex = 1;
+        List<Integer> indexs = existTeams.stream().map(s->s.getSortIndex()).collect(Collectors.toList());
+        while(true){
+            Integer finalSortIndex = sortIndex;
+            if(indexs.stream().filter(s->s.equals(finalSortIndex)).count() == 0) {
+                break;
+            }
+            sortIndex++;
+        }
+        team.setBookingOrderId(bookingId);
+        team.setIsDelete(0);
+        team.setHotelId(hotelId);
+        team.setSortIndex(sortIndex);
+        team.setRelType(2);
+
+        teamService.save(team);
+    }
+
     /**
     /**
      * 通过id获取预约单详情
      * 通过id获取预约单详情
      * @param orderId
      * @param orderId
@@ -461,6 +481,13 @@ public class BusRoomBookingOrdersServiceImpl extends ServiceImpl<BusRoomBookingO
                         orderInfo.setSettleType(opLvOrder.get().getSettleType());
                         orderInfo.setSettleType(opLvOrder.get().getSettleType());
                     }
                     }
                     BusRoomsLivingOrder order = opLvOrder.get();
                     BusRoomsLivingOrder order = opLvOrder.get();
+                    if (ObjectUtil.isNotEmpty(order.getArrivalTime())&& ObjectUtil.isNotEmpty(order.getDueOutTime())){
+                        long millisDiff = order.getDueOutTime().getTime() - order.getArrivalTime().getTime();
+
+                        // 将毫秒数差值转换为天数
+                        int daysBetween = (int) TimeUnit.DAYS.convert(millisDiff, TimeUnit.MILLISECONDS) + 1;
+                        order.setDayCount(daysBetween);
+                    }
                     List<BusLivingCustomer> currentLivingCustomers = livingCustomers.stream().filter(s->s.getLivingOrderId().equals(order.getId())).collect(Collectors.toList());
                     List<BusLivingCustomer> currentLivingCustomers = livingCustomers.stream().filter(s->s.getLivingOrderId().equals(order.getId())).collect(Collectors.toList());
                     List<BusLivingLayoutDayPrice> lvDayPrices = livingLayoutDayPriceService.list(Wrappers.<BusLivingLayoutDayPrice>query().eq("living_order_id",order.getId()));
                     List<BusLivingLayoutDayPrice> lvDayPrices = livingLayoutDayPriceService.list(Wrappers.<BusLivingLayoutDayPrice>query().eq("living_order_id",order.getId()));
                     r.setLivingOrder(order);
                     r.setLivingOrder(order);
@@ -480,7 +507,6 @@ public class BusRoomBookingOrdersServiceImpl extends ServiceImpl<BusRoomBookingO
             batches.forEach(s->{
             batches.forEach(s->{
                 batchesVo.add(copyBaseToBatch(s));
                 batchesVo.add(copyBaseToBatch(s));
             });
             });
-
             List<ExtendBusBookingRoomsVo> batchRooms = bookingRoomsService.bookingRooms(orderId,BookingOrdersType.TEAM.getKey());
             List<ExtendBusBookingRoomsVo> batchRooms = bookingRoomsService.bookingRooms(orderId,BookingOrdersType.TEAM.getKey());
             List<BusBookingLayoutDayPrice> layoutDayPrices = dayPriceService.list(Wrappers.<BusBookingLayoutDayPrice>query()
             List<BusBookingLayoutDayPrice> layoutDayPrices = dayPriceService.list(Wrappers.<BusBookingLayoutDayPrice>query()
             .eq("booking_order_id",orderId)
             .eq("booking_order_id",orderId)
@@ -1182,13 +1208,28 @@ public class BusRoomBookingOrdersServiceImpl extends ServiceImpl<BusRoomBookingO
     }
     }
 
 
     @Override
     @Override
-    public List<BusOrderFee> getLivingOrderFee(String orderId) {
+    public List<BusOrderFeeVo> getLivingOrderFee(String orderId) {
         List<BusRoomsLivingOrder> livingOrders = roomsLivingOrderService.list(Wrappers.<BusRoomsLivingOrder>query().eq("booking_order_id",orderId));
         List<BusRoomsLivingOrder> livingOrders = roomsLivingOrderService.list(Wrappers.<BusRoomsLivingOrder>query().eq("booking_order_id",orderId));
         if(livingOrders.size() > 0) {
         if(livingOrders.size() > 0) {
             List<String> livingOrderIds = livingOrders.stream().map(s->s.getId()).collect(Collectors.toList());
             List<String> livingOrderIds = livingOrders.stream().map(s->s.getId()).collect(Collectors.toList());
-            List<BusOrderFee> orderFees = feeService.list(Wrappers.<BusOrderFee>query().in("living_order_id",livingOrderIds));
-            return orderFees;
-        } else return  new ArrayList<>();
+            // 所有订单商品关联对象
+            List<BusOrderFeeGoodsVo> busOrderFeeGoodVos = orderFeeGoodsService.queryOrderGoodDetail(livingOrderIds);
+            // 所有订单
+            List<BusOrderFee> orderFees = feeService.list(Wrappers.<BusOrderFee>query().in("living_order_id",livingOrderIds).gt("money",0).eq("preferential_status", 1));
+            ArrayList<BusOrderFeeVo> busOrderFeeVos = new ArrayList<>();
+            orderFees.stream().forEach(e ->{
+                BusOrderFeeVo busOrderFeeVo = BeanUtil.copyProperties(e, BusOrderFeeVo.class);
+                // 订单为 商品订单 时
+                if (FeeSubjectType.SHANG_PIN.getKey().equals(e.getSubjectType())){
+                    List<BusOrderFeeGoodsVo> busOrderFeeGoodsVo = busOrderFeeGoodVos.stream().filter(orderFeeGoodVo -> StrUtil.equals(orderFeeGoodVo.getOrderFeeId(), e.getId())).collect(Collectors.toList());
+                    busOrderFeeVo.setFeeGoodVos(busOrderFeeGoodsVo);
+                }
+                busOrderFeeVos.add(busOrderFeeVo);
+                }
+            );
+            return busOrderFeeVos;
+        }
+        return new ArrayList<>();
 
 
     }
     }
 
 
@@ -1292,11 +1333,10 @@ public class BusRoomBookingOrdersServiceImpl extends ServiceImpl<BusRoomBookingO
         if (order == null) throw new JeecgBootException("订单错误");
         if (order == null) throw new JeecgBootException("订单错误");
         BusBookingRooms bkRoom = bookingRoomsService.getById(order.getBookingRoomId());
         BusBookingRooms bkRoom = bookingRoomsService.getById(order.getBookingRoomId());
         if (bkRoom == null) throw new JeecgBootException("订单房间不存在");
         if (bkRoom == null) throw new JeecgBootException("订单房间不存在");
-        if (settleFee.getPrices() == null || settleFee.getPrices().size() == 0)
-            throw new JeecgBootException("每天价格不能为空");
+        if (CollUtil.isEmpty(settleFee.getPrices()) && (settleFee.getMoney() == null || settleFee.getMoney().equals(new BigDecimal(0)))){
+            return true;
+        }
         if (order.getArrivalTime().getTime() >= dueOutTime.getTime()) throw new JeecgBootException("预离时间不能小于预抵时间");
         if (order.getArrivalTime().getTime() >= dueOutTime.getTime()) throw new JeecgBootException("预离时间不能小于预抵时间");
-        order.setDueOutTime(dueOutTime);
-        roomsLivingOrderService.updateById(order);
         if (settleFee != null && settleFee.getMoney() != null && !settleFee.getMoney().equals(new BigDecimal(0))) {
         if (settleFee != null && settleFee.getMoney() != null && !settleFee.getMoney().equals(new BigDecimal(0))) {
             settleFee.setLivingOrderId(livingOrderId);
             settleFee.setLivingOrderId(livingOrderId);
             settleFee.setFeeType(2);
             settleFee.setFeeType(2);
@@ -1306,18 +1346,44 @@ public class BusRoomBookingOrdersServiceImpl extends ServiceImpl<BusRoomBookingO
             settleFee.setPreferentialStatus(1); // 未结账
             settleFee.setPreferentialStatus(1); // 未结账
             feeService.save(settleFee);
             feeService.save(settleFee);
         }
         }
-        CesRooms room =  roomsService.getById(bkRoom.getRoomId());
-        settleFee.getPrices().forEach(s -> {
-            s.setRoomLayoutId(room.getLayoutId());
-            s.setRoomId(bkRoom.getRoomId());
-            s.setLivingType(1);
-            s.setLivingOrderId(livingOrderId);
-        });
-        livingLayoutDayPriceService.saveBatch(settleFee.getPrices());
+        if(dueOutTime.getTime() >= order.getDueOutTime().getTime()){
+            CesRooms room =  roomsService.getById(bkRoom.getRoomId());
+            settleFee.getPrices().forEach(s -> {
+                s.setRoomLayoutId(room.getLayoutId());
+                s.setRoomId(bkRoom.getRoomId());
+                s.setLivingType(1);
+                s.setLivingOrderId(livingOrderId);
+            });
+            livingLayoutDayPriceService.saveBatch(settleFee.getPrices());
+        }
+        order.setDueOutTime(dueOutTime);
+        roomsLivingOrderService.updateById(order);
         return true;
         return true;
 //        throw new JeecgBootException("设置失败");
 //        throw new JeecgBootException("设置失败");
     }
     }
 
 
+    /**
+     * 判断续租是否跟预约订单冲突
+     */
+    @Override
+    public BookingOrderEditVo roomIdBooked(String livingOrderId, Date newDueOutTime) {
+        BusRoomsLivingOrder order = roomsLivingOrderService.getById(livingOrderId);
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        String arrivalTimeStr = sdf.format(order.getArrivalTime());
+        List<BusRoomBookingOrders> bookingOrdersByRooms = baseMapper.findBookingOrderByRoom(order.getBookingRoomId(), arrivalTimeStr);
+        for (BusRoomBookingOrders bookingOrder: bookingOrdersByRooms) {
+            if (bookingOrder.getArrivalTime().getTime() <= newDueOutTime.getTime()){
+                BusCustomer busCustomer = customerService.getById(bookingOrder.getContactId());
+                BookingOrderEditVo bookingOrderVo = new BookingOrderEditVo();
+                bookingOrderVo.setOrderInfo(bookingOrder);
+                bookingOrderVo.setContactName(busCustomer.getName());
+                bookingOrderVo.setPhone(busCustomer.getPhone());
+                return bookingOrderVo;
+            };
+        }
+        return null;
+    }
+
     @Override
     @Override
     @Transactional(rollbackFor = Exception.class)
     @Transactional(rollbackFor = Exception.class)
     public Boolean settleBillCheckOut(List<BusOrderFee> settleFees, String bookingOrderId) {
     public Boolean settleBillCheckOut(List<BusOrderFee> settleFees, String bookingOrderId) {
@@ -1446,11 +1512,18 @@ public class BusRoomBookingOrdersServiceImpl extends ServiceImpl<BusRoomBookingO
 
 
     @Override
     @Override
     @Transactional(rollbackFor = Exception.class)
     @Transactional(rollbackFor = Exception.class)
-    public Boolean splitLiving(String livingOrderId) {
+    public String splitLiving(String livingOrderId) {
         BusRoomsLivingOrder livingOrder = roomsLivingOrderService.getById(livingOrderId);
         BusRoomsLivingOrder livingOrder = roomsLivingOrderService.getById(livingOrderId);
         if(livingOrder == null) throw new JeecgBootException("订单不存在");
         if(livingOrder == null) throw new JeecgBootException("订单不存在");
         BusBookingRooms bookingRoom = bookingRoomsService.getById(livingOrder.getBookingRoomId());
         BusBookingRooms bookingRoom = bookingRoomsService.getById(livingOrder.getBookingRoomId());
         if(bookingRoom == null) throw new JeecgBootException("订单房间不存在");
         if(bookingRoom == null) throw new JeecgBootException("订单房间不存在");
+        long count = roomsLivingOrderService.count(Wrappers.<BusRoomsLivingOrder>query().eq("booking_order_id", livingOrder.getBookingOrderId()));
+        if (count == 2){
+            UpdateWrapper<BusTeam> uw = new UpdateWrapper<>();
+            uw.eq("booking_order_id", livingOrder.getBookingOrderId());
+            uw.set("is_delete", 1);
+            teamService.update(uw);
+        }
         BusRoomBookingOrders newBookingOrder = copyBookingToAcceptOrder(livingOrder);
         BusRoomBookingOrders newBookingOrder = copyBookingToAcceptOrder(livingOrder);
         newBookingOrder.setHotelId(livingOrder.getHotelId());
         newBookingOrder.setHotelId(livingOrder.getHotelId());
         SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
         SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
@@ -1459,8 +1532,10 @@ public class BusRoomBookingOrdersServiceImpl extends ServiceImpl<BusRoomBookingO
         livingOrder.setBookingOrderId(newBookingOrder.getId());
         livingOrder.setBookingOrderId(newBookingOrder.getId());
         roomsLivingOrderService.updateById(livingOrder);
         roomsLivingOrderService.updateById(livingOrder);
         bookingRoom.setBookingOrdersId(newBookingOrder.getId());
         bookingRoom.setBookingOrdersId(newBookingOrder.getId());
+        bookingRoom.setIsMain(true);
         bookingRoomsService.updateById(bookingRoom);
         bookingRoomsService.updateById(bookingRoom);
-        return true;
+
+        return newBookingOrder.getId();
     }
     }
 
 
     @Override
     @Override
@@ -1501,7 +1576,13 @@ public class BusRoomBookingOrdersServiceImpl extends ServiceImpl<BusRoomBookingO
 
 
     @Override
     @Override
     public IPage<RoomLivingQueryVo> getLivingPageData(Integer status,String keyw, Page<RoomLivingQueryVo> page,String hotelId) {
     public IPage<RoomLivingQueryVo> getLivingPageData(Integer status,String keyw, Page<RoomLivingQueryVo> page,String hotelId) {
-        return baseMapper.getPage(page,status,keyw,hotelId);
+        IPage<RoomLivingQueryVo> RoomLivings = baseMapper.getPage(page, status, keyw, hotelId);
+        RoomLivings.getRecords().stream().forEach(e ->{
+                if (ObjectUtil.isNotEmpty(e.getRelType())){
+                    e.setGroupTag(TeamEnum.val(e.getRelType()).getTitle() + e.getSortIndex());
+                }
+        });
+        return RoomLivings;
     }
     }
     @Override
     @Override
     public IPage<KeLiItemVo> getLivingOrderKL(Integer status,String keyw,String hotelId,String thirdUserId, Page<KeLiItemVo> page) {
     public IPage<KeLiItemVo> getLivingOrderKL(Integer status,String keyw,String hotelId,String thirdUserId, Page<KeLiItemVo> page) {
@@ -1598,10 +1679,12 @@ public class BusRoomBookingOrdersServiceImpl extends ServiceImpl<BusRoomBookingO
 
 
     @Override
     @Override
     @Transactional(rollbackFor = Exception.class)
     @Transactional(rollbackFor = Exception.class)
-    public Boolean mergeOrder(String mergeLivingOrderId, List<String> livingOrderId) {
+    public Boolean mergeOrder(String hotelId, String mainLivingOrderId, List<String> livingOrderId) {
+        BusRoomsLivingOrder mainLivingOrder = roomsLivingOrderService.getById(mainLivingOrderId);
         livingOrderId.forEach(s->{
         livingOrderId.forEach(s->{
-            this.mergeSingle(mergeLivingOrderId,s);
+            this.mergeSingle(mainLivingOrder,s);
         });
         });
+        addBusTeams(hotelId, mainLivingOrder.getBookingOrderId());
         return true;
         return true;
     }
     }
 
 
@@ -1939,40 +2022,47 @@ public class BusRoomBookingOrdersServiceImpl extends ServiceImpl<BusRoomBookingO
         });
         });
         return  true;
         return  true;
     }
     }
-
-    private Boolean mergeSingle(String livingOrderId, String mergeLivingOrderId ) {
+//bookingRooms.getBookingOrdersId()是关联房间号的关联id
+    private Boolean mergeSingle(BusRoomsLivingOrder mainLivingOrder, String mergeLivingOrderId ) {
+        //通过订单id找到订单
         BusRoomsLivingOrder mergeLivingOrder = roomsLivingOrderService.getById(mergeLivingOrderId);
         BusRoomsLivingOrder mergeLivingOrder = roomsLivingOrderService.getById(mergeLivingOrderId);
         if(mergeLivingOrder == null) throw new JeecgBootException("合并的订单不存在");
         if(mergeLivingOrder == null) throw new JeecgBootException("合并的订单不存在");
         if(mergeLivingOrder.getSettleType().equals(SettleTypeEnum.SETTLE_LEAVE.getKey())) throw new JeecgBootException("结账退房的订单无法合并");
         if(mergeLivingOrder.getSettleType().equals(SettleTypeEnum.SETTLE_LEAVE.getKey())) throw new JeecgBootException("结账退房的订单无法合并");
+        //通过订单关联的房间id找到房间B
         BusBookingRooms bookingRooms = bookingRoomsService.getById(mergeLivingOrder.getBookingRoomId());
         BusBookingRooms bookingRooms = bookingRoomsService.getById(mergeLivingOrder.getBookingRoomId());
         List<BusRoomsLivingOrder> needMergeLivingOrders = new ArrayList<>();
         List<BusRoomsLivingOrder> needMergeLivingOrders = new ArrayList<>();
-
-        BusRoomsLivingOrder livingOrder = roomsLivingOrderService.getById(livingOrderId);
+        //主订单
         if(bookingRooms.getIsMain()){
         if(bookingRooms.getIsMain()){
+            //找出房间B所有的关联订单,包括了B房间自己
             List<BusRoomsLivingOrder> relationOtherLivingOrders = roomsLivingOrderService.list(Wrappers.<BusRoomsLivingOrder>query()
             List<BusRoomsLivingOrder> relationOtherLivingOrders = roomsLivingOrderService.list(Wrappers.<BusRoomsLivingOrder>query()
                     .eq("booking_order_id", bookingRooms.getBookingOrdersId()));
                     .eq("booking_order_id", bookingRooms.getBookingOrdersId()));
+            //所有订单的房间id集合
             List<String> bookingRoomIds = relationOtherLivingOrders.stream().map(s->s.getBookingRoomId()).collect(Collectors.toList());
             List<String> bookingRoomIds = relationOtherLivingOrders.stream().map(s->s.getBookingRoomId()).collect(Collectors.toList());
+            //找出B房间所有的关联房间
             List<BusBookingRooms> bookingRoomsList = bookingRoomsService.list(Wrappers.<BusBookingRooms>query().in("id",bookingRoomIds));
             List<BusBookingRooms> bookingRoomsList = bookingRoomsService.list(Wrappers.<BusBookingRooms>query().in("id",bookingRoomIds));
             bookingRoomsList.forEach(s->{
             bookingRoomsList.forEach(s->{
                 s.setIsMain(false);
                 s.setIsMain(false);
-                s.setBookingOrdersId(livingOrder.getBookingOrderId());
+                s.setBookingOrdersId(mainLivingOrder.getBookingOrderId());
             });
             });
+            //将修改后关联标识后的房间存好
             bookingRoomsService.updateBatchById(bookingRoomsList);
             bookingRoomsService.updateBatchById(bookingRoomsList);
             needMergeLivingOrders.addAll(relationOtherLivingOrders);
             needMergeLivingOrders.addAll(relationOtherLivingOrders);
 
 
-            BusBookingRooms mainBkRoom = bookingRoomsService.getOne(Wrappers.<BusBookingRooms>query().eq("booking_orders_id",bookingRooms.getBookingOrdersId()));
-            if(mainBkRoom != null) {
-                mainBkRoom.setIsMain(true);
-                bookingRoomsService.updateById(mainBkRoom); // 设置预约的主房
-            }
+//            BusBookingRooms mainBkRoom = bookingRoomsService.getOne(Wrappers.<BusBookingRooms>query().eq("booking_orders_id",bookingRooms.getBookingOrdersId()));
+//            if(mainBkRoom != null) {
+//                mainBkRoom.setIsMain(true);
+//                bookingRoomsService.updateById(mainBkRoom); // 设置预约的主房
+//            }
         } else {
         } else {
             needMergeLivingOrders.add(mergeLivingOrder);
             needMergeLivingOrders.add(mergeLivingOrder);
         }
         }
+        //所有订单都改成主订单的关联标识id
         needMergeLivingOrders.forEach(s->{
         needMergeLivingOrders.forEach(s->{
             s.setBeforeMergeBookingOrderId(s.getBookingOrderId());
             s.setBeforeMergeBookingOrderId(s.getBookingOrderId());
-            s.setBookingOrderId(livingOrder.getBookingOrderId());
+            s.setBookingOrderId(mainLivingOrder.getBookingOrderId());
         });
         });
         roomsLivingOrderService.updateBatchById(needMergeLivingOrders);
         roomsLivingOrderService.updateBatchById(needMergeLivingOrders);
+
         return true;
         return true;
     }
     }
     @Override
     @Override
@@ -2123,7 +2213,7 @@ public class BusRoomBookingOrdersServiceImpl extends ServiceImpl<BusRoomBookingO
 //        if(user == null) throw new JeecgBootException("请登录");
 //        if(user == null) throw new JeecgBootException("请登录");
         if(hotelId == null) throw  new JeecgBootException("未找到酒店");
         if(hotelId == null) throw  new JeecgBootException("未找到酒店");
         BusOrderFee preferFeeItem = null;
         BusOrderFee preferFeeItem = null;
-        if(settleFees.stream().anyMatch(s->s.getIsPreferential().equals(true))){
+        if(settleFees.stream().anyMatch(s-> BooleanUtil.isTrue(s.getIsPreferential()))){
             preferFeeItem = settleFees.stream().filter(s->s.getIsPreferential().equals(true)).findFirst().get();
             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.getMoney()==null || preferFeeItem.getMoney().compareTo(BigDecimal.valueOf(0)) <= 0) throw new JeecgBootException("优惠价不能小于或等于0");
             if(preferFeeItem.getCouponscashId() != null && !preferFeeItem.getCouponscashId().isEmpty()) {
             if(preferFeeItem.getCouponscashId() != null && !preferFeeItem.getCouponscashId().isEmpty()) {
@@ -2151,7 +2241,7 @@ public class BusRoomBookingOrdersServiceImpl extends ServiceImpl<BusRoomBookingO
         }
         }
         List<BusRoomPayType> payTypes = payTypeService.list();
         List<BusRoomPayType> payTypes = payTypeService.list();
         settleFees.forEach(s->{
         settleFees.forEach(s->{
-            if(s.getIsPreferential().equals(true)) return;
+            if(BooleanUtil.isTrue(s.getIsPreferential())) return;
 
 
             String payTypeId = s.getPayType();
             String payTypeId = s.getPayType();
             if(payTypeId != null && !payTypeId.isEmpty()) {
             if(payTypeId != null && !payTypeId.isEmpty()) {
@@ -2567,7 +2657,6 @@ public class BusRoomBookingOrdersServiceImpl extends ServiceImpl<BusRoomBookingO
             s.setLivingOrderId(livingOrderId);
             s.setLivingOrderId(livingOrderId);
         });
         });
         livingLayoutDayPriceService.saveBatch(prices);
         livingLayoutDayPriceService.saveBatch(prices);
-
         return true;
         return true;
     }
     }
 
 
@@ -2635,4 +2724,33 @@ public class BusRoomBookingOrdersServiceImpl extends ServiceImpl<BusRoomBookingO
         return true;
         return true;
     }
     }
 
 
+//    @Override
+//    public Long count(String bookingOrderId,String hotelId) {
+//        QueryWrapper<BusRoomsLivingOrder> qw = new QueryWrapper<>();
+//        qw.eq("hotel_id", hotelId);
+//        qw.eq("booking_order_id", bookingOrderId);
+//        long count = roomsLivingOrderService.count(qw);
+//        return count;
+//    }
+
+    @Override
+    public Boolean canOnlyPaySelf(String bookingOrderId, String hotelId, String roomId) {
+        QueryWrapper<BusRoomsLivingOrder> qw = new QueryWrapper<>();
+        qw.eq("hotel_id", hotelId);
+        qw.eq("booking_order_id", bookingOrderId);
+        long count = roomsLivingOrderService.count(qw);
+        BusBookingRooms bookingRooms = bookingRoomsService.getOne(Wrappers.<BusBookingRooms>query().eq("booking_orders_id", bookingOrderId).eq("room_id", roomId));
+        if (count>1 && !bookingRooms.getIsMain()){
+            return true;
+        }
+        return false;
+    }
+
+    @Override
+    public Boolean payPortionFee(List<String> feeIds) {
+        boolean isUpdate = feeService.update(Wrappers.<BusOrderFee>update().set("preferential_status", 2).in("id", feeIds));
+        return isUpdate;
+    }
+
+
 }
 }

+ 23 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/vo/BusOrderFeeGoodsVo.java

@@ -0,0 +1,23 @@
+package org.jeecg.modules.business.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.jeecg.modules.business.entity.BusOrderFeeGoods;
+
+import java.math.BigDecimal;
+
+/**
+ * @author xuzhijie
+ * @description
+ * @data 2023/8/3 18:12
+ */
+
+@Data
+public class BusOrderFeeGoodsVo extends BusOrderFeeGoods {
+
+    @ApiModelProperty(value = "商品名称")
+    private String name;
+
+    @ApiModelProperty(value = "原价")
+    private BigDecimal originalPrice;
+}

+ 25 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/vo/BusOrderFeeVo.java

@@ -0,0 +1,25 @@
+package org.jeecg.modules.business.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.jeecg.modules.business.entity.BusOrderFee;
+import org.jeecg.modules.business.entity.BusOrderFeeGoods;
+
+import java.util.List;
+
+/**
+ * @author xuzhijie
+ * @description
+ * @data 2023/8/4 9:34
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class BusOrderFeeVo extends BusOrderFee {
+
+    @ApiModelProperty(value = "关联商品信息")
+    private List<BusOrderFeeGoodsVo> feeGoodVos;
+}

+ 3 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/vo/RoomLivingQueryVo.java

@@ -16,4 +16,7 @@ public class RoomLivingQueryVo {
     private BigDecimal sk;
     private BigDecimal sk;
     private Integer feeType;
     private Integer feeType;
     private String roomId;
     private String roomId;
+    private Integer relType;
+    private Integer sortIndex;
+    private String groupTag;
 }
 }

+ 3 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/fw/controller/FwRoomExamineController.java

@@ -106,9 +106,12 @@ public class FwRoomExamineController extends JeecgController<FwRoomExamine, IFwR
 				}
 				}
 				BusRoomsLivingOrder busRoomsLivingOrder = busRoomsLivingOrderService.getById(t.getLivingOrderId());
 				BusRoomsLivingOrder busRoomsLivingOrder = busRoomsLivingOrderService.getById(t.getLivingOrderId());
 				if (busRoomsLivingOrder != null) {
 				if (busRoomsLivingOrder != null) {
+					t.setArriveTime(busRoomsLivingOrder.getArrivalTime());
+					t.setDueOutTime(busRoomsLivingOrder.getDueOutTime());
 					BusCustomer busCustomer = busCustomerService.getById(busRoomsLivingOrder.getContactId());
 					BusCustomer busCustomer = busCustomerService.getById(busRoomsLivingOrder.getContactId());
 					if (busCustomer != null) {
 					if (busCustomer != null) {
 						t.setContactName(busCustomer.getName());
 						t.setContactName(busCustomer.getName());
+						t.setContactPhone(busCustomer.getPhone());
 					}
 					}
 				}
 				}
 				BusWaiter busWaiter=busWaiterService.getById(t.getWaiterId());
 				BusWaiter busWaiter=busWaiterService.getById(t.getWaiterId());

+ 12 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/fw/entity/FwRoomExamine.java

@@ -106,6 +106,18 @@ public class FwRoomExamine implements Serializable {
     @TableField(exist = false)
     @TableField(exist = false)
     private String contactName;
     private String contactName;
 
 
+    @ApiModelProperty(value = "客人电话")
+    @TableField(exist = false)
+    private String contactPhone;
+
+    @ApiModelProperty(value = "客人到达时间")
+    @TableField(exist = false)
+    private Date arriveTime;
+
+    @ApiModelProperty(value = "客人预离时间")
+    @TableField(exist = false)
+    private Date dueOutTime;
+
     @ApiModelProperty(value = "房间状态")
     @ApiModelProperty(value = "房间状态")
     @TableField(exist = false)
     @TableField(exist = false)
     private String roomStatus;
     private String roomStatus;

+ 2 - 2
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/Enum/RoomStatusEnum.java

@@ -13,8 +13,8 @@ public enum RoomStatusEnum {
     LIVE_CLEAR(3,"住净"),
     LIVE_CLEAR(3,"住净"),
     LIVE_DIRTY(4,"住脏"),
     LIVE_DIRTY(4,"住脏"),
     IN_SERVICE(5,"维修"),
     IN_SERVICE(5,"维修"),
-    ON_LOCK(6,"锁房");
-
+    ON_LOCK(6,"锁房"),
+    RESERVE(7,"预定");
 
 
     Integer key;
     Integer key;
 
 

+ 7 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/Vo/CesHousePriceSchemeVo.java

@@ -1,7 +1,11 @@
 package org.jeecg.modules.rooms.Vo;
 package org.jeecg.modules.rooms.Vo;
 
 
 import lombok.Data;
 import lombok.Data;
+import org.jeecg.modules.business.entity.BusHousePriceSchemeLayout;
 import org.jeecg.modules.rooms.entity.CesHousePriceScheme;
 import org.jeecg.modules.rooms.entity.CesHousePriceScheme;
+import org.jeecg.modules.rooms.entity.CesRoomLayout;
+
+import java.util.List;
 
 
 
 
 /**
 /**
@@ -19,4 +23,7 @@ public class CesHousePriceSchemeVo extends CesHousePriceScheme {
     private String checkInTimeText;
     private String checkInTimeText;
 
 
     private String validTimeText;
     private String validTimeText;
+
+    private List<BusHousePriceSchemeLayout> housePriceSchemeLayoutList;
+
 }
 }

+ 6 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/controller/CesHousePriceSchemeController.java

@@ -68,6 +68,12 @@ public class CesHousePriceSchemeController extends JeecgController<CesHousePrice
     }
     }
 
 
     @ApiOperation(value="房价方案查询", notes="房价方案查询")
     @ApiOperation(value="房价方案查询", notes="房价方案查询")
+    @GetMapping(value = "/listEnum")
+    public Result listEnum(CesHousePriceSchemeSearchDto dto){
+        return cesHousePriceSchemeService.listEnum(dto);
+    }
+
+    @ApiOperation(value="房价方案查询", notes="房价方案查询")
     @GetMapping(value = "/listByLayout")
     @GetMapping(value = "/listByLayout")
     public Result listByLayout(CesHousePriceSchemeSearchDto dto){
     public Result listByLayout(CesHousePriceSchemeSearchDto dto){
         if (ObjectUtils.isEmpty(dto)){
         if (ObjectUtils.isEmpty(dto)){

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

@@ -6,6 +6,7 @@ import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.EnumUtil;
 import cn.hutool.core.util.EnumUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -145,7 +146,7 @@ public class CesRoomsController {
             });
             });
             List<FwRoomLock> unLockeds = fwRoomLockService.list(Wrappers.<FwRoomLock>query().eq("hotel_id",hotelId));
             List<FwRoomLock> unLockeds = fwRoomLockService.list(Wrappers.<FwRoomLock>query().eq("hotel_id",hotelId));
             List<FwRoomRepair> unRepairs = fwRoomRepairService.list(Wrappers.<FwRoomRepair>query().eq("hotel_id",hotelId).eq("status",1));
             List<FwRoomRepair> unRepairs = fwRoomRepairService.list(Wrappers.<FwRoomRepair>query().eq("hotel_id",hotelId).eq("status",1));
-            List<BusTeam> teamOrders_all =bookingOrderIds.size() >0? teamService.list(Wrappers.<BusTeam>query().in("booking_order_id",bookingOrderIds)):new ArrayList<>();
+            List<BusTeam> teamOrders_all =bookingOrderIds.size() >0? teamService.list(Wrappers.<BusTeam>query().in("booking_order_id",bookingOrderIds).eq("is_delete", 0)):new ArrayList<>();
 //            List<BusTeam> teamOrders = teamOrders_all.stream().filter(sb->sb.getRelType().equals(1)).collect(Collectors.toList());
 //            List<BusTeam> teamOrders = teamOrders_all.stream().filter(sb->sb.getRelType().equals(1)).collect(Collectors.toList());
 //            List<BusTeam> relOrders = teamOrders_all.stream().filter(sb->sb.getRelType().equals(2)).collect(Collectors.toList());
 //            List<BusTeam> relOrders = teamOrders_all.stream().filter(sb->sb.getRelType().equals(2)).collect(Collectors.toList());
             floors.forEach(s-> {
             floors.forEach(s-> {
@@ -268,11 +269,14 @@ public class CesRoomsController {
                     colorStr = "#801234";
                     colorStr = "#801234";
                     break;
                     break;
                 case "5":
                 case "5":
-                    colorStr = "#defabc";
+                    colorStr = "#71935b";
                     break;
                     break;
                 case "6":
                 case "6":
                     colorStr = "#CDCDCD";
                     colorStr = "#CDCDCD";
                     break;
                     break;
+                case "7":
+                    colorStr = "#DE9751FF";
+                    break;
                 default: colorStr = "#CCCCCC";
                 default: colorStr = "#CCCCCC";
 
 
             }
             }
@@ -454,6 +458,13 @@ public class CesRoomsController {
         return Result.OK("房间置脏成功!");
         return Result.OK("房间置脏成功!");
     }
     }
 
 
+    @AutoLog(value = "房间状态置预约")
+    @ApiOperation(value="房间状态置预约", notes="房间状态置预约")
+    @GetMapping(value = "/changeStateReserve")
+    public Result changeStateReserve() {
+        return Result.ok(roomsService.getReserveRoom());
+    }
+
     @ApiOperation(value = "房间统计", notes = "房间统计")
     @ApiOperation(value = "房间统计", notes = "房间统计")
     @GetMapping(value = "/roomSummary")
     @GetMapping(value = "/roomSummary")
     public Result getRoomSummary(@RequestParam String hotelId) {
     public Result getRoomSummary(@RequestParam String hotelId) {

+ 4 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/mapper/CesHousePriceSchemeMapper.java

@@ -1,7 +1,9 @@
 package org.jeecg.modules.rooms.mapper;
 package org.jeecg.modules.rooms.mapper;
 
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.jeecg.modules.business.entity.BusHousePriceSchemeLayout;
 import org.jeecg.modules.rooms.Vo.AlreadyUseLayoutNumberVo;
 import org.jeecg.modules.rooms.Vo.AlreadyUseLayoutNumberVo;
+import org.jeecg.modules.rooms.Vo.CesHousePriceSchemeVo;
 import org.jeecg.modules.rooms.Vo.CesHousePriceSchemesVo;
 import org.jeecg.modules.rooms.Vo.CesHousePriceSchemesVo;
 import org.jeecg.modules.rooms.entity.CesHousePriceScheme;
 import org.jeecg.modules.rooms.entity.CesHousePriceScheme;
 
 
@@ -18,4 +20,6 @@ import java.util.List;
  */
  */
 public interface CesHousePriceSchemeMapper extends BaseMapper<CesHousePriceScheme> {
 public interface CesHousePriceSchemeMapper extends BaseMapper<CesHousePriceScheme> {
     List<CesHousePriceSchemesVo> getEffectiveSchemes(String hotelId, String layoutId);
     List<CesHousePriceSchemesVo> getEffectiveSchemes(String hotelId, String layoutId);
+
+    List<BusHousePriceSchemeLayout> queryLayoutBySchemeId(List<String> ids);
 }
 }

+ 8 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/mapper/CesRoomsMapper.java

@@ -11,6 +11,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
 
 import java.util.Date;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.HashMap;
+import java.util.LinkedList;
 import java.util.List;
 import java.util.List;
 
 
 /**
 /**
@@ -64,4 +65,11 @@ public interface CesRoomsMapper extends BaseMapper<CesRooms> {
             "<if test='hotelId != null and hotelId !=\"\"'> and hotel_id = #{hotelId} </if>"+
             "<if test='hotelId != null and hotelId !=\"\"'> and hotel_id = #{hotelId} </if>"+
             "group by room_status</script>")
             "group by room_status</script>")
     public List<LivingSourceStatVo> roomLiveStat(@Param("hotelId") String hotelId);
     public List<LivingSourceStatVo> roomLiveStat(@Param("hotelId") String hotelId);
+
+
+    @Select("SELECT cr.* from bus_room_booking_orders brbo\n" +
+            "inner join bus_booking_rooms bbr on brbo.id = bbr.booking_orders_id\n" +
+            "inner join ces_rooms cr on bbr.room_id = cr.id\n" +
+            "where brbo.arrival_time > #{nowTime}")
+    List<CesRooms> getReserveRoom(@Param("nowTime") String nowTime);
 }
 }

+ 13 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/mapper/xml/CesHousePriceSchemeMapper.xml

@@ -16,4 +16,17 @@
             AND (scheme.valid_time = 0 OR now() BETWEEN scheme.valid_start_time AND scheme.valid_end_time )
             AND (scheme.valid_time = 0 OR now() BETWEEN scheme.valid_start_time AND scheme.valid_end_time )
         ORDER BY scheme.sort
         ORDER BY scheme.sort
     </select>
     </select>
+
+    <select id="queryLayoutBySchemeId" resultType="org.jeecg.modules.business.entity.BusHousePriceSchemeLayout">
+
+        select bhpsli.*,crl.market_price as layout_price,
+        crl.name as layout_name
+        from bus_house_price_scheme_layout_info bhpsli
+        left join ces_room_layout crl on crl.id = bhpsli.layout_id
+        where bhpsli.scheme_id in
+         <foreach item="item" collection="ids" open="(" separator="," close=")">
+             #{item}
+        </foreach>
+
+    </select>
 </mapper>
 </mapper>

+ 18 - 3
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/service/CesHousePriceSchemeServiceImpl.java

@@ -3,6 +3,7 @@ package org.jeecg.modules.rooms.service;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.bean.copier.CopyOptions;
 import cn.hutool.core.bean.copier.CopyOptions;
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -21,13 +22,11 @@ import org.jeecg.modules.business.enums.CustomerTypeEnum;
 import org.jeecg.modules.business.service.IBusHousePriceSchemeLayoutService;
 import org.jeecg.modules.business.service.IBusHousePriceSchemeLayoutService;
 import org.jeecg.modules.rooms.DTO.CesHousePriceSchemeDto;
 import org.jeecg.modules.rooms.DTO.CesHousePriceSchemeDto;
 import org.jeecg.modules.rooms.DTO.CesHousePriceSchemeSearchDto;
 import org.jeecg.modules.rooms.DTO.CesHousePriceSchemeSearchDto;
-import org.jeecg.modules.rooms.DTO.CesRoomLayoutDto;
 import org.jeecg.modules.rooms.Vo.CesHousePriceSchemeVo;
 import org.jeecg.modules.rooms.Vo.CesHousePriceSchemeVo;
 import org.jeecg.modules.rooms.Vo.CesHousePriceSchemesVo;
 import org.jeecg.modules.rooms.Vo.CesHousePriceSchemesVo;
 import org.jeecg.modules.rooms.entity.*;
 import org.jeecg.modules.rooms.entity.*;
 import org.jeecg.modules.rooms.mapper.CesHousePriceSchemeMapper;
 import org.jeecg.modules.rooms.mapper.CesHousePriceSchemeMapper;
 import org.jeecg.modules.rooms.mapper.CesRoomLayoutMapper;
 import org.jeecg.modules.rooms.mapper.CesRoomLayoutMapper;
-import org.jeecg.modules.system.entity.SysTenant;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
@@ -108,6 +107,23 @@ public class CesHousePriceSchemeServiceImpl extends ServiceImpl<CesHousePriceSch
         return Result.OK(map);
         return Result.OK(map);
     }
     }
 
 
+    public Result listEnum(CesHousePriceSchemeSearchDto dto) {
+        QueryWrapper<CesHousePriceScheme> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq(CesHousePriceScheme.HOTEL_ID,dto.getHotelId());
+        queryWrapper.eq(CesHousePriceScheme.INVALID,false);
+        queryWrapper.orderByAsc(CesHousePriceScheme.SORT);
+        List<CesHousePriceScheme> cesHousePriceSchemes = cesHousePriceSchemeMapper.selectList(queryWrapper);
+        List<String> idList = cesHousePriceSchemes.stream().map(CesHousePriceScheme :: getId).collect(Collectors.toList());
+        List<BusHousePriceSchemeLayout> priceSchemeLayouts = cesHousePriceSchemeMapper.queryLayoutBySchemeId(idList);
+        List<CesHousePriceSchemeVo> cesHousePriceSchemeVoList= BeanUtil.copyToList(cesHousePriceSchemes, CesHousePriceSchemeVo.class);
+        cesHousePriceSchemeVoList.stream().forEach(scheme -> {
+            List<BusHousePriceSchemeLayout> collect = priceSchemeLayouts.stream().
+                    filter(schemeLayout -> StrUtil.equals(scheme.getId(), schemeLayout.getSchemeId())).collect(Collectors.toList());
+            scheme.setHousePriceSchemeLayoutList(collect);
+        });
+        return Result.ok(cesHousePriceSchemeVoList);
+    }
+
     public Result listByLayout(CesHousePriceSchemeSearchDto dto) {
     public Result listByLayout(CesHousePriceSchemeSearchDto dto) {
         List<CesHousePriceSchemesVo> records = cesHousePriceSchemeMapper.getEffectiveSchemes(dto.getHotelId(),dto.getLayoutId());
         List<CesHousePriceSchemesVo> records = cesHousePriceSchemeMapper.getEffectiveSchemes(dto.getHotelId(),dto.getLayoutId());
         Map<String,Object> map = new HashedMap();
         Map<String,Object> map = new HashedMap();
@@ -175,7 +191,6 @@ public class CesHousePriceSchemeServiceImpl extends ServiceImpl<CesHousePriceSch
         queryWrapper.eq(CesHousePriceScheme.INVALID, false);
         queryWrapper.eq(CesHousePriceScheme.INVALID, false);
         CesHousePriceScheme model = cesHousePriceSchemeMapper.selectOne(queryWrapper);
         CesHousePriceScheme model = cesHousePriceSchemeMapper.selectOne(queryWrapper);
         if(ObjectUtils.isEmpty(model)) return Result.error("房价方案数据未找到!");
         if(ObjectUtils.isEmpty(model)) return Result.error("房价方案数据未找到!");
-
         //忽略空值 不然会覆盖
         //忽略空值 不然会覆盖
         BeanUtil.copyProperties(dto,model, CopyOptions.create().setIgnoreNullValue(true).setIgnoreError(true));
         BeanUtil.copyProperties(dto,model, CopyOptions.create().setIgnoreNullValue(true).setIgnoreError(true));
         model.setUpdateAt(LocalDateTime.now());
         model.setUpdateAt(LocalDateTime.now());

+ 17 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/service/CesRoomsServiceImpl.java

@@ -15,6 +15,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
 import org.apache.commons.collections.map.HashedMap;
 import org.apache.commons.collections.map.HashedMap;
 import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -39,7 +40,9 @@ import org.springframework.stereotype.Service;
 import javax.annotation.Resource;
 import javax.annotation.Resource;
 import javax.transaction.Transactional;
 import javax.transaction.Transactional;
 import java.math.BigDecimal;
 import java.math.BigDecimal;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
@@ -416,4 +419,18 @@ public class CesRoomsServiceImpl extends ServiceImpl<CesRoomsMapper, CesRooms> i
         return  layout.getMarketPrice();
         return  layout.getMarketPrice();
 
 
     }
     }
+
+    public Boolean getReserveRoom() {
+        String nowTimeStr = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now());
+        List<CesRooms> CesRoomList = roomsMapper.getReserveRoom(nowTimeStr);
+        ArrayList<CesRooms> newCesRooms = new ArrayList<>();
+        for (CesRooms cesRoom : CesRoomList){
+            if (cesRoom.getRoomStatus() < 3){
+                cesRoom.setLastRoomStatus(cesRoom.getRoomStatus());
+                cesRoom.setRoomStatus(7);
+                newCesRooms.add(cesRoom);
+            }
+        }
+        return updateBatchById(newCesRooms);
+    }
 }
 }

+ 7 - 2
pom.xml

@@ -33,7 +33,7 @@
 		<ojdbc6.version>11.2.0.3</ojdbc6.version>
 		<ojdbc6.version>11.2.0.3</ojdbc6.version>
 		<sqljdbc4.version>4.0</sqljdbc4.version>
 		<sqljdbc4.version>4.0</sqljdbc4.version>
 		<mysql-connector-java.version>8.0.27</mysql-connector-java.version>
 		<mysql-connector-java.version>8.0.27</mysql-connector-java.version>
-		<hutool.version>5.3.8</hutool.version>
+		<hutool.version>5.7.17</hutool.version>
 
 
 		<!-- 持久层 -->
 		<!-- 持久层 -->
 		<mybatis-plus.version>3.5.1</mybatis-plus.version>
 		<mybatis-plus.version>3.5.1</mybatis-plus.version>
@@ -61,7 +61,7 @@
 		<logback.version>1.2.9</logback.version>
 		<logback.version>1.2.9</logback.version>
 		<ttl.version>2.11.4</ttl.version>
 		<ttl.version>2.11.4</ttl.version>
 		<weixin-java.version>4.0.0</weixin-java.version>
 		<weixin-java.version>4.0.0</weixin-java.version>
-		<hutool.version>5.4.2</hutool.version>
+		<hutool.version>5.7.17</hutool.version>
 	</properties>
 	</properties>
 
 
 	<modules>
 	<modules>
@@ -370,6 +370,11 @@
 				<artifactId>hutool-all</artifactId>
 				<artifactId>hutool-all</artifactId>
 				<version>${hutool.version}</version>
 				<version>${hutool.version}</version>
 			</dependency>
 			</dependency>
+			<dependency>
+				<groupId>cn.hutool</groupId>
+				<artifactId>hutool-core</artifactId>
+				<version>${hutool.version}</version>
+			</dependency>
 		</dependencies>
 		</dependencies>
 	</dependencyManagement>
 	</dependencyManagement>