Browse Source

寝室管理模块

dzx 1 year ago
parent
commit
02437212c7
23 changed files with 1381 additions and 0 deletions
  1. 125 0
      src/main/java/com/xjrsoft/module/room/controller/RoomBedController.java
  2. 117 0
      src/main/java/com/xjrsoft/module/room/controller/RoomController.java
  3. 58 0
      src/main/java/com/xjrsoft/module/room/dto/AddRoomBedDto.java
  4. 58 0
      src/main/java/com/xjrsoft/module/room/dto/AddRoomDto.java
  5. 26 0
      src/main/java/com/xjrsoft/module/room/dto/RoomBedPageDto.java
  6. 36 0
      src/main/java/com/xjrsoft/module/room/dto/RoomPageDto.java
  7. 32 0
      src/main/java/com/xjrsoft/module/room/dto/UpdateRoomBedDto.java
  8. 32 0
      src/main/java/com/xjrsoft/module/room/dto/UpdateRoomDto.java
  9. 123 0
      src/main/java/com/xjrsoft/module/room/entity/Room.java
  10. 108 0
      src/main/java/com/xjrsoft/module/room/entity/RoomBed.java
  11. 21 0
      src/main/java/com/xjrsoft/module/room/mapper/RoomBedMapper.java
  12. 39 0
      src/main/java/com/xjrsoft/module/room/mapper/RoomMapper.java
  13. 17 0
      src/main/java/com/xjrsoft/module/room/service/IRoomBedService.java
  14. 39 0
      src/main/java/com/xjrsoft/module/room/service/IRoomService.java
  15. 19 0
      src/main/java/com/xjrsoft/module/room/service/impl/RoomBedServiceImpl.java
  16. 83 0
      src/main/java/com/xjrsoft/module/room/service/impl/RoomServiceImpl.java
  17. 118 0
      src/main/java/com/xjrsoft/module/room/vo/RoomBedPageVo.java
  18. 59 0
      src/main/java/com/xjrsoft/module/room/vo/RoomBedVo.java
  19. 98 0
      src/main/java/com/xjrsoft/module/room/vo/RoomPageVo.java
  20. 74 0
      src/main/java/com/xjrsoft/module/room/vo/RoomVo.java
  21. 35 0
      src/main/resources/mapper/room/RoomBedMapper.xml
  22. 35 0
      src/main/resources/mapper/room/RoomMapper.xml
  23. 29 0
      src/test/java/com/xjrsoft/xjrsoftboot/FreeMarkerGeneratorTest.java

+ 125 - 0
src/main/java/com/xjrsoft/module/room/controller/RoomBedController.java

@@ -0,0 +1,125 @@
+package com.xjrsoft.module.room.controller;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.xjrsoft.common.constant.GlobalConstant;
+import com.baomidou.mybatisplus.core.toolkit.StringPool;
+import com.xjrsoft.common.page.ConventPage;
+import com.xjrsoft.common.page.PageOutput;
+import com.xjrsoft.common.model.result.RT;
+import com.xjrsoft.common.utils.VoToColumnUtil;
+import com.xjrsoft.module.room.dto.AddRoomBedDto;
+import com.xjrsoft.module.room.dto.UpdateRoomBedDto;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import com.alibaba.excel.EasyExcel;
+import org.springframework.web.multipart.MultipartFile;
+import java.io.IOException;
+import com.alibaba.excel.support.ExcelTypeEnum;
+import org.springframework.http.ResponseEntity;
+import java.io.ByteArrayOutputStream;
+import java.util.ArrayList;
+
+import com.xjrsoft.module.room.dto.RoomBedPageDto;
+import com.xjrsoft.module.room.entity.RoomBed;
+import com.xjrsoft.module.room.service.IRoomBedService;
+import com.xjrsoft.module.room.vo.RoomBedPageVo;
+
+import com.xjrsoft.module.room.vo.RoomBedVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+/**
+* @title: 寝室床位
+* @Author dzx
+* @Date: 2023-12-27
+* @Version 1.0
+*/
+@RestController
+@RequestMapping("/room" + "/roomBed")
+@Api(value = "/room"  + "/roomBed",tags = "寝室床位代码")
+@AllArgsConstructor
+public class RoomBedController {
+
+
+    private final IRoomBedService roomBedService;
+
+    @GetMapping(value = "/page")
+    @ApiOperation(value="寝室床位列表(分页)")
+    @SaCheckPermission("roombed:detail")
+    public RT<PageOutput<RoomBedPageVo>> page(@Valid RoomBedPageDto dto){
+
+        LambdaQueryWrapper<RoomBed> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper
+                    .orderByDesc(RoomBed::getId)
+                .select(RoomBed.class,x -> VoToColumnUtil.fieldsToColumns(RoomBedPageVo.class).contains(x.getProperty()));
+        IPage<RoomBed> page = roomBedService.page(ConventPage.getPage(dto), queryWrapper);
+        PageOutput<RoomBedPageVo> pageOutput = ConventPage.getPageOutput(page, RoomBedPageVo.class);
+        return RT.ok(pageOutput);
+    }
+
+    @GetMapping(value = "/info")
+    @ApiOperation(value="根据id查询寝室床位信息")
+    @SaCheckPermission("roombed:detail")
+    public RT<RoomBedVo> info(@RequestParam Long id){
+        RoomBed roomBed = roomBedService.getById(id);
+        if (roomBed == null) {
+           return RT.error("找不到此数据!");
+        }
+        return RT.ok(BeanUtil.toBean(roomBed, RoomBedVo.class));
+    }
+
+
+    @PostMapping
+    @ApiOperation(value = "新增寝室床位")
+    @SaCheckPermission("roombed:add")
+    public RT<Boolean> add(@Valid @RequestBody AddRoomBedDto dto){
+        RoomBed roomBed = BeanUtil.toBean(dto, RoomBed.class);
+        boolean isSuccess = roomBedService.save(roomBed);
+    return RT.ok(isSuccess);
+    }
+
+    @PutMapping
+    @ApiOperation(value = "修改寝室床位")
+    @SaCheckPermission("roombed:edit")
+    public RT<Boolean> update(@Valid @RequestBody UpdateRoomBedDto dto){
+
+        RoomBed roomBed = BeanUtil.toBean(dto, RoomBed.class);
+        return RT.ok(roomBedService.updateById(roomBed));
+
+    }
+
+    @DeleteMapping
+    @ApiOperation(value = "删除寝室床位")
+    @SaCheckPermission("roombed:delete")
+    public RT<Boolean> delete(@Valid @RequestBody List<Long> ids){
+        return RT.ok(roomBedService.removeBatchByIds(ids));
+
+    }
+    @PostMapping("/import")
+    @ApiOperation(value = "导入")
+    public RT<Boolean> importData(@RequestParam MultipartFile file) throws IOException {
+        List<RoomBedPageVo> savedDataList = EasyExcel.read(file.getInputStream()).head(RoomBedPageVo.class).sheet().doReadSync();
+        Boolean result = roomBedService.saveBatch(BeanUtil.copyToList(savedDataList, RoomBed.class));
+        return RT.ok(result);
+    }
+
+    @GetMapping("/export")
+    @ApiOperation(value = "导出")
+    public ResponseEntity<byte[]> exportData(@Valid RoomBedPageDto dto, @RequestParam(defaultValue = "false") Boolean isTemplate) {
+        List<RoomBedPageVo> customerList = isTemplate != null && isTemplate ? new ArrayList<>() : ((PageOutput<RoomBedPageVo>) page(dto).getData()).getList();
+        ByteArrayOutputStream bot = new ByteArrayOutputStream();
+        EasyExcel.write(bot, RoomBedPageVo.class).automaticMergeHead(false).excelType(ExcelTypeEnum.XLSX).sheet().doWrite(customerList);
+
+        return RT.fileStream(bot.toByteArray(), "RoomBed" + ExcelTypeEnum.XLSX.getValue());
+    }
+}

+ 117 - 0
src/main/java/com/xjrsoft/module/room/controller/RoomController.java

@@ -0,0 +1,117 @@
+package com.xjrsoft.module.room.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import cn.hutool.core.bean.BeanUtil;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.support.ExcelTypeEnum;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.xjrsoft.common.model.result.RT;
+import com.xjrsoft.common.page.ConventPage;
+import com.xjrsoft.common.page.PageOutput;
+import com.xjrsoft.module.room.dto.AddRoomDto;
+import com.xjrsoft.module.room.dto.RoomPageDto;
+import com.xjrsoft.module.room.dto.UpdateRoomDto;
+import com.xjrsoft.module.room.entity.Room;
+import com.xjrsoft.module.room.service.IRoomService;
+import com.xjrsoft.module.room.vo.RoomPageVo;
+import com.xjrsoft.module.room.vo.RoomVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+* @title: 寝室
+* @Author dzx
+* @Date: 2023-12-27
+* @Version 1.0
+*/
+@RestController
+@RequestMapping("/room" + "/room")
+@Api(value = "/room"  + "/room",tags = "寝室代码")
+@AllArgsConstructor
+public class RoomController {
+
+
+    private final IRoomService roomService;
+
+    @GetMapping(value = "/page")
+    @ApiOperation(value="寝室列表(分页)")
+    @SaCheckPermission("room:detail")
+    public RT<PageOutput<RoomPageVo>> page(@Valid RoomPageDto dto){
+
+        Page<RoomPageVo> page = roomService.getPage(new Page<>(dto.getLimit(), dto.getSize()), dto);
+        PageOutput<RoomPageVo> pageOutput = ConventPage.getPageOutput(page, RoomPageVo.class);
+        return RT.ok(pageOutput);
+    }
+
+    @GetMapping(value = "/info")
+    @ApiOperation(value="根据id查询寝室信息")
+    @SaCheckPermission("room:detail")
+    public RT<RoomVo> info(@RequestParam Long id){
+        Room room = roomService.getById(id);
+        if (room == null) {
+           return RT.error("找不到此数据!");
+        }
+        return RT.ok(BeanUtil.toBean(room, RoomVo.class));
+    }
+
+
+    @PostMapping
+    @ApiOperation(value = "新增寝室")
+    @SaCheckPermission("room:add")
+    public RT<Boolean> add(@Valid @RequestBody AddRoomDto dto){
+        boolean isSuccess = roomService.saveBatch(dto);
+        return RT.ok(isSuccess);
+    }
+
+    @PutMapping
+    @ApiOperation(value = "修改寝室")
+    @SaCheckPermission("room:edit")
+    public RT<Boolean> update(@Valid @RequestBody UpdateRoomDto dto){
+
+        Room room = BeanUtil.toBean(dto, Room.class);
+        return RT.ok(roomService.updateById(room));
+
+    }
+
+    @DeleteMapping
+    @ApiOperation(value = "删除寝室")
+    @SaCheckPermission("room:delete")
+    public RT<Boolean> delete(@Valid @RequestBody Long id){
+        return RT.ok(roomService.deleteReachBed(id));
+
+    }
+    @PostMapping("/import")
+    @ApiOperation(value = "导入")
+    public RT<Boolean> importData(@RequestParam MultipartFile file) throws IOException {
+        List<RoomPageVo> savedDataList = EasyExcel.read(file.getInputStream()).head(RoomPageVo.class).sheet().doReadSync();
+        Boolean result = roomService.saveBatch(BeanUtil.copyToList(savedDataList, Room.class));
+        return RT.ok(result);
+    }
+
+    @GetMapping("/export")
+    @ApiOperation(value = "导出")
+    public ResponseEntity<byte[]> exportData(@Valid RoomPageDto dto, @RequestParam(defaultValue = "false") Boolean isTemplate) {
+        List<RoomPageVo> customerList = isTemplate != null && isTemplate ? new ArrayList<>() : ((PageOutput<RoomPageVo>) page(dto).getData()).getList();
+        ByteArrayOutputStream bot = new ByteArrayOutputStream();
+        EasyExcel.write(bot, RoomPageVo.class).automaticMergeHead(false).excelType(ExcelTypeEnum.XLSX).sheet().doWrite(customerList);
+
+        return RT.fileStream(bot.toByteArray(), "Room" + ExcelTypeEnum.XLSX.getValue());
+    }
+}

+ 58 - 0
src/main/java/com/xjrsoft/module/room/dto/AddRoomBedDto.java

@@ -0,0 +1,58 @@
+package com.xjrsoft.module.room.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.io.Serializable;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+import java.time.LocalTime;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Date;
+
+
+
+/**
+* @title: 寝室床位
+* @Author dzx
+* @Date: 2023-12-27
+* @Version 1.0
+*/
+@Data
+public class AddRoomBedDto implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 序号
+    */
+    @ApiModelProperty("序号")
+    private Integer sortCode;
+    /**
+    * 寝室编号(room)
+    */
+    @ApiModelProperty("寝室编号(room)")
+    private Long roomId;
+    /**
+    * 床位号
+    */
+    @ApiModelProperty("床位号")
+    private Integer bedNumber;
+    /**
+    * 学生用户编号
+    */
+    @ApiModelProperty("学生用户编号")
+    private Long studentUserId;
+    /**
+    * 是否入住(1:是 0:否)
+    */
+    @ApiModelProperty("是否入住(1:是 0:否)")
+    private Integer isCheckIn;
+    /**
+    * 备注
+    */
+    @ApiModelProperty("备注")
+    private String remark;
+
+}

+ 58 - 0
src/main/java/com/xjrsoft/module/room/dto/AddRoomDto.java

@@ -0,0 +1,58 @@
+package com.xjrsoft.module.room.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.io.Serializable;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+import java.time.LocalTime;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Date;
+
+
+
+/**
+* @title: 寝室
+* @Author dzx
+* @Date: 2023-12-27
+* @Version 1.0
+*/
+@Data
+public class AddRoomDto implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 楼栋(base_office_build)
+    */
+    @ApiModelProperty("楼栋(base_office_build)")
+    private Long officeBuildId;
+    /**
+    * 楼层
+    */
+    @ApiModelProperty("楼层")
+    private Integer floorNumber;
+    /**
+    * 入住身份(xjr_dictionary_item[check_in_status])
+    */
+    @ApiModelProperty("入住身份(xjr_dictionary_item[check_in_status])")
+    private String checkInStatus;
+    /**
+    * 入住性别(xjr_dictionary_item[gender])
+    */
+    @ApiModelProperty("入住性别(xjr_dictionary_item[gender])")
+    private String gender;
+    /**
+    * 床位数
+    */
+    @ApiModelProperty("床位数")
+    private Integer bedCount;
+    /**
+    * 是否是混合寝室【一个寝室有多个班级的学生】(1:是 0:否)
+    */
+    @ApiModelProperty("每层房间数")
+    private Integer floorRoomsCount;
+
+}

+ 26 - 0
src/main/java/com/xjrsoft/module/room/dto/RoomBedPageDto.java

@@ -0,0 +1,26 @@
+package com.xjrsoft.module.room.dto;
+
+import com.xjrsoft.common.page.PageInput;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalTime;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import java.util.Date;
+
+
+/**
+* @title: 寝室床位分页查询入参
+* @Author dzx
+* @Date: 2023-12-27
+* @Version 1.0
+*/
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class RoomBedPageDto extends PageInput {
+
+
+}

+ 36 - 0
src/main/java/com/xjrsoft/module/room/dto/RoomPageDto.java

@@ -0,0 +1,36 @@
+package com.xjrsoft.module.room.dto;
+
+import com.xjrsoft.common.page.PageInput;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalTime;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import java.util.Date;
+
+
+/**
+* @title: 寝室分页查询入参
+* @Author dzx
+* @Date: 2023-12-27
+* @Version 1.0
+*/
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class RoomPageDto extends PageInput {
+
+    @ApiModelProperty("楼栋id")
+    public Long officeBuildId;
+
+    @ApiModelProperty("楼层")
+    public Integer floorNumber;
+
+    @ApiModelProperty("入住身份")
+    public String checkInStatus;
+
+    @ApiModelProperty("入住性别")
+    public String gender;
+}

+ 32 - 0
src/main/java/com/xjrsoft/module/room/dto/UpdateRoomBedDto.java

@@ -0,0 +1,32 @@
+package com.xjrsoft.module.room.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.io.Serializable;
+
+import java.time.LocalTime;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import java.util.List;
+import java.util.Date;
+
+
+
+/**
+* @title: 寝室床位
+* @Author dzx
+* @Date: 2023-12-27
+* @Version 1.0
+*/
+@Data
+public class UpdateRoomBedDto extends AddRoomBedDto {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 主键编号
+    */
+    @ApiModelProperty("主键编号")
+    private Long id;
+}

+ 32 - 0
src/main/java/com/xjrsoft/module/room/dto/UpdateRoomDto.java

@@ -0,0 +1,32 @@
+package com.xjrsoft.module.room.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.io.Serializable;
+
+import java.time.LocalTime;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import java.util.List;
+import java.util.Date;
+
+
+
+/**
+* @title: 寝室
+* @Author dzx
+* @Date: 2023-12-27
+* @Version 1.0
+*/
+@Data
+public class UpdateRoomDto extends AddRoomDto {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 主键编号
+    */
+    @ApiModelProperty("主键编号")
+    private Long id;
+}

+ 123 - 0
src/main/java/com/xjrsoft/module/room/entity/Room.java

@@ -0,0 +1,123 @@
+package com.xjrsoft.module.room.entity;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.github.yulichang.annotation.EntityMapping;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.io.Serializable;
+import java.time.LocalTime;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Date;
+
+
+/**
+* @title: 寝室
+* @Author dzx
+* @Date: 2023-12-27
+* @Version 1.0
+*/
+@Data
+@TableName("room")
+@ApiModel(value = "room", description = "寝室")
+public class Room implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 主键编号
+    */
+    @ApiModelProperty("主键编号")
+    @TableId
+    private Long id;
+    /**
+    * 创建人
+    */
+    @ApiModelProperty("创建人")
+    @TableField(fill = FieldFill.INSERT)
+    private Long createUserId;
+    /**
+    * 创建时间
+    */
+    @ApiModelProperty("创建时间")
+    @TableField(fill = FieldFill.INSERT)
+    private Date createDate;
+    /**
+    * 修改人
+    */
+    @ApiModelProperty("修改人")
+    @TableField(fill = FieldFill.UPDATE)
+    private Long modifyUserId;
+    /**
+    * 修改时间
+    */
+    @ApiModelProperty("修改时间")
+    @TableField(fill = FieldFill.UPDATE)
+    private Date modifyDate;
+    /**
+    * 删除标记
+    */
+    @ApiModelProperty("删除标记")
+    @TableField(fill = FieldFill.INSERT)
+    @TableLogic
+    private Integer deleteMark;
+    /**
+    * 有效标志
+    */
+    @ApiModelProperty("有效标志")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer enabledMark;
+    /**
+    * 序号
+    */
+    @ApiModelProperty("序号")
+    private Integer sortCode;
+    /**
+    * 楼栋(base_office_build)
+    */
+    @ApiModelProperty("楼栋(base_office_build)")
+    private Long officeBuildId;
+    /**
+    * 楼层
+    */
+    @ApiModelProperty("楼层")
+    private Integer floorNumber;
+    /**
+    * 寝室名称
+    */
+    @ApiModelProperty("寝室名称")
+    private String roomName;
+    /**
+    * 入住身份(xjr_dictionary_item[check_in_status])
+    */
+    @ApiModelProperty("入住身份(xjr_dictionary_item[check_in_status])")
+    private String checkInStatus;
+    /**
+    * 入住性别(xjr_dictionary_item[gender])
+    */
+    @ApiModelProperty("入住性别(xjr_dictionary_item[gender])")
+    private String gender;
+    /**
+    * 床位数
+    */
+    @ApiModelProperty("床位数")
+    private Integer bedCount;
+    /**
+    * 是否是混合寝室【一个寝室有多个班级的学生】(1:是 0:否)
+    */
+    @ApiModelProperty("是否是混合寝室【一个寝室有多个班级的学生】(1:是 0:否)")
+    private Integer isMax;
+    /**
+    * 备注
+    */
+    @ApiModelProperty("备注")
+    private String remark;
+
+
+}

+ 108 - 0
src/main/java/com/xjrsoft/module/room/entity/RoomBed.java

@@ -0,0 +1,108 @@
+package com.xjrsoft.module.room.entity;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.github.yulichang.annotation.EntityMapping;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.io.Serializable;
+import java.time.LocalTime;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Date;
+
+
+/**
+* @title: 寝室床位
+* @Author dzx
+* @Date: 2023-12-27
+* @Version 1.0
+*/
+@Data
+@TableName("room_bed")
+@ApiModel(value = "room_bed", description = "寝室床位")
+public class RoomBed implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 主键编号
+    */
+    @ApiModelProperty("主键编号")
+    @TableId
+    private Long id;
+    /**
+    * 创建人
+    */
+    @ApiModelProperty("创建人")
+    @TableField(fill = FieldFill.INSERT)
+    private Long createUserId;
+    /**
+    * 创建时间
+    */
+    @ApiModelProperty("创建时间")
+    @TableField(fill = FieldFill.INSERT)
+    private Date createDate;
+    /**
+    * 修改人
+    */
+    @ApiModelProperty("修改人")
+    @TableField(fill = FieldFill.UPDATE)
+    private Long modifyUserId;
+    /**
+    * 修改时间
+    */
+    @ApiModelProperty("修改时间")
+    @TableField(fill = FieldFill.UPDATE)
+    private Date modifyDate;
+    /**
+    * 删除标记
+    */
+    @ApiModelProperty("删除标记")
+    @TableField(fill = FieldFill.INSERT)
+    @TableLogic
+    private Integer deleteMark;
+    /**
+    * 有效标志
+    */
+    @ApiModelProperty("有效标志")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer enabledMark;
+    /**
+    * 序号
+    */
+    @ApiModelProperty("序号")
+    private Integer sortCode;
+    /**
+    * 寝室编号(room)
+    */
+    @ApiModelProperty("寝室编号(room)")
+    private Long roomId;
+    /**
+    * 床位号
+    */
+    @ApiModelProperty("床位号")
+    private Integer bedNumber;
+    /**
+    * 学生用户编号
+    */
+    @ApiModelProperty("学生用户编号")
+    private Long studentUserId;
+    /**
+    * 是否入住(1:是 0:否)
+    */
+    @ApiModelProperty("是否入住(1:是 0:否)")
+    private Integer isCheckIn;
+    /**
+    * 备注
+    */
+    @ApiModelProperty("备注")
+    private String remark;
+
+
+}

+ 21 - 0
src/main/java/com/xjrsoft/module/room/mapper/RoomBedMapper.java

@@ -0,0 +1,21 @@
+package com.xjrsoft.module.room.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.github.yulichang.base.MPJBaseMapper;
+import com.xjrsoft.module.room.entity.RoomBed;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+* @title: 寝室床位
+* @Author dzx
+* @Date: 2023-12-27
+* @Version 1.0
+*/
+@Mapper
+public interface RoomBedMapper extends MPJBaseMapper<RoomBed> {
+    /**
+     * 返回最大的序号
+     * @return
+     */
+    Integer getMaxSortCode();
+}

+ 39 - 0
src/main/java/com/xjrsoft/module/room/mapper/RoomMapper.java

@@ -0,0 +1,39 @@
+package com.xjrsoft.module.room.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.yulichang.base.MPJBaseMapper;
+import com.xjrsoft.module.room.dto.AddRoomDto;
+import com.xjrsoft.module.room.dto.RoomPageDto;
+import com.xjrsoft.module.room.entity.Room;
+import com.xjrsoft.module.room.vo.RoomPageVo;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+* @title: 寝室
+* @Author dzx
+* @Date: 2023-12-27
+* @Version 1.0
+*/
+@Mapper
+public interface RoomMapper extends MPJBaseMapper<Room> {
+    /**
+     * 分页查询
+     * @param page
+     * @param dto
+     * @return
+     */
+    Page<RoomPageVo> getPage(Page<RoomPageDto> page, RoomPageDto dto);
+
+
+    /**
+     * 批量添加
+     */
+    Boolean saveBatch(AddRoomDto dto);
+
+    /**
+     * 返回最大的序号
+     * @return
+     */
+    Integer getMaxSortCode();
+}

+ 17 - 0
src/main/java/com/xjrsoft/module/room/service/IRoomBedService.java

@@ -0,0 +1,17 @@
+package com.xjrsoft.module.room.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.github.yulichang.base.MPJBaseService;
+import com.xjrsoft.module.room.entity.RoomBed;
+import lombok.Data;
+import java.util.List;
+
+/**
+* @title: 寝室床位
+* @Author dzx
+* @Date: 2023-12-27
+* @Version 1.0
+*/
+
+public interface IRoomBedService extends MPJBaseService<RoomBed> {
+}

+ 39 - 0
src/main/java/com/xjrsoft/module/room/service/IRoomService.java

@@ -0,0 +1,39 @@
+package com.xjrsoft.module.room.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.yulichang.base.MPJBaseService;
+import com.xjrsoft.module.room.dto.AddRoomDto;
+import com.xjrsoft.module.room.dto.RoomPageDto;
+import com.xjrsoft.module.room.entity.Room;
+import com.xjrsoft.module.room.vo.RoomPageVo;
+
+import java.util.List;
+
+/**
+* @title: 寝室
+* @Author dzx
+* @Date: 2023-12-27
+* @Version 1.0
+*/
+
+public interface IRoomService extends MPJBaseService<Room> {
+
+    /**
+     * 分页查询
+     * @param page
+     * @param dto
+     * @return
+     */
+    Page<RoomPageVo> getPage(Page<RoomPageDto> page, RoomPageDto dto);
+
+    /**
+     * 批量添加
+     */
+    Boolean saveBatch(AddRoomDto dto);
+
+
+    /**
+     * 批量添加
+     */
+    Boolean deleteReachBed(Long id);
+}

+ 19 - 0
src/main/java/com/xjrsoft/module/room/service/impl/RoomBedServiceImpl.java

@@ -0,0 +1,19 @@
+package com.xjrsoft.module.room.service.impl;
+
+import com.github.yulichang.base.MPJBaseServiceImpl;
+import com.xjrsoft.module.room.entity.RoomBed;
+import com.xjrsoft.module.room.mapper.RoomBedMapper;
+import com.xjrsoft.module.room.service.IRoomBedService;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+/**
+* @title: 寝室床位
+* @Author dzx
+* @Date: 2023-12-27
+* @Version 1.0
+*/
+@Service
+@AllArgsConstructor
+public class RoomBedServiceImpl extends MPJBaseServiceImpl<RoomBedMapper, RoomBed> implements IRoomBedService {
+}

+ 83 - 0
src/main/java/com/xjrsoft/module/room/service/impl/RoomServiceImpl.java

@@ -0,0 +1,83 @@
+package com.xjrsoft.module.room.service.impl;
+
+import cn.dev33.satoken.stp.StpUtil;
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.yulichang.base.MPJBaseServiceImpl;
+import com.xjrsoft.module.room.dto.AddRoomDto;
+import com.xjrsoft.module.room.dto.RoomPageDto;
+import com.xjrsoft.module.room.entity.Room;
+import com.xjrsoft.module.room.entity.RoomBed;
+import com.xjrsoft.module.room.mapper.RoomBedMapper;
+import com.xjrsoft.module.room.mapper.RoomMapper;
+import com.xjrsoft.module.room.service.IRoomService;
+import com.xjrsoft.module.room.vo.RoomPageVo;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+* @title: 寝室
+* @Author dzx
+* @Date: 2023-12-27
+* @Version 1.0
+*/
+@Service
+@AllArgsConstructor
+public class RoomServiceImpl extends MPJBaseServiceImpl<RoomMapper, Room> implements IRoomService {
+    private final RoomMapper roomMapper;
+    private final RoomBedMapper roomBedMapper;
+
+    @Override
+    public Page<RoomPageVo> getPage(Page<RoomPageDto> page, RoomPageDto dto) {
+        Page<RoomPageVo> result = roomMapper.getPage(page, dto);
+        return result;
+    }
+
+    @Override
+    public Boolean saveBatch(AddRoomDto dto) {
+        Integer maxSortCode = roomMapper.getMaxSortCode();
+        Date createDate = new Date();
+        long createUserId = StpUtil.getLoginIdAsLong();
+        for (int i = 0; i < dto.getFloorRoomsCount(); i ++){
+            //先添加寝室
+            Room room = BeanUtil.toBean(dto, Room.class);
+            room.setSortCode(maxSortCode + i);
+            room.setCreateDate(createDate);
+            room.setCreateUserId(createUserId);
+            room.setDeleteMark(0);
+            room.setEnabledMark(1);
+            room.setRoomName(dto.getFloorNumber() + String.format("%02d", (i + 1)));
+            roomMapper.insert(room);
+
+            Long roomId = room.getId();
+            Integer bedMaxSortCode = roomBedMapper.getMaxSortCode() + 1;
+            //生成床位数据
+            for (int j = 1; j <= dto.getBedCount(); j ++){
+                RoomBed bed = new RoomBed();
+                bed.setRoomId(roomId);
+                bed.setSortCode(bedMaxSortCode + j - 1);
+                bed.setCreateDate(createDate);
+                bed.setCreateUserId(createUserId);
+                bed.setDeleteMark(0);
+                bed.setEnabledMark(1);
+                bed.setBedNumber(j);
+                roomBedMapper.insert(bed);
+            }
+        }
+        return true;
+    }
+
+    @Override
+    public Boolean deleteReachBed(Long id) {
+        roomMapper.deleteById(id);
+        Map<String, Object> param = new HashMap<>();
+        param.put("room_id", id);
+        roomBedMapper.deleteByMap(param);
+        return true;
+    }
+}

+ 118 - 0
src/main/java/com/xjrsoft/module/room/vo/RoomBedPageVo.java

@@ -0,0 +1,118 @@
+package com.xjrsoft.module.room.vo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import com.xjrsoft.common.annotation.Trans;
+import com.xjrsoft.common.enums.TransType;
+import java.time.LocalTime;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+* @title: 寝室床位分页列表出参
+* @Author dzx
+* @Date: 2023-12-27
+* @Version 1.0
+*/
+@Data
+public class RoomBedPageVo {
+
+    /**
+    * 主键编号
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("主键编号")
+    @ApiModelProperty("主键编号")
+    private String id;
+    /**
+    * 创建人
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("创建人")
+    @ApiModelProperty("创建人")
+    private Long createUserId;
+    /**
+    * 创建时间
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("创建时间")
+    @ApiModelProperty("创建时间")
+    private Date createDate;
+    /**
+    * 修改人
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("修改人")
+    @ApiModelProperty("修改人")
+    private Long modifyUserId;
+    /**
+    * 修改时间
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("修改时间")
+    @ApiModelProperty("修改时间")
+    private Date modifyDate;
+    /**
+    * 删除标记
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("删除标记")
+    @ApiModelProperty("删除标记")
+    private Integer deleteMark;
+    /**
+    * 有效标志
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("有效标志")
+    @ApiModelProperty("有效标志")
+    private Integer enabledMark;
+    /**
+    * 序号
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("序号")
+    @ApiModelProperty("序号")
+    private Integer sortCode;
+    /**
+    * 寝室编号(room)
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("寝室编号(room)")
+    @ApiModelProperty("寝室编号(room)")
+    private Long roomId;
+    /**
+    * 床位号
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("床位号")
+    @ApiModelProperty("床位号")
+    private Integer bedNumber;
+    /**
+    * 学生用户编号
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("学生用户编号")
+    @ApiModelProperty("学生用户编号")
+    private Long studentUserId;
+    /**
+    * 是否入住(1:是 0:否)
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("是否入住(1:是 0:否)")
+    @ApiModelProperty("是否入住(1:是 0:否)")
+    private Integer isCheckIn;
+    /**
+    * 备注
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("备注")
+    @ApiModelProperty("备注")
+    private String remark;
+
+}

+ 59 - 0
src/main/java/com/xjrsoft/module/room/vo/RoomBedVo.java

@@ -0,0 +1,59 @@
+package com.xjrsoft.module.room.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalTime;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Date;
+
+/**
+* @title: 寝室床位表单出参
+* @Author dzx
+* @Date: 2023-12-27
+* @Version 1.0
+*/
+@Data
+public class RoomBedVo {
+
+    /**
+    * 主键编号
+    */
+    @ApiModelProperty("主键编号")
+    private Long id;
+    /**
+    * 序号
+    */
+    @ApiModelProperty("序号")
+    private Integer sortCode;
+    /**
+    * 寝室编号(room)
+    */
+    @ApiModelProperty("寝室编号(room)")
+    private Long roomId;
+    /**
+    * 床位号
+    */
+    @ApiModelProperty("床位号")
+    private Integer bedNumber;
+    /**
+    * 学生用户编号
+    */
+    @ApiModelProperty("学生用户编号")
+    private Long studentUserId;
+    /**
+    * 是否入住(1:是 0:否)
+    */
+    @ApiModelProperty("是否入住(1:是 0:否)")
+    private Integer isCheckIn;
+    /**
+    * 备注
+    */
+    @ApiModelProperty("备注")
+    private String remark;
+
+
+
+}

+ 98 - 0
src/main/java/com/xjrsoft/module/room/vo/RoomPageVo.java

@@ -0,0 +1,98 @@
+package com.xjrsoft.module.room.vo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+* @title: 寝室分页列表出参
+* @Author dzx
+* @Date: 2023-12-27
+* @Version 1.0
+*/
+@Data
+public class RoomPageVo {
+
+    /**
+    * 序号
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("序号")
+    @ApiModelProperty("序号")
+    private Integer sortCode;
+    /**
+    * 楼栋(base_office_build)
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("楼栋名称")
+    @ApiModelProperty("楼栋名称")
+    private String bulidName;
+    /**
+    * 楼层
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("楼层")
+    @ApiModelProperty("楼层")
+    private Integer floorNumber;
+    /**
+    * 寝室名称
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("寝室名称")
+    @ApiModelProperty("寝室名称")
+    private String roomName;
+    /**
+    * 入住身份
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("入住身份")
+    @ApiModelProperty("入住身份")
+    private String checkInStatusCn;
+    /**
+    * 入住性别(xjr_dictionary_item[gender])
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("入住性别")
+    @ApiModelProperty("入住性别")
+    private String genderCn;
+    /**
+    * 床位数
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("床位数")
+    @ApiModelProperty("床位数")
+    private Integer bedCount;
+
+    /**
+     * 寝室长
+     */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("寝室长")
+    @ApiModelProperty("寝室长")
+    private String studentAppointNames;
+
+    /**
+     * 寝室长
+     */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("宿管")
+    @ApiModelProperty("宿管")
+    private String teacherAppointNames;
+
+    /**
+    * 是否是混合寝室【一个寝室有多个班级的学生】(1:是 0:否)
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("是否是混合寝室【一个寝室有多个班级的学生】(1:是 0:否)")
+    @ApiModelProperty("是否是混合寝室【一个寝室有多个班级的学生】(1:是 0:否)")
+    private Integer isMax;
+    /**
+    * 备注
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("备注")
+    @ApiModelProperty("备注")
+    private String remark;
+
+}

+ 74 - 0
src/main/java/com/xjrsoft/module/room/vo/RoomVo.java

@@ -0,0 +1,74 @@
+package com.xjrsoft.module.room.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalTime;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Date;
+
+/**
+* @title: 寝室表单出参
+* @Author dzx
+* @Date: 2023-12-27
+* @Version 1.0
+*/
+@Data
+public class RoomVo {
+
+    /**
+    * 主键编号
+    */
+    @ApiModelProperty("主键编号")
+    private Long id;
+    /**
+    * 序号
+    */
+    @ApiModelProperty("序号")
+    private Integer sortCode;
+    /**
+    * 楼栋(base_office_build)
+    */
+    @ApiModelProperty("楼栋(base_office_build)")
+    private Long officeBuildId;
+    /**
+    * 楼层
+    */
+    @ApiModelProperty("楼层")
+    private Integer floorNumber;
+    /**
+    * 寝室名称
+    */
+    @ApiModelProperty("寝室名称")
+    private String roomName;
+    /**
+    * 入住身份(xjr_dictionary_item[check_in_status])
+    */
+    @ApiModelProperty("入住身份(xjr_dictionary_item[check_in_status])")
+    private String checkInStatus;
+    /**
+    * 入住性别(xjr_dictionary_item[gender])
+    */
+    @ApiModelProperty("入住性别(xjr_dictionary_item[gender])")
+    private String gender;
+    /**
+    * 床位数
+    */
+    @ApiModelProperty("床位数")
+    private Integer bedCount;
+    /**
+    * 是否是混合寝室【一个寝室有多个班级的学生】(1:是 0:否)
+    */
+    @ApiModelProperty("是否是混合寝室【一个寝室有多个班级的学生】(1:是 0:否)")
+    private Integer isMax;
+    /**
+    * 备注
+    */
+    @ApiModelProperty("备注")
+    private String remark;
+
+
+
+}

+ 35 - 0
src/main/resources/mapper/room/RoomBedMapper.xml

@@ -0,0 +1,35 @@
+<?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="com.xjrsoft.module.room.mapper.RoomBedMapper">
+    <select id="getPage" parameterType="com.xjrsoft.module.room.dto.RoomPageDto" resultType="com.xjrsoft.module.room.vo.RoomPageVo">
+        SELECT t1.id,t1.sort_code,t2.name AS bulid_name,t1.floor_number,t1.room_name,t3.name AS check_in_status_cn,t4.name AS gender_cn,t1.bed_count,
+        (SELECT GROUP_CONCAT(c2.name) FROM room_student_appoint c1
+        LEFT JOIN xjr_user c2 ON c1.student_user_id = c2.id
+        WHERE c1.delete_mark = 0 AND c1.room_id = t1.id) AS student_appoint_names,
+        (SELECT GROUP_CONCAT(c2.name) FROM room_teacher_appoint c1
+        LEFT JOIN xjr_user c2 ON c1.user_id = c2.id
+        WHERE c1.delete_mark = 0 AND c1.room_id = t1.id) AS teacher_appoint_names,t1.is_max,t1.remark FROM room t1
+        LEFT JOIN base_office_build t2 ON t1.office_build_id = t2.id
+        LEFT JOIN xjr_dictionary_detail t3 ON t1.check_in_status = t3.code AND t3.item_id = 1739843696019435521
+        LEFT JOIN xjr_dictionary_detail t4 ON t1.gender = t4.code AND t4.item_id = 2023000000000000004
+        WHERE t1.delete_mark = 0
+        <if test="dto.officeBuildId != null">
+            and t1.office_build_id = #{dto.officeBuildId}
+        </if>
+        <if test="dto.floorNumber != null">
+            and t1.floor_number = #{dto.floorNumber}
+        </if>
+        <if test="dto.checkInStatus != null and dto.checkInStatus != ''">
+            and t1.check_in_status = #{dto.checkInStatus}
+        </if>
+        <if test="dto.gender != null and dto.gender != ''">
+            and t1.gender = #{dto.gender}
+        </if>
+        ORDER BY t1.sort_code
+    </select>
+    <select id="getMaxSortCode" resultType="java.lang.Integer">
+        SELECT IFNULL(MAX(sort_code),0) FROM room_bed WHERE delete_mark = 0
+    </select>
+</mapper>

+ 35 - 0
src/main/resources/mapper/room/RoomMapper.xml

@@ -0,0 +1,35 @@
+<?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="com.xjrsoft.module.room.mapper.RoomMapper">
+    <select id="getPage" parameterType="com.xjrsoft.module.room.dto.RoomPageDto" resultType="com.xjrsoft.module.room.vo.RoomPageVo">
+        SELECT t1.id,t1.sort_code,t2.name AS bulid_name,t1.floor_number,t1.room_name,t3.name AS check_in_status_cn,t4.name AS gender_cn,t1.bed_count,
+        (SELECT GROUP_CONCAT(c2.name) FROM room_student_appoint c1
+        LEFT JOIN xjr_user c2 ON c1.student_user_id = c2.id
+        WHERE c1.delete_mark = 0 AND c1.room_id = t1.id) AS student_appoint_names,
+        (SELECT GROUP_CONCAT(c2.name) FROM room_teacher_appoint c1
+        LEFT JOIN xjr_user c2 ON c1.user_id = c2.id
+        WHERE c1.delete_mark = 0 AND c1.room_id = t1.id) AS teacher_appoint_names,t1.is_max,t1.remark FROM room t1
+        LEFT JOIN base_office_build t2 ON t1.office_build_id = t2.id
+        LEFT JOIN xjr_dictionary_detail t3 ON t1.check_in_status = t3.code AND t3.item_id = 1739843696019435521
+        LEFT JOIN xjr_dictionary_detail t4 ON t1.gender = t4.code AND t4.item_id = 2023000000000000004
+        WHERE t1.delete_mark = 0
+        <if test="dto.officeBuildId != null">
+            and t1.office_build_id = #{dto.officeBuildId}
+        </if>
+        <if test="dto.floorNumber != null">
+            and t1.floor_number = #{dto.floorNumber}
+        </if>
+        <if test="dto.checkInStatus != null and dto.checkInStatus != ''">
+            and t1.check_in_status = #{dto.checkInStatus}
+        </if>
+        <if test="dto.gender != null and dto.gender != ''">
+            and t1.gender = #{dto.gender}
+        </if>
+        ORDER BY t1.sort_code
+    </select>
+    <select id="getMaxSortCode" resultType="java.lang.Integer">
+        SELECT IFNULL(MAX(sort_code),1) FROM room WHERE delete_mark = 0
+    </select>
+</mapper>

+ 29 - 0
src/test/java/com/xjrsoft/xjrsoftboot/FreeMarkerGeneratorTest.java

@@ -1433,4 +1433,33 @@ public class FreeMarkerGeneratorTest {
 
         apiGeneratorService.generateCodes(params);
     }
+
+    /**
+     * 寝室维护
+     * @throws IOException
+     */
+    @Test
+    public void gcRoomBed() throws IOException {
+        List<TableConfig> tableConfigs = new ArrayList<>();
+        TableConfig mainTable = new TableConfig();
+        mainTable.setTableName("room_bed");//init_sql中的表名
+        mainTable.setIsMain(true);//是否是主表,一般默认为true
+        mainTable.setPkField(GlobalConstant.DEFAULT_PK);//设置主键
+        mainTable.setPkType(GlobalConstant.DEFAULT_PK_TYPE);//设置主键类型
+        tableConfigs.add(mainTable);
+
+        ApiGenerateCodesDto params = new ApiGenerateCodesDto();
+        params.setAuthor("dzx");//作者名称
+        params.setPackageName("room");//包名
+        params.setTableConfigs(tableConfigs);
+        params.setPage(true);//是否生成分页接口
+        params.setImport(true);//是否生成导入接口
+        params.setExport(true);//是否生成导出接口
+        params.setOutMainDir(true);//是否生成在主目录,前期测试可设置成false
+        params.setDs(ds);
+
+        IApiGeneratorService apiGeneratorService = new ApiGeneratorServiceImpl();
+
+        apiGeneratorService.generateCodes(params);
+    }
 }