Bladeren bron

小区维护

tangbin 11 maanden geleden
bovenliggende
commit
bbd5129c90
36 gewijzigde bestanden met toevoegingen van 1388 en 40 verwijderingen
  1. 27 0
      yezhu-api/src/main/java/com/kioor/common/dao/SysRegionDao.java
  2. 63 0
      yezhu-api/src/main/java/com/kioor/common/dto/SysRegionDTO.java
  3. 35 0
      yezhu-api/src/main/java/com/kioor/common/dto/region/Region.java
  4. 30 0
      yezhu-api/src/main/java/com/kioor/common/dto/region/RegionCity.java
  5. 30 0
      yezhu-api/src/main/java/com/kioor/common/dto/region/RegionProvince.java
  6. 75 0
      yezhu-api/src/main/java/com/kioor/common/entity/SysRegionEntity.java
  7. 29 0
      yezhu-api/src/main/java/com/kioor/common/enums/RegionLeafEnum.java
  8. 30 0
      yezhu-api/src/main/java/com/kioor/common/enums/RegionLevelEnum.java
  9. 41 0
      yezhu-api/src/main/java/com/kioor/common/service/SysRegionService.java
  10. 173 0
      yezhu-api/src/main/java/com/kioor/common/service/impl/SysRegionServiceImpl.java
  11. 109 0
      yezhu-api/src/main/java/com/kioor/room/controller/ApiResidentialQuartersController.java
  12. 74 0
      yezhu-api/src/main/java/com/kioor/room/controller/ApiUserQuartersController.java
  13. 27 0
      yezhu-api/src/main/java/com/kioor/room/dao/ResidentialQuartersDao.java
  14. 29 0
      yezhu-api/src/main/java/com/kioor/room/dao/RoomDao.java
  15. 30 0
      yezhu-api/src/main/java/com/kioor/room/dao/UserQuartersDao.java
  16. 64 0
      yezhu-api/src/main/java/com/kioor/room/dto/ResidentialQuartersDTO.java
  17. 47 0
      yezhu-api/src/main/java/com/kioor/room/dto/RoomDTO.java
  18. 31 0
      yezhu-api/src/main/java/com/kioor/room/service/ResidentialQuartersService.java
  19. 28 0
      yezhu-api/src/main/java/com/kioor/room/service/RoomService.java
  20. 28 0
      yezhu-api/src/main/java/com/kioor/room/service/UserQuartersService.java
  21. 98 0
      yezhu-api/src/main/java/com/kioor/room/service/impl/ResidentialQuartersServiceImpl.java
  22. 34 0
      yezhu-api/src/main/java/com/kioor/room/service/impl/RoomServiceImpl.java
  23. 34 0
      yezhu-api/src/main/java/com/kioor/room/service/impl/UserQuartersServiceImpl.java
  24. 30 11
      yezhu-api/src/main/java/com/kioor/user/controller/ApiRegisterController.java
  25. 17 16
      yezhu-api/src/main/java/com/kioor/user/controller/ApiUserController.java
  26. 1 7
      yezhu-api/src/main/java/com/kioor/user/dto/UserDTO.java
  27. 34 0
      yezhu-api/src/main/java/com/kioor/user/dto/UserRoomDTO.java
  28. 2 2
      yezhu-api/src/main/java/com/kioor/user/service/impl/TokenServiceImpl.java
  29. 15 2
      yezhu-api/src/main/resources/application-dev.yml
  30. 14 1
      yezhu-api/src/main/resources/application-prod.yml
  31. 14 1
      yezhu-api/src/main/resources/application-test.yml
  32. 35 0
      yezhu-api/src/main/resources/mapper/common/SysRegionDao.xml
  33. 13 0
      yezhu-api/src/main/resources/mapper/room/ResidentialQuartersDao.xml
  34. 16 0
      yezhu-api/src/main/resources/mapper/room/RoomDao.xml
  35. 17 0
      yezhu-api/src/main/resources/mapper/room/UserQuartersDao.xml
  36. 14 0
      yezhu-common/src/main/java/com/kioor/common/redis/RedisKeys.java

+ 27 - 0
yezhu-api/src/main/java/com/kioor/common/dao/SysRegionDao.java

@@ -0,0 +1,27 @@
+package com.kioor.common.dao;
+
+import com.kioor.common.entity.SysRegionEntity;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 行政区域
+ *
+ * @author Mark sunlightcs@gmail.com
+ */
+@Mapper
+public interface SysRegionDao extends BaseDao<SysRegionEntity> {
+
+	List<SysRegionEntity> getList(Map<String, Object> params);
+
+	List<SysRegionEntity> getListByLevel(Integer treeLevel);
+
+	List<Map<String, Object>> getTreeList();
+
+	SysRegionEntity getById(Long id);
+
+	int getCountByPid(Long pid);
+
+}

+ 63 - 0
yezhu-api/src/main/java/com/kioor/common/dto/SysRegionDTO.java

@@ -0,0 +1,63 @@
+/**
+ * Copyright (c) 2018 业主系统 All rights reserved.
+ * <p>
+ * https://www.yezhu.io
+ * <p>
+ * 版权所有,侵权必究!
+ */
+
+package com.kioor.common.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.kioor.common.utils.DateUtils;
+import com.kioor.common.validator.group.DefaultGroup;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.Min;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+
+/**
+ * 行政区域
+ *
+ * @author Mark sunlightcs@gmail.com
+ */
+@Data
+@Schema(description = "行政区域")
+public class SysRegionDTO implements Serializable {
+
+    @Schema(description = "区域标识")
+    @NotNull(message = "{id.require}", groups = DefaultGroup.class)
+    private Long id;
+
+    @Schema(description = "上级区域ID")
+    @NotNull(message = "{region.pid.require}", groups = DefaultGroup.class)
+    private Long pid;
+
+    @Schema(description = "区域名称")
+    @NotBlank(message = "{region.name.require}", groups = DefaultGroup.class)
+    private String name;
+
+    @Schema(description = "排序")
+    @Min(value = 0, message = "{sort.number}", groups = DefaultGroup.class)
+    private Long sort;
+
+    @Schema(description = "上级区域名称")
+    private String parentName;
+
+    @Schema(description = "是否有子节点")
+    private Boolean hasChildren;
+
+    @Schema(description = "层级")
+    private Integer treeLevel;
+
+    @Schema(description = "更新时间")
+    @JsonProperty(access = JsonProperty.Access.READ_ONLY)
+    @JsonFormat(pattern = DateUtils.DATE_TIME_PATTERN)
+    private Date updateDate;
+}

