qh лет назад: 2
Родитель
Сommit
63eb6045ca
34 измененных файлов с 1629 добавлено и 3 удалено
  1. 178 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/BusBookingBatchController.java
  2. 178 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/BusBookingRoomsController.java
  3. 179 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/BusRoomBookingOrdersController.java
  4. 13 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/dto/BookingBatchRoomsDto.java
  5. 19 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/dto/BookingOrderSaveDto.java
  6. 63 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/BusBookingBatch.java
  7. 55 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/BusBookingRooms.java
  8. 190 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/BusRoomBookingOrders.java
  9. 56 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/enums/BookingOrdersType.java
  10. 58 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/enums/CheckInTypeEnum.java
  11. 55 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/enums/CustomerTypeEnum.java
  12. 17 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/BusBookingBatchMapper.java
  13. 17 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/BusBookingRoomsMapper.java
  14. 17 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/BusRoomBookingOrdersMapper.java
  15. 5 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/BusBookingBatchMapper.xml
  16. 5 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/BusBookingRoomsMapper.xml
  17. 5 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/BusRoomBookingOrdersMapper.xml
  18. 14 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/IBusBookingBatchService.java
  19. 14 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/IBusBookingRoomsService.java
  20. 16 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/IBusRoomBookingOrdersService.java
  21. 19 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/BusBookingBatchServiceImpl.java
  22. 19 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/BusBookingRoomsServiceImpl.java
  23. 162 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/BusRoomBookingOrdersServiceImpl.java
  24. 13 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/DTO/CanUseRequestParamDto.java
  25. 11 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/DTO/HotelRoomsDto.java
  26. 59 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/Enum/RoomStatusEnum.java
  27. 15 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/Vo/CanUseBuildingRoomsVo.java
  28. 12 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/Vo/CanUseResultVo.java
  29. 12 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/Vo/FloorBuildingRoomVo.java
  30. 15 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/Vo/FloorWithBuildingVo.java
  31. 63 2
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/controller/CesRoomsController.java
  32. 17 1
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/mapper/CesRoomBuildingFloorMapper.java
  33. 10 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/service/CesRoomBuildingFloorServiceImpl.java
  34. 48 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/service/CesRoomsServiceImpl.java

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

@@ -0,0 +1,178 @@
+package org.jeecg.modules.business.controller;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.business.entity.BusBookingBatch;
+import org.jeecg.modules.business.service.IBusBookingBatchService;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.servlet.ModelAndView;
+import com.alibaba.fastjson.JSON;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+
+ /**
+ * @Description: 团队预定批次
+ * @Author: jeecg-boot
+ * @Date:   2023-03-25
+ * @Version: V1.0
+ */
+@Api(tags="团队预定批次")
+@RestController
+@RequestMapping("/business/busBookingBatch")
+@Slf4j
+public class BusBookingBatchController extends JeecgController<BusBookingBatch, IBusBookingBatchService> {
+	@Autowired
+	private IBusBookingBatchService busBookingBatchService;
+	
+	/**
+	 * 分页列表查询
+	 *
+	 * @param busBookingBatch
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	//@AutoLog(value = "团队预定批次-分页列表查询")
+	@ApiOperation(value="团队预定批次-分页列表查询", notes="团队预定批次-分页列表查询")
+	@GetMapping(value = "/list")
+	public Result<IPage<BusBookingBatch>> queryPageList(BusBookingBatch busBookingBatch,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) {
+		QueryWrapper<BusBookingBatch> queryWrapper = QueryGenerator.initQueryWrapper(busBookingBatch, req.getParameterMap());
+		Page<BusBookingBatch> page = new Page<BusBookingBatch>(pageNo, pageSize);
+		IPage<BusBookingBatch> pageList = busBookingBatchService.page(page, queryWrapper);
+		return Result.OK(pageList);
+	}
+	
+	/**
+	 *   添加
+	 *
+	 * @param busBookingBatch
+	 * @return
+	 */
+	@AutoLog(value = "团队预定批次-添加")
+	@ApiOperation(value="团队预定批次-添加", notes="团队预定批次-添加")
+	//@RequiresPermissions("business:bus_booking_batch_info:add")
+	@PostMapping(value = "/add")
+	public Result<String> add(@RequestBody BusBookingBatch busBookingBatch) {
+		busBookingBatchService.save(busBookingBatch);
+		return Result.OK("添加成功!");
+	}
+	
+	/**
+	 *  编辑
+	 *
+	 * @param busBookingBatch
+	 * @return
+	 */
+	@AutoLog(value = "团队预定批次-编辑")
+	@ApiOperation(value="团队预定批次-编辑", notes="团队预定批次-编辑")
+	//@RequiresPermissions("business:bus_booking_batch_info:edit")
+	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+	public Result<String> edit(@RequestBody BusBookingBatch busBookingBatch) {
+		busBookingBatchService.updateById(busBookingBatch);
+		return Result.OK("编辑成功!");
+	}
+	
+	/**
+	 *   通过id删除
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "团队预定批次-通过id删除")
+	@ApiOperation(value="团队预定批次-通过id删除", notes="团队预定批次-通过id删除")
+	//@RequiresPermissions("business:bus_booking_batch_info:delete")
+	@DeleteMapping(value = "/delete")
+	public Result<String> delete(@RequestParam(name="id",required=true) String id) {
+		busBookingBatchService.removeById(id);
+		return Result.OK("删除成功!");
+	}
+	
+	/**
+	 *  批量删除
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "团队预定批次-批量删除")
+	@ApiOperation(value="团队预定批次-批量删除", notes="团队预定批次-批量删除")
+	//@RequiresPermissions("business:bus_booking_batch_info:deleteBatch")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		this.busBookingBatchService.removeByIds(Arrays.asList(ids.split(",")));
+		return Result.OK("批量删除成功!");
+	}
+	
+	/**
+	 * 通过id查询
+	 *
+	 * @param id
+	 * @return
+	 */
+	//@AutoLog(value = "团队预定批次-通过id查询")
+	@ApiOperation(value="团队预定批次-通过id查询", notes="团队预定批次-通过id查询")
+	@GetMapping(value = "/queryById")
+	public Result<BusBookingBatch> queryById(@RequestParam(name="id",required=true) String id) {
+		BusBookingBatch busBookingBatch = busBookingBatchService.getById(id);
+		if(busBookingBatch==null) {
+			return Result.error("未找到对应数据");
+		}
+		return Result.OK(busBookingBatch);
+	}
+
+    /**
+    * 导出excel
+    *
+    * @param request
+    * @param busBookingBatch
+    */
+    //@RequiresPermissions("business:bus_booking_batch_info:exportXls")
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, BusBookingBatch busBookingBatch) {
+        return super.exportXls(request, busBookingBatch, BusBookingBatch.class, "团队预定批次");
+    }
+
+    /**
+      * 通过excel导入数据
+    *
+    * @param request
+    * @param response
+    * @return
+    */
+    //@RequiresPermissions("business:bus_booking_batch_info:importExcel")
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, BusBookingBatch.class);
+    }
+
+}

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

@@ -0,0 +1,178 @@
+package org.jeecg.modules.business.controller;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.business.entity.BusBookingRooms;
+import org.jeecg.modules.business.service.IBusBookingRoomsService;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.servlet.ModelAndView;
+import com.alibaba.fastjson.JSON;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+
+ /**
+ * @Description: 预定订单关联房间
+ * @Author: jeecg-boot
+ * @Date:   2023-03-25
+ * @Version: V1.0
+ */
+@Api(tags="预定订单关联房间")
+@RestController
+@RequestMapping("/business/busBookingRooms")
+@Slf4j
+public class BusBookingRoomsController extends JeecgController<BusBookingRooms, IBusBookingRoomsService> {
+	@Autowired
+	private IBusBookingRoomsService busBookingRoomsService;
+	
+	/**
+	 * 分页列表查询
+	 *
+	 * @param busBookingRooms
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	//@AutoLog(value = "预定订单关联房间-分页列表查询")
+	@ApiOperation(value="预定订单关联房间-分页列表查询", notes="预定订单关联房间-分页列表查询")
+	@GetMapping(value = "/list")
+	public Result<IPage<BusBookingRooms>> queryPageList(BusBookingRooms busBookingRooms,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) {
+		QueryWrapper<BusBookingRooms> queryWrapper = QueryGenerator.initQueryWrapper(busBookingRooms, req.getParameterMap());
+		Page<BusBookingRooms> page = new Page<BusBookingRooms>(pageNo, pageSize);
+		IPage<BusBookingRooms> pageList = busBookingRoomsService.page(page, queryWrapper);
+		return Result.OK(pageList);
+	}
+	
+	/**
+	 *   添加
+	 *
+	 * @param busBookingRooms
+	 * @return
+	 */
+	@AutoLog(value = "预定订单关联房间-添加")
+	@ApiOperation(value="预定订单关联房间-添加", notes="预定订单关联房间-添加")
+	//@RequiresPermissions("business:bus_booking_rooms:add")
+	@PostMapping(value = "/add")
+	public Result<String> add(@RequestBody BusBookingRooms busBookingRooms) {
+		busBookingRoomsService.save(busBookingRooms);
+		return Result.OK("添加成功!");
+	}
+	
+	/**
+	 *  编辑
+	 *
+	 * @param busBookingRooms
+	 * @return
+	 */
+	@AutoLog(value = "预定订单关联房间-编辑")
+	@ApiOperation(value="预定订单关联房间-编辑", notes="预定订单关联房间-编辑")
+	//@RequiresPermissions("business:bus_booking_rooms:edit")
+	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+	public Result<String> edit(@RequestBody BusBookingRooms busBookingRooms) {
+		busBookingRoomsService.updateById(busBookingRooms);
+		return Result.OK("编辑成功!");
+	}
+	
+	/**
+	 *   通过id删除
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "预定订单关联房间-通过id删除")
+	@ApiOperation(value="预定订单关联房间-通过id删除", notes="预定订单关联房间-通过id删除")
+	//@RequiresPermissions("business:bus_booking_rooms:delete")
+	@DeleteMapping(value = "/delete")
+	public Result<String> delete(@RequestParam(name="id",required=true) String id) {
+		busBookingRoomsService.removeById(id);
+		return Result.OK("删除成功!");
+	}
+	
+	/**
+	 *  批量删除
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "预定订单关联房间-批量删除")
+	@ApiOperation(value="预定订单关联房间-批量删除", notes="预定订单关联房间-批量删除")
+	//@RequiresPermissions("business:bus_booking_rooms:deleteBatch")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		this.busBookingRoomsService.removeByIds(Arrays.asList(ids.split(",")));
+		return Result.OK("批量删除成功!");
+	}
+	
+	/**
+	 * 通过id查询
+	 *
+	 * @param id
+	 * @return
+	 */
+	//@AutoLog(value = "预定订单关联房间-通过id查询")
+	@ApiOperation(value="预定订单关联房间-通过id查询", notes="预定订单关联房间-通过id查询")
+	@GetMapping(value = "/queryById")
+	public Result<BusBookingRooms> queryById(@RequestParam(name="id",required=true) String id) {
+		BusBookingRooms busBookingRooms = busBookingRoomsService.getById(id);
+		if(busBookingRooms==null) {
+			return Result.error("未找到对应数据");
+		}
+		return Result.OK(busBookingRooms);
+	}
+
+    /**
+    * 导出excel
+    *
+    * @param request
+    * @param busBookingRooms
+    */
+    //@RequiresPermissions("business:bus_booking_rooms:exportXls")
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, BusBookingRooms busBookingRooms) {
+        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);
+    }
+
+}

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

@@ -0,0 +1,179 @@
+package org.jeecg.modules.business.controller;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.business.dto.BookingOrderSaveDto;
+import org.jeecg.modules.business.entity.BusRoomBookingOrders;
+import org.jeecg.modules.business.service.IBusRoomBookingOrdersService;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.servlet.ModelAndView;
+import com.alibaba.fastjson.JSON;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+
+ /**
+ * @Description: 酒店预定订单
+ * @Author: jeecg-boot
+ * @Date:   2023-03-25
+ * @Version: V1.0
+ */
+@Api(tags="酒店预定订单")
+@RestController
+@RequestMapping("/business/busRoomBookingOrders")
+@Slf4j
+public class BusRoomBookingOrdersController extends JeecgController<BusRoomBookingOrders, IBusRoomBookingOrdersService> {
+	@Autowired
+	private IBusRoomBookingOrdersService busRoomBookingOrdersService;
+	
+	/**
+	 * 分页列表查询
+	 *
+	 * @param busRoomBookingOrders
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	//@AutoLog(value = "酒店预定订单-分页列表查询")
+	@ApiOperation(value="酒店预定订单-分页列表查询", notes="酒店预定订单-分页列表查询")
+	@GetMapping(value = "/list")
+	public Result<IPage<BusRoomBookingOrders>> queryPageList(BusRoomBookingOrders busRoomBookingOrders,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) {
+		QueryWrapper<BusRoomBookingOrders> queryWrapper = QueryGenerator.initQueryWrapper(busRoomBookingOrders, req.getParameterMap());
+		Page<BusRoomBookingOrders> page = new Page<BusRoomBookingOrders>(pageNo, pageSize);
+		IPage<BusRoomBookingOrders> pageList = busRoomBookingOrdersService.page(page, queryWrapper);
+		return Result.OK(pageList);
+	}
+	
+	/**
+	 *   添加
+	 *
+	 * @param busRoomBookingOrders
+	 * @return
+	 */
+	@AutoLog(value = "酒店预定订单-添加")
+	@ApiOperation(value="酒店预定订单-添加", notes="酒店预定订单-添加")
+	//@RequiresPermissions("business:bus_room_booking_orders:add")
+	@PostMapping(value = "/add")
+	public Result<String> add(@RequestBody BookingOrderSaveDto busRoomBookingOrders) {
+
+		return Result.OK(busRoomBookingOrdersService.bookingOrderSave(busRoomBookingOrders));
+	}
+	
+	/**
+	 *  编辑
+	 *
+	 * @param busRoomBookingOrders
+	 * @return
+	 */
+	@AutoLog(value = "酒店预定订单-编辑")
+	@ApiOperation(value="酒店预定订单-编辑", notes="酒店预定订单-编辑")
+	//@RequiresPermissions("business:bus_room_booking_orders:edit")
+	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+	public Result<String> edit(@RequestBody BusRoomBookingOrders busRoomBookingOrders) {
+		busRoomBookingOrdersService.updateById(busRoomBookingOrders);
+		return Result.OK("编辑成功!");
+	}
+	
+	/**
+	 *   通过id删除
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "酒店预定订单-通过id删除")
+	@ApiOperation(value="酒店预定订单-通过id删除", notes="酒店预定订单-通过id删除")
+	//@RequiresPermissions("business:bus_room_booking_orders:delete")
+	@DeleteMapping(value = "/delete")
+	public Result<String> delete(@RequestParam(name="id",required=true) String id) {
+		busRoomBookingOrdersService.removeById(id);
+		return Result.OK("删除成功!");
+	}
+	
+	/**
+	 *  批量删除
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "酒店预定订单-批量删除")
+	@ApiOperation(value="酒店预定订单-批量删除", notes="酒店预定订单-批量删除")
+	//@RequiresPermissions("business:bus_room_booking_orders:deleteBatch")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		this.busRoomBookingOrdersService.removeByIds(Arrays.asList(ids.split(",")));
+		return Result.OK("批量删除成功!");
+	}
+	
+	/**
+	 * 通过id查询
+	 *
+	 * @param id
+	 * @return
+	 */
+	//@AutoLog(value = "酒店预定订单-通过id查询")
+	@ApiOperation(value="酒店预定订单-通过id查询", notes="酒店预定订单-通过id查询")
+	@GetMapping(value = "/queryById")
+	public Result<BusRoomBookingOrders> queryById(@RequestParam(name="id",required=true) String id) {
+		BusRoomBookingOrders busRoomBookingOrders = busRoomBookingOrdersService.getById(id);
+		if(busRoomBookingOrders==null) {
+			return Result.error("未找到对应数据");
+		}
+		return Result.OK(busRoomBookingOrders);
+	}
+
+    /**
+    * 导出excel
+    *
+    * @param request
+    * @param busRoomBookingOrders
+    */
+    //@RequiresPermissions("business:bus_room_booking_orders:exportXls")
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, BusRoomBookingOrders busRoomBookingOrders) {
+        return super.exportXls(request, busRoomBookingOrders, BusRoomBookingOrders.class, "酒店预定订单");
+    }
+
+    /**
+      * 通过excel导入数据
+    *
+    * @param request
+    * @param response
+    * @return
+    */
+    //@RequiresPermissions("business:bus_room_booking_orders:importExcel")
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, BusRoomBookingOrders.class);
+    }
+
+}

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

@@ -0,0 +1,13 @@
+package org.jeecg.modules.business.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import lombok.Data;
+import org.jeecg.modules.business.entity.BusBookingBatch;
+
+import java.util.List;
+
+@Data
+public class BookingBatchRoomsDto extends BusBookingBatch {
+    @TableField(exist = false)
+    private List<String> roomIds;
+}

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

@@ -0,0 +1,19 @@
+package org.jeecg.modules.business.dto;
+
+import lombok.Data;
+import org.jeecg.modules.business.entity.BusRoomBookingOrders;
+
+import java.util.List;
+
+@Data
+public class BookingOrderSaveDto  {
+    private BusRoomBookingOrders orderInfo;
+    // 散客预定 走这个
+    private List<String> roomIds;
+    // 如果是团队预定 走这个
+    private List<BookingBatchRoomsDto> batchRooms;
+    // 联系人名称
+    private String contactName;
+    // 联系人电话
+    private String phone;
+}

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

@@ -0,0 +1,63 @@
+package org.jeecg.modules.business.entity;
+
+import java.io.Serializable;
+import java.io.UnsupportedEncodingException;
+import java.util.Date;
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.jeecg.common.aspect.annotation.Dict;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * @Description: 团队预定批次
+ * @Author: jeecg-boot
+ * @Date:   2023-03-25
+ * @Version: V1.0
+ */
+@Data
+@TableName("bus_booking_batch_info")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="bus_booking_batch_info对象", description="团队预定批次")
+public class BusBookingBatch implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**key*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "key")
+    private String id;
+	/**批次号*/
+	@Excel(name = "批次号", width = 15)
+    @ApiModelProperty(value = "批次号")
+    private String batchNo;
+	/**预计抵达时间*/
+	@Excel(name = "预计抵达时间", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "预计抵达时间")
+    private Date arrivalTime;
+	/**预离时间*/
+	@Excel(name = "预离时间", width = 15, format = "yyyy-MM-dd")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "预离时间")
+    private Date dueOutTime;
+	/**入住天数*/
+	@Excel(name = "入住天数", width = 15)
+    @ApiModelProperty(value = "入住天数")
+    private Integer dayCount;
+	/**关联的订单团队预定订单id*/
+	@Excel(name = "关联的订单团队预定订单id", width = 15)
+    @ApiModelProperty(value = "关联的订单团队预定订单id")
+    private String bookingOrdersId;
+}

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

@@ -0,0 +1,55 @@
+package org.jeecg.modules.business.entity;
+
+import java.io.Serializable;
+import java.io.UnsupportedEncodingException;
+import java.util.Date;
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.jeecg.common.aspect.annotation.Dict;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * @Description: 预定订单关联房间
+ * @Author: jeecg-boot
+ * @Date:   2023-03-25
+ * @Version: V1.0
+ */
+@Data
+@TableName("bus_booking_rooms")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="bus_booking_rooms对象", description="预定订单关联房间")
+public class BusBookingRooms implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**预定关联房间key*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "预定关联房间key")
+    private String id;
+	/**房间id*/
+	@Excel(name = "房间id", width = 15)
+    @ApiModelProperty(value = "房间id")
+    private String roomId;
+	/**关联预订订单id*/
+	@Excel(name = "关联预订订单id", width = 15)
+    @ApiModelProperty(value = "关联预订订单id")
+    private String bookingOrdersId;
+	/**预定批次id*/
+	@Excel(name = "预定批次id", width = 15)
+    @ApiModelProperty(value = "预定批次id")
+    private String bookingBatchId;
+	/**1散客2团队*/
+	@Excel(name = "1散客2团队", width = 15)
+    @ApiModelProperty(value = "1散客2团队")
+    private Integer bookingType;
+}

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

@@ -0,0 +1,190 @@
+package org.jeecg.modules.business.entity;
+
+import java.io.Serializable;
+import java.io.UnsupportedEncodingException;
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.sun.istack.NotNull;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.jeecg.common.aspect.annotation.Dict;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * @Description: 酒店预定订单
+ * @Author: jeecg-boot
+ * @Date:   2023-03-25
+ * @Version: V1.0
+ */
+@Data
+@TableName("bus_room_booking_orders")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="bus_room_booking_orders对象", description="酒店预定订单")
+public class BusRoomBookingOrders implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**预定订单主键*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "预定订单主键")
+    private String id;
+	/**预定类型:1,全天;2时租*/
+	@Excel(name = "预定类型:1,全天;2时租", width = 15)
+    @ApiModelProperty(value = "预定类型:1,全天;2时租")
+    private Integer bookingType;
+	/**预计抵达时间*/
+	@Excel(name = "预计抵达时间", width = 15, format = "yyyy-MM-dd HH:mm")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm")
+    @ApiModelProperty(value = "预计抵达时间")
+    private Date arrivalTime;
+	/**预离时间*/
+	@Excel(name = "预离时间", width = 15, format = "yyyy-MM-dd HH:mm")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm")
+    @ApiModelProperty(value = "预离时间")
+    private Date dueOutTime;
+	/**客源:平台字典项目ID*/
+	@Excel(name = "客源:平台字典项目ID", width = 15)
+    @ApiModelProperty(value = "客源:平台字典项目ID")
+    private String customerSource;
+	/**早餐数量*/
+	@Excel(name = "早餐数量", width = 15)
+    @ApiModelProperty(value = "早餐数量")
+    private Integer breakfastNum;
+	/**午餐数量*/
+	@Excel(name = "午餐数量", width = 15)
+    @ApiModelProperty(value = "午餐数量")
+    private Integer lunchNum;
+	/**晚餐数量*/
+	@Excel(name = "晚餐数量", width = 15)
+    @ApiModelProperty(value = "晚餐数量")
+    private Integer dinnerNum;
+	/**入住天数*/
+	@Excel(name = "入住天数", width = 15)
+    @ApiModelProperty(value = "入住天数")
+    private Integer dayCount;
+	/**客人类型;1、散客;2、会员;3、协议单位;4、中介*/
+	@Excel(name = "客人类型;1、散客;2、会员;3、协议单位;4、中介", width = 15)
+    @ApiModelProperty(value = "客人类型;1、散客;2、会员;3、协议单位;4、中介")
+    private Integer customerType;
+	/**客人类型为会员时的会员id*/
+	@Excel(name = "客人类型为会员时的会员id", width = 15)
+    @ApiModelProperty(value = "客人类型为会员时的会员id")
+    private String vipCustomerId;
+	/**客人类型为协议单位时的协议单位id*/
+	@Excel(name = "客人类型为协议单位时的协议单位id", width = 15)
+    @ApiModelProperty(value = "客人类型为协议单位时的协议单位id")
+    private String contractTeamId;
+	/**选择协议单位之后选择协议合同的id*/
+	@Excel(name = "选择协议单位之后选择协议合同的id", width = 15)
+    @ApiModelProperty(value = "选择协议单位之后选择协议合同的id")
+    private String contractTeamProtocolId;
+	/**房价方案ID*/
+	@Excel(name = "房价方案ID", width = 15)
+    @ApiModelProperty(value = "房价方案ID")
+    private String roomPriceSlnId;
+	/**中介名称*/
+	@Excel(name = "中介名称", width = 15)
+    @ApiModelProperty(value = "中介名称")
+    private String agencyName;
+	/**联系人ID*/
+	@Excel(name = "联系人ID", width = 15)
+    @ApiModelProperty(value = "联系人ID")
+    private String contactId;
+	/**担保方式;1、无担保;2、有担保;3、OTA担保*/
+	@Excel(name = "担保方式;1、无担保;2、有担保;3、OTA担保", width = 15)
+    @ApiModelProperty(value = "担保方式;1、无担保;2、有担保;3、OTA担保")
+    private Integer warrantType;
+	/**担保人ID*/
+	@Excel(name = "担保人ID", width = 15)
+    @ApiModelProperty(value = "担保人ID")
+    private String warranter;
+	/**外部订单编号*/
+	@Excel(name = "外部订单编号", width = 15)
+    @ApiModelProperty(value = "外部订单编号")
+    private String outerOrdersNo;
+	/**备注*/
+	@Excel(name = "备注", width = 15)
+    @ApiModelProperty(value = "备注")
+    private String remark;
+	/**创建时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+	/**创建人*/
+	@Excel(name = "创建人", width = 15)
+    @ApiModelProperty(value = "创建人")
+    private String createUser;
+	/**预定记录状态;待定*/
+	@Excel(name = "预定记录状态;待定", width = 15)
+    @ApiModelProperty(value = "预定记录状态;待定")
+    private Integer bookingStatus;
+	/**更新时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "更新时间")
+    private Date updateTime;
+	/**更新人*/
+	@Excel(name = "更新人", width = 15)
+    @ApiModelProperty(value = "更新人")
+    private String updateUser;
+	/**预定订单号*/
+	@Excel(name = "预定订单号", width = 15)
+    @ApiModelProperty(value = "预定订单号")
+    private String bookingOrdersNo;
+	/**预定订单类型;1、散客预定;2、团队预定*/
+	@Excel(name = "预定订单类型;1、散客预定;2、团队预定", width = 15)
+    @ApiModelProperty(value = "预定订单类型;1、散客预定;2、团队预定")
+    private Integer bookingOrdersType;
+	/**是否公付房费*/
+	@Excel(name = "是否公付房费", width = 15)
+    @ApiModelProperty(value = "是否公付房费")
+    private Integer publicRoomFee;
+	/**是否公付消费*/
+	@Excel(name = "是否公付消费", width = 15)
+    @ApiModelProperty(value = "是否公付消费")
+    private Integer publicConsumeFee;
+	/**是否公付会员费*/
+	@Excel(name = "是否公付会员费", width = 15)
+    @ApiModelProperty(value = "是否公付会员费")
+    private Integer publicVipFee;
+	/**是否公付会议费*/
+	@Excel(name = "是否公付会议费", width = 15)
+    @ApiModelProperty(value = "是否公付会议费")
+    private Integer publicMeetingFee;
+	/**团队类型中的团队名称*/
+	@Excel(name = "团队类型中的团队名称", width = 15)
+    @ApiModelProperty(value = "团队类型中的团队名称")
+    private String teamName;
+	/**领队名称*/
+	@Excel(name = "领队名称", width = 15)
+    @ApiModelProperty(value = "领队名称")
+    private String leaderName;
+    /**钟点房计费项目id*/
+    @Excel(name = "钟点房计费项目id", width = 15)
+    @ApiModelProperty(value = "钟点房计费项目id")
+    private String hourRoomId;
+    /**预定方式:预定方式字典id*/
+    @Excel(name = "预定方式:预定方式字典id", width = 15)
+    @ApiModelProperty(value = "预定方式:预定方式字典id")
+    private String bookingDicWay;
+
+    /**团队类型字典ID*/
+    @Excel(name = "团队类型字典ID", width = 15)
+    @ApiModelProperty(value = "团队类型字典ID")
+    private String teamTypeDicId;
+
+
+}

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

@@ -0,0 +1,56 @@
+package org.jeecg.modules.business.enums;
+
+import org.jeecg.common.system.annotation.EnumDict;
+import org.jeecg.common.system.vo.DictModel;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@EnumDict("BookingOrdersType")
+public enum BookingOrdersType {
+
+    NORMAL(1, "散客预定"),
+    TEAM(2, "团队预定");
+
+    Integer key;
+
+    String title;
+
+    BookingOrdersType(Integer key, String title){
+        this.key = key;
+        this.title = title;
+    }
+    public Integer getKey() {
+        return key;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    /**
+     * 获取字典数据
+     * @return
+     */
+    public static List<DictModel> getDictList(){
+        List<DictModel> list = new ArrayList<>();
+        DictModel dictModel = null;
+        for(CouponsEventEnum e: CouponsEventEnum.values()){
+            dictModel = new DictModel();
+            dictModel.setValue(e.key.toString());
+            dictModel.setText(e.title);
+            list.add(dictModel);
+        }
+        return list;
+    }
+
+    public static BookingOrdersType val(Integer key){
+        for(BookingOrdersType bld: values()){
+            if(bld.key.equals(key)){
+                return bld;
+            }
+        }
+        return null;
+    }
+
+}

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

@@ -0,0 +1,58 @@
+package org.jeecg.modules.business.enums;
+
+import org.jeecg.common.system.annotation.EnumDict;
+import org.jeecg.common.system.vo.DictModel;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@EnumDict("CheckInTypeEnum")
+public enum CheckInTypeEnum {
+
+    ALL_DAYS(1,"全天"),
+    HOUR_TIME(2,"时租"),
+    USE_SELF(3,"自用"),
+    FREE(4,"免费"),
+    LONG_LEASE(5,"长包");
+
+    Integer key;
+
+    String title;
+
+    CheckInTypeEnum(Integer key, String title){
+        this.key = key;
+        this.title = title;
+    }
+    public Integer getKey() {
+        return key;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    /**
+     * 获取字典数据
+     * @return
+     */
+    public static List<DictModel> getDictList(){
+        List<DictModel> list = new ArrayList<>();
+        DictModel dictModel = null;
+        for(CouponsEventEnum e: CouponsEventEnum.values()){
+            dictModel = new DictModel();
+            dictModel.setValue(e.key.toString());
+            dictModel.setText(e.title);
+            list.add(dictModel);
+        }
+        return list;
+    }
+
+    public static CheckInTypeEnum val(Integer key){
+        for(CheckInTypeEnum bld: values()){
+            if(bld.key .equals(key)){
+                return bld;
+            }
+        }
+        return null;
+    }
+}

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

@@ -0,0 +1,55 @@
+package org.jeecg.modules.business.enums;
+
+import org.jeecg.common.system.vo.DictModel;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public enum CustomerTypeEnum {
+
+    NORMAL(1,"散客"),
+    VIP(2,"会员"),
+    PROTOCOL(3,"协议单位"),
+    PROXY(4,"中介");
+
+    Integer key;
+
+    String title;
+
+    CustomerTypeEnum(Integer key, String title){
+        this.key = key;
+        this.title = title;
+    }
+    public Integer getKey() {
+        return key;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    /**
+     * 获取字典数据
+     * @return
+     */
+    public static List<DictModel> getDictList(){
+        List<DictModel> list = new ArrayList<>();
+        DictModel dictModel = null;
+        for(CouponsEventEnum e: CouponsEventEnum.values()){
+            dictModel = new DictModel();
+            dictModel.setValue(e.key.toString());
+            dictModel.setText(e.title);
+            list.add(dictModel);
+        }
+        return list;
+    }
+
+    public static CustomerTypeEnum val(Integer key){
+        for(CustomerTypeEnum bld: values()){
+            if(bld.key .equals(key)){
+                return bld;
+            }
+        }
+        return null;
+    }
+}

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

@@ -0,0 +1,17 @@
+package org.jeecg.modules.business.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.business.entity.BusBookingBatch;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: 团队预定批次
+ * @Author: jeecg-boot
+ * @Date:   2023-03-25
+ * @Version: V1.0
+ */
+public interface BusBookingBatchMapper extends BaseMapper<BusBookingBatch> {
+
+}

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

@@ -0,0 +1,17 @@
+package org.jeecg.modules.business.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.business.entity.BusBookingRooms;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: 预定订单关联房间
+ * @Author: jeecg-boot
+ * @Date:   2023-03-25
+ * @Version: V1.0
+ */
+public interface BusBookingRoomsMapper extends BaseMapper<BusBookingRooms> {
+
+}

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

@@ -0,0 +1,17 @@
+package org.jeecg.modules.business.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.business.entity.BusRoomBookingOrders;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: 酒店预定订单
+ * @Author: jeecg-boot
+ * @Date:   2023-03-25
+ * @Version: V1.0
+ */
+public interface BusRoomBookingOrdersMapper extends BaseMapper<BusRoomBookingOrders> {
+
+}

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

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.business.mapper.BusBookingBatchMapper">
+
+</mapper>

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

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.business.mapper.BusBookingRoomsMapper">
+
+</mapper>

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

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.business.mapper.BusRoomBookingOrdersMapper">
+
+</mapper>

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

@@ -0,0 +1,14 @@
+package org.jeecg.modules.business.service;
+
+import org.jeecg.modules.business.entity.BusBookingBatch;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: 团队预定批次
+ * @Author: jeecg-boot
+ * @Date:   2023-03-25
+ * @Version: V1.0
+ */
+public interface IBusBookingBatchService extends IService<BusBookingBatch> {
+
+}

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

@@ -0,0 +1,14 @@
+package org.jeecg.modules.business.service;
+
+import org.jeecg.modules.business.entity.BusBookingRooms;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: 预定订单关联房间
+ * @Author: jeecg-boot
+ * @Date:   2023-03-25
+ * @Version: V1.0
+ */
+public interface IBusBookingRoomsService extends IService<BusBookingRooms> {
+
+}

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

@@ -0,0 +1,16 @@
+package org.jeecg.modules.business.service;
+
+import org.jeecg.modules.business.dto.BookingOrderSaveDto;
+import org.jeecg.modules.business.entity.BusRoomBookingOrders;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: 酒店预定订单
+ * @Author: jeecg-boot
+ * @Date:   2023-03-25
+ * @Version: V1.0
+ */
+public interface IBusRoomBookingOrdersService extends IService<BusRoomBookingOrders> {
+
+    String bookingOrderSave(BookingOrderSaveDto item);
+}

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

@@ -0,0 +1,19 @@
+package org.jeecg.modules.business.service.impl;
+
+import org.jeecg.modules.business.entity.BusBookingBatch;
+import org.jeecg.modules.business.mapper.BusBookingBatchMapper;
+import org.jeecg.modules.business.service.IBusBookingBatchService;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @Description: 团队预定批次
+ * @Author: jeecg-boot
+ * @Date:   2023-03-25
+ * @Version: V1.0
+ */
+@Service
+public class BusBookingBatchServiceImpl extends ServiceImpl<BusBookingBatchMapper, BusBookingBatch> implements IBusBookingBatchService {
+
+}

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

@@ -0,0 +1,19 @@
+package org.jeecg.modules.business.service.impl;
+
+import org.jeecg.modules.business.entity.BusBookingRooms;
+import org.jeecg.modules.business.mapper.BusBookingRoomsMapper;
+import org.jeecg.modules.business.service.IBusBookingRoomsService;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @Description: 预定订单关联房间
+ * @Author: jeecg-boot
+ * @Date:   2023-03-25
+ * @Version: V1.0
+ */
+@Service
+public class BusBookingRoomsServiceImpl extends ServiceImpl<BusBookingRoomsMapper, BusBookingRooms> implements IBusBookingRoomsService {
+
+}

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

@@ -0,0 +1,162 @@
+package org.jeecg.modules.business.service.impl;
+
+import org.jeecg.common.exception.JeecgBootException;
+import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.common.util.TokenUtils;
+import org.jeecg.modules.business.dto.BookingBatchRoomsDto;
+import org.jeecg.modules.business.dto.BookingOrderSaveDto;
+import org.jeecg.modules.business.entity.BusBookingBatch;
+import org.jeecg.modules.business.entity.BusBookingRooms;
+import org.jeecg.modules.business.entity.BusRoomBookingOrders;
+import org.jeecg.modules.business.enums.BookingOrdersType;
+import org.jeecg.modules.business.enums.CheckInTypeEnum;
+import org.jeecg.modules.business.enums.CustomerTypeEnum;
+import org.jeecg.modules.business.mapper.BusRoomBookingOrdersMapper;
+import org.jeecg.modules.business.service.IBusRoomBookingOrdersService;
+import org.jeecg.modules.rooms.service.CesRoomsServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.text.SimpleDateFormat;
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Description: 酒店预定订单
+ * @Author: jeecg-boot
+ * @Date:   2023-03-25
+ * @Version: V1.0
+ */
+@Service
+public class BusRoomBookingOrdersServiceImpl extends ServiceImpl<BusRoomBookingOrdersMapper, BusRoomBookingOrders> implements IBusRoomBookingOrdersService {
+
+    @Autowired
+    private CesRoomsServiceImpl roomsService;
+
+    @Autowired
+    private BusBookingRoomsServiceImpl bookingRoomsService;
+
+    @Autowired
+    private BusBookingBatchServiceImpl bookingBatchService;
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public String bookingOrderSave(BookingOrderSaveDto item) {
+        LoginUser user = TokenUtils.getAuthUser();
+        item.getOrderInfo().setCreateTime(new Date());
+        item.getOrderInfo().setCreateUser(user.getId());
+
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
+        item.getOrderInfo().setBookingOrdersNo("YD"+sdf.format(System.currentTimeMillis()));
+//        if(item.getOrderInfo().getBookingType() == null)
+
+        if(item.getOrderInfo().getCustomerSource() == null || item.getOrderInfo().getCustomerSource().isEmpty())
+            throw new JeecgBootException("客人来源不能为空");
+        if(item.getOrderInfo().getCustomerType() == null)
+            throw new JeecgBootException("客人类型不能为空");
+        if(CustomerTypeEnum.val(item.getOrderInfo().getCustomerType()) == null)
+            throw new JeecgBootException("客人类型不正确");
+        if(item.getOrderInfo().getCustomerType().equals(CustomerTypeEnum.VIP.getKey())
+                && (item.getOrderInfo().getVipCustomerId() == null || item.getOrderInfo().getVipCustomerId().isEmpty()))
+            throw new JeecgBootException("客人类型为会员时,请选择会员");
+        if(item.getOrderInfo().getCustomerType().equals(CustomerTypeEnum.PROTOCOL.getKey())
+                && (item.getOrderInfo().getContactId() == null || item.getOrderInfo().getContactId().isEmpty()
+                    || item.getOrderInfo().getContractTeamProtocolId() == null || item.getOrderInfo().getContractTeamProtocolId().isEmpty()
+                    )
+        )
+            throw new JeecgBootException("客人类型为协议单位时,请选择协议单位和相关协议");
+        if(item.getOrderInfo().getCustomerType().equals(CustomerTypeEnum.PROXY.getKey())
+                && (item.getOrderInfo().getAgencyName() == null || item.getOrderInfo().getAgencyName().isEmpty())
+        )
+            throw new JeecgBootException("客人类型为中介时,请填写中介信息");
+        // 钟点房判断,计费项目判定
+        if(item.getOrderInfo().getBookingType().equals(CheckInTypeEnum.HOUR_TIME.getKey())) {
+            if(item.getOrderInfo().getHourRoomId() == null || item.getOrderInfo().getHourRoomId().isEmpty())
+                throw new JeecgBootException("钟点房计费项目不能为空");
+        }
+        // 散客预定
+        if(item.getOrderInfo().getBookingOrdersType().equals(BookingOrdersType.NORMAL.getKey())) {
+            if(item.getOrderInfo().getArrivalTime() == null || item.getOrderInfo().getDueOutTime() == null)
+                throw new JeecgBootException("预抵时间和预离时间不能为空");
+            if(item.getOrderInfo().getArrivalTime().getTime() < new Date().getTime())
+                throw new JeecgBootException("预抵时间不能小于当前时间");
+            if(item.getOrderInfo().getArrivalTime().getTime() >= item.getOrderInfo().getDueOutTime().getTime())
+                throw new JeecgBootException("预抵时间不能大于或者等于预离时间");
+            // 非钟点房判定
+            if(!item.getOrderInfo().getBookingType().equals(CheckInTypeEnum.HOUR_TIME.getKey())) {
+                if(item.getOrderInfo().getDayCount() == null || item.getOrderInfo().getDayCount() <= 0)
+                    throw new JeecgBootException("入住天数不能小于0");
+
+            }
+
+            if(item.getRoomIds() == null || item.getRoomIds().size() == 0)
+                throw new JeecgBootException("请选择预定房间");
+
+            save(item.getOrderInfo());
+            String bookingId = item.getOrderInfo().getId();
+            // todo 判定是否有安排冲突的房间
+            List<BusBookingRooms> bookingRooms = new ArrayList<>();
+            item.getRoomIds().forEach(c->{
+                BusBookingRooms bookingRoomsItem = new BusBookingRooms();
+                bookingRoomsItem.setBookingOrdersId(bookingId);
+                bookingRoomsItem.setRoomId(c);
+                bookingRoomsItem.setBookingType(1);
+                bookingRooms.add(bookingRoomsItem);
+            });
+            bookingRoomsService.saveBatch(bookingRooms);
+            return item.getOrderInfo().getBookingOrdersNo();
+            // 团队预定
+        } else if(item.getOrderInfo().getBookingOrdersType().equals(BookingOrdersType.TEAM.getKey())) {
+            if(item.getOrderInfo().getTeamName() == null || item.getOrderInfo().getTeamName().isEmpty())
+                throw new JeecgBootException("请填写团队名称");
+            if(item.getBatchRooms() == null || item.getBatchRooms().size() == 0)
+                throw  new JeecgBootException("请添加批次信息");
+            item.getBatchRooms().forEach(c->{
+                if(c.getArrivalTime() == null || c.getDueOutTime() == null)
+                    throw new JeecgBootException("预抵时间和预离时间不能为空");
+                if(c.getArrivalTime().getTime() < new Date().getTime())
+                    throw new JeecgBootException("预抵时间不能小于当前时间");
+                if(c.getArrivalTime().getTime() >= c.getDueOutTime().getTime())
+                    throw new JeecgBootException("预抵时间不能大于或者等于预离时间");
+                // 非钟点房判定
+                if(!item.getOrderInfo().getBookingType().equals(CheckInTypeEnum.HOUR_TIME.getKey())) {
+                    if(c.getDayCount() == null || c.getDayCount() <= 0)
+                        throw new JeecgBootException("入住天数不能小于0");
+                }
+                if(c.getRoomIds() == null || c.getRoomIds().size() == 0)
+                    throw new JeecgBootException("请选择批次房间");
+                SimpleDateFormat sdfPc = new SimpleDateFormat("yyyyMMddHHmmssSSS");
+                c.setBatchNo("YDPC"+sdfPc.format(System.currentTimeMillis()));
+                c.setBookingOrdersId(item.getOrderInfo().getId());
+                BusBookingBatch batchItem = copyBatchToBase(c);
+                bookingBatchService.save(batchItem);
+                List<BusBookingRooms> batchBookingRooms = new ArrayList<>();
+                c.getRoomIds().forEach(s-> {
+                    BusBookingRooms bookingRoomItem = new BusBookingRooms();
+                    bookingRoomItem.setRoomId(s);
+                    bookingRoomItem.setBookingType(2);
+                    bookingRoomItem.setBookingBatchId(batchItem.getId());
+                    bookingRoomItem.setBookingOrdersId(item.getOrderInfo().getId());
+                    batchBookingRooms.add(bookingRoomItem);
+                });
+                bookingRoomsService.saveBatch(batchBookingRooms);
+            });
+            return item.getOrderInfo().getBookingOrdersNo();
+        } else { // not exist type
+            throw new JeecgBootException("参数错误");
+        }
+    }
+    private BusBookingBatch copyBatchToBase(BookingBatchRoomsDto data) {
+        BusBookingBatch batch = new BookingBatchRoomsDto();
+        batch.setBatchNo(data.getBatchNo());
+        batch.setBookingOrdersId(data.getBookingOrdersId());
+        batch.setArrivalTime(data.getArrivalTime());
+        batch.setDueOutTime(data.getDueOutTime());
+        batch.setDayCount(data.getDayCount());
+        return batch;
+    }
+}

+ 13 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/DTO/CanUseRequestParamDto.java

@@ -0,0 +1,13 @@
+package org.jeecg.modules.rooms.DTO;
+
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class CanUseRequestParamDto {
+    private Date startOf;
+    private Date endOf;
+    private String hotelId;
+
+}

+ 11 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/DTO/HotelRoomsDto.java

@@ -0,0 +1,11 @@
+package org.jeecg.modules.rooms.DTO;
+
+import lombok.Data;
+
+/**
+ * 请求入参数
+ */
+@Data
+public class HotelRoomsDto {
+    private String hotelId;
+}

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

@@ -0,0 +1,59 @@
+package org.jeecg.modules.rooms.Enum;
+
+import org.jeecg.common.system.vo.DictModel;
+import org.jeecg.modules.business.enums.CouponsEventEnum;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public enum RoomStatusEnum {
+
+    EMPTY_CLEAR(1,"空净"),
+    EMPTY_DIRTY(2,"空脏"),
+    LIVE_CLEAR(3,"住净"),
+    LIVE_DIRTY(4,"住脏"),
+    IN_SERVICE(5,"维修"),
+    ON_LOCK(6,"锁房");
+
+
+    Integer key;
+
+    String title;
+
+    RoomStatusEnum(Integer key, String title){
+        this.key = key;
+        this.title = title;
+    }
+    public Integer getKey() {
+        return key;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    /**
+     * 获取字典数据
+     * @return
+     */
+    public static List<DictModel> getDictList(){
+        List<DictModel> list = new ArrayList<>();
+        DictModel dictModel = null;
+        for(RoomStatusEnum e: RoomStatusEnum.values()){
+            dictModel = new DictModel();
+            dictModel.setValue(e.key.toString());
+            dictModel.setText(e.title);
+            list.add(dictModel);
+        }
+        return list;
+    }
+
+    public static RoomStatusEnum val(Integer key){
+        for(RoomStatusEnum bld: values()){
+            if(bld.key .equals(key)){
+                return bld;
+            }
+        }
+        return null;
+    }
+}

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

@@ -0,0 +1,15 @@
+package org.jeecg.modules.rooms.Vo;
+
+import lombok.Data;
+import org.jeecg.modules.rooms.entity.CesRooms;
+
+import java.util.List;
+
+@Data
+public class CanUseBuildingRoomsVo {
+    private String buildingId;
+    private String buildingName;
+    private String floorId;
+    private String floorName;
+    private List<CesRooms> floorRooms;
+}

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

@@ -0,0 +1,12 @@
+package org.jeecg.modules.rooms.Vo;
+
+import lombok.Data;
+import org.jeecg.modules.rooms.entity.CesRoomLayout;
+
+import java.util.List;
+
+@Data
+public class CanUseResultVo {
+    private CesRoomLayout layout;
+    private List<CanUseBuildingRoomsVo> buildingRooms;
+}

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

@@ -0,0 +1,12 @@
+package org.jeecg.modules.rooms.Vo;
+
+import lombok.Data;
+import org.jeecg.modules.rooms.entity.CesRoomLayout;
+import org.jeecg.modules.rooms.entity.CesRooms;
+
+@Data
+public class FloorBuildingRoomVo {
+    private CesRooms roomInfo;
+    private CesRoomLayout layout;
+
+}

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

@@ -0,0 +1,15 @@
+package org.jeecg.modules.rooms.Vo;
+
+import lombok.Data;
+import org.jeecg.modules.rooms.entity.CesRoomBuildingFloor;
+import org.jeecg.modules.rooms.entity.CesRooms;
+
+import java.util.List;
+
+@Data
+public class FloorWithBuildingVo extends CesRoomBuildingFloor {
+    private String buildingId;
+    private String buildingName;
+    private List<FloorBuildingRoomVo> rooms;
+
+}

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

@@ -3,6 +3,7 @@ package org.jeecg.modules.rooms.controller;
 
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.util.EnumUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.Data;
@@ -11,17 +12,23 @@ import org.apache.commons.lang3.StringUtils;
 import org.jeecg.common.Enum.ResultCode;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.common.exception.JeecgBootException;
 import org.jeecg.modules.rooms.DTO.*;
 import org.jeecg.modules.rooms.Enum.CouponEnums;
+import org.jeecg.modules.rooms.Vo.FloorBuildingRoomVo;
+import org.jeecg.modules.rooms.Vo.FloorWithBuildingVo;
+import org.jeecg.modules.rooms.entity.CesRoomLayout;
 import org.jeecg.modules.rooms.entity.CesRooms;
+import org.jeecg.modules.rooms.service.CesRoomBuildingFloorServiceImpl;
+import org.jeecg.modules.rooms.service.CesRoomLayoutServiceImpl;
 import org.jeecg.modules.rooms.service.CesRoomsServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import org.springframework.stereotype.Controller;
 
 import javax.annotation.Resource;
-import java.util.Arrays;
-import java.util.List;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -40,6 +47,12 @@ public class CesRoomsController {
     @Resource
     private CesRoomsServiceImpl roomsService;
 
+    @Autowired
+    private CesRoomBuildingFloorServiceImpl buildingFloorService;
+
+    @Autowired
+    private CesRoomLayoutServiceImpl layoutService;
+
 
     @ApiOperation(value="房间分页列表查询", notes="房间分页列表查询")
     @GetMapping(value = "/list")
@@ -57,6 +70,54 @@ public class CesRoomsController {
         }
     }
 
+    @ApiOperation(value="实时房态-房间列表", notes="实时房态")
+    @GetMapping(value = "/realtime-rooms")
+    public Result getHotelRooms(@RequestParam Map params){
+        Object hotelId = params.get("hotelId");
+        if(null != hotelId) {
+            List<FloorWithBuildingVo> floors = buildingFloorService.getHotelFloors(hotelId.toString());
+            List<String> ids = floors.stream().map(s->s.getId()).collect(Collectors.toList());
+            List<CesRoomLayout> layouts = layoutService.list(Wrappers.<CesRoomLayout>query().eq("hotel_id",hotelId.toString()).eq("invalid", false));
+            // todo: 待更改。
+            List<CesRooms> allRooms =ids.size() > 0 ?  roomsService.list(Wrappers.<CesRooms>query().eq("invalid",false).in("floor_id",ids)): null;
+            if(allRooms == null || allRooms.size() == 0) {
+                return Result.ok(new ArrayList());
+            }
+            floors.forEach(s-> {
+                List<CesRooms> floorRooms = allRooms.stream().filter(a->a.getFloorId().equals(s.getId())).collect(Collectors.toList());
+                List<FloorBuildingRoomVo> roomInfos = new ArrayList<>();
+                floorRooms.forEach(a -> {
+                    FloorBuildingRoomVo roomVo = new FloorBuildingRoomVo();
+                    Optional<CesRoomLayout> opLayout = layouts.stream().filter(c-> c.getId().equals(a.getLayoutId())).findFirst();
+                    if(!opLayout.isPresent()) return; // 没有房型的房间给他去掉
+                    //房型
+                    roomVo.setLayout(opLayout.get());
+                    //房间
+                    roomVo.setRoomInfo(a);
+                    roomInfos.add(roomVo);
+                });
+                s.setRooms(roomInfos);
+            });
+            return Result.ok(floors);
+        }
+
+        throw new JeecgBootException("参数-酒店id必传");
+    }
+
+    /**
+     * 可用房间
+     * @param param
+     * @return
+     */
+    @ApiOperation(value="可用房间", notes="可用房间")
+    @GetMapping(value = "/can-user-rooms")
+    public Result getCanUseRooms(CanUseRequestParamDto param) {
+        if(param.getHotelId()==null || param.getHotelId().isEmpty())
+            throw new JeecgBootException("参数错误");
+        return Result.ok(roomsService.getCanUseRooms(param.getHotelId()));
+    }
+
+
     /**
      * 保存房间
      * @param dto

+ 17 - 1
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/mapper/CesRoomBuildingFloorMapper.java

@@ -1,8 +1,13 @@
 package org.jeecg.modules.rooms.mapper;
 
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+import org.jeecg.modules.rooms.Vo.FloorWithBuildingVo;
 import org.jeecg.modules.rooms.entity.CesRoomBuildingFloor;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
+import java.util.List;
+
 /**
  * <p>
  * 楼栋楼层表 Mapper 接口
@@ -12,5 +17,16 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  * @since 2023-03-06
  */
 public interface CesRoomBuildingFloorMapper extends BaseMapper<CesRoomBuildingFloor> {
-
+    @Select("SELECT\n" +
+            "\tb2.`name` AS buildingName,\n" +
+            "\tb2.id AS buildingId,\n" +
+            "\tb1.* \n" +
+            "FROM\n" +
+            "\tces_room_building_floor b1\n" +
+            "\tINNER JOIN ces_room_building_floor b2 ON b1.parent_id <> 0 \n" +
+            "\tAND b1.parent_id = b2.id \n" +
+            "WHERE\n" +
+            "\tb1.hotelId = #{hotelId} \n" +
+            "\tAND b1.invalid = 0 ")
+    List<FloorWithBuildingVo> buildingFloors(@Param("hotelId") String hotelId);
 }

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

@@ -13,6 +13,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.modules.rooms.DTO.CesRoomBuildingFloorDto;
 import org.jeecg.modules.rooms.Enum.CouponEnums;
+import org.jeecg.modules.rooms.Vo.FloorWithBuildingVo;
 import org.jeecg.modules.rooms.entity.CesRoomBuildingFloor;
 import org.jeecg.modules.rooms.mapper.CesRoomBuildingFloorMapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -172,4 +173,13 @@ public class CesRoomBuildingFloorServiceImpl extends ServiceImpl<CesRoomBuilding
         return Result.OK(list);
     }
 
+    /**
+     * 根据酒店获取楼层数据
+     * @param hotelId
+     * @return
+     */
+    public  List<FloorWithBuildingVo> getHotelFloors(String hotelId) {
+        return baseMapper.buildingFloors(hotelId);
+    }
+
 }

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

@@ -24,8 +24,12 @@ import org.jeecg.modules.rooms.DTO.BatchRoomsDto;
 import org.jeecg.modules.rooms.DTO.CesRoomSearchDto;
 import org.jeecg.modules.rooms.DTO.CesRoomsDto;
 import org.jeecg.modules.rooms.Enum.CouponEnums;
+import org.jeecg.modules.rooms.Enum.RoomStatusEnum;
+import org.jeecg.modules.rooms.Vo.CanUseBuildingRoomsVo;
+import org.jeecg.modules.rooms.Vo.CanUseResultVo;
 import org.jeecg.modules.rooms.Vo.CesRoomsVo;
 import org.jeecg.modules.rooms.entity.CesRoomBuildingFloor;
+import org.jeecg.modules.rooms.entity.CesRoomLayout;
 import org.jeecg.modules.rooms.entity.CesRooms;
 import org.jeecg.modules.rooms.mapper.CesRoomsMapper;
 import org.springframework.stereotype.Service;
@@ -56,6 +60,9 @@ public class CesRoomsServiceImpl extends ServiceImpl<CesRoomsMapper, CesRooms> i
     @Resource
     private  CesRoomBuildingFloorServiceImpl buildingFloorService;
 
+    @Resource
+    private CesRoomLayoutServiceImpl layoutService;
+
     /**
      * 查询房间
      * @param dto
@@ -238,4 +245,45 @@ public class CesRoomsServiceImpl extends ServiceImpl<CesRoomsMapper, CesRooms> i
         List<CesRooms> rooms = roomsMapper.selectList(Wrappers.<CesRooms>lambdaQuery().eq(CesRooms::getHotelId, hotelId).eq(CesRooms::getInvalid,false));
         return rooms;
     }
+
+    /**
+     * 获取能使用的房间
+     * @param hotelId
+     * @return
+     */
+    public List<CanUseResultVo> getCanUseRooms(String hotelId) {
+        // 获取房型
+       List<CesRoomLayout> layouts = layoutService.list(Wrappers.<CesRoomLayout>query().eq("hotel_id",hotelId)
+               .eq("invalid",false)
+               .eq("status", RoomStatusEnum.EMPTY_CLEAR)
+       );
+       List<String> layoutIds = layouts.stream().map(s->s.getId()).collect(Collectors.toList());
+       List<CesRooms> allRooms = list(Wrappers.<CesRooms>query().in("layout_id",layoutIds).eq("invalid",false));
+       List<CesRoomBuildingFloor> allBuildingFloors = buildingFloorService.list(Wrappers.<CesRoomBuildingFloor>query().eq("hotel_id",hotelId).eq("invalid",false));
+       List<CanUseResultVo> results = new ArrayList<>();
+       List<CesRoomBuildingFloor> floors = allBuildingFloors.stream().filter(s->!s.getParentId().equals("0")).collect(Collectors.toList());
+
+       layouts.forEach(s-> {
+           CanUseResultVo item = new CanUseResultVo();
+           item.setLayout(s);
+           List<CanUseBuildingRoomsVo> floorVos = new ArrayList<>();
+           floors.forEach(c->{
+               CanUseBuildingRoomsVo floorRoomsVo  = new CanUseBuildingRoomsVo();
+               List<CesRooms> floorRooms = allRooms.stream().filter(e->e.getFloorId().equals(c.getId())).collect(Collectors.toList());
+               Optional<CesRoomBuildingFloor> opBuilding = allBuildingFloors.stream().filter(q->q.getId().equals(c.getParentId())).findFirst();
+               if(!opBuilding.isPresent()) return;
+               floorRoomsVo.setFloorRooms(floorRooms);
+               floorRoomsVo.setFloorName(c.getName());
+               floorRoomsVo.setFloorId(c.getId());
+               floorRoomsVo.setBuildingName(opBuilding.get().getName());
+               floorRoomsVo.setBuildingId(opBuilding.get().getId());
+               floorVos.add(floorRoomsVo);
+
+           });
+           item.setBuildingRooms(floorVos);
+           results.add(item);
+       });
+       return  results;
+
+    }
 }