소스 검색

房型列表CRUD

shenzhongzheng 2 년 전
부모
커밋
ad9d6f0f33
14개의 변경된 파일869개의 추가작업 그리고 12개의 파일을 삭제
  1. 25 0
      jeecg-boot-base-core/src/main/java/org/jeecg/common/Enum/ResultCode.java
  2. 21 6
      jeecg-boot-base-core/src/main/java/org/jeecg/common/api/vo/Result.java
  3. 17 1
      jeecg-boot-base-core/src/main/java/org/jeecg/common/util/CommonUtils.java
  4. 29 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/BusHotelServiceImpl.java
  5. 8 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/DTO/CesRoomLayoutDto.java
  6. 10 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/DTO/CesRoomLayoutRemoveDto.java
  7. 33 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/DTO/CesRoomLayoutSearchDto.java
  8. 48 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/Enum/CouponEnums.java
  9. 21 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/Vo/CesRoomLayoutVo.java
  10. 196 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/controller/CesRoomLayoutController.java
  11. 216 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/entity/CesRoomLayout.java
  12. 16 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/mapper/CesRoomLayoutMapper.java
  13. 223 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/service/CesRoomLayoutServiceImpl.java
  14. 6 5
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/model/DuplicateCheckVo.java

+ 25 - 0
jeecg-boot-base-core/src/main/java/org/jeecg/common/Enum/ResultCode.java

@@ -0,0 +1,25 @@
+package org.jeecg.common.Enum;
+
+public enum ResultCode {
+        PARAM_MISS(400, "缺少必要的请求参数"),
+        PARAM_TYPE_ERROR(400, "请求参数类型错误"),
+        PARAM_BIND_ERROR(400, "请求参数绑定错误"),
+        PARAM_VALID_ERROR(400, "参数校验失败"),
+        ;
+        private int code;
+        private String message;
+
+        ResultCode(final int code, final String message) {
+            this.code = code;
+            this.message = message;
+        }
+
+        public int getCode() {
+            return code;
+        }
+
+        public String getMessage() {
+            return message;
+        }
+
+}

+ 21 - 6
jeecg-boot-base-core/src/main/java/org/jeecg/common/api/vo/Result.java

@@ -4,6 +4,8 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import org.apache.commons.lang3.StringUtils;
+import org.jeecg.common.Enum.ResultCode;
 import org.jeecg.common.constant.CommonConstant;
 
 import java.io.Serializable;
@@ -37,13 +39,13 @@ public class Result<T> implements Serializable {
 	 */
 	@ApiModelProperty(value = "返回代码")
 	private Integer code = 0;
-	
+
 	/**
 	 * 返回数据对象 data
 	 */
 	@ApiModelProperty(value = "返回数据对象")
 	private T result;
-	
+
 	/**
 	 * 时间戳
 	 */
@@ -62,7 +64,7 @@ public class Result<T> implements Serializable {
 		this.code = code;
 		this.message = message;
 	}
-	
+
 	public Result<T> success(String message) {
 		this.message = message;
 		this.code = CommonConstant.SC_OK_200;
@@ -148,7 +150,7 @@ public class Result<T> implements Serializable {
 	public static<T> Result<T> error(String msg) {
 		return error(CommonConstant.SC_INTERNAL_SERVER_ERROR_500, msg);
 	}
-	
+
 	public static<T> Result<T> error(int code, String msg) {
 		Result<T> r = new Result<T>();
 		r.setCode(code);
@@ -163,7 +165,20 @@ public class Result<T> implements Serializable {
 		this.success = false;
 		return this;
 	}
-
+	public static<T> Result<T> error(ResultCode code){
+		Result<T> r = new Result<T>();
+		r.setCode(code.getCode());
+		r.setMessage(code.getMessage());
+		r.setSuccess(false);
+		return r;
+	}
+	public static<T> Result<T> error(ResultCode code,String msg){
+		Result<T> r = new Result<T>();
+		r.setCode(code.getCode());
+		r.setMessage(StringUtils.isBlank(msg) ? code.getMessage(): msg);
+		r.setSuccess(false);
+		return r;
+	}
 	/**
 	 * 无权限访问返回结果
 	 */
@@ -174,4 +189,4 @@ public class Result<T> implements Serializable {
 	@JsonIgnore
 	private String onlTable;
 
-}
+}

+ 17 - 1
jeecg-boot-base-core/src/main/java/org/jeecg/common/util/CommonUtils.java

@@ -3,6 +3,7 @@ package org.jeecg.common.util;
 import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DataSourceProperty;
 import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties;
 import com.baomidou.mybatisplus.annotation.DbType;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.extension.toolkit.JdbcUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.jeecg.common.constant.CommonConstant;
@@ -351,4 +352,19 @@ public class CommonUtils {
         log.debug("-----Common getBaseUrl----- : " + baseDomainPath);
         return baseDomainPath;
     }
-}
+
+    /**
+     * mybatis 处理百分号模糊查询 查询出全量数据
+     * @param before
+     * @return
+     */
+    public static String escapeChar(String before) {
+        if (StringUtils.isNotBlank(before)) {
+            before = before.replaceAll("\\\\", "\\\\\\\\");
+            before = before.replaceAll("_", "\\\\_");
+            before = before.replaceAll("%", "\\\\%");
+            before = before.replaceAll("&amp;", "&");
+        }
+        return before;
+    }
+}

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

@@ -1,10 +1,15 @@
 package org.jeecg.modules.business.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import org.apache.commons.lang3.StringUtils;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.constant.CacheConstant;
 import org.jeecg.common.system.util.JwtUtil;
+import org.jeecg.common.util.CommonUtils;
 import org.jeecg.common.util.PasswordUtil;
+import org.jeecg.common.util.TokenUtils;
 import org.jeecg.common.util.oConvertUtils;
 import org.jeecg.modules.business.entity.BusHotel;
 import org.jeecg.modules.business.mapper.BusHotelMapper;
@@ -17,7 +22,9 @@ import org.springframework.stereotype.Service;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 
+import java.util.ArrayList;
 import java.util.Date;
+import java.util.List;
 
 /**
  * @Description: bus_hotel
@@ -37,4 +44,26 @@ public class BusHotelServiceImpl extends ServiceImpl<BusHotelMapper, BusHotel> i
         this.busHotelMapper.update(busHotel, new LambdaQueryWrapper<BusHotel>().eq(BusHotel::getId, busHotel.getId()));
         return Result.ok("信息审核成功!");
     }
+
+    /**
+     * @Description 根据名称模糊查询酒店数据
+     * @param name
+     * @Author: fendo
+     * @return ArrayList<BusHotel>
+     */
+    public  List<BusHotel> findHotelsByHotelName(String name) {
+        //接口自己验证参数是否正确  不相信别人
+        if(StringUtils.isBlank(name)) return new ArrayList<>();
+        /**
+         * @TODO 没有枚举
+         */
+        List<BusHotel> busHotelList = this.busHotelMapper.selectList(Wrappers.<BusHotel>lambdaQuery()
+                .eq(BusHotel::getTenantId, TokenUtils.currentTenantId())
+                .eq(BusHotel::getStatus, 1)
+                .eq(BusHotel::getCheckStatus, 1)
+                .eq(BusHotel::getDelFlag, false)
+                .like(BusHotel::getName, CommonUtils.escapeChar(name))
+        );
+        return busHotelList;
+    }
 }

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

@@ -0,0 +1,8 @@
+package org.jeecg.modules.rooms.DTO;
+
+import lombok.Data;
+import org.jeecg.modules.rooms.entity.CesRoomLayout;
+
+@Data
+public class CesRoomLayoutDto  extends CesRoomLayout {
+}

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

@@ -0,0 +1,10 @@
+package org.jeecg.modules.rooms.DTO;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class CesRoomLayoutRemoveDto {
+    private List<String> roomLayoutIds;
+}

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

@@ -0,0 +1,33 @@
+package org.jeecg.modules.rooms.DTO;
+
+import lombok.Data;
+
+/**
+ * <p>
+ * 租户房型列表查询后端接受前端参数DTO类
+ * </p>
+ *
+ * @author fendo
+ * @since 2023-03-01
+ */
+@Data
+public class CesRoomLayoutSearchDto {
+    /**
+     * 商家名称
+     */
+    private String hotelName;
+
+    /**
+     * 房型名称
+     */
+    private String name;
+
+    /***
+     * app上架状态
+     */
+    private Integer appState;
+
+    private Integer pageNum;
+
+    private Integer pageSize;
+}

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

@@ -0,0 +1,48 @@
+package org.jeecg.modules.rooms.Enum;
+
+public class CouponEnums {
+
+	/**
+	 * 房型app上架状态 枚举
+	 */
+	public static enum RoomLayoutAppStateEnum{
+		UP(1,"上架"), DOWN(2,"下架");
+
+		int code = 0;
+		String value = "";
+
+		private RoomLayoutAppStateEnum(int code,String value){
+			this.code = code;
+			this.value = value;
+		}
+
+		public int code(){
+			return code;
+		}
+
+		public String getValue(){
+			return value;
+		}
+
+		//根据CODE获取类型
+		public static RoomLayoutAppStateEnum val(int vcode){
+			for(RoomLayoutAppStateEnum bld: values()){
+				if(bld.code == vcode){
+					return bld;
+				}
+			}
+			return DOWN;
+		}
+
+		public static RoomLayoutAppStateEnum val(String value){
+			for(RoomLayoutAppStateEnum bld : values()){
+				if(bld.value.equals(value)){
+					return bld;
+				}
+			}
+			return DOWN;
+		}
+	}
+
+
+}

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

@@ -0,0 +1,21 @@
+package org.jeecg.modules.rooms.Vo;
+
+import lombok.Data;
+import org.jeecg.modules.rooms.entity.CesRoomLayout;
+
+/**
+ * <p>
+ * 租户房型前端Vo类
+ * </p>
+ *
+ * @author fendo
+ * @since 2023-03-01
+ */
+@Data
+public class CesRoomLayoutVo extends CesRoomLayout {
+    /**
+     * 酒店名称
+     */
+    private String hotelName;
+
+}

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

@@ -0,0 +1,196 @@
+package org.jeecg.modules.rooms.controller;
+
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.EnumUtil;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang3.StringUtils;
+import org.jeecg.common.Enum.ResultCode;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.modules.rooms.DTO.CesRoomLayoutDto;
+import org.jeecg.modules.rooms.DTO.CesRoomLayoutRemoveDto;
+import org.jeecg.modules.rooms.DTO.CesRoomLayoutSearchDto;
+import org.jeecg.modules.rooms.Enum.CouponEnums;
+import org.jeecg.modules.rooms.service.CesRoomLayoutServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * <p>
+ * 租户房型记录表 前端控制器
+ * </p>
+ *
+ * @author fendo
+ * @since 2023-03-01
+ */
+@RestController
+@RequestMapping("/rooms/cesRoomLayout")
+public class CesRoomLayoutController {
+
+    @Resource
+    private CesRoomLayoutServiceImpl cesRoomLayoutService;
+
+    @ApiOperation(value="房型分页列表查询", notes="房型分页列表查询")
+    @PostMapping(value = "/list")
+    public Result list(@RequestBody CesRoomLayoutSearchDto dto){
+        if(dto.getPageNum().intValue() <= 0){
+            return Result.error("页数不能小于等于0");
+        }
+        if(dto.getPageSize().intValue() < 10){
+            return Result.error("分页条数不能小于10");
+        }
+        if(dto.getAppState() != null && dto.getAppState().intValue() != 0){
+            List<Object> codes = EnumUtil.getFieldValues(CouponEnums.RoomLayoutAppStateEnum.class, "code");
+            if(!codes.contains(dto.getAppState().intValue())){
+                return Result.error("参数不正确!请选择正确的上架状态!");
+            }
+        }
+        try{
+            return  cesRoomLayoutService.findRoomLayoutList(dto);
+        }catch (Exception e){
+            return Result.error(e.getMessage());
+        }
+    }
+
+
+    @ApiOperation(value="创建房型房型", notes="创建房型查询")
+    @PostMapping(value = "/save")
+    public Result createRoomLayout(@RequestBody CesRoomLayoutDto dto){
+        if(StringUtils.isBlank(dto.getHotelId())){
+            return Result.error(ResultCode.PARAM_MISS);
+        }
+        if(StringUtils.isBlank(dto.getName())){
+            return Result.error(ResultCode.PARAM_MISS);
+        }
+        if(BigDecimal.ZERO.compareTo(dto.getMarketPrice()) == 0){
+            return Result.error(ResultCode.PARAM_MISS);
+        }
+        if(dto.getCanLivePersonNum().intValue() < 0){
+            return Result.error(ResultCode.PARAM_MISS);
+        }
+        if(dto.getBreakfastNum().intValue() < 0){
+            return Result.error(ResultCode.PARAM_MISS);
+        }
+        if(dto.getLunchNum().intValue() < 0){
+            return Result.error(ResultCode.PARAM_MISS);
+        }
+        if(dto.getDinnerNum().intValue() < 0){
+            return Result.error(ResultCode.PARAM_MISS);
+        }
+        try{
+            return  cesRoomLayoutService.createRoomLayout(dto);
+        }catch (Exception e){
+            return Result.error(e.getMessage());
+        }
+    }
+
+    @ApiOperation(value="修改房型房型", notes="修改房型查询")
+    @PostMapping(value = "/modify")
+    public Result modifyCesRoomLayout(@RequestBody CesRoomLayoutDto dto){
+        if(StringUtils.isBlank(dto.getId())){
+            return Result.error(ResultCode.PARAM_MISS);
+        }
+        if(StringUtils.isBlank(dto.getHotelId())){
+            return Result.error(ResultCode.PARAM_MISS);
+        }
+        if(StringUtils.isBlank(dto.getName())){
+            return Result.error(ResultCode.PARAM_MISS);
+        }
+        if(BigDecimal.ZERO.compareTo(dto.getMarketPrice()) == 0){
+            return Result.error(ResultCode.PARAM_MISS);
+        }
+        if(dto.getCanLivePersonNum().intValue() < 0){
+            return Result.error(ResultCode.PARAM_MISS);
+        }
+        if(dto.getBreakfastNum().intValue() < 0){
+            return Result.error(ResultCode.PARAM_MISS);
+        }
+        if(dto.getLunchNum().intValue() < 0){
+            return Result.error(ResultCode.PARAM_MISS);
+        }
+        if(dto.getDinnerNum().intValue() < 0){
+            return Result.error(ResultCode.PARAM_MISS);
+        }
+        try{
+            return  cesRoomLayoutService.modifyCesRoomLayout(dto);
+        }catch (Exception e){
+            return Result.error(e.getMessage());
+        }
+    }
+
+
+
+    @ApiOperation(value="删除房型房型", notes="删除房型")
+    @PostMapping(value = "/remove")
+    public Result removeRoomLayout(@RequestBody CesRoomLayoutRemoveDto dto){
+        if(CollectionUtil.isEmpty(dto.getRoomLayoutIds())){
+            return Result.error(ResultCode.PARAM_MISS);
+        }
+        try{
+            return  cesRoomLayoutService.removeRoomLayout(dto);
+        }catch (Exception e){
+            return Result.error(e.getMessage());
+        }
+    }
+
+
+    @ApiOperation(value="修改启用状态", notes="修改启用状态")
+    @PostMapping(value = "/modifyState/{roomLayoutId}")
+    public Result modifyState(@PathVariable String roomLayoutId, @RequestParam String hotelId, @RequestParam Integer state){
+        if(StringUtils.isBlank(roomLayoutId)){
+            return Result.error(ResultCode.PARAM_MISS);
+        }
+        if(StringUtils.isBlank(hotelId)){
+            return Result.error(ResultCode.PARAM_MISS);
+        }
+        if(state < 0){
+            return Result.error(ResultCode.PARAM_MISS);
+        }
+        try{
+            return  cesRoomLayoutService.modifyState(roomLayoutId,hotelId, state.intValue() == 1 ? Boolean.TRUE: Boolean.FALSE);
+        }catch (Exception e){
+            return Result.error(e.getMessage());
+        }
+    }
+
+
+    @ApiOperation(value="修改上架状态", notes="修改上架状态")
+    @PostMapping(value = "/modifyAppState/{roomLayoutId}")
+    public Result modifyAppState(@PathVariable String roomLayoutId, @RequestParam String hotelId, @RequestParam Integer state){
+        if(StringUtils.isBlank(roomLayoutId)){
+            return Result.error(ResultCode.PARAM_MISS);
+        }
+        if(StringUtils.isBlank(hotelId)){
+            return Result.error(ResultCode.PARAM_MISS);
+        }
+        if(state < 0){
+            return Result.error(ResultCode.PARAM_MISS);
+        }
+        try{
+            return  cesRoomLayoutService.modifyAppState(roomLayoutId,hotelId, state.intValue() == 1 ? Boolean.TRUE: Boolean.FALSE);
+        }catch (Exception e){
+            return Result.error(e.getMessage());
+        }
+    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+}
+

+ 216 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/rooms/entity/CesRoomLayout.java

@@ -0,0 +1,216 @@
+package org.jeecg.modules.rooms.entity;
+
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 租户房型记录表
+ * </p>
+ *
+ * @author fendo
+ * @since 2023-03-02
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("ces_room_layout")
+public class CesRoomLayout extends Model<CesRoomLayout> {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键id
+     */
+    private String id;
+
+    /**
+     * 租户ID
+     */
+    private String tenantId;
+
+    /**
+     * 酒店数据ID
+     */
+    private String hotelId;
+
+    /**
+     * 房型大图
+     */
+    private String cover;
+
+    /**
+     * 房型图片
+     */
+    private String picture;
+
+    /**
+     * 房间名称
+     */
+    private String name;
+
+    /**
+     * 门市价
+     */
+    private BigDecimal marketPrice;
+
+    /**
+     * 可住人数
+     */
+    private Integer canLivePersonNum;
+
+    /**
+     * 早餐
+     */
+    private Integer breakfastNum;
+
+    /**
+     * 中餐
+     */
+    private Integer lunchNum;
+
+    /**
+     * 晚餐
+     */
+    private Integer dinnerNum;
+
+    /**
+     * 状态 0 否 1是
+     */
+    private Boolean state;
+
+    /**
+     * 是否app上架 0否 1是
+     */
+    private Boolean appState;
+
+    /**
+     * 1 全天房 2 钟点房
+     */
+    private String checkType;
+
+    /**
+     * 是否有窗户
+     */
+    private Boolean windows;
+
+    /**
+     * 房间通用面积
+     */
+    private Float area;
+
+    /**
+     * 床型尺寸
+     */
+    private String bedSize;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 房间标签
+     */
+    private String tags;
+
+    /**
+     * 房间设施
+     */
+    private String facilities;
+
+    /**
+     * 取消规则提前天数  规则 ID == 1  不用考虑这个
+     */
+    private Integer cancelDayNum;
+
+    /**
+      1 入住当天
+      2 入住前 天数 可以取消
+      3 入住前 多少天 可以取消 要收取罚金
+      4不可以取消
+      5 可取消
+    */
+    private Integer cancelRule;
+
+    /**
+     * 创建时间
+     */
+    @TableField("createAt")
+    private LocalDateTime createAt;
+
+    /**
+     * 修改时间
+     */
+    @TableField("updateAt")
+    private LocalDateTime updateAt;
+
+    /**
+     * 逻辑删除字段
+     */
+    private Boolean invalid;
+
+
+    public static final String ID = "id";
+
+    public static final String TENANT_ID = "tenant_id";
+
+    public static final String HOTEL_ID = "hotel_id";
+
+    public static final String COVER = "cover";
+
+    public static final String PICTURE = "picture";
+
+    public static final String NAME = "name";
+
+    public static final String MARKET_PRICE = "market_price";
+
+    public static final String CAN_LIVE_PERSON_NUM = "can_live_person_num";
+
+    public static final String BREAKFAST_NUM = "breakfast_num";
+
+    public static final String LUNCH_NUM = "lunch_num";
+
+    public static final String DINNER_NUM = "dinner_num";
+
+    public static final String STATE = "state";
+
+    public static final String APP_STATE = "app_state";
+
+    public static final String CHECK_TYPE = "check_type";
+
+    public static final String WINDOWS = "windows";
+
+    public static final String AREA = "area";
+
+    public static final String BED_SIZE = "bed_size";
+
+    public static final String REMARK = "remark";
+
+    public static final String TAGS = "tags";
+
+    public static final String FACILITIES = "facilities";
+
+    public static final String CANCEL_DAY_NUM = "cancel_day_num";
+
+    public static final String CANCEL_RULE = "cancel_rule";
+
+    public static final String CREATEAT = "createAt";
+
+    public static final String UPDATEAT = "updateAt";
+
+    public static final String INVALID = "invalid";
+
+    @Override
+    public Serializable pkVal() {
+        return this.id;
+    }
+
+}

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

@@ -0,0 +1,16 @@
+package org.jeecg.modules.rooms.mapper;
+
+import org.jeecg.modules.rooms.entity.CesRoomLayout;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 租户房型记录表 Mapper 接口
+ * </p>
+ *
+ * @author fendo
+ * @since 2023-03-01
+ */
+public interface CesRoomLayoutMapper extends BaseMapper<CesRoomLayout> {
+
+}

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

@@ -0,0 +1,223 @@
+package org.jeecg.modules.rooms.service;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.bean.copier.CopyOptions;
+import cn.hutool.core.collection.CollectionUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.util.CommonUtils;
+import org.jeecg.common.util.TokenUtils;
+import org.jeecg.modules.business.entity.BusHotel;
+import org.jeecg.modules.business.service.impl.BusHotelServiceImpl;
+import org.jeecg.modules.rooms.DTO.CesRoomLayoutDto;
+import org.jeecg.modules.rooms.DTO.CesRoomLayoutRemoveDto;
+import org.jeecg.modules.rooms.DTO.CesRoomLayoutSearchDto;
+import org.jeecg.modules.rooms.Vo.CesRoomLayoutVo;
+import org.jeecg.modules.rooms.entity.CesRoomLayout;
+import org.jeecg.modules.rooms.mapper.CesRoomLayoutMapper;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 租户房型记录表 服务实现类
+ * </p>
+ *
+ * @author fendo
+ * @since 2023-03-01
+ */
+@Service
+public class CesRoomLayoutServiceImpl extends ServiceImpl<CesRoomLayoutMapper, CesRoomLayout> implements IService<CesRoomLayout> {
+
+    @Resource
+    private CesRoomLayoutMapper cesRoomLayoutMapper;
+
+    @Resource
+    private BusHotelServiceImpl busHotelService;
+
+
+    /**
+     * @Desc: 分页查询房型数据
+     * @param searchDto
+     * @return
+     */
+    public Result findRoomLayoutList(CesRoomLayoutSearchDto searchDto){
+        QueryWrapper<CesRoomLayout> queryWrapper = new QueryWrapper<>();
+        if(!StringUtils.isBlank(searchDto.getHotelName())){
+            //查询当前这个人 管理的酒店名称like 参数 的酒店IDS
+            List<BusHotel> busHotelList = busHotelService.findHotelsByHotelName(searchDto.getHotelName());
+            List<String> busHotelIds = busHotelList.stream().map(v -> v.getId()).collect(Collectors.toList());
+            if(!CollectionUtil.isEmpty(busHotelIds)){
+                queryWrapper.in(CesRoomLayout.HOTEL_ID, busHotelIds);
+            }
+        }
+        //房型名称模糊查询
+        if(!StringUtils.isBlank(searchDto.getName())){
+            //处理百分号 mybatis plus bug 查询 % 出现全量数据
+            queryWrapper.like(CesRoomLayout.NAME, CommonUtils.escapeChar(searchDto.getName()));
+        }
+        //查询上架状态
+        if(searchDto.getAppState() != null && searchDto.getAppState().intValue() != 0){
+            queryWrapper.eq(CesRoomLayout.APP_STATE, searchDto.getAppState().intValue());
+        }
+        //默认排序  未删除过滤 当前租户
+        queryWrapper.eq(CesRoomLayout.TENANT_ID, TokenUtils.currentTenantId());
+        queryWrapper.orderByDesc(CesRoomLayout.CREATEAT);
+        queryWrapper.eq(CesRoomLayout.INVALID, false);
+
+        IPage<CesRoomLayout> dataPage = cesRoomLayoutMapper.selectPage(new Page<>(searchDto.getPageNum().intValue(),searchDto.getPageSize().intValue()),queryWrapper);
+        List<CesRoomLayoutVo> voList = new ArrayList<>();
+        List<CesRoomLayout> data = dataPage.getRecords();
+
+        Map<String,Object> map = new HashMap<>();
+        map.put("list",dataPage.getRecords());
+        map.put("total",dataPage.getTotal());
+        return Result.OK(map);
+    }
+
+
+    /**
+     * 创建房型
+     * @param cesRoomLayoutDto
+     * @return
+     */
+    public Result createRoomLayout(CesRoomLayoutDto cesRoomLayoutDto){
+        //查询是否有相同名称的房型
+        QueryWrapper<CesRoomLayout> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq(CesRoomLayout.HOTEL_ID, cesRoomLayoutDto.getHotelId());
+        queryWrapper.eq(CesRoomLayout.NAME,cesRoomLayoutDto.getName());
+        queryWrapper.eq(CesRoomLayout.TENANT_ID, TokenUtils.currentTenantId());
+        queryWrapper.eq(CesRoomLayout.INVALID, false);
+
+        CesRoomLayout roomLayout =  cesRoomLayoutMapper.selectOne(queryWrapper);
+
+        if(!ObjectUtils.isEmpty(roomLayout)) return Result.error("已有相同名称的房型在当前酒店下!");
+
+        CesRoomLayout cesRoomLayout = new CesRoomLayout();
+        BeanUtil.copyProperties(cesRoomLayoutDto,cesRoomLayout,CopyOptions.create().setIgnoreNullValue(true).setIgnoreError(true));
+        cesRoomLayout.setTenantId(TokenUtils.currentTenantId());
+        cesRoomLayout.setHotelId(cesRoomLayoutDto.getHotelId());
+        cesRoomLayout.setCreateAt(LocalDateTime.now());
+        cesRoomLayout.setUpdateAt(LocalDateTime.now());
+        cesRoomLayout.setAppState(false);
+        cesRoomLayout.setState(true);//默认启用
+        cesRoomLayout.setInvalid(false);
+        cesRoomLayoutMapper.insert(cesRoomLayout);
+        return Result.OK("操作成功!");
+    }
+
+    /**
+     * 修改房型
+     * @param roomLayoutDto
+     * @return
+     */
+    public Result  modifyCesRoomLayout(CesRoomLayoutDto roomLayoutDto){
+        //查询是否有相同名称的房型
+        QueryWrapper<CesRoomLayout> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq(CesRoomLayout.HOTEL_ID, roomLayoutDto.getHotelId());
+        queryWrapper.eq(CesRoomLayout.ID,roomLayoutDto.getId());
+        queryWrapper.eq(CesRoomLayout.TENANT_ID, TokenUtils.currentTenantId());
+        queryWrapper.eq(CesRoomLayout.INVALID, false);
+        CesRoomLayout roomLayout = cesRoomLayoutMapper.selectOne(queryWrapper);
+        if(ObjectUtils.isEmpty(roomLayout)) return Result.error("房型数据未找到!");
+
+        //忽略空值 不然会覆盖
+        BeanUtil.copyProperties(roomLayoutDto,roomLayout, CopyOptions.create().setIgnoreNullValue(true).setIgnoreError(true));
+        roomLayout.setUpdateAt(LocalDateTime.now());
+        cesRoomLayoutMapper.updateById(roomLayout);
+        return Result.ok("修改成功!");
+    }
+
+
+    /**
+     * @param roomLayoutDto
+     * @return
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public Result removeRoomLayout(CesRoomLayoutRemoveDto roomLayoutDto){
+        QueryWrapper<CesRoomLayout> queryWrapper = new QueryWrapper<>();
+        queryWrapper.in(CesRoomLayout.ID, roomLayoutDto.getRoomLayoutIds());
+        queryWrapper.eq(CesRoomLayout.TENANT_ID, TokenUtils.currentTenantId());
+        queryWrapper.eq(CesRoomLayout.INVALID, false);
+        List<CesRoomLayout> roomLayouts = cesRoomLayoutMapper.selectList(queryWrapper);
+        if(CollectionUtil.isEmpty(roomLayouts)) return Result.error("房型数据未找到!");
+        roomLayouts.forEach(v -> {
+            v.setAppState(false);
+            v.setState(false);
+            v.setInvalid(true);
+            v.setUpdateAt(LocalDateTime.now());
+        });
+        saveOrUpdateBatch(roomLayouts);
+        return Result.ok("删除成功!");
+    }
+
+
+    /**
+     * 修改启用状态
+     * @param roomLayoutId
+     * @param hotelId
+     * @param state
+     * @return
+     */
+    public Result modifyState(String roomLayoutId,String hotelId, Boolean state){
+        QueryWrapper<CesRoomLayout> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq(CesRoomLayout.HOTEL_ID, hotelId);
+        queryWrapper.eq(CesRoomLayout.ID,roomLayoutId);
+        queryWrapper.eq(CesRoomLayout.TENANT_ID, TokenUtils.currentTenantId());
+        queryWrapper.eq(CesRoomLayout.INVALID, false);
+        CesRoomLayout roomLayout = cesRoomLayoutMapper.selectOne(queryWrapper);
+        if(ObjectUtils.isEmpty(roomLayout)) return Result.error("房型数据未找到!");
+        roomLayout.setState(state);
+        roomLayout.setUpdateAt(LocalDateTime.now());
+        cesRoomLayoutMapper.updateById(roomLayout);
+        return Result.ok("修改成功!");
+    }
+
+    /**
+     * 修改上架状态
+     * @param roomLayoutId
+     * @param hotelId
+     * @param state
+     * @return
+     */
+    public Result modifyAppState(String roomLayoutId,String hotelId, Boolean state){
+        QueryWrapper<CesRoomLayout> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq(CesRoomLayout.HOTEL_ID, hotelId);
+        queryWrapper.eq(CesRoomLayout.ID,roomLayoutId);
+        queryWrapper.eq(CesRoomLayout.TENANT_ID, TokenUtils.currentTenantId());
+        queryWrapper.eq(CesRoomLayout.INVALID, false);
+        CesRoomLayout roomLayout = cesRoomLayoutMapper.selectOne(queryWrapper);
+        if(ObjectUtils.isEmpty(roomLayout)) return Result.error("房型数据未找到!");
+        /**
+         * @TODO: 验证是否上传大图
+         */
+        if(StringUtils.isBlank(roomLayout.getCover())) return Result.error("请上传房型大图!");
+        roomLayout.setAppState(state);
+        roomLayout.setUpdateAt(LocalDateTime.now());
+        cesRoomLayoutMapper.updateById(roomLayout);
+        return Result.ok("修改成功!");
+    }
+
+
+
+
+
+
+
+
+
+}

+ 6 - 5
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/model/DuplicateCheckVo.java

@@ -22,23 +22,24 @@ public class DuplicateCheckVo implements Serializable {
 	 */
 	@ApiModelProperty(value="表名",name="tableName",example="sys_log")
 	private String tableName;
-	
+
 	/**
 	 * 字段名
 	 */
 	@ApiModelProperty(value="字段名",name="fieldName",example="id")
 	private String fieldName;
-	
+
 	/**
 	 * 字段值
 	 */
 	@ApiModelProperty(value="字段值",name="fieldVal",example="1000")
 	private String fieldVal;
-	
+
 	/**
 	 * 数据ID
 	*/
-	@ApiModelProperty(value="数据ID",name="dataId",example="2000")
+	@ApiModelProperty(value="数" +
+			"据ID",name="dataId",example="2000")
 	private String dataId;
 
-}
+}