+ 35 - 0
yezhu-api/src/main/java/com/kioor/common/dto/region/Region.java

@@ -0,0 +1,35 @@
+/**
+ * Copyright (c) 2019 业主系统 All rights reserved.
+ * <p>
+ * https://www.yezhu.io
+ * <p>
+ * 版权所有,侵权必究!
+ */
+
+package com.kioor.common.dto.region;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 地区管理
+ *
+ * @author Mark sunlightcs@gmail.com
+ */
+@Data
+@Schema(description = "地区管理")
+public class Region implements Serializable {
+
+
+    @Schema(description = "地区ID")
+    private Long id;
+
+    @JsonIgnore
+    private Long pid;
+
+    @Schema(description = "名称")
+    private String name;
+}

+ 30 - 0
yezhu-api/src/main/java/com/kioor/common/dto/region/RegionCity.java

@@ -0,0 +1,30 @@
+/**
+ * Copyright (c) 2019 业主系统 All rights reserved.
+ * <p>
+ * https://www.yezhu.io
+ * <p>
+ * 版权所有,侵权必究!
+ */
+
+package com.kioor.common.dto.region;
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 市
+ *
+ * @author Mark sunlightcs@gmail.com
+ */
+@Schema(description = "市")
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class RegionCity extends Region {
+    @Schema(description = "区、县列表")
+    private List<Region> counties = new ArrayList<>();
+}

+ 30 - 0
yezhu-api/src/main/java/com/kioor/common/dto/region/RegionProvince.java

@@ -0,0 +1,30 @@
+/**
+ * Copyright (c) 2019 业主系统 All rights reserved.
+ * <p>
+ * https://www.yezhu.io
+ * <p>
+ * 版权所有,侵权必究!
+ */
+
+package com.kioor.common.dto.region;
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 省
+ *
+ * @author Mark sunlightcs@gmail.com
+ */
+@Schema(description = "省")
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class RegionProvince extends Region {
+    @Schema(description = "市列表")
+    private List<Region> cities = new ArrayList<>();
+}

+ 75 - 0
yezhu-api/src/main/java/com/kioor/common/entity/SysRegionEntity.java

@@ -0,0 +1,75 @@
+/**
+ * Copyright (c) 2018 业主系统 All rights reserved.
+ * <p>
+ * https://www.yezhu.io
+ * <p>
+ * 版权所有,侵权必究!
+ */
+
+package com.kioor.common.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 行政区域
+ *
+ * @author Mark sunlightcs@gmail.com
+ */
+@Data
+@TableName("sys_region")
+public class SysRegionEntity implements Serializable {
+    /**
+     * id
+     */
+    @TableId(type = IdType.INPUT)
+    private Long id;
+    /**
+     * 上级ID,一级为0
+     */
+    private Long pid;
+    /**
+     * 名称
+     */
+    private String name;
+    /**
+     * 层级
+     */
+    private Integer treeLevel;
+    /**
+     * 排序
+     */
+    private Long sort;
+    /**
+     * 是否叶子节点  0:否   1:是
+     */
+    private Integer leaf;
+    /**
+     * 创建者
+     */
+    @TableField(fill = FieldFill.INSERT)
+    private Long creator;
+    /**
+     * 创建时间
+     */
+    @TableField(fill = FieldFill.INSERT)
+    private Date createDate;
+    /**
+     * 更新者
+     */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Long updater;
+    /**
+     * 更新时间
+     */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Date updateDate;
+    /**
+     * 上级名称
+     */
+    @TableField(exist = false)
+    private String parentName;
+}

+ 29 - 0
yezhu-api/src/main/java/com/kioor/common/enums/RegionLeafEnum.java

@@ -0,0 +1,29 @@
+/**
+ * Copyright (c) 2019 业主系统 All rights reserved.
+ * <p>
+ * https://www.yezhu.io
+ * <p>
+ * 版权所有,侵权必究!
+ */
+
+package com.kioor.common.enums;
+
+/**
+ * 叶子节点枚举
+ *
+ * @author Mark sunlightcs@gmail.com
+ */
+public enum RegionLeafEnum {
+    YES(1),
+    NO(0);
+
+    private int value;
+
+    RegionLeafEnum(int value) {
+        this.value = value;
+    }
+
+    public int value() {
+        return this.value;
+    }
+}

+ 30 - 0
yezhu-api/src/main/java/com/kioor/common/enums/RegionLevelEnum.java

@@ -0,0 +1,30 @@
+/**
+ * Copyright (c) 2019 业主系统 All rights reserved.
+ * <p>
+ * https://www.yezhu.io
+ * <p>
+ * 版权所有,侵权必究!
+ */
+
+package com.kioor.common.enums;
+
+/**
+ * 行政区域  级别枚举
+ *
+ * @author Mark sunlightcs@gmail.com
+ */
+public enum RegionLevelEnum {
+    ONE(1),
+    TWO(2),
+    THREE(3);
+
+    private int value;
+
+    RegionLevelEnum(int value) {
+        this.value = value;
+    }
+
+    public int value() {
+        return this.value;
+    }
+}

+ 41 - 0
yezhu-api/src/main/java/com/kioor/common/service/SysRegionService.java

@@ -0,0 +1,41 @@
+/**
+ * Copyright (c) 2018 业主系统 All rights reserved.
+ *
+ * https://www.yezhu.io
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.kioor.common.service;
+
+
+import com.kioor.common.dto.SysRegionDTO;
+import com.kioor.common.dto.region.RegionProvince;
+import com.kioor.common.entity.SysRegionEntity;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 行政区域
+ * 
+ * @author Mark sunlightcs@gmail.com
+ */
+public interface SysRegionService extends BaseService<SysRegionEntity> {
+
+	List<SysRegionDTO> list(Map<String, Object> params);
+
+	List<Map<String, Object>> getTreeList();
+
+	SysRegionDTO get(Long id);
+
+	void save(SysRegionDTO dto);
+
+	void update(SysRegionDTO dto);
+
+	void delete(Long id);
+
+	int getCountByPid(Long pid);
+
+	List<RegionProvince> getRegion(boolean threeLevel);
+}

+ 173 - 0
yezhu-api/src/main/java/com/kioor/common/service/impl/SysRegionServiceImpl.java

@@ -0,0 +1,173 @@
+/**
+ * Copyright (c) 2018 业主系统 All rights reserved.
+ *
+ * https://www.yezhu.io
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.kioor.common.service.impl;
+
+import com.kioor.common.dao.SysRegionDao;
+import com.kioor.common.dto.SysRegionDTO;
+import com.kioor.common.dto.region.Region;
+import com.kioor.common.dto.region.RegionCity;
+import com.kioor.common.dto.region.RegionProvince;
+import com.kioor.common.entity.SysRegionEntity;
+import com.kioor.common.enums.RegionLeafEnum;
+import com.kioor.common.enums.RegionLevelEnum;
+import com.kioor.common.exception.ErrorCode;
+import com.kioor.common.exception.RenException;
+import com.kioor.common.service.SysRegionService;
+import com.kioor.common.utils.ConvertUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+
+@Service
+public class SysRegionServiceImpl extends BaseServiceImpl<SysRegionDao, SysRegionEntity> implements SysRegionService {
+
+	@Override
+	public List<SysRegionDTO> list(Map<String, Object> params) {
+		String pid = (String) params.get("pid");
+
+		if(StringUtils.isBlank(pid)){
+			//查询一级
+			params.put("treeLevel", RegionLevelEnum.ONE.value());
+		}
+		//查询列表
+		List<SysRegionEntity> entityList = baseDao.getList(params);
+
+		List<SysRegionDTO> dtoList = new ArrayList<>(entityList.size());
+		for(SysRegionEntity entity : entityList){
+			SysRegionDTO dto = new SysRegionDTO();
+			BeanUtils.copyProperties(entity, dto);
+			dto.setHasChildren(entity.getLeaf() != 1);
+
+			dtoList.add(dto);
+		}
+
+		return dtoList;
+	}
+
+	@Override
+	public List<Map<String, Object>> getTreeList() {
+		return baseDao.getTreeList();
+	}
+
+	@Override
+	public SysRegionDTO get(Long id) {
+		SysRegionEntity entity = baseDao.getById(id);
+
+		return ConvertUtils.sourceToTarget(entity, SysRegionDTO.class);
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void save(SysRegionDTO dto) {
+		SysRegionEntity entity = ConvertUtils.sourceToTarget(dto, SysRegionEntity.class);
+
+		//查询上级
+		SysRegionEntity parentEntity = baseDao.getById(dto.getPid());
+		if(parentEntity == null){
+			entity.setTreeLevel(RegionLevelEnum.ONE.value());
+		}else {
+			entity.setTreeLevel(parentEntity.getTreeLevel() + 1);
+			//上级存在,且为叶子节点,需要修改为非叶子节点
+			if(parentEntity.getLeaf() == RegionLeafEnum.YES.value()){
+				parentEntity.setLeaf(RegionLeafEnum.NO.value());
+				baseDao.updateById(parentEntity);
+			}
+		}
+
+		//新增都是叶子节点
+		entity.setLeaf(RegionLeafEnum.YES.value());
+		insert(entity);
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void update(SysRegionDTO dto) {
+		SysRegionEntity entity = ConvertUtils.sourceToTarget(dto, SysRegionEntity.class);
+
+		//上级不能为自身
+		if(entity.getId().equals(entity.getPid())){
+			throw new RenException(ErrorCode.SUPERIOR_REGION_ERROR);
+		}
+
+		//查询上级
+		SysRegionEntity parentEntity = baseDao.getById(dto.getPid());
+		if(parentEntity == null){
+			entity.setTreeLevel(RegionLevelEnum.ONE.value());
+		}else {
+			entity.setTreeLevel(parentEntity.getTreeLevel() + 1);
+			//上级存在,且为叶子节点,需要修改为非叶子节点
+			if(parentEntity.getLeaf() == RegionLeafEnum.YES.value()){
+				parentEntity.setLeaf(RegionLeafEnum.NO.value());
+				baseDao.updateById(parentEntity);
+			}
+		}
+
+		//查询下级
+		int subCount = baseDao.getCountByPid(dto.getId());
+		if(subCount == 0){
+			entity.setLeaf(RegionLeafEnum.YES.value());
+		}else {
+			entity.setLeaf(RegionLeafEnum.NO.value());
+		}
+
+		updateById(entity);
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void delete(Long id) {
+		//删除
+		baseDao.deleteById(id);
+	}
+
+	@Override
+	public int getCountByPid(Long pid) {
+		return baseDao.getCountByPid(pid);
+	}
+
+	@Override
+	public List<RegionProvince> getRegion(boolean threeLevel) {
+		List<SysRegionEntity> provinceList = baseDao.getListByLevel(RegionLevelEnum.ONE.value());
+		List<SysRegionEntity> cityList = baseDao.getListByLevel(RegionLevelEnum.TWO.value());
+
+		List<RegionProvince> provinces = ConvertUtils.sourceToTarget(provinceList, RegionProvince.class);
+		List<RegionCity> cities = ConvertUtils.sourceToTarget(cityList, RegionCity.class);
+
+		for(RegionCity city : cities){
+			for(RegionProvince province : provinces){
+				if(city.getPid().equals(province.getId())){
+					province.getCities().add(city);
+				}
+			}
+		}
+
+		//无需显示3级区县
+		if(!threeLevel){
+			return provinces;
+		}
+
+		List<SysRegionEntity> countyList = baseDao.getListByLevel(RegionLevelEnum.THREE.value());
+		List<Region> counties = ConvertUtils.sourceToTarget(countyList, Region.class);
+		for(Region county : counties){
+			for(RegionCity city : cities){
+				if(county.getPid().equals(city.getId())){
+					city.getCounties().add(county);
+				}
+			}
+		}
+
+		return provinces;
+	}
+}

+ 109 - 0
yezhu-api/src/main/java/com/kioor/room/controller/ApiResidentialQuartersController.java

@@ -0,0 +1,109 @@
+/**
+ * Copyright (c) 2018 业主系统 All rights reserved.
+ * <p>
+ * https://www.yezhu.io
+ * <p>
+ * 版权所有,侵权必究!
+ */
+
+package com.kioor.room.controller;
+
+
+import com.kioor.annotation.Login;
+import com.kioor.common.constant.Constant;
+import com.kioor.common.page.PageData;
+import com.kioor.common.utils.Result;
+import com.kioor.common.validator.AssertUtils;
+import com.kioor.common.validator.ValidatorUtils;
+import com.kioor.common.validator.group.AddGroup;
+import com.kioor.common.validator.group.DefaultGroup;
+import com.kioor.common.validator.group.UpdateGroup;
+import com.kioor.room.dto.ResidentialQuartersDTO;
+import com.kioor.room.service.ResidentialQuartersService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Arrays;
+import java.util.Date;
+import java.util.Map;
+
+/**
+ * 小区
+ *
+ * @author Mark sunlightcs@gmail.com
+ */
+@AllArgsConstructor
+@RestController
+@RequestMapping("/api/residentialquarters")
+@Tag(name = "小区")
+public class ApiResidentialQuartersController {
+
+    private final ResidentialQuartersService residentialQuartersService;
+
+    @Login
+    @GetMapping("page")
+    @Operation(summary = "分页")
+    @Parameters({
+            @Parameter(name = Constant.PAGE, description = "当前页码,从1开始", required = true),
+            @Parameter(name = Constant.LIMIT, description = "每页显示记录数", required = true),
+            @Parameter(name = Constant.ORDER_FIELD, description = "排序字段"),
+            @Parameter(name = Constant.ORDER, description = "排序方式,可选值(asc、desc)"),
+            @Parameter(name = "name", description = "名称")
+    })
+    public Result<PageData<ResidentialQuartersDTO>> page(@Parameter(hidden = true) @RequestParam Map<String, Object> params) {
+        PageData<ResidentialQuartersDTO> page = residentialQuartersService.page(params);
+
+        return new Result<PageData<ResidentialQuartersDTO>>().ok(page);
+    }
+
+    @Login
+    @Operation(summary = "信息")
+    @GetMapping("{id}")
+    public Result<ResidentialQuartersDTO> info(@PathVariable("id") Long id) {
+        ResidentialQuartersDTO residentialQuarters = residentialQuartersService.get(id);
+
+        return new Result<ResidentialQuartersDTO>().ok(residentialQuarters);
+    }
+
+    @Login
+    @PostMapping
+    @Operation(summary = "保存")
+    public Result save(@RequestBody ResidentialQuartersDTO dto,@Parameter(hidden = true) @RequestAttribute("userId") Long userId) {
+        //效验数据
+        ValidatorUtils.validateEntity(dto, AddGroup.class, DefaultGroup.class);
+        dto.setCreateUser(userId);
+        dto.setCreateDate(new Date());
+        residentialQuartersService.save(dto);
+
+        return new Result();
+    }
+
+    @Login
+    @PutMapping
+    @Operation(summary = "修改")
+    public Result update(@RequestBody ResidentialQuartersDTO dto,@Parameter(hidden = true) @RequestAttribute("userId") Long userId) {
+        //效验数据
+        ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class);
+
+        residentialQuartersService.update(dto);
+
+        return new Result();
+    }
+
+    @Login
+    @DeleteMapping
+    @Operation(summary = "删除")
+    public Result delete(@RequestBody Long[] ids) {
+        //效验数据
+        AssertUtils.isArrayEmpty(ids, "id");
+
+        residentialQuartersService.deleteBatchIds(Arrays.asList(ids));
+
+        return new Result();
+    }
+
+}

+ 74 - 0
yezhu-api/src/main/java/com/kioor/room/controller/ApiUserQuartersController.java

@@ -0,0 +1,74 @@
+/**
+ * Copyright (c) 2018 业主系统 All rights reserved.
+ * <p>
+ * https://www.yezhu.io
+ * <p>
+ * 版权所有,侵权必究!
+ */
+
+package com.kioor.room.controller;
+
+
+import com.kioor.common.utils.Result;
+import com.kioor.common.validator.ValidatorUtils;
+import com.kioor.room.dto.RoomDTO;
+import com.kioor.room.entity.UserQuartersEntity;
+import com.kioor.room.service.RoomService;
+import com.kioor.room.service.UserQuartersService;
+import com.kioor.user.dto.UserRoomDTO;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 用户和房屋关系
+ *
+ * @author Mark sunlightcs@gmail.com
+ */
+@AllArgsConstructor
+@RestController
+@RequestMapping("/api/userquarters")
+@Tag(name = "用户和房屋关系")
+public class ApiUserQuartersController {
+
+    private final RoomService roomService;
+
+    private final UserQuartersService userQuartersService;
+
+    @PostMapping()
+    @Operation(summary = "新增用户和房屋关系")
+    public Result<Map<String, Object>> addUserRoom(@RequestBody UserRoomDTO dto) {
+        //表单校验
+        ValidatorUtils.validateEntity(dto);
+
+        //校验用户是否已经绑定有房屋
+        List<RoomDTO> roomDTOList = userQuartersService.getRoomsByUserId(dto.getUserId());
+        if(roomDTOList.size() > 0 ){
+            return new Result().error("该用户已经绑定有房屋,需要绑定更多房屋请走审核流程");
+        }
+
+        //新增用户和房屋关系
+        UserQuartersEntity userQuartersEntity = new UserQuartersEntity();
+        RoomDTO roomDTO = roomService.findRoomById(dto.getRoomId());
+        if(roomDTO!=null){
+            userQuartersEntity.setUserId(dto.getUserId());
+            userQuartersEntity.setQuartersId(roomDTO.getQuartersId());
+            userQuartersEntity.setBuildingsId(roomDTO.getBuildingsId());
+            userQuartersEntity.setUnitsId(roomDTO.getUnitsId());
+            userQuartersEntity.setFloorId(roomDTO.getFloorId());
+            userQuartersEntity.setRoomId(roomDTO.getId());
+            userQuartersEntity.setRemark(roomDTO.getRemark());
+            userQuartersService.insert(userQuartersEntity);
+        }
+
+        return new Result();
+    }
+
+}

+ 27 - 0
yezhu-api/src/main/java/com/kioor/room/dao/ResidentialQuartersDao.java

@@ -0,0 +1,27 @@
+/**
+ * Copyright (c) 2018 业主系统 All rights reserved.
+ *
+ * https://www.yezhu.io
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.kioor.room.dao;
+
+import com.kioor.common.dao.BaseDao;
+import com.kioor.room.entity.ResidentialQuartersEntity;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 小区
+ * 
+ * @author Mark sunlightcs@gmail.com
+ */
+@Mapper
+public interface ResidentialQuartersDao extends BaseDao<ResidentialQuartersEntity> {
+
+    List<ResidentialQuartersEntity> getList(Map<String, Object> params);
+}

+ 29 - 0
yezhu-api/src/main/java/com/kioor/room/dao/RoomDao.java

@@ -0,0 +1,29 @@
+/**
+ * Copyright (c) 2018 业主系统 All rights reserved.
+ *
+ * https://www.yezhu.io
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.kioor.room.dao;
+
+import com.kioor.common.dao.BaseDao;
+import com.kioor.room.dto.RoomDTO;
+import com.kioor.room.entity.RoomEntity;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 房屋
+ * 
+ * @author Mark sunlightcs@gmail.com
+ */
+@Mapper
+public interface RoomDao extends BaseDao<RoomEntity> {
+    /**
+     * 根据id查询房屋信息
+     * @param id
+     * @return
+     */
+    RoomDTO findRoomById(Long id);
+}

+ 30 - 0
yezhu-api/src/main/java/com/kioor/room/dao/UserQuartersDao.java

@@ -0,0 +1,30 @@
+/**
+ * Copyright (c) 2018 业主系统 All rights reserved.
+ *
+ * https://www.yezhu.io
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.kioor.room.dao;
+
+import com.kioor.common.dao.BaseDao;
+import com.kioor.room.dto.RoomDTO;
+import com.kioor.room.entity.UserQuartersEntity;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * 用户房屋关系
+ * 
+ * @author Mark sunlightcs@gmail.com
+ */
+@Mapper
+public interface UserQuartersDao extends BaseDao<UserQuartersEntity> {
+    /**
+     * 查询用户已有的房屋
+     * @return
+     */
+    List<RoomDTO> getRoomsByUserId(Long userId);
+}

+ 64 - 0
yezhu-api/src/main/java/com/kioor/room/dto/ResidentialQuartersDTO.java

@@ -0,0 +1,64 @@
+/**
+ * /**
+ * Copyright (c) 2018 业主系统 All rights reserved.
+ * <p>
+ * https://www.yezhu.io
+ * <p>
+ * 版权所有,侵权必究!
+ */
+
+package com.kioor.room.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Builder;
+import lombok.Data;
+
+import java.util.Date;
+
+
+/**
+ * 房屋信息
+ *
+ * @author Mark sunlightcs@gmail.com
+ */
+@Data
+@Builder
+@Schema(description = "小区信息")
+public class ResidentialQuartersDTO {
+    @Schema(description = "id")
+    private Long id;
+
+    @Schema(description = "小区名称")
+    private String name;
+
+    @Schema(description = "省id")
+    private Long provinceId;
+
+    @Schema(description = "省")
+    private String provinceStr;
+
+    @Schema(description = "市id")
+    private Long cityId;
+
+    @Schema(description = "市")
+    private String cityStr;
+
+    @Schema(description = "区id")
+    private Long regionId;
+
+    @Schema(description = "区")
+    private String regionStr;
+
+    @Schema(description = "详细地址")
+    private String addr;
+
+    @Schema(description = "创建人")
+    private Long createUser;
+
+    @Schema(description = "创建人名字")
+    private String createUserName;
+
+    @Schema(description = "创建时间")
+    private Date createDate;
+
+}

+ 47 - 0
yezhu-api/src/main/java/com/kioor/room/dto/RoomDTO.java

@@ -0,0 +1,47 @@
+/**
+ * /**
+ * Copyright (c) 2018 业主系统 All rights reserved.
+ * <p>
+ * https://www.yezhu.io
+ * <p>
+ * 版权所有,侵权必究!
+ */
+
+package com.kioor.room.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.Date;
+
+
+/**
+ * 房屋信息
+ *
+ * @author Mark sunlightcs@gmail.com
+ */
+@Data
+@Schema(description = "房屋信息")
+public class RoomDTO {
+    @Schema(description = "id")
+    private Long id;
+
+    @Schema(description = "小区")
+    private Long quartersId;
+
+    @Schema(description = "楼栋")
+    private Long buildingsId;
+
+    @Schema(description = "单元")
+    private Long unitsId;
+
+    @Schema(description = "楼层")
+    private Long floorId;
+
+    @Schema(description = "房号")
+    private Integer roomNum;
+
+    @Schema(description = "备注")
+    private Date remark;
+
+}

+ 31 - 0
yezhu-api/src/main/java/com/kioor/room/service/ResidentialQuartersService.java

@@ -0,0 +1,31 @@
+/**
+ * Copyright (c) 2018 业主系统 All rights reserved.
+ *
+ * https://www.yezhu.io
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.kioor.room.service;
+
+import com.kioor.common.page.PageData;
+import com.kioor.common.service.BaseService;
+import com.kioor.room.dto.ResidentialQuartersDTO;
+import com.kioor.room.entity.ResidentialQuartersEntity;
+
+import java.util.Map;
+
+/**
+ * 小区
+ * 
+ * @author Mark sunlightcs@gmail.com
+ */
+public interface ResidentialQuartersService extends BaseService<ResidentialQuartersEntity> {
+    PageData<ResidentialQuartersDTO> page(Map<String, Object> params);
+
+    ResidentialQuartersDTO get(Long id);
+
+    void save(ResidentialQuartersDTO dto);
+
+    void update(ResidentialQuartersDTO dto);
+}

+ 28 - 0
yezhu-api/src/main/java/com/kioor/room/service/RoomService.java

@@ -0,0 +1,28 @@
+/**
+ * Copyright (c) 2018 业主系统 All rights reserved.
+ *
+ * https://www.yezhu.io
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.kioor.room.service;
+
+import com.kioor.common.service.BaseService;
+import com.kioor.room.dto.RoomDTO;
+import com.kioor.room.entity.RoomEntity;
+
+/**
+ * 房屋
+ * 
+ * @author Mark sunlightcs@gmail.com
+ */
+public interface RoomService extends BaseService<RoomEntity> {
+
+    /**
+     * 根据id查询房屋信息
+     * @param id
+     * @return
+     */
+    RoomDTO findRoomById(Long id);
+}

+ 28 - 0
yezhu-api/src/main/java/com/kioor/room/service/UserQuartersService.java

@@ -0,0 +1,28 @@
+/**
+ * Copyright (c) 2018 业主系统 All rights reserved.
+ *
+ * https://www.yezhu.io
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.kioor.room.service;
+
+import com.kioor.common.service.BaseService;
+import com.kioor.room.dto.RoomDTO;
+import com.kioor.room.entity.UserQuartersEntity;
+
+import java.util.List;
+
+/**
+ * 用户房屋关系
+ * 
+ * @author Mark sunlightcs@gmail.com
+ */
+public interface UserQuartersService extends BaseService<UserQuartersEntity> {
+    /**
+     * 查询用户已有的房屋
+     * @return
+     */
+    List<RoomDTO> getRoomsByUserId(Long userId);
+}

+ 98 - 0
yezhu-api/src/main/java/com/kioor/room/service/impl/ResidentialQuartersServiceImpl.java

@@ -0,0 +1,98 @@
+/**
+ * Copyright (c) 2018 业主系统 All rights reserved.
+ * <p>
+ * https://www.yezhu.io
+ * <p>
+ * 版权所有,侵权必究!
+ */
+
+package com.kioor.room.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.kioor.common.constant.Constant;
+import com.kioor.common.dto.SysRegionDTO;
+import com.kioor.common.page.PageData;
+import com.kioor.common.service.SysRegionService;
+import com.kioor.common.service.impl.BaseServiceImpl;
+import com.kioor.common.utils.ConvertUtils;
+import com.kioor.room.dao.ResidentialQuartersDao;
+import com.kioor.room.dto.ResidentialQuartersDTO;
+import com.kioor.room.entity.ResidentialQuartersEntity;
+import com.kioor.room.service.ResidentialQuartersService;
+import com.kioor.user.service.UserService;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+@Service
+@AllArgsConstructor
+public class ResidentialQuartersServiceImpl extends BaseServiceImpl<ResidentialQuartersDao, ResidentialQuartersEntity> implements ResidentialQuartersService {
+
+    private final UserService userService;
+
+    private final SysRegionService sysRegionService;
+
+    /**
+     * 分页
+     */
+    @Override
+    public PageData<ResidentialQuartersDTO> page(Map<String, Object> params) {
+        paramsToLike(params, "name");
+
+        //分页
+        IPage<ResidentialQuartersEntity> page = getPage(params, Constant.CREATE_DATE, false);
+
+        //查询
+        List<ResidentialQuartersEntity> list = baseDao.getList(params);
+
+        List<ResidentialQuartersDTO> dtoList = new ArrayList<>();
+        for (ResidentialQuartersEntity entity : list) {
+            ResidentialQuartersDTO dto = ConvertUtils.sourceToTarget(entity, ResidentialQuartersDTO.class);
+            //省市区
+            SysRegionDTO sysRegionDTO = sysRegionService.get(dto.getRegionId());
+            if(sysRegionDTO!=null){
+                //区
+                dto.setRegionStr(sysRegionDTO.getName());
+                //市
+                if(sysRegionDTO.getPid()!=null){
+                    dto.setCityId(sysRegionDTO.getPid());
+                    dto.setCityStr(sysRegionDTO.getParentName());
+                    SysRegionDTO parentSysRegionDTO = sysRegionService.get(sysRegionDTO.getPid());
+                    if(parentSysRegionDTO!=null){
+                        //省
+                        dto.setProvinceId(parentSysRegionDTO.getPid());
+                        dto.setProvinceStr(parentSysRegionDTO.getParentName());
+                    }
+                }
+            }
+            //创建人名字
+            dto.setCreateUserName(userService.getUserByUserId(dto.getCreateUser()).getUsername());
+            dtoList.add(dto);
+        }
+
+        return getPageData(dtoList, page.getTotal(), ResidentialQuartersDTO.class);
+    }
+    @Override
+    public ResidentialQuartersDTO get(Long id) {
+        ResidentialQuartersEntity entity = baseDao.selectById(id);
+
+        return ConvertUtils.sourceToTarget(entity, ResidentialQuartersDTO.class);
+    }
+
+    @Override
+    public void save(ResidentialQuartersDTO dto) {
+        ResidentialQuartersEntity entity = ConvertUtils.sourceToTarget(dto, ResidentialQuartersEntity.class);
+        insert(entity);
+    }
+
+    @Override
+    public void update(ResidentialQuartersDTO dto) {
+        ResidentialQuartersEntity entity = ConvertUtils.sourceToTarget(dto, ResidentialQuartersEntity.class);
+
+        updateById(entity);
+    }
+
+}

+ 34 - 0
yezhu-api/src/main/java/com/kioor/room/service/impl/RoomServiceImpl.java

@@ -0,0 +1,34 @@
+/**
+ * Copyright (c) 2018 业主系统 All rights reserved.
+ * <p>
+ * https://www.yezhu.io
+ * <p>
+ * 版权所有,侵权必究!
+ */
+
+package com.kioor.room.service.impl;
+
+import com.kioor.common.service.impl.BaseServiceImpl;
+import com.kioor.room.dao.RoomDao;
+import com.kioor.room.dto.RoomDTO;
+import com.kioor.room.entity.RoomEntity;
+import com.kioor.room.service.RoomService;
+import com.kioor.user.service.TokenService;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+@Service
+@AllArgsConstructor
+public class RoomServiceImpl extends BaseServiceImpl<RoomDao, RoomEntity> implements RoomService {
+    private final TokenService tokenService;
+
+    /**
+     * 根据id查询房屋信息
+     * @param id
+     * @return
+     */
+    @Override
+    public RoomDTO findRoomById(Long id) {
+        return null;
+    }
+}

+ 34 - 0
yezhu-api/src/main/java/com/kioor/room/service/impl/UserQuartersServiceImpl.java

@@ -0,0 +1,34 @@
+/**
+ * Copyright (c) 2018 业主系统 All rights reserved.
+ * <p>
+ * https://www.yezhu.io
+ * <p>
+ * 版权所有,侵权必究!
+ */
+
+package com.kioor.room.service.impl;
+
+import com.kioor.common.service.impl.BaseServiceImpl;
+import com.kioor.room.dao.UserQuartersDao;
+import com.kioor.room.dto.RoomDTO;
+import com.kioor.room.entity.UserQuartersEntity;
+import com.kioor.room.service.UserQuartersService;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+@AllArgsConstructor
+public class UserQuartersServiceImpl extends BaseServiceImpl<UserQuartersDao, UserQuartersEntity> implements UserQuartersService {
+
+    /**
+     * 查询用户已有的房屋
+     *
+     * @return
+     */
+    @Override
+    public List<RoomDTO> getRoomsByUserId(Long userId) {
+        return baseDao.getRoomsByUserId(userId);
+    }
+}

+ 30 - 11
yezhu-api/src/main/java/com/kioor/user/controller/ApiRegisterController.java

@@ -10,6 +10,7 @@ package com.kioor.user.controller;
 
 import cn.hutool.core.util.RandomUtil;
 import cn.hutool.crypto.digest.DigestUtil;
+import com.kioor.common.redis.RedisKeys;
 import com.kioor.common.redis.RedisUtils;
 import com.kioor.common.service.SysSmsService;
 import com.kioor.common.utils.Result;
@@ -17,15 +18,16 @@ import com.kioor.common.validator.ValidatorUtils;
 import com.kioor.user.dto.RegisterDTO;
 import com.kioor.user.entity.UserEntity;
 import com.kioor.user.service.UserService;
+import io.micrometer.common.util.StringUtils;
 import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.AllArgsConstructor;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import java.util.Date;
+import java.util.Map;
 
 /**
  * 注册接口
@@ -49,7 +51,7 @@ public class ApiRegisterController {
         //表单校验
         ValidatorUtils.validateEntity(dto);
         //校验验证码
-        Object codeObj = redisUtils.get(dto.getMobile());
+        Object codeObj = redisUtils.hGet(RedisKeys.getSmsCaptchaKey(),dto.getMobile());
         if (codeObj == null || !codeObj.toString().equals(dto.getCode())) {
             return new Result().error("验证码不正确");
         }
@@ -72,18 +74,35 @@ public class ApiRegisterController {
      */
     @PostMapping("sendCode")
     @Operation(summary = "发送验证码")
-    public Result sendCode(@RequestBody UserEntity user) {
-        //表单校验
-        ValidatorUtils.validateEntity(user);
+    @Parameters({
+            @Parameter(name = "mobile", description = "手机号", required = true)
+    })
+    public Result sendCode(@Parameter(hidden = true) @RequestParam Map<String, Object> params) {
+        String mobile = params.get("mobile").toString();
+        //校验手机号是否为空或者格式是否正确
+        if(StringUtils.isBlank(mobile) || mobile.length() != 11){
+            return new Result().error("手机号格式不正确");
+        }
+        //查询手机号今天发送验证码次数
+        Object timesObj = redisUtils.hGet(RedisKeys.getSmsCaptchaTimesKey(),mobile);
+        if (timesObj != null && Integer.parseInt(timesObj.toString()) > 10) {
+            return new Result().error("24小时内发送验证码次数超过10次");
+        }
         //查询手机号是否注册过
-        UserEntity userEntity = userService.getByMobile(user.getMobile());
+        UserEntity userEntity = userService.getByMobile(mobile);
         if (userEntity != null) {
             return new Result().error("手机号已注册");
         }
         //发送验证码
         String code = RandomUtil.randomNumbers(6);
-        sysSmsService.send("短信编码", user.getMobile(), code);
-        redisUtils.set(user.getMobile(), code, 60);
+        sysSmsService.send("SMS_175572792", mobile, "{\"code\":\"" + code + "\"}");
+        redisUtils.hSet(RedisKeys.getSmsCaptchaKey(),mobile, code, 60);
+        //redis中24小时内发送验证码次数+1
+        if(timesObj == null){
+            redisUtils.hSet(RedisKeys.getSmsCaptchaTimesKey(),mobile, 1, 24 * 60 * 60);
+        }else {
+            redisUtils.hSet(RedisKeys.getSmsCaptchaTimesKey(),mobile, Integer.parseInt(timesObj.toString()) + 1, 24 * 60 * 60);
+        }
         return new Result();
     }
 }

+ 17 - 16
yezhu-api/src/main/java/com/kioor/user/controller/ApiUserController.java

@@ -12,8 +12,10 @@ package com.kioor.user.controller;
 import com.kioor.annotation.Login;
 import com.kioor.common.utils.Result;
 import com.kioor.common.validator.ValidatorUtils;
-import com.kioor.user.dto.LoginDTO;
-import com.kioor.user.service.TokenService;
+import com.kioor.room.service.RoomService;
+import com.kioor.room.service.UserQuartersService;
+import com.kioor.user.dto.UserDTO;
+import com.kioor.user.entity.UserEntity;
 import com.kioor.user.service.UserService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
@@ -34,25 +36,24 @@ import java.util.Map;
 @Tag(name = "用户")
 public class ApiUserController {
     private final UserService userService;
-    private final TokenService tokenService;
 
-    @PostMapping
-    @Operation(summary = "登录")
-    public Result<Map<String, Object>> login(@RequestBody LoginDTO dto) {
+    private final RoomService roomService;
+
+    private final UserQuartersService userQuartersService;
+
+    @Login
+    @PutMapping
+    @Operation(summary = "修改用户信息")
+    public Result<Map<String, Object>> update(@RequestBody UserDTO dto,@Parameter(hidden = true) @RequestAttribute("userId") Long userId) {
         //表单校验
         ValidatorUtils.validateEntity(dto);
 
-        //用户登录
-        Map<String, Object> map = userService.login(dto);
+        UserEntity userEntity = userService.getUserByUserId(userId);
+        userEntity.setUsername(dto.getUsername());
+        userEntity.setOpenFlag(dto.getOpenFlag());
+        userEntity.setRemarks(dto.getRemarks());
+        userService.updateById(userEntity);
 
-        return new Result().ok(map);
-    }
-
-    @Login
-    @PostMapping("logout")
-    @Operation(summary = "退出")
-    public Result logout(@Parameter(hidden = true) @RequestAttribute("userId") Long userId) {
-        tokenService.expireToken(userId);
         return new Result();
     }
 

+ 1 - 7
yezhu-api/src/main/java/com/kioor/user/dto/UserDTO.java

@@ -22,8 +22,6 @@ import lombok.Data;
 @Data
 @Schema(description = "用户信息表单")
 public class UserDTO {
-    @Schema(description = "id")
-    private Long id;
 
     @Schema(description = "用户名")
     @NotBlank(message = "用户名不能为空")
@@ -32,11 +30,7 @@ public class UserDTO {
     @Schema(description = "签名")
     private String remarks;
 
-    @Schema(description = "是否对邻居展示")
+    @Schema(description = "是否对邻居展示", defaultValue = "1")
     private int openFlag = 1;
 
-    @Schema(description = "房间")
-    @NotBlank(message = "房间不能为空")
-    private Long roomId;
-
 }

+ 34 - 0
yezhu-api/src/main/java/com/kioor/user/dto/UserRoomDTO.java

@@ -0,0 +1,34 @@
+/**
+ * /**
+ * Copyright (c) 2018 业主系统 All rights reserved.
+ * <p>
+ * https://www.yezhu.io
+ * <p>
+ * 版权所有,侵权必究!
+ */
+
+package com.kioor.user.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
+import lombok.Data;
+
+
+/**
+ * 用户房间关系
+ *
+ * @author Mark sunlightcs@gmail.com
+ */
+@Data
+@Schema(description = "用户房间关系")
+public class UserRoomDTO {
+
+    @Schema(description = "用户")
+    @NotBlank(message = "用户不能为空")
+    private Long userId;
+
+    @Schema(description = "房间")
+    @NotBlank(message = "房间不能为空")
+    private Long roomId;
+
+}

+ 2 - 2
yezhu-api/src/main/java/com/kioor/user/service/impl/TokenServiceImpl.java

@@ -22,9 +22,9 @@ import java.util.UUID;
 @Service
 public class TokenServiceImpl extends BaseServiceImpl<TokenDao, TokenEntity> implements TokenService {
 	/**
-	 * 12小时后过期
+	 * 7天后过期
 	 */
-	private final static int EXPIRE = 3600 * 12;
+	private final static int EXPIRE = 3600 * 24 * 7;
 
 	@Override
 	public TokenEntity getByToken(String token) {

+ 15 - 2
yezhu-api/src/main/resources/application-dev.yml

@@ -2,8 +2,8 @@ spring:
   datasource:
     druid:
       driver-class-name: com.mysql.cj.jdbc.Driver
-      url: jdbc:mysql://localhost:3306/security_enterprise?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true
-      username: yezhu
+      url: jdbc:mysql://localhost:3306/yezhu?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true
+      username: root
       password: 123456
       initial-size: 10
       max-active: 100
@@ -31,3 +31,16 @@ spring:
         wall:
           config:
             multi-statement-allow: true
+  data:
+    redis:
+      database: 1
+      host: localhost
+      port: 6379
+      password: 123456 # 密码(默认为空)
+      timeout: 6000ms  # 连接超时时长(毫秒)
+      lettuce:
+        pool:
+          max-active: 1000  # 连接池最大连接数(使用负值表示没有限制)
+          max-wait: -1ms      # 连接池最大阻塞等待时间(使用负值表示没有限制)
+          max-idle: 10      # 连接池中的最大空闲连接
+          min-idle: 5       # 连接池中的最小空闲连接

+ 14 - 1
yezhu-api/src/main/resources/application-prod.yml

@@ -30,4 +30,17 @@ spring:
           merge-sql: false
         wall:
           config:
-            multi-statement-allow: true
+            multi-statement-allow: true
+  data:
+    redis:
+      database: 1
+      host: localhost
+      port: 6379
+      password: 123456 # 密码(默认为空)
+      timeout: 6000ms  # 连接超时时长(毫秒)
+      lettuce:
+        pool:
+          max-active: 1000  # 连接池最大连接数(使用负值表示没有限制)
+          max-wait: -1ms      # 连接池最大阻塞等待时间(使用负值表示没有限制)
+          max-idle: 10      # 连接池中的最大空闲连接
+          min-idle: 5       # 连接池中的最小空闲连接

+ 14 - 1
yezhu-api/src/main/resources/application-test.yml

@@ -30,4 +30,17 @@ spring:
           merge-sql: false
         wall:
           config:
-            multi-statement-allow: true
+            multi-statement-allow: true
+  data:
+    redis:
+      database: 1
+      host: localhost
+      port: 6379
+      password: 123456 # 密码(默认为空)
+      timeout: 6000ms  # 连接超时时长(毫秒)
+      lettuce:
+        pool:
+          max-active: 1000  # 连接池最大连接数(使用负值表示没有限制)
+          max-wait: -1ms      # 连接池最大阻塞等待时间(使用负值表示没有限制)
+          max-idle: 10      # 连接池中的最大空闲连接
+          min-idle: 5       # 连接池中的最小空闲连接

+ 35 - 0
yezhu-api/src/main/resources/mapper/common/SysRegionDao.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.kioor.modules.sys.dao.SysRegionDao">
+
+    <select id="getList" resultType="com.kioor.common.entity.SysRegionEntity">
+        select * from sys_region
+        <where>
+            <if test="treeLevel != null">
+                tree_level = #{treeLevel}
+            </if>
+            <if test="pid != null and pid.trim() != ''">
+                pid = #{pid}
+            </if>
+        </where>
+        order by sort
+    </select>
+
+    <select id="getTreeList" resultType="map">
+        select id, pid, name from sys_region order by sort
+    </select>
+
+    <select id="getListByLevel" resultType="com.kioor.common.entity.SysRegionEntity">
+        select id, pid, name from sys_region where level = #{value} order by sort
+    </select>
+
+    <select id="getById" resultType="com.kioor.common.entity.SysRegionEntity">
+        select t1.*, (select t2.name from sys_region t2 where t2.id=t1.pid) parentName from sys_region t1 where t1.id = #{value}
+    </select>
+
+    <select id="getCountByPid" resultType="int">
+        select count(*) from sys_region where pid = #{value}
+    </select>
+
+</mapper>

+ 13 - 0
yezhu-api/src/main/resources/mapper/room/ResidentialQuartersDao.xml

@@ -0,0 +1,13 @@
+<?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.kioor.room.dao.ResidentialQuartersDao">
+
+
+    <select id="getList" resultType="com.kioor.room.entity.ResidentialQuartersEntity">
+        select * from tb_residential_quarters where 1=1
+        <if test="name != null and name.trim() != ''">
+            and name like #{name}
+        </if>
+    </select>
+</mapper>

+ 16 - 0
yezhu-api/src/main/resources/mapper/room/RoomDao.xml

@@ -0,0 +1,16 @@
+<?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.kioor.room.dao.RoomDao">
+
+
+    <select id="findRoomById" resultType="com.kioor.room.dto.RoomDTO">
+        select r.id,q.id quartersId,b.id buildingsId,u.id unitsId,f.id floorId,r.room_num roomNum,r.remark remark
+        from tb_room r
+        left join tb_floor f on r.floor_id = f.id
+        left join tb_units u on f.units_id = u.id
+        left join tb_buildings b on u.buildings_id = b.id
+        left join tb_quarters q on b.quarters_id = q.id
+        where r.id = #{id}
+    </select>
+</mapper>

+ 17 - 0
yezhu-api/src/main/resources/mapper/room/UserQuartersDao.xml

@@ -0,0 +1,17 @@
+<?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.kioor.room.dao.UserQuartersDao">
+
+
+    <select id="getRoomsByUserId" resultType="com.kioor.room.dto.RoomDTO">
+        select r.id,q.id quartersId,b.id buildingsId,u.id unitsId,f.id floorId,r.room_num roomNum,r.remark remark
+        from tb_User_quarters uq
+        left join tb_room r on uq.room_id = r.id
+        left join tb_floor f on r.floor_id = f.id
+        left join tb_units u on f.units_id = u.id
+        left join tb_buildings b on u.buildings_id = b.id
+        left join tb_quarters q on b.quarters_id = q.id
+        where r.id = #{id}
+    </select>
+</mapper>

+ 14 - 0
yezhu-common/src/main/java/com/kioor/common/redis/RedisKeys.java

@@ -61,4 +61,18 @@ public class RedisKeys {
     public static String getUserPermissionsKey(Long userId){
         return "sys:user:permissions:" + userId;
     }
+
+    /**
+     * 用户短信验证码发送次数Key
+     */
+    public static String getSmsCaptchaTimesKey(){
+        return "api:sms:times";
+    }
+
+    /**
+     * 用户短信验证码Key
+     */
+    public static String getSmsCaptchaKey(){
+        return "api:sms:captcha";
+    }
 }