gongyu project

This commit is contained in:
Y1NanPing 2025-06-17 19:10:21 +08:00
commit 8312e81829
357 changed files with 9814 additions and 0 deletions

70
common/pom.xml Normal file
View File

@ -0,0 +1,70 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>lease</artifactId>
<groupId>com.atguigu</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>common</artifactId>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
</properties>
<dependencies>
<!--依赖model模块-->
<dependency>
<groupId>com.atguigu</groupId>
<artifactId>model</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-api</artifactId>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-impl</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-jackson</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-util</artifactId>
<version>9.3.7.v20160115</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.2.1</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>4.2.1</version>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,83 @@
package com.atguigu.lease.common.config;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import org.springdoc.core.models.GroupedOpenApi;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class Knife4jConfiguration {
@Bean
public OpenAPI customOpenAPI() {
return new OpenAPI().info(
new Info()
.title("后台管理系统API")
.version("1.0")
.description("后台管理系统API"));
}
@Bean
public GroupedOpenApi systemAPI() {
return GroupedOpenApi.builder().group("系统信息管理").
pathsToMatch(
"/admin/system/**"
).
build();
}
@Bean
public GroupedOpenApi loginAPI() {
return GroupedOpenApi.builder().group("后台登录管理").
pathsToMatch(
"/admin/login/**",
"/admin/info"
).
build();
}
@Bean
public GroupedOpenApi apartmentAPI() {
return GroupedOpenApi.builder().group("公寓信息管理").
pathsToMatch(
"/admin/apartment/**",
"/admin/room/**",
"/admin/label/**",
"/admin/facility/**",
"/admin/fee/**",
"/admin/attr/**",
"/admin/payment/**",
"/admin/region/**",
"/admin/term/**",
"/admin/file/**"
).build();
}
@Bean
public GroupedOpenApi leaseAPI() {
return GroupedOpenApi.builder().group("租赁信息管理").
pathsToMatch(
"/admin/appointment/**",
"/admin/agreement/**"
).build();
}
@Bean
public GroupedOpenApi userAPI() {
return GroupedOpenApi.builder().group("平台用户管理").
pathsToMatch(
"/admin/user/**"
).build();
}
@Bean
public GroupedOpenApi allAPI() {
return GroupedOpenApi.builder().group("全部接口").
pathsToMatch(
"/**"
).build();
}
}

View File

@ -0,0 +1,26 @@
package com.atguigu.lease.common.config;
import com.atguigu.lease.common.minio.MinioProperties;
import io.minio.MinioClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
/**
* @author Y1NanPing
* @create 2025/5/27 上午9:22
*/
@Component
public class MinioConfiguration {
@Autowired
private MinioProperties minioProperties;
@Bean
public MinioClient minioClient(){
return MinioClient.builder()
.endpoint(minioProperties.getEndpoint())
.credentials(minioProperties.getAccesskey(),
minioProperties.getSecretkey())
.build();
}
}

View File

@ -0,0 +1,10 @@
package com.atguigu.lease.common.constant;
public class RedisConstant {
public static final String ADMIN_LOGIN_PREFIX = "admin:login:";
public static final Integer ADMIN_LOGIN_CAPTCHA_TTL_SEC = 60;
public static final String APP_LOGIN_PREFIX = "app:login:";
public static final Integer APP_LOGIN_CODE_RESEND_TIME_SEC = 60;
public static final Integer APP_LOGIN_CODE_TTL_SEC = 60 * 10;
}

View File

@ -0,0 +1,32 @@
package com.atguigu.lease.common.exception;
import com.atguigu.lease.common.result.Result;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
@ControllerAdvice
public class GlobalExceptionHandler {
//切面类 把增强 应用到 切入点
//我们现在增强是什么 异常处理
//我们现在切入点出现异常的方法
//难点知道哪个方法出现了异常 @ExceptionHandler
//出现异常执行的方法
@ExceptionHandler(Exception.class)
@ResponseBody
public Result error(Exception e) {
e.printStackTrace();
return Result.fail();
}
@ExceptionHandler(LeaseException.class)
@ResponseBody
public Result error(LeaseException e) {
e.printStackTrace();
Integer code = e.getCode();
String message = e.getMessage();
return Result.fail(code,message);
}
}

View File

@ -0,0 +1,38 @@
package com.atguigu.lease.common.exception;
import com.atguigu.lease.common.result.ResultCodeEnum;
import lombok.Data;
@Data
public class LeaseException extends RuntimeException {
//异常状态码
private Integer code;
/**
* 通过状态码和错误消息创建异常对象
* @param message
* @param code
*/
public LeaseException(String message, Integer code) {
super(message);
this.code = code;
}
/**
* 根据响应结果枚举对象创建异常对象
* @param resultCodeEnum
*/
public LeaseException(ResultCodeEnum resultCodeEnum) {
super(resultCodeEnum.getMessage());
this.code = resultCodeEnum.getCode();
}
@Override
public String toString() {
return "LeaseException{" +
"code=" + code +
", message=" + this.getMessage() +
'}';
}
}

View File

@ -0,0 +1,23 @@
package com.atguigu.lease.common.minio;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* @author Y1NanPing
* @create 2025/5/27 上午9:18
*/
@ConfigurationProperties(prefix = "minio")
@Data
@Component
public class MinioProperties {
private String endpoint;
private String accesskey;
private String secretkey;
private String bucketname;
}

View File

@ -0,0 +1,25 @@
package com.atguigu.lease.common.mybatisplus;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import org.mybatis.spring.annotation.MapperScan;
import org.springdoc.core.models.GroupedOpenApi;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@MapperScan("com.atguigu.lease.web.*.mapper")
public class MybatisPlusConfiguration {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
}

View File

@ -0,0 +1,57 @@
package com.atguigu.lease.common.result;
import lombok.AllArgsConstructor;
import lombok.Data;
/**
* 全局统一返回结果类
*/
@Data
public class Result<T> {
//返回码
private Integer code;
//返回消息
private String message;
//返回数据
private T data;
public Result() {
}
private static <T> Result<T> build(T data) {
Result<T> result = new Result<>();
if (data != null)
result.setData(data);
return result;
}
public static <T> Result<T> build(T body, ResultCodeEnum resultCodeEnum) {
Result<T> result = build(body);
result.setCode(resultCodeEnum.getCode());
result.setMessage(resultCodeEnum.getMessage());
return result;
}
public static <T> Result<T> ok(T data) {
return build(data, ResultCodeEnum.SUCCESS);
}
public static <T> Result<T> ok() {
return Result.ok(null);
}
public static <T> Result<T> fail() {
return build(null, ResultCodeEnum.FAIL);
}
public static <T> Result<T> fail(Integer code, String message) {
Result<T> result = build(null);
result.setCode(code);
result.setMessage(message);
return result;
}
}

View File

@ -0,0 +1,53 @@
package com.atguigu.lease.common.result;
import lombok.Getter;
/**
* 统一返回结果状态信息类
*/
@Getter
public enum ResultCodeEnum {
SUCCESS(200, "成功"),
FAIL(201, "失败"),
PARAM_ERROR(202, "参数不正确"),
SERVICE_ERROR(203, "服务异常"),
DATA_ERROR(204, "数据异常"),
ILLEGAL_REQUEST(205, "非法请求"),
REPEAT_SUBMIT(206, "重复提交"),
DELETE_ERROR(207, "请先删除子集"),
ADMIN_ACCOUNT_EXIST_ERROR(301, "账号已存在"),
ADMIN_CAPTCHA_CODE_ERROR(302, "验证码错误"),
ADMIN_CAPTCHA_CODE_EXPIRED(303, "验证码已过期"),
ADMIN_CAPTCHA_CODE_NOT_FOUND(304, "未输入验证码"),
ADMIN_LOGIN_AUTH(305, "未登陆"),
ADMIN_ACCOUNT_NOT_EXIST_ERROR(306, "账号不存在"),
ADMIN_ACCOUNT_ERROR(307, "用户名或密码错误"),
ADMIN_ACCOUNT_DISABLED_ERROR(308, "该用户已被禁用"),
ADMIN_ACCESS_FORBIDDEN(309, "无访问权限"),
APP_LOGIN_AUTH(501, "未登陆"),
APP_LOGIN_PHONE_EMPTY(502, "手机号码为空"),
APP_LOGIN_CODE_EMPTY(503, "验证码为空"),
APP_SEND_SMS_TOO_OFTEN(504, "验证法发送过于频繁"),
APP_LOGIN_CODE_EXPIRED(505, "验证码已过期"),
APP_LOGIN_CODE_ERROR(506, "验证码错误"),
APP_ACCOUNT_DISABLED_ERROR(507, "该用户已被禁用"),
TOKEN_EXPIRED(601, "token过期"),
TOKEN_INVALID(602, "token非法");
private final Integer code;
private final String message;
ResultCodeEnum(Integer code, String message) {
this.code = code;
this.message = message;
}
}

View File

@ -0,0 +1,311 @@
package com.atguigu.lease.common.utils;
import org.apache.commons.lang.StringUtils;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpDelete;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.conn.ClientConnectionManager;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.entity.ByteArrayEntity;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class HttpUtils {
/**
* get
*
* @param host
* @param path
* @param method
* @param headers
* @param querys
* @return
* @throws Exception
*/
public static HttpResponse doGet(String host, String path, String method,
Map<String, String> headers,
Map<String, String> querys)
throws Exception {
HttpClient httpClient = wrapClient(host);
HttpGet request = new HttpGet(buildUrl(host, path, querys));
for (Map.Entry<String, String> e : headers.entrySet()) {
request.addHeader(e.getKey(), e.getValue());
}
return httpClient.execute(request);
}
/**
* post form
*
* @param host
* @param path
* @param method
* @param headers
* @param querys
* @param bodys
* @return
* @throws Exception
*/
public static HttpResponse doPost(String host, String path, String method,
Map<String, String> headers,
Map<String, String> querys,
Map<String, String> bodys)
throws Exception {
HttpClient httpClient = wrapClient(host);
HttpPost request = new HttpPost(buildUrl(host, path, querys));
for (Map.Entry<String, String> e : headers.entrySet()) {
request.addHeader(e.getKey(), e.getValue());
}
if (bodys != null) {
List<NameValuePair> nameValuePairList = new ArrayList<NameValuePair>();
for (String key : bodys.keySet()) {
nameValuePairList.add(new BasicNameValuePair(key, bodys.get(key)));
}
UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(nameValuePairList, "utf-8");
formEntity.setContentType("application/x-www-form-urlencoded; charset=UTF-8");
request.setEntity(formEntity);
}
return httpClient.execute(request);
}
/**
* Post String
*
* @param host
* @param path
* @param method
* @param headers
* @param querys
* @param body
* @return
* @throws Exception
*/
public static HttpResponse doPost(String host, String path, String method,
Map<String, String> headers,
Map<String, String> querys,
String body)
throws Exception {
HttpClient httpClient = wrapClient(host);
HttpPost request = new HttpPost(buildUrl(host, path, querys));
for (Map.Entry<String, String> e : headers.entrySet()) {
request.addHeader(e.getKey(), e.getValue());
}
if (StringUtils.isNotBlank(body)) {
request.setEntity(new StringEntity(body, "utf-8"));
}
return httpClient.execute(request);
}
/**
* Post stream
*
* @param host
* @param path
* @param method
* @param headers
* @param querys
* @param body
* @return
* @throws Exception
*/
public static HttpResponse doPost(String host, String path, String method,
Map<String, String> headers,
Map<String, String> querys,
byte[] body)
throws Exception {
HttpClient httpClient = wrapClient(host);
HttpPost request = new HttpPost(buildUrl(host, path, querys));
for (Map.Entry<String, String> e : headers.entrySet()) {
request.addHeader(e.getKey(), e.getValue());
}
if (body != null) {
request.setEntity(new ByteArrayEntity(body));
}
return httpClient.execute(request);
}
/**
* Put String
* @param host
* @param path
* @param method
* @param headers
* @param querys
* @param body
* @return
* @throws Exception
*/
public static HttpResponse doPut(String host, String path, String method,
Map<String, String> headers,
Map<String, String> querys,
String body)
throws Exception {
HttpClient httpClient = wrapClient(host);
HttpPut request = new HttpPut(buildUrl(host, path, querys));
for (Map.Entry<String, String> e : headers.entrySet()) {
request.addHeader(e.getKey(), e.getValue());
}
if (StringUtils.isNotBlank(body)) {
request.setEntity(new StringEntity(body, "utf-8"));
}
return httpClient.execute(request);
}
/**
* Put stream
* @param host
* @param path
* @param method
* @param headers
* @param querys
* @param body
* @return
* @throws Exception
*/
public static HttpResponse doPut(String host, String path, String method,
Map<String, String> headers,
Map<String, String> querys,
byte[] body)
throws Exception {
HttpClient httpClient = wrapClient(host);
HttpPut request = new HttpPut(buildUrl(host, path, querys));
for (Map.Entry<String, String> e : headers.entrySet()) {
request.addHeader(e.getKey(), e.getValue());
}
if (body != null) {
request.setEntity(new ByteArrayEntity(body));
}
return httpClient.execute(request);
}
/**
* Delete
*
* @param host
* @param path
* @param method
* @param headers
* @param querys
* @return
* @throws Exception
*/
public static HttpResponse doDelete(String host, String path, String method,
Map<String, String> headers,
Map<String, String> querys)
throws Exception {
HttpClient httpClient = wrapClient(host);
HttpDelete request = new HttpDelete(buildUrl(host, path, querys));
for (Map.Entry<String, String> e : headers.entrySet()) {
request.addHeader(e.getKey(), e.getValue());
}
return httpClient.execute(request);
}
private static String buildUrl(String host, String path, Map<String, String> querys) throws UnsupportedEncodingException {
StringBuilder sbUrl = new StringBuilder();
sbUrl.append(host);
if (!StringUtils.isBlank(path)) {
sbUrl.append(path);
}
if (null != querys) {
StringBuilder sbQuery = new StringBuilder();
for (Map.Entry<String, String> query : querys.entrySet()) {
if (0 < sbQuery.length()) {
sbQuery.append("&");
}
if (StringUtils.isBlank(query.getKey()) && !StringUtils.isBlank(query.getValue())) {
sbQuery.append(query.getValue());
}
if (!StringUtils.isBlank(query.getKey())) {
sbQuery.append(query.getKey());
if (!StringUtils.isBlank(query.getValue())) {
sbQuery.append("=");
sbQuery.append(URLEncoder.encode(query.getValue(), "utf-8"));
}
}
}
if (0 < sbQuery.length()) {
sbUrl.append("?").append(sbQuery);
}
}
return sbUrl.toString();
}
private static HttpClient wrapClient(String host) {
HttpClient httpClient = new DefaultHttpClient();
if (host.startsWith("https://")) {
sslClient(httpClient);
}
return httpClient;
}
private static void sslClient(HttpClient httpClient) {
try {
SSLContext ctx = SSLContext.getInstance("TLS");
X509TrustManager tm = new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(X509Certificate[] xcs, String str) {
}
public void checkServerTrusted(X509Certificate[] xcs, String str) {
}
};
ctx.init(null, new TrustManager[] { tm }, null);
SSLSocketFactory ssf = new SSLSocketFactory(ctx);
ssf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
ClientConnectionManager ccm = httpClient.getConnectionManager();
SchemeRegistry registry = ccm.getSchemeRegistry();
registry.register(new Scheme("https", 443, ssf));
} catch (KeyManagementException ex) {
throw new RuntimeException(ex);
} catch (NoSuchAlgorithmException ex) {
throw new RuntimeException(ex);
}
}
}

View File

@ -0,0 +1,63 @@
package com.atguigu.lease.common.utils;
import com.atguigu.lease.common.result.ResultCodeEnum;
import io.jsonwebtoken.*;
import io.jsonwebtoken.security.Keys;
import javax.crypto.SecretKey;
import java.util.Date;
public class JwtUtil {
//token过期时间固定值
private static long tokenExpiration = 60 * 60 * 1000L;
//加密秘钥
private static SecretKey tokenSignKey =
Keys.hmacShaKeyFor("M0PKKI6pYGVWWfDZw90a0lTpGYX1d4AQ".getBytes());
//生成token方法参数用户id和用户名称
public static String createToken(Long userId, String username) {
String token = Jwts.builder().
//设置分类
setSubject("USER_INFO").
//设置生成token过期时间
setExpiration(new Date(System.currentTimeMillis() + tokenExpiration)).
//jwt负载内容设置用户信息到token
claim("userId", userId).
claim("username", username).
//根据秘钥进行加密
signWith(tokenSignKey).
//把生成token压缩
compressWith(CompressionCodecs.GZIP).
compact();
return token;
}
//校验jwttoken从token获取数据
public static Claims parseToken(String token) {
try {
Jws<Claims> claimsJws = Jwts.parserBuilder().
//设置解密密钥
setSigningKey(tokenSignKey).
//从解密字符串获取设置负载数据
build().parseClaimsJws(token);
return claimsJws.getBody();
} catch (Exception e) {
throw new RuntimeException();
}
}
public static void main(String[] args) {
//1 生成token
String token = JwtUtil.createToken(9l, "lucy");
System.out.println(token);
//2 解析token
Claims claims = JwtUtil.parseToken(token);
Object username = claims.get("username");
Object userId = claims.get("userId");
System.out.println(userId+" :: "+username);
}
}

View File

@ -0,0 +1,14 @@
package com.atguigu.lease.common.utils;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class LoginUser {
private Long userId;
private String username;
}

View File

@ -0,0 +1,21 @@
package com.atguigu.lease.common.utils;
public class LoginUserContext {
private static final ThreadLocal<LoginUser> userThreadLocal = new ThreadLocal<>();
//
public static void setLoginUser(LoginUser loginUser) {
userThreadLocal.set(loginUser);
}
//获取
public static LoginUser getLoginUser() {
return userThreadLocal.get();
}
//清除
public static void clear() {
userThreadLocal.remove();
}
}

View File

@ -0,0 +1,14 @@
package com.atguigu.lease.common.utils;
import java.util.Random;
public class VerifyCodeUtil {
public static String getVerifyCode(int length) {
StringBuilder builder = new StringBuilder();
Random random = new Random();
for (int i = 0; i < length; i++) {
builder.append(random.nextInt(10));
}
return builder.toString();
}
}

37
model/pom.xml Normal file
View File

@ -0,0 +1,37 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>lease</artifactId>
<groupId>com.atguigu</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>model</artifactId>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
</properties>
<dependencies>
<!--mybatis-plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
<version>4.3.0</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,26 @@
package com.atguigu.lease.model.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Builder;
import lombok.Data;
@Schema(description = "公寓&配套关系")
@TableName(value = "apartment_facility")
@Data
public class ApartmentFacility extends BaseEntity {
private static final long serialVersionUID = 1L;
@Schema(description = "公寓id")
@TableField(value = "apartment_id")
private Long apartmentId;
@Schema(description = "设施id")
@TableField(value = "facility_id")
private Long facilityId;
}

View File

@ -0,0 +1,26 @@
package com.atguigu.lease.model.entity;
import io.swagger.v3.oas.annotations.media.Schema;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Builder;
import lombok.Data;
@Schema(description = "公寓&杂费关联表")
@TableName(value = "apartment_fee_value")
@Data
public class ApartmentFeeValue extends BaseEntity {
private static final long serialVersionUID = 1L;
@Schema(description = "公寓id")
@TableField(value = "apartment_id")
private Long apartmentId;
@Schema(description = "收费项value_id")
@TableField(value = "fee_value_id")
private Long feeValueId;
}

View File

@ -0,0 +1,68 @@
package com.atguigu.lease.model.entity;
import com.atguigu.lease.model.enums.ReleaseStatus;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Schema(description = "公寓信息表")
@TableName(value = "apartment_info")
@Data
public class ApartmentInfo extends BaseEntity {
private static final long serialVersionUID = 1L;
@Schema(description = "公寓名称")
@TableField(value = "name")
private String name;
@Schema(description = "公寓介绍")
@TableField(value = "introduction")
private String introduction;
@Schema(description = "所处区域id")
@TableField(value = "district_id")
private Long districtId;
@Schema(description = "所处区域名称")
@TableField(value = "district_name")
private String districtName;
@Schema(description = "所处城市id")
@TableField(value = "city_id")
private Long cityId;
@Schema(description = "所处城市名称")
@TableField(value = "city_name")
private String cityName;
@Schema(description = "所处省份id")
@TableField(value = "province_id")
private Long provinceId;
@Schema(description = "所处区域名称")
@TableField(value = "province_name")
private String provinceName;
@Schema(description = "详细地址")
@TableField(value = "address_detail")
private String addressDetail;
@Schema(description = "经度")
@TableField(value = "latitude")
private String latitude;
@Schema(description = "纬度")
@TableField(value = "longitude")
private String longitude;
@Schema(description = "公寓前台电话")
@TableField(value = "phone")
private String phone;
@Schema(description = "是否发布")
@TableField(value = "is_release")
private ReleaseStatus isRelease;
}

View File

@ -0,0 +1,25 @@
package com.atguigu.lease.model.entity;
import io.swagger.v3.oas.annotations.media.Schema;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Builder;
import lombok.Data;
@Schema(description = "公寓标签关联表")
@TableName(value = "apartment_label")
@Data
public class ApartmentLabel extends BaseEntity {
private static final long serialVersionUID = 1L;
@Schema(description = "公寓id")
@TableField(value = "apartment_id")
private Long apartmentId;
@Schema(description = "标签id")
@TableField(value = "label_id")
private Long labelId;
}

View File

@ -0,0 +1,21 @@
package com.atguigu.lease.model.entity;
import io.swagger.v3.oas.annotations.media.Schema;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.util.List;
@Schema(description = "房间基本属性表")
@TableName(value = "attr_key")
@Data
public class AttrKey extends BaseEntity {
private static final long serialVersionUID = 1L;
@Schema(description = "属性key")
@TableField(value = "name")
private String name;
}

View File

@ -0,0 +1,22 @@
package com.atguigu.lease.model.entity;
import io.swagger.v3.oas.annotations.media.Schema;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@Schema(description = "房间基本属性值表")
@TableName(value = "attr_value")
@Data
public class AttrValue extends BaseEntity {
private static final long serialVersionUID = 1L;
@Schema(description = "属性value")
@TableField(value = "name")
private String name;
@Schema(description = "对应的属性key_id")
@TableField(value = "attr_key_id")
private Long attrKeyId;
}

View File

@ -0,0 +1,31 @@
package com.atguigu.lease.model.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
@Data
public class BaseEntity implements Serializable {
@Schema(description = "主键")
@TableId(value = "id", type = IdType.AUTO)
private Long id;
@Schema(description = "创建时间")
@TableField(value = "create_time")
private Date createTime;
@Schema(description = "更新时间")
@TableField(value = "update_time")
private Date updateTime;
@Schema(description = "逻辑删除")
@TableField("is_deleted")
private Byte isDeleted;
}

View File

@ -0,0 +1,37 @@
package com.atguigu.lease.model.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* @TableName browsing_history
*/
@TableName(value = "browsing_history")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class BrowsingHistory extends BaseEntity {
private static final long serialVersionUID = 1L;
@Schema(description = "用户id")
@TableField("user_id")
private Long userId;
@Schema(description = "房间id")
@TableField("room_id")
private Long roomId;
@Schema(description = "浏览时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@TableField("browse_time")
private Date browseTime;
}

View File

@ -0,0 +1,23 @@
package com.atguigu.lease.model.entity;
import io.swagger.v3.oas.annotations.media.Schema;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@Schema(description = "城市信息表")
@TableName(value = "city_info")
@Data
public class CityInfo extends BaseEntity {
private static final long serialVersionUID = 1L;
@Schema(description = "城市名称")
@TableField(value = "name")
private String name;
@Schema(description = "所属省份id")
@TableField(value = "province_id")
private Integer provinceId;
}

View File

@ -0,0 +1,23 @@
package com.atguigu.lease.model.entity;
import io.swagger.v3.oas.annotations.media.Schema;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@Schema(description = "地区信息表")
@TableName(value = "district_info")
@Data
public class DistrictInfo extends BaseEntity {
private static final long serialVersionUID = 1L;
@Schema(description = "区域名称")
@TableField(value = "name")
private String name;
@Schema(description = "所属城市id")
@TableField(value = "city_id")
private Integer cityId;
}

View File

@ -0,0 +1,33 @@
package com.atguigu.lease.model.entity;
import com.atguigu.lease.model.enums.ItemType;
import com.baomidou.mybatisplus.annotation.TableLogic;
import io.swagger.v3.oas.annotations.media.Schema;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@Schema(description = "配套信息表")
@TableName(value = "facility_info")
@Data
public class FacilityInfo extends BaseEntity {
private static final long serialVersionUID = 1L;
@Schema(description = "配套所属对象类型")
@TableField(value = "type")
private ItemType type;
@Schema(description = "名称")
@TableField(value = "name")
private String name;
@Schema(description = "图标")
@TableField(value = "icon")
private String icon;
@Schema(description = "逻辑删除")
@TableField("is_deleted")
@TableLogic
private Byte isDeleted;
}

View File

@ -0,0 +1,23 @@
package com.atguigu.lease.model.entity;
import io.swagger.v3.oas.annotations.media.Schema;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.util.List;
@Schema(description = "杂项费用名称表")
@TableName(value = "fee_key")
@Data
public class FeeKey extends BaseEntity {
private static final long serialVersionUID = 1L;
@Schema(description = "付款项key")
@TableField(value = "name")
private String name;
}

View File

@ -0,0 +1,27 @@
package com.atguigu.lease.model.entity;
import io.swagger.v3.oas.annotations.media.Schema;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@Schema(description = "杂项费用值表")
@TableName(value = "fee_value")
@Data
public class FeeValue extends BaseEntity {
private static final long serialVersionUID = 1L;
@Schema(description = "费用value")
@TableField(value = "name")
private String name;
@Schema(description = "收费单位")
@TableField(value = "unit")
private String unit;
@Schema(description = "费用所对的fee_key编码")
@TableField(value = "fee_key_id")
private Long feeKeyId;
}

View File

@ -0,0 +1,32 @@
package com.atguigu.lease.model.entity;
import io.swagger.v3.oas.annotations.media.Schema;
import com.atguigu.lease.model.enums.ItemType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*;
@Schema(description = "图片信息表")
@TableName(value = "graph_info")
@Data
public class GraphInfo extends BaseEntity {
private static final long serialVersionUID = 1L;
@Schema(description = "图片名称")
@TableField(value = "name")
private String name;
@Schema(description = "图片所属对象类型")
@TableField(value = "item_type")
private ItemType itemType;
@Schema(description = "图片所有对象id")
@TableField(value = "item_id")
private Long itemId;
@Schema(description = "图片地址")
@TableField(value = "url")
private String url;
}

View File

@ -0,0 +1,31 @@
package com.atguigu.lease.model.entity;
import com.baomidou.mybatisplus.annotation.TableLogic;
import io.swagger.v3.oas.annotations.media.Schema;
import com.atguigu.lease.model.enums.ItemType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@Schema(description = "标签信息表")
@TableName(value = "label_info")
@Data
public class LabelInfo extends BaseEntity {
private static final long serialVersionUID = 1L;
@Schema(description = "类型")
@TableField(value = "type")
private ItemType type;
@Schema(description = "标签名称")
@TableField(value = "name")
private String name;
@Schema(description = "逻辑删除")
@TableField("is_deleted")
@TableLogic
private Byte isDeleted;
}

View File

@ -0,0 +1,79 @@
package com.atguigu.lease.model.entity;
import io.swagger.v3.oas.annotations.media.Schema;
import com.atguigu.lease.model.enums.LeaseSourceType;
import com.atguigu.lease.model.enums.LeaseStatus;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
@Schema(description = "租约信息表")
@TableName(value = "lease_agreement")
@Data
public class LeaseAgreement extends BaseEntity {
private static final long serialVersionUID = 1L;
@Schema(description = "承租人手机号码")
@TableField(value = "phone")
private String phone;
@Schema(description = "承租人姓名")
@TableField(value = "name")
private String name;
@Schema(description = "承租人身份证号码")
@TableField(value = "identification_number")
private String identificationNumber;
@Schema(description = "签约公寓id")
@TableField(value = "apartment_id")
private Long apartmentId;
@Schema(description = "签约房间id")
@TableField(value = "room_id")
private Long roomId;
@Schema(description = "租约开始日期")
@JsonFormat(pattern = "yyyy-MM-dd")
@TableField(value = "lease_start_date")
private Date leaseStartDate;
@Schema(description = "租约结束日期")
@TableField(value = "lease_end_date")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date leaseEndDate;
@Schema(description = "租期id")
@TableField(value = "lease_term_id")
private Long leaseTermId;
@Schema(description = "租金(元/月)")
@TableField(value = "rent")
private BigDecimal rent;
@Schema(description = "押金(元)")
@TableField(value = "deposit")
private BigDecimal deposit;
@Schema(description = "支付类型id")
@TableField(value = "payment_type_id")
private Long paymentTypeId;
@Schema(description = "租约状态")
@TableField(value = "status")
private LeaseStatus status;
@Schema(description = "租约来源")
@TableField(value = "source_type")
private LeaseSourceType sourceType;
@Schema(description = "备注信息")
@TableField(value = "additional_info")
private String additionalInfo;
}

View File

@ -0,0 +1,32 @@
package com.atguigu.lease.model.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
* @TableName lease_term
*/
@TableName(value = "lease_term")
@Data
@Schema(description = "租期信息")
public class LeaseTerm extends BaseEntity {
private static final long serialVersionUID = 1L;
@Schema(description = "租期月数")
@TableField("month_count")
private Integer monthCount;
@Schema(description = "租期单位:月")
@TableField("unit")
private String unit;
@Schema(description = "逻辑删除")
@TableField("is_deleted")
@TableLogic
private Byte isDeleted;
}

View File

@ -0,0 +1,35 @@
package com.atguigu.lease.model.entity;
import com.baomidou.mybatisplus.annotation.TableLogic;
import io.swagger.v3.oas.annotations.media.Schema;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Builder;
import lombok.Data;
@Schema(description = "支付方式表")
@TableName(value = "payment_type")
@Data
public class PaymentType extends BaseEntity {
private static final long serialVersionUID = 1L;
@Schema(description = "付款方式名称")
@TableField(value = "name")
private String name;
@Schema(description = "每次支付租期数")
@TableField(value = "pay_month_count")
private String payMonthCount;
@Schema(description = "付费说明")
@TableField(value = "additional_info")
private String additionalInfo;
@Schema(description = "是否删除")
@TableField(value = "is_deleted")
@TableLogic
private Byte isDeleted;
}

View File

@ -0,0 +1,19 @@
package com.atguigu.lease.model.entity;
import io.swagger.v3.oas.annotations.media.Schema;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@Schema(description = "省份信息表")
@TableName(value = "province_info")
@Data
public class ProvinceInfo extends BaseEntity {
private static final long serialVersionUID = 1L;
@Schema(description = "省份名称")
@TableField(value = "name")
private String name;
}

View File

@ -0,0 +1,24 @@
package com.atguigu.lease.model.entity;
import io.swagger.v3.oas.annotations.media.Schema;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Builder;
import lombok.Data;
@Schema(description = "房间&基本属性值关联表")
@TableName(value = "room_attr_value")
@Data
public class RoomAttrValue extends BaseEntity {
private static final long serialVersionUID = 1L;
@Schema(description = "房间id")
@TableField(value = "room_id")
private Long roomId;
@Schema(description = "属性值id")
@TableField(value = "attr_value_id")
private Long attrValueId;
}

View File

@ -0,0 +1,25 @@
package com.atguigu.lease.model.entity;
import io.swagger.v3.oas.annotations.media.Schema;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Builder;
import lombok.Data;
@Schema(description = "房间&配套关联表")
@TableName(value = "room_facility")
@Data
public class RoomFacility extends BaseEntity {
private static final long serialVersionUID = 1L;
@Schema(description = "房间id")
@TableField(value = "room_id")
private Long roomId;
@Schema(description = "房间设施id")
@TableField(value = "facility_id")
private Long facilityId;
}

View File

@ -0,0 +1,36 @@
package com.atguigu.lease.model.entity;
import com.atguigu.lease.model.enums.ReleaseStatus;
import io.swagger.v3.oas.annotations.media.Schema;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
@Schema(description = "房间信息表")
@TableName(value = "room_info")
@Data
public class RoomInfo extends BaseEntity {
private static final long serialVersionUID = 1L;
@Schema(description = "房间号")
@TableField(value = "room_number")
private String roomNumber;
@Schema(description = "租金(元/月)")
@TableField(value = "rent")
private BigDecimal rent;
@Schema(description = "所属公寓id")
@TableField(value = "apartment_id")
private Long apartmentId;
@Schema(description = "是否发布")
@TableField(value = "is_release")
private ReleaseStatus isRelease;
}

View File

@ -0,0 +1,25 @@
package com.atguigu.lease.model.entity;
import io.swagger.v3.oas.annotations.media.Schema;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Builder;
import lombok.Data;
@Schema(description = "房间&标签关联表")
@TableName(value = "room_label")
@Data
public class RoomLabel extends BaseEntity {
private static final long serialVersionUID = 1L;
@Schema(description = "房间id")
@TableField(value = "room_id")
private Long roomId;
@Schema(description = "标签id")
@TableField(value = "label_id")
private Long labelId;
}

View File

@ -0,0 +1,32 @@
package com.atguigu.lease.model.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @TableName room_lease_term
*/
@TableName(value = "room_lease_term")
@Data
@Schema(description = "房间租期关系表")
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class RoomLeaseTerm extends BaseEntity {
private static final long serialVersionUID = 1L;
@Schema(description = "房间id")
@TableField("room_id")
private Long roomId;
@Schema(description = "租期id")
@TableField("lease_term_id")
private Long leaseTermId;
}

View File

@ -0,0 +1,26 @@
package com.atguigu.lease.model.entity;
import io.swagger.v3.oas.annotations.media.Schema;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Builder;
import lombok.Data;
@Schema(description = "房间&支付方式关联表")
@TableName(value = "room_payment_type")
@Data
public class RoomPaymentType extends BaseEntity {
private static final long serialVersionUID = 1L;
@Schema(description = "房间id")
@TableField(value = "room_id")
private Long roomId;
@Schema(description = "支付类型id")
@TableField(value = "payment_type_id")
private Long paymentTypeId;
}

View File

@ -0,0 +1,37 @@
package com.atguigu.lease.model.entity;
import com.atguigu.lease.model.enums.BaseStatus;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
* 岗位信息表
*
* @TableName system_post
*/
@TableName(value = "system_post")
@Data
public class SystemPost extends BaseEntity {
private static final long serialVersionUID = 1L;
@Schema(description = "岗位编码")
@TableField(value = "code")
private String postCode;
@Schema(description = "岗位名称")
@TableField(value = "name")
private String name;
@Schema(description = "岗位描述信息")
@TableField(value = "description")
private String description;
@Schema(description = "岗位状态")
@TableField(value = "status")
private BaseStatus status;
}

View File

@ -0,0 +1,56 @@
package com.atguigu.lease.model.entity;
import com.atguigu.lease.model.enums.BaseStatus;
import com.atguigu.lease.model.enums.SystemUserType;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Schema(description = "员工信息")
@TableName(value = "system_user")
@Data
public class SystemUser extends BaseEntity {
private static final long serialVersionUID = 1L;
@Schema(description = "用户名")
@TableField(value = "username")
private String username;
@Schema(description = "密码")
@TableField(value = "password")
private String password;
@Schema(description = "姓名")
@TableField(value = "name")
private String name;
@Schema(description = "用户类型")
@TableField(value = "type")
private SystemUserType type;
@Schema(description = "手机号码")
@TableField(value = "phone")
private String phone;
@Schema(description = "头像地址")
@TableField(value = "avatar_url")
private String avatarUrl;
@Schema(description = "备注信息")
@TableField(value = "additional_info")
private String additionalInfo;
@Schema(description = "岗位id")
@TableField(value = "post_id")
private Long postId;
@Schema(description = "账号状态")
@TableField(value = "status")
private BaseStatus status;
}

View File

@ -0,0 +1,41 @@
package com.atguigu.lease.model.entity;
import com.atguigu.lease.model.enums.BaseStatus;
import io.swagger.v3.oas.annotations.media.Schema;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Schema(description = "用户信息表")
@TableName(value = "user_info")
@Data
public class UserInfo extends BaseEntity {
private static final long serialVersionUID = 1L;
@Schema(description = "手机号码(用做登录用户名)")
@TableField(value = "phone")
private String phone;
@Schema(description = "密码")
@TableField(value = "password")
private String password;
@Schema(description = "头像url")
@TableField(value = "avatar_url")
private String avatarUrl;
@Schema(description = "昵称")
@TableField(value = "nickname")
private String nickname;
@Schema(description = "账号状态")
@TableField(value = "status")
private BaseStatus status;
}

View File

@ -0,0 +1,45 @@
package com.atguigu.lease.model.entity;
import com.atguigu.lease.model.enums.AppointmentStatus;
import io.swagger.v3.oas.annotations.media.Schema;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.util.Date;
@Schema(description = "预约看房信息表")
@TableName(value = "view_appointment")
@Data
public class ViewAppointment extends BaseEntity {
private static final long serialVersionUID = 1L;
@Schema(description = "用户id")
@TableField(value = "user_id")
private Long userId;
@Schema(description = "用户姓名")
@TableField(value = "name")
private String name;
@Schema(description = "用户手机号码")
@TableField(value = "phone")
private String phone;
@Schema(description = "公寓id")
@TableField(value = "apartment_id")
private Long apartmentId;
@Schema(description = "预约时间")
@TableField(value = "appointment_time")
private Date appointmentTime;
@Schema(description = "备注信息")
@TableField(value = "additional_info")
private String additionalInfo;
@Schema(description = "预约状态")
@TableField(value = "appointment_status")
private AppointmentStatus appointmentStatus;
}

View File

@ -0,0 +1,37 @@
package com.atguigu.lease.model.enums;
import com.baomidou.mybatisplus.annotation.EnumValue;
import com.fasterxml.jackson.annotation.JsonValue;
public enum AppointmentStatus implements BaseEnum {
WAITING(1, "待看房"),
CANCELED(2, "已取消"),
VIEWED(3, "已看房");
@EnumValue
@JsonValue
private Integer code;
private String name;
AppointmentStatus(Integer code, String name) {
this.code = code;
this.name = name;
}
@Override
public Integer getCode() {
return this.code;
}
@Override
public String getName() {
return this.name;
}
}

View File

@ -0,0 +1,8 @@
package com.atguigu.lease.model.enums;
public interface BaseEnum {
Integer getCode();
String getName();
}

View File

@ -0,0 +1,35 @@
package com.atguigu.lease.model.enums;
import com.baomidou.mybatisplus.annotation.EnumValue;
import com.fasterxml.jackson.annotation.JsonValue;
public enum BaseStatus implements BaseEnum {
ENABLE(1, "正常"),
DISABLE(0, "禁用");
@EnumValue
@JsonValue
private Integer code;
private String name;
BaseStatus(Integer code, String name) {
this.code = code;
this.name = name;
}
@Override
public Integer getCode() {
return this.code;
}
@Override
public String getName() {
return this.name;
}
}

View File

@ -0,0 +1,51 @@
package com.atguigu.lease.model.enums;
import com.baomidou.mybatisplus.annotation.EnumValue;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.fasterxml.jackson.annotation.JsonValue;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
public enum ItemType implements BaseEnum {
APARTMENT(1, "公寓"),
ROOM(2, "房间");
@EnumValue
@JsonValue
private Integer code;
private String name;
public void setCode(Integer code) {
this.code = code;
}
public void setName(String name) {
this.name = name;
}
@Override
public Integer getCode() {
return this.code;
}
@Override
public String getName() {
return name;
}
ItemType(Integer code, String name) {
this.code = code;
this.name = name;
}
}

View File

@ -0,0 +1,32 @@
package com.atguigu.lease.model.enums;
import com.baomidou.mybatisplus.annotation.EnumValue;
import com.fasterxml.jackson.annotation.JsonValue;
public enum LeaseSourceType implements BaseEnum {
NEW(1, "新签"),
RENEW(2, "续约");
@JsonValue
@EnumValue
private Integer code;
private String name;
LeaseSourceType(Integer code, String name) {
this.code = code;
this.name = name;
}
@Override
public Integer getCode() {
return this.code;
}
@Override
public String getName() {
return this.name;
}
}

View File

@ -0,0 +1,37 @@
package com.atguigu.lease.model.enums;
import com.baomidou.mybatisplus.annotation.EnumValue;
import com.fasterxml.jackson.annotation.JsonValue;
public enum LeaseStatus implements BaseEnum {
SIGNING(1, "签约待确认"),
SIGNED(2, "已签约"),
CANCELED(3, "已取消"),
EXPIRED(4, "已到期"),
WITHDRAWING(5, "退租待确认"),
WITHDRAWN(6, "已退租"),
RENEWING(7, "续约待确认");
@EnumValue
@JsonValue
private Integer code;
private String name;
LeaseStatus(Integer code, String name) {
this.code = code;
this.name = name;
}
@Override
public Integer getCode() {
return this.code;
}
@Override
public String getName() {
return this.name;
}
}

View File

@ -0,0 +1,35 @@
package com.atguigu.lease.model.enums;
import com.baomidou.mybatisplus.annotation.EnumValue;
import com.fasterxml.jackson.annotation.JsonValue;
public enum ReleaseStatus implements BaseEnum {
RELEASED(1, "已发布"),
NOT_RELEASED(0, "未发布");
@EnumValue
@JsonValue
private Integer code;
private String name;
ReleaseStatus(Integer code, String name) {
this.code = code;
this.name = name;
}
@Override
public Integer getCode() {
return this.code;
}
@Override
public String getName() {
return this.name;
}
}

View File

@ -0,0 +1,32 @@
package com.atguigu.lease.model.enums;
import com.baomidou.mybatisplus.annotation.EnumValue;
import com.fasterxml.jackson.annotation.JsonValue;
public enum SystemUserType implements BaseEnum {
ADMIN(0, "管理员"),
COMMON(1, "普通用户");
@EnumValue
@JsonValue
private Integer code;
private String name;
SystemUserType(Integer code, String name) {
this.code = code;
this.name = name;
}
@Override
public Integer getCode() {
return this.code;
}
@Override
public String getName() {
return this.name;
}
}

112
pom.xml Normal file
View File

@ -0,0 +1,112 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.0.5</version>
</parent>
<groupId>com.atguigu</groupId>
<artifactId>lease</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>common</module>
<module>model</module>
<module>web</module>
</modules>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<mybatis-plus.version>3.5.3.1</mybatis-plus.version>
<swagger.version>2.9.2</swagger.version>
<jwt.version>0.11.2</jwt.version>
<easycaptcha.version>1.6.2</easycaptcha.version>
<minio.version>8.2.0</minio.version>
<knife4j.version>4.1.0</knife4j.version>
<aliyun.sms.version>2.0.23</aliyun.sms.version>
</properties>
<!--配置dependencyManagement统一管理依赖版本-->
<dependencyManagement>
<dependencies>
<!--mybatis-plus-->
<!--官方文档https://baomidou.com/pages/bab2db/ -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
<!--knife4j文档-->
<!--官方文档https://doc.xiaominfo.com/docs/quick-start -->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
<version>${knife4j.version}</version>
</dependency>
<!--JWT登录认证相关-->
<!--官方文档https://github.com/jwtk/jjwt#install-jdk-maven -->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-api</artifactId>
<version>${jwt.version}</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-impl</artifactId>
<scope>runtime</scope>
<version>${jwt.version}</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-jackson</artifactId>
<scope>runtime</scope>
<version>${jwt.version}</version>
</dependency>
<!--图形验证码-->
<!--官方文档https://gitee.com/ele-admin/EasyCaptcha -->
<dependency>
<groupId>com.github.whvcse</groupId>
<artifactId>easy-captcha</artifactId>
<version>${easycaptcha.version}</version>
</dependency>
<!--对象存储,用于存储图像等非结构化数据-->
<!--官方文档https://min.io/docs/minio/linux/developers/minio-drivers.html?ref=docs#java-sdk -->
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>${minio.version}</version>
</dependency>
<!--阿里云短信客户端,用于发送短信验证码-->
<!--官方文档https://help.aliyun.com/document_detail/215759.html?spm=a2c4g.215759.0.0.49f32807f4Yc0y -->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>dysmsapi20170525</artifactId>
<version>${aliyun.sms.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
<version>4.3.0</version>
</dependency>
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.5.3</version>
</dependency>
</dependencies>
</project>

59
web/pom.xml Normal file
View File

@ -0,0 +1,59 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>lease</artifactId>
<groupId>com.atguigu</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>web</artifactId>
<packaging>pom</packaging>
<modules>
<module>web-admin</module>
<module>web-app</module>
</modules>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>com.atguigu</groupId>
<artifactId>common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!--包含spring web相关依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--包含spring test相关依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--mysql驱动-->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>

34
web/web-admin/pom.xml Normal file
View File

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>web</artifactId>
<groupId>com.atguigu</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>web-admin</artifactId>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>com.github.whvcse</groupId>
<artifactId>easy-captcha</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,15 @@
package com.atguigu.lease;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
@EnableScheduling
public class AdminWebApplication {
public static void main(String[] args) {
SpringApplication.run(AdminWebApplication.class, args);
}
}

View File

@ -0,0 +1,91 @@
package com.atguigu.lease.web.admin.controller.apartment;
import com.atguigu.lease.common.result.Result;
import com.atguigu.lease.model.entity.ApartmentInfo;
import com.atguigu.lease.model.enums.ReleaseStatus;
import com.atguigu.lease.web.admin.service.ApartmentInfoService;
import com.atguigu.lease.web.admin.vo.apartment.ApartmentDetailVo;
import com.atguigu.lease.web.admin.vo.apartment.ApartmentItemVo;
import com.atguigu.lease.web.admin.vo.apartment.ApartmentQueryVo;
import com.atguigu.lease.web.admin.vo.apartment.ApartmentSubmitVo;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@Tag(name = "公寓信息管理")
@RestController
@RequestMapping("/admin/apartment")
public class ApartmentController {
@Autowired
private ApartmentInfoService apartmentInfoService;
@Operation(summary = "保存或更新公寓信息")
@PostMapping("saveOrUpdate")
public Result saveOrUpdate(@RequestBody ApartmentSubmitVo apartmentSubmitVo) {
apartmentInfoService.saveOrUpdateApartment(apartmentSubmitVo);
return Result.ok();
}
@Operation(summary = "根据条件分页查询公寓列表")
@GetMapping("pageItem")
public Result<IPage<ApartmentItemVo>> pageItem(@RequestParam long current, @RequestParam long size, ApartmentQueryVo queryVo) {
Page<ApartmentItemVo> page = new Page<>(current,size);
IPage<ApartmentItemVo> pageModel =
apartmentInfoService.selectApartmentInfoPage(page,queryVo);
return Result.ok(pageModel);
}
@Operation(summary = "根据ID获取公寓详细信息")
@GetMapping("getDetailById")
public Result<ApartmentDetailVo> getDetailById(@RequestParam Long id) {
ApartmentDetailVo detailById = apartmentInfoService.getDetailById(id);
return Result.ok(detailById);
}
@Operation(summary = "根据id删除公寓信息")
@DeleteMapping("removeById")
public Result removeById(@RequestParam Long id) {
apartmentInfoService.removeApartmentById(id);
return Result.ok();
}
@Operation(summary = "根据id修改公寓发布状态")
@PostMapping("updateReleaseStatusById")
public Result updateReleaseStatusById(@RequestParam Long id, @RequestParam ReleaseStatus status) {
ApartmentInfo byId = apartmentInfoService.getById(id);
byId.setIsRelease(status);
apartmentInfoService.updateById(byId);
return Result.ok();
}
@Operation(summary = "根据区县id查询公寓信息列表")
@GetMapping("listInfoByDistrictId")
public Result<List<ApartmentInfo>> listInfoByDistrictId(@RequestParam Long id) {
LambdaQueryWrapper<ApartmentInfo> query = new LambdaQueryWrapper<>();
query.eq(ApartmentInfo::getDistrictId,id);
List<ApartmentInfo> list = apartmentInfoService.list(query);
return Result.ok(list);
}
}

View File

@ -0,0 +1,68 @@
package com.atguigu.lease.web.admin.controller.apartment;
import com.atguigu.lease.common.result.Result;
import com.atguigu.lease.model.entity.AttrKey;
import com.atguigu.lease.model.entity.AttrValue;
import com.atguigu.lease.web.admin.service.AttrKeyService;
import com.atguigu.lease.web.admin.service.AttrValueService;
import com.atguigu.lease.web.admin.vo.attr.AttrKeyVo;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@Tag(name = "房间属性管理")
@RestController
@RequestMapping("/admin/attr")
public class AttrController {
@Autowired
private AttrKeyService attrKeyService;
@Autowired
private AttrValueService attrValueService;
@Operation(summary = "新增或更新属性名称")
@PostMapping("key/saveOrUpdate")
public Result saveOrUpdateAttrKey(@RequestBody AttrKey attrKey) {
attrKeyService.saveOrUpdate(attrKey);
return Result.ok();
}
@Operation(summary = "新增或更新属性值")
@PostMapping("value/saveOrUpdate")
public Result saveOrUpdateAttrValue(@RequestBody AttrValue attrValue) {
attrValueService.saveOrUpdate(attrValue);
return Result.ok();
}
@Operation(summary = "查询全部属性名称和属性值列表")
@GetMapping("list")
public Result<List<AttrKeyVo>> listAttrInfo() {
List<AttrKeyVo> attrKeyVos = attrKeyService.listAttrInfo();
return Result.ok(attrKeyVos);
}
@Operation(summary = "根据id删除属性名称")
@DeleteMapping("key/deleteById")
public Result removeAttrKeyById(@RequestParam Long attrKeyId) {
LambdaQueryWrapper<AttrValue> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(AttrValue::getAttrKeyId,attrKeyId);
attrValueService.remove(wrapper);
return Result.ok();
}
@Operation(summary = "根据id删除属性值")
@DeleteMapping("value/deleteById")
public Result removeAttrValueById(@RequestParam Long id) {
attrValueService.removeById(id);
return Result.ok();
}
}

View File

@ -0,0 +1,56 @@
package com.atguigu.lease.web.admin.controller.apartment;
import com.atguigu.lease.common.result.Result;
import com.atguigu.lease.model.entity.FacilityInfo;
import com.atguigu.lease.model.enums.ItemType;
import com.atguigu.lease.web.admin.service.FacilityInfoService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@Tag(name = "配套管理")
@RestController
@RequestMapping("/admin/facility")
public class FacilityController {
@Autowired
private FacilityInfoService facilityInfoService;
@Operation(summary = "[根据类型]查询配套信息列表")
@GetMapping("list")
public Result<List<FacilityInfo>> listFacility(@RequestParam(required = false) ItemType type) {
LambdaQueryWrapper<FacilityInfo> queryWrapper = new LambdaQueryWrapper<>();
LambdaQueryWrapper<FacilityInfo> eq = queryWrapper.eq(FacilityInfo::getType, type);
List<FacilityInfo> list = facilityInfoService.list(eq);
return Result.ok(list);
}
@Operation(summary = "新增或修改配套信息")
@PostMapping("saveOrUpdate")
public Result saveOrUpdate(@RequestBody FacilityInfo facilityInfo) {
boolean b = facilityInfoService.saveOrUpdate(facilityInfo);
if (b){
return Result.ok();
}else {
return Result.fail();
}
}
@Operation(summary = "根据id删除配套信息")
@DeleteMapping("deleteById")
public Result removeFacilityById(@RequestParam Long id) {
boolean b = facilityInfoService.removeById(id);
if (b){
return Result.ok();
}else {
return Result.fail();
}
}
}

View File

@ -0,0 +1,73 @@
package com.atguigu.lease.web.admin.controller.apartment;
import com.atguigu.lease.common.result.Result;
import com.atguigu.lease.model.entity.FeeKey;
import com.atguigu.lease.model.entity.FeeValue;
import com.atguigu.lease.web.admin.service.FeeKeyService;
import com.atguigu.lease.web.admin.service.FeeValueService;
import com.atguigu.lease.web.admin.vo.fee.FeeKeyVo;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@Tag(name = "房间杂费管理")
@RestController
@RequestMapping("/admin/fee")
public class FeeController {
@Autowired
private FeeKeyService feeKeyService;
@Autowired
private FeeValueService feeValueService;
@Operation(summary = "保存或更新杂费名称")
@PostMapping("key/saveOrUpdate")
public Result saveOrUpdateFeeKey(@RequestBody FeeKey feeKey) {
feeKeyService.saveOrUpdate(feeKey);
return Result.ok();
}
@Operation(summary = "保存或更新杂费值")
@PostMapping("value/saveOrUpdate")
public Result saveOrUpdateFeeValue(@RequestBody FeeValue feeValue) {
feeValueService.saveOrUpdate(feeValue);
return Result.ok();
}
@Operation(summary = "查询全部杂费名称和杂费值列表")
@GetMapping("list")
public Result<List<FeeKeyVo>> feeInfoList() {
List<FeeKeyVo> feeKeyVos = feeKeyService.saveOrUpdateFeeKey();
return Result.ok(feeKeyVos);
}
@Operation(summary = "根据id删除杂费名称")
@DeleteMapping("key/deleteById")
public Result deleteFeeKeyById(@RequestParam Long feeKeyId) {
LambdaQueryWrapper<FeeKey> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(FeeKey::getId, feeKeyId);
feeKeyService.remove(wrapper);
return Result.ok();
}
@Operation(summary = "根据id删除杂费值")
@DeleteMapping("value/deleteById")
public Result deleteFeeValueById(@RequestParam Long id) {
boolean b = feeValueService.removeById(id);
if (b){
return Result.ok();
}else {
return Result.fail();
}
}
}

View File

@ -0,0 +1,29 @@
package com.atguigu.lease.web.admin.controller.apartment;
import com.atguigu.lease.common.result.Result;
import com.atguigu.lease.web.admin.service.FileService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
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;
@Tag(name = "文件管理")
@RequestMapping("/admin/file")
@RestController
public class FileUploadController {
@Autowired
private FileService fileService;
@Operation(summary = "上传文件")
@PostMapping("upload")
public Result<String> upload(@RequestParam MultipartFile file) {
String url = fileService.upload(file);
return Result.ok(url);
}
}

View File

@ -0,0 +1,55 @@
package com.atguigu.lease.web.admin.controller.apartment;
import com.atguigu.lease.common.result.Result;
import com.atguigu.lease.model.entity.LabelInfo;
import com.atguigu.lease.model.enums.ItemType;
import com.atguigu.lease.web.admin.service.LabelInfoService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@Tag(name = "标签管理")
@RestController
@RequestMapping("/admin/label")
public class LabelController {
@Autowired
private LabelInfoService labelInfoService;
@Operation(summary = "(根据类型)查询标签列表")
@GetMapping("list")
public Result<List<LabelInfo>> labelList(@RequestParam(required = false) ItemType itemType) {
LambdaQueryWrapper<LabelInfo> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(LabelInfo::getType,itemType);
List<LabelInfo> list = labelInfoService.list(queryWrapper);
return Result.ok(list);
}
@Operation(summary = "新增或修改标签信息")
@PostMapping("saveOrUpdate")
public Result saveOrUpdateLabel(@RequestBody LabelInfo labelInfo) {
boolean b = labelInfoService.saveOrUpdate(labelInfo);
if (b){
return Result.ok();
}else {
return Result.fail();
}
}
@Operation(summary = "根据id删除标签信息")
@DeleteMapping("deleteById")
public Result deleteLabelById(@RequestParam Long id) {
boolean b = labelInfoService.removeById(id);
if (b){
return Result.ok();
}else {
return Result.fail();
}
}
}

View File

@ -0,0 +1,50 @@
package com.atguigu.lease.web.admin.controller.apartment;
import com.atguigu.lease.common.result.Result;
import com.atguigu.lease.model.entity.LeaseTerm;
import com.atguigu.lease.web.admin.service.LeaseTermService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@Tag(name = "租期管理")
@RequestMapping("/admin/term")
@RestController
public class LeaseTermController {
@Autowired
private LeaseTermService leaseTermService;
@GetMapping("list")
@Operation(summary = "查询全部租期列表")
public Result<List<LeaseTerm>> listLeaseTerm() {
List<LeaseTerm> list = leaseTermService.list();
return Result.ok(list);
}
@PostMapping("saveOrUpdate")
@Operation(summary = "保存或更新租期信息")
public Result saveOrUpdate(@RequestBody LeaseTerm leaseTerm) {
boolean b = leaseTermService.saveOrUpdate(leaseTerm);
if (b){
return Result.ok();
}else {
return Result.fail();
}
}
@DeleteMapping("deleteById")
@Operation(summary = "根据ID删除租期")
public Result deleteLeaseTermById(@RequestParam Long id) {
boolean b = leaseTermService.removeById(id);
if (b){
return Result.ok();
}else {
return Result.fail();
}
}
}

View File

@ -0,0 +1,68 @@
package com.atguigu.lease.web.admin.controller.apartment;
import com.atguigu.lease.common.result.Result;
import com.atguigu.lease.model.entity.PaymentType;
import com.atguigu.lease.web.admin.service.PaymentTypeService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@Tag(name = "支付方式管理")
@RequestMapping("/admin/payment")
@RestController
public class PaymentTypeController {
@Autowired
private PaymentTypeService paymentTypeService;
@Operation(summary = "查询全部支付方式列表")
@GetMapping("list")
public Result<List<PaymentType>> listPaymentType() {
List<PaymentType> list = paymentTypeService.list();
return Result.ok(list);
}
@Operation(summary = "保存或更新支付方式")
@PostMapping("saveOrUpdate")
public Result saveOrUpdatePaymentType(@RequestBody PaymentType paymentType) {
boolean b = paymentTypeService.saveOrUpdate(paymentType);
if (b){
return Result.ok();
}else {
return Result.fail();
}
}
@Operation(summary = "根据ID删除支付方式")
@DeleteMapping("deleteById")
public Result deletePaymentById(@RequestParam Long id) {
boolean b = paymentTypeService.removeById(id);
if (b){
return Result.ok();
}
return Result.fail();
}
}

View File

@ -0,0 +1,57 @@
package com.atguigu.lease.web.admin.controller.apartment;
import com.atguigu.lease.common.result.Result;
import com.atguigu.lease.model.entity.CityInfo;
import com.atguigu.lease.model.entity.DistrictInfo;
import com.atguigu.lease.model.entity.ProvinceInfo;
import com.atguigu.lease.web.admin.service.CityInfoService;
import com.atguigu.lease.web.admin.service.DistrictInfoService;
import com.atguigu.lease.web.admin.service.ProvinceInfoService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@Tag(name = "地区信息管理")
@RestController
@RequestMapping("/admin/region")
public class RegionInfoController {
@Autowired
private ProvinceInfoService provinceInfoService;
@Autowired
private CityInfoService cityInfoService;
@Autowired
private DistrictInfoService districtInfoService;
@Operation(summary = "查询省份信息列表")
@GetMapping("province/list")
public Result<List<ProvinceInfo>> listProvince() {
List<ProvinceInfo> list = provinceInfoService.list();
return Result.ok(list);
}
@Operation(summary = "根据省份id查询城市信息列表")
@GetMapping("city/listByProvinceId")
public Result<List<CityInfo>> listCityInfoByProvinceId(@RequestParam Long id) {
LambdaQueryWrapper<CityInfo> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(CityInfo::getProvinceId, id);
List<CityInfo> list = cityInfoService.list(queryWrapper);
return Result.ok(list);
}
@GetMapping("district/listByCityId")
@Operation(summary = "根据城市id查询区县信息")
public Result<List<DistrictInfo>> listDistrictInfoByCityId(@RequestParam Long id) {
LambdaQueryWrapper<DistrictInfo> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(DistrictInfo::getCityId, id);
List<DistrictInfo> list = districtInfoService.list(queryWrapper);
return Result.ok(list);
}
}

View File

@ -0,0 +1,99 @@
package com.atguigu.lease.web.admin.controller.apartment;
import com.atguigu.lease.common.result.Result;
import com.atguigu.lease.model.entity.ApartmentLabel;
import com.atguigu.lease.model.entity.RoomInfo;
import com.atguigu.lease.model.enums.ReleaseStatus;
import com.atguigu.lease.web.admin.service.RoomInfoService;
import com.atguigu.lease.web.admin.vo.room.RoomDetailVo;
import com.atguigu.lease.web.admin.vo.room.RoomItemVo;
import com.atguigu.lease.web.admin.vo.room.RoomQueryVo;
import com.atguigu.lease.web.admin.vo.room.RoomSubmitVo;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@Tag(name = "房间信息管理")
@RestController
@RequestMapping("/admin/room")
public class RoomController {
@Autowired
private RoomInfoService roomInfoService;
@Operation(summary = "保存或更新房间信息")
@PostMapping("saveOrUpdate")
public Result saveOrUpdate(@RequestBody RoomSubmitVo roomSubmitVo) {
roomInfoService.saveOrUpdateRoomInfo(roomSubmitVo);
return Result.ok();
}
@Operation(summary = "根据条件分页查询房间列表")
@GetMapping("pageItem")
public Result<IPage<RoomItemVo>> pageItem(@RequestParam long current, @RequestParam long size, RoomQueryVo queryVo) {
Page<RoomItemVo> page =new Page<>(current,size);
IPage<RoomItemVo> pageModel = roomInfoService.selectRoomInfoPage(page,queryVo);
return Result.ok(pageModel);
}
@Operation(summary = "根据id获取房间详细信息")
@GetMapping("getDetailById")
public Result<RoomDetailVo> getDetailById(@RequestParam Long id) {
RoomDetailVo detailById = roomInfoService.getDetailById(id);
return Result.ok(detailById);
}
@Operation(summary = "根据id删除房间信息")
@DeleteMapping("removeById")
public Result removeById(@RequestParam Long id) {
roomInfoService.removeRoomById(id);
return Result.ok();
}
@Operation(summary = "根据id修改房间发布状态")
@PostMapping("updateReleaseStatusById")
public Result updateReleaseStatusById(Long id, ReleaseStatus status) {
LambdaUpdateWrapper<RoomInfo> queryWrapper = new LambdaUpdateWrapper<>();
queryWrapper.eq(RoomInfo::getId, id);
queryWrapper.set(RoomInfo::getIsRelease, status);
roomInfoService.update(queryWrapper);
return Result.ok();
}
@GetMapping("listBasicByApartmentId")
@Operation(summary = "根据公寓id查询房间列表")
public Result<List<RoomInfo>> listBasicByApartmentId(Long id) {
LambdaQueryWrapper<RoomInfo> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(RoomInfo::getApartmentId, id);
queryWrapper.eq(RoomInfo::getIsRelease, ReleaseStatus.RELEASED);
List<RoomInfo> list = roomInfoService.list(queryWrapper);
return Result.ok(list);
}
}

View File

@ -0,0 +1,69 @@
package com.atguigu.lease.web.admin.controller.lease;
import com.atguigu.lease.common.result.Result;
import com.atguigu.lease.model.entity.LeaseAgreement;
import com.atguigu.lease.model.enums.LeaseStatus;
import com.atguigu.lease.web.admin.service.LeaseAgreementService;
import com.atguigu.lease.web.admin.vo.agreement.AgreementQueryVo;
import com.atguigu.lease.web.admin.vo.agreement.AgreementVo;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@Tag(name = "租约管理")
@RestController
@RequestMapping("/admin/agreement")
public class LeaseAgreementController {
@Autowired
private LeaseAgreementService leaseAgreementService;
@Operation(summary = "保存或修改租约信息")
@PostMapping("saveOrUpdate")
public Result saveOrUpdate(@RequestBody LeaseAgreement leaseAgreement) {
leaseAgreementService.saveOrUpdate(leaseAgreement);
return Result.ok();
}
@Operation(summary = "根据条件分页查询租约列表")
@GetMapping("page")
public Result<IPage<AgreementVo>> page(@RequestParam long current, @RequestParam long size, AgreementQueryVo queryVo) {
Page<AgreementVo> page = new Page<>(current, size);
IPage<AgreementVo> pageModel = leaseAgreementService.selectPageAgreement(page,queryVo);
return Result.ok(pageModel);
}
@Operation(summary = "根据id查询租约信息")
@GetMapping(name = "getById")
public Result<AgreementVo> getById(@RequestParam Long id) {
AgreementVo agreementVo = leaseAgreementService.getAgreement(id);
return Result.ok(agreementVo);
}
@Operation(summary = "根据id删除租约信息")
@DeleteMapping("removeById")
public Result removeById(@RequestParam Long id) {
boolean b = leaseAgreementService.removeById(id);
if (b){
return Result.ok();
}else{
return Result.fail();
}
}
@Operation(summary = "根据id更新租约状态")
@PostMapping("updateStatusById")
public Result updateStatusById(@RequestParam Long id, @RequestParam LeaseStatus status) {
LambdaUpdateWrapper<LeaseAgreement> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(LeaseAgreement::getId, id);
updateWrapper.set(LeaseAgreement::getStatus, status);
leaseAgreementService.update(updateWrapper);
return Result.ok();
}
}

View File

@ -0,0 +1,43 @@
package com.atguigu.lease.web.admin.controller.lease;
import com.atguigu.lease.common.result.Result;
import com.atguigu.lease.model.entity.ViewAppointment;
import com.atguigu.lease.model.enums.AppointmentStatus;
import com.atguigu.lease.web.admin.service.ViewAppointmentService;
import com.atguigu.lease.web.admin.vo.appointment.AppointmentQueryVo;
import com.atguigu.lease.web.admin.vo.appointment.AppointmentVo;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@Tag(name = "预约看房管理")
@RequestMapping("/admin/appointment")
@RestController
public class ViewAppointmentController {
@Autowired
private ViewAppointmentService viewAppointmentService;
@Operation(summary = "分页查询预约信息")
@GetMapping("page")
public Result<IPage<AppointmentVo>> page(@RequestParam long current, @RequestParam long size, AppointmentQueryVo queryVo) {
Page<AppointmentVo> page = new Page<>(current, size);
IPage<AppointmentVo> pageModel =
viewAppointmentService.selectAppointmentInfoPage(page, queryVo);
return Result.ok(pageModel);
}
@Operation(summary = "根据id更新预约状态")
@PostMapping("updateStatusById")
public Result updateStatusById(@RequestParam Long id, @RequestParam AppointmentStatus status) {
LambdaQueryWrapper<ViewAppointment> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(ViewAppointment::getId, id);
viewAppointmentService.update(wrapper);
return Result.ok();
}
}

View File

@ -0,0 +1,54 @@
package com.atguigu.lease.web.admin.controller.login;
import com.atguigu.lease.common.result.Result;
import com.atguigu.lease.common.utils.LoginUser;
import com.atguigu.lease.common.utils.LoginUserContext;
import com.atguigu.lease.web.admin.service.LoginService;
import com.atguigu.lease.web.admin.vo.login.CaptchaVo;
import com.atguigu.lease.web.admin.vo.login.LoginVo;
import com.atguigu.lease.web.admin.vo.system.user.SystemUserInfoVo;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@Tag(name = "后台管理系统登录管理")
@RestController
@RequestMapping("/admin")
public class LoginController {
@Autowired
private LoginService loginService;
@Operation(summary = "获取图形验证码")
@GetMapping("login/captcha")
public Result<CaptchaVo> getCaptcha() {
CaptchaVo captchaVo = loginService.getCaptcha();
return Result.ok(captchaVo);
}
@Operation(summary = "登录")
@PostMapping("login")
public Result<String> login(@RequestBody LoginVo loginVo) {
String token = loginService.login(loginVo);
return Result.ok(token);
}
@Operation(summary = "获取登陆用户个人信息")
@GetMapping("info")
public Result<SystemUserInfoVo> info() {
//1 从请求头获取当前登录用户id
// 用户id在请求头token里面
//String token = request.getHeader("access-token");
// 解析token 使用jwt
//Claims claims = JwtUtil.parseToken(token);
//Long userId = claims.get("userId",Long.class);
//直接从ThreadLocal获取userId
LoginUser loginUser = LoginUserContext.getLoginUser();
Long userId = loginUser.getUserId();
//TODO 2 根据用户id查询数据库表获取用户信息
SystemUserInfoVo user = loginService.getSystemUserInfoById(LoginUserContext.getLoginUser().getUserId());
return Result.ok(user);
}
}

View File

@ -0,0 +1,75 @@
package com.atguigu.lease.web.admin.controller.system;
import com.atguigu.lease.common.result.Result;
import com.atguigu.lease.model.entity.SystemPost;
import com.atguigu.lease.model.enums.BaseStatus;
import com.atguigu.lease.web.admin.service.SystemPostService;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@Tag(name = "后台用户岗位管理")
@RequestMapping("/admin/system/post")
public class SystemPostController {
@Autowired
private SystemPostService systemPostService;
@Operation(summary = "分页获取岗位信息")
@GetMapping("page")
private Result<IPage<SystemPost>> page(@RequestParam long current, @RequestParam long size) {
Page<SystemPost> page = new Page<>(current, size);
IPage<SystemPost> pageModel = systemPostService.page(page);
return Result.ok(pageModel);
}
@Operation(summary = "保存或更新岗位信息")
@PostMapping("saveOrUpdate")
public Result saveOrUpdate(@RequestBody SystemPost systemPost) {
systemPostService.saveOrUpdate(systemPost);
return Result.ok();
}
@DeleteMapping("deleteById")
@Operation(summary = "根据id删除岗位")
public Result removeById(@RequestParam Long id) {
boolean b = systemPostService.removeById(id);
if(b){
return Result.ok();
}else {
return Result.fail();
}
}
@GetMapping("getById")
@Operation(summary = "根据id获取岗位信息")
public Result<SystemPost> getById(@RequestParam Long id) {
SystemPost byId = systemPostService.getById(id);
return Result.ok(byId);
}
@Operation(summary = "获取全部岗位列表")
@GetMapping("list")
public Result<List<SystemPost>> list() {
List<SystemPost> list = systemPostService.list();
return Result.ok(list);
}
@Operation(summary = "根据岗位id修改状态")
@PostMapping("updateStatusByPostId")
public Result updateStatusByPostId(@RequestParam Long id, @RequestParam BaseStatus status) {
LambdaUpdateWrapper<SystemPost> wrapper = new LambdaUpdateWrapper<>();
wrapper.eq(SystemPost::getId, id);
wrapper.set(SystemPost::getStatus, status);
systemPostService.update(wrapper);
return Result.ok();
}
}

View File

@ -0,0 +1,82 @@
package com.atguigu.lease.web.admin.controller.system;
import com.atguigu.lease.common.result.Result;
import com.atguigu.lease.model.entity.SystemUser;
import com.atguigu.lease.model.enums.BaseStatus;
import com.atguigu.lease.web.admin.service.SystemUserService;
import com.atguigu.lease.web.admin.service.impl.SystemUserServiceImpl;
import com.atguigu.lease.web.admin.vo.system.user.SystemUserItemVo;
import com.atguigu.lease.web.admin.vo.system.user.SystemUserQueryVo;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.apache.commons.codec.digest.DigestUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@Tag(name = "后台用户信息管理")
@RestController
@RequestMapping("/admin/system/user")
public class SystemUserController {
@Autowired
private SystemUserService systemUserService;
@Operation(summary = "根据条件分页查询后台用户列表")
@GetMapping("page")
public Result<IPage<SystemUserItemVo>> page(@RequestParam long current, @RequestParam long size, SystemUserQueryVo queryVo) {
Page<SystemUserItemVo> page = new Page<>(current,size);
IPage<SystemUserItemVo> pageModel = systemUserService.selectPageSystemUser(page,queryVo);
return Result.ok(pageModel);
}
@Operation(summary = "根据ID查询后台用户信息")
@GetMapping("getById")
public Result<SystemUserItemVo> getById(@RequestParam Long id) {
SystemUserItemVo list = systemUserService.getUserById(id);
return Result.ok(list);
}
@Operation(summary = "保存或更新后台用户信息")
@PostMapping("saveOrUpdate")
public Result saveOrUpdate(@RequestBody SystemUser systemUser) {
if (systemUser.getId() == null){
systemUser.setPassword(DigestUtils.md5Hex(systemUser.getPassword()));
}
systemUserService.saveOrUpdate(systemUser);
return Result.ok();
}
@Operation(summary = "判断后台用户名是否可用")
@GetMapping("isUserNameAvailable")
public Result<Boolean> isUsernameExists(@RequestParam String username) {
LambdaQueryWrapper<SystemUser> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(SystemUser::getUsername,username);
long count = systemUserService.count(wrapper);
if(count==0){
return Result.ok();
}else {
return Result.fail();
}
}
@DeleteMapping("deleteById")
@Operation(summary = "根据ID删除后台用户信息")
public Result removeById(@RequestParam Long id) {
systemUserService.removeById(id);
return Result.ok();
}
@Operation(summary = "根据ID修改后台用户状态")
@PostMapping("updateStatusByUserId")
public Result updateStatusByUserId(@RequestParam Long id, @RequestParam BaseStatus status) {
LambdaUpdateWrapper<SystemUser> wrapper = new LambdaUpdateWrapper<>();
wrapper.eq(SystemUser::getId, id);
wrapper.set(SystemUser::getStatus, status);
systemUserService.update(wrapper);
return Result.ok();
}
}

View File

@ -0,0 +1,62 @@
package com.atguigu.lease.web.admin.controller.user;
import com.atguigu.lease.common.result.Result;
import com.atguigu.lease.model.entity.UserInfo;
import com.atguigu.lease.model.enums.BaseStatus;
import com.atguigu.lease.web.admin.service.UserInfoService;
import com.atguigu.lease.web.admin.vo.user.UserInfoQueryVo;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
@Tag(name = "用户信息管理")
@RestController
@RequestMapping("/admin/user")
public class UserInfoController {
@Autowired
private UserInfoService userInfoService;
@Operation(summary = "分页查询用户信息")
@GetMapping("page")
public Result<IPage<UserInfo>> pageUserInfo(@RequestParam long current, @RequestParam long size, UserInfoQueryVo queryVo) {
Page<UserInfo> pageParam = new Page<>(current,size);
//封装条件
LambdaQueryWrapper<UserInfo> wrapper = new LambdaQueryWrapper<>();
//wrapper.like(queryVo.getPhone() != null, UserInfo::getPhone, queryVo.getPhone());
//if(!StringUtils.isEmpty(queryVo.getPhone())) {
//}
if(StringUtils.hasText(queryVo.getPhone())) {
wrapper.eq(UserInfo::getPhone,queryVo.getPhone());
}
if(queryVo.getStatus() != null){
wrapper.eq(UserInfo::getStatus,queryVo.getStatus());
}
IPage<UserInfo> pageModel = userInfoService.page(pageParam, wrapper);
return Result.ok(pageModel);
}
@Operation(summary = "根据用户id更新账号状态")
@PostMapping("updateStatusById")
public Result updateStatusById(@RequestParam Long id, @RequestParam BaseStatus status) {
LambdaUpdateWrapper<UserInfo> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(UserInfo::getId, id);
updateWrapper.set(UserInfo::getStatus, status);
userInfoService.update(updateWrapper);
return Result.ok();
}
}

View File

@ -0,0 +1,26 @@
package com.atguigu.lease.web.admin.custom.converter;
import com.atguigu.lease.model.enums.BaseEnum;
import org.springframework.core.convert.converter.Converter;
import org.springframework.core.convert.converter.ConverterFactory;
import org.springframework.stereotype.Component;
@Component
public class StringToBaseEnumConverterFactory implements ConverterFactory<String, BaseEnum> {
@Override
public <T extends BaseEnum> Converter<String, T> getConverter(Class<T> targetType) {
return new Converter<String, T>() {
@Override
public T convert(String source) {
//Class.getEnumConstants() 方法是 Java 反射 API 中的一个方法用于获取表示枚举类型的 Class 对象中所有枚举常量的数组
for (T enumConstant : targetType.getEnumConstants()) {
if (enumConstant.getCode().equals(Integer.valueOf(source))) {
return enumConstant;
}
}
throw new IllegalArgumentException("非法的枚举值:" + source);
}
};
}
}

View File

@ -0,0 +1,18 @@
package com.atguigu.lease.web.admin.custom.converter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.format.FormatterRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebMvcConfiguration implements WebMvcConfigurer {
@Autowired
private StringToBaseEnumConverterFactory stringToBaseEnumConverterFactory;
@Override
public void addFormatters(FormatterRegistry registry) {
registry.addConverterFactory(this.stringToBaseEnumConverterFactory);
}
}

View File

@ -0,0 +1,52 @@
package com.atguigu.lease.web.admin.interceptor;
import com.atguigu.lease.common.utils.JwtUtil;
import com.atguigu.lease.common.utils.LoginUser;
import com.atguigu.lease.common.utils.LoginUserContext;
import io.jsonwebtoken.Claims;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.lang.Nullable;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
@Component
public class AuthenticationInterceptor implements HandlerInterceptor {
//之前执行
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler) throws Exception {
//进行是否登录判断
//1 获取请求头token access-token和前端一致
String token = request.getHeader("access-token");
//String token = "abdcds";
//String token = "eyJhbGciOiJIUzI1NiIsInppcCI6IkdaSVAifQ.H4sIAAAAAAAA_6tWKi5NUrJSCg12DYr39HPzV9JRSq0oULIyNDexMLWwNDEx1FEqLU4t8kxRsrKEMPMSc1OBWnJKkyuVagENPxd4QQAAAA.a1GC3ew6N35MURDSHjDUUcD05M7BLJS8-jBS1ovOwHM";
//2 判断token是否为空如果空提示用户
if(token == null) {
throw new RuntimeException();
} else { //3 如果不为空解析token
Claims claims = JwtUtil.parseToken(token);
Long userId = claims.get("userId",Long.class);
String username = claims.get("username", String.class);
//TODO 解析token成功之后根据userId查询数据库用户是否正常
//把userId放到ThreadLocal里面
LoginUser loginUser = new LoginUser();
loginUser.setUserId(userId);
loginUser.setUsername(username);
LoginUserContext.setLoginUser(loginUser);
}
return true;
}
//清除ThreadLocal值防止内存泄漏
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
LoginUserContext.clear();
}
}

View File

@ -0,0 +1,20 @@
package com.atguigu.lease.web.admin.interceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class LoginWebMvcConfigurer implements WebMvcConfigurer {
@Autowired
private AuthenticationInterceptor authenticationInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(authenticationInterceptor)
.addPathPatterns("/admin/**")
.excludePathPatterns("/admin/login/**");
}
}

View File

@ -0,0 +1,18 @@
package com.atguigu.lease.web.admin.mapper;
import com.atguigu.lease.model.entity.ApartmentFacility;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @author liubo
* @description 针对表apartment_facility(公寓&配套关联表)的数据库操作Mapper
* @createDate 2023-07-24 15:48:00
* @Entity com.atguigu.lease.model.ApartmentFacility
*/
public interface ApartmentFacilityMapper extends BaseMapper<ApartmentFacility> {
}

View File

@ -0,0 +1,18 @@
package com.atguigu.lease.web.admin.mapper;
import com.atguigu.lease.model.entity.ApartmentFeeValue;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @author liubo
* @description 针对表apartment_fee_value(公寓&杂费关联表)的数据库操作Mapper
* @createDate 2023-07-24 15:48:00
* @Entity com.atguigu.lease.model.ApartmentFeeValue
*/
public interface ApartmentFeeValueMapper extends BaseMapper<ApartmentFeeValue> {
}

View File

@ -0,0 +1,26 @@
package com.atguigu.lease.web.admin.mapper;
import com.atguigu.lease.model.entity.ApartmentInfo;
import com.atguigu.lease.web.admin.vo.apartment.ApartmentItemVo;
import com.atguigu.lease.web.admin.vo.apartment.ApartmentQueryVo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.stereotype.Repository;
/**
* @author liubo
* @description 针对表apartment_info(公寓信息表)的数据库操作Mapper
* @createDate 2023-07-24 15:48:00
* @Entity com.atguigu.lease.model.ApartmentInfo
*/
@Repository
public interface ApartmentInfoMapper extends BaseMapper<ApartmentInfo> {
IPage<ApartmentItemVo> selectApartmentInfoPage(Page<ApartmentItemVo> page, ApartmentQueryVo queryVo);
}

View File

@ -0,0 +1,18 @@
package com.atguigu.lease.web.admin.mapper;
import com.atguigu.lease.model.entity.ApartmentLabel;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @author liubo
* @description 针对表apartment_label(公寓标签关联表)的数据库操作Mapper
* @createDate 2023-07-24 15:48:00
* @Entity com.atguigu.lease.model.ApartmentLabel
*/
public interface ApartmentLabelMapper extends BaseMapper<ApartmentLabel> {
}

View File

@ -0,0 +1,24 @@
package com.atguigu.lease.web.admin.mapper;
import com.atguigu.lease.model.entity.AttrKey;
import com.atguigu.lease.web.admin.vo.attr.AttrKeyVo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @author liubo
* @description 针对表attr_key(房间基本属性表)的数据库操作Mapper
* @createDate 2023-07-24 15:48:00
* @Entity com.atguigu.lease.model.AttrKey
*/
@Repository
public interface AttrKeyMapper extends BaseMapper<AttrKey> {
List<AttrKeyVo> listAttrInfo();
}

View File

@ -0,0 +1,24 @@
package com.atguigu.lease.web.admin.mapper;
import com.atguigu.lease.model.entity.AttrValue;
import com.atguigu.lease.web.admin.vo.attr.AttrValueVo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @author liubo
* @description 针对表attr_value(房间基本属性值表)的数据库操作Mapper
* @createDate 2023-07-24 15:48:00
* @Entity com.atguigu.lease.model.AttrValue
*/
@Repository
public interface AttrValueMapper extends BaseMapper<AttrValue> {
List<AttrValueVo> selectListByRoomId(Long id);
}

View File

@ -0,0 +1,18 @@
package com.atguigu.lease.web.admin.mapper;
import com.atguigu.lease.model.entity.BrowsingHistory;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @author liubo
* @description 针对表browsing_history(浏览历史)的数据库操作Mapper
* @createDate 2023-07-24 15:48:00
* @Entity com.atguigu.lease.model.BrowsingHistory
*/
public interface BrowsingHistoryMapper extends BaseMapper<BrowsingHistory> {
}

View File

@ -0,0 +1,18 @@
package com.atguigu.lease.web.admin.mapper;
import com.atguigu.lease.model.entity.CityInfo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @author liubo
* @description 针对表city_info的数据库操作Mapper
* @createDate 2023-07-24 15:48:00
* @Entity com.atguigu.lease.model.CityInfo
*/
public interface CityInfoMapper extends BaseMapper<CityInfo> {
}

View File

@ -0,0 +1,18 @@
package com.atguigu.lease.web.admin.mapper;
import com.atguigu.lease.model.entity.DistrictInfo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @author liubo
* @description 针对表district_info的数据库操作Mapper
* @createDate 2023-07-24 15:48:00
* @Entity com.atguigu.lease.model.DistrictInfo
*/
public interface DistrictInfoMapper extends BaseMapper<DistrictInfo> {
}

View File

@ -0,0 +1,25 @@
package com.atguigu.lease.web.admin.mapper;
import com.atguigu.lease.model.entity.FacilityInfo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @author liubo
* @description 针对表facility_info(配套信息表)的数据库操作Mapper
* @createDate 2023-07-24 15:48:00
* @Entity com.atguigu.lease.model.FacilityInfo
*/
@Repository
public interface FacilityInfoMapper extends BaseMapper<FacilityInfo> {
List<FacilityInfo> findFacilityListByApartmentId(Long id);
List<FacilityInfo> findFacilityListByRoomId(Long id);
}

View File

@ -0,0 +1,23 @@
package com.atguigu.lease.web.admin.mapper;
import com.atguigu.lease.model.entity.FeeKey;
import com.atguigu.lease.web.admin.vo.fee.FeeKeyVo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @author liubo
* @description 针对表fee_key(杂项费用名称表)的数据库操作Mapper
* @createDate 2023-07-24 15:48:00
* @Entity com.atguigu.lease.model.FeeKey
*/
@Repository
public interface FeeKeyMapper extends BaseMapper<FeeKey> {
List<FeeKeyVo> saveOrUpdateFeeKey();
}

View File

@ -0,0 +1,24 @@
package com.atguigu.lease.web.admin.mapper;
import com.atguigu.lease.model.entity.FeeValue;
import com.atguigu.lease.web.admin.vo.fee.FeeValueVo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @author liubo
* @description 针对表fee_value(杂项费用值表)的数据库操作Mapper
* @createDate 2023-07-24 15:48:00
* @Entity com.atguigu.lease.model.FeeValue
*/
@Repository
public interface FeeValueMapper extends BaseMapper<FeeValue> {
List<FeeValueVo> findLabelListByApartmentId(Long id);
}

View File

@ -0,0 +1,29 @@
package com.atguigu.lease.web.admin.mapper;
import com.atguigu.lease.model.entity.GraphInfo;
import com.atguigu.lease.model.enums.ItemType;
import com.atguigu.lease.web.admin.vo.graph.GraphVo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @author liubo
* @description 针对表graph_info(图片信息表)的数据库操作Mapper
* @createDate 2023-07-24 15:48:00
* @Entity com.atguigu.lease.model.GraphInfo
*/
@Repository
public interface GraphInfoMapper extends BaseMapper<GraphInfo> {
List<GraphVo> selectGraphListByApartmentId(@Param("itemType") ItemType itemType,
@Param("itemId") Long itemId);
List<GraphVo> selectGraphListByRoomId(@Param("itemType")ItemType itemType,
@Param("itemId") Long itemId);
}

View File

@ -0,0 +1,26 @@
package com.atguigu.lease.web.admin.mapper;
import com.atguigu.lease.model.entity.LabelInfo;
import com.atguigu.lease.model.enums.ItemType;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @author liubo
* @description 针对表label_info(标签信息表)的数据库操作Mapper
* @createDate 2023-07-24 15:48:00
* @Entity com.atguigu.lease.model.LabelInfo
*/
@Repository
public interface LabelInfoMapper extends BaseMapper<LabelInfo> {
List<LabelInfo> findLabelListByApartmentId(Long id);
List<LabelInfo> selectListByRoomId(Long id);
}

View File

@ -0,0 +1,25 @@
package com.atguigu.lease.web.admin.mapper;
import com.atguigu.lease.model.entity.LeaseAgreement;
import com.atguigu.lease.web.admin.vo.agreement.AgreementQueryVo;
import com.atguigu.lease.web.admin.vo.agreement.AgreementVo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.stereotype.Repository;
/**
* @author liubo
* @description 针对表lease_agreement(租约信息表)的数据库操作Mapper
* @createDate 2023-07-24 15:48:00
* @Entity com.atguigu.lease.model.LeaseAgreement
*/
@Repository
public interface LeaseAgreementMapper extends BaseMapper<LeaseAgreement> {
IPage<AgreementVo> selectPageAgreement(Page<AgreementVo> page, AgreementQueryVo queryVo);
}

View File

@ -0,0 +1,24 @@
package com.atguigu.lease.web.admin.mapper;
import com.atguigu.lease.model.entity.LeaseTerm;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @author liubo
* @description 针对表lease_term(租期)的数据库操作Mapper
* @createDate 2023-07-24 15:48:00
* @Entity com.atguigu.lease.model.LeaseTerm
*/
@Repository
public interface LeaseTermMapper extends BaseMapper<LeaseTerm> {
List<LeaseTerm> selectListByRoomId(Long id);
}

View File

@ -0,0 +1,24 @@
package com.atguigu.lease.web.admin.mapper;
import com.atguigu.lease.model.entity.PaymentType;
import com.atguigu.lease.model.entity.RoomPaymentType;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @author liubo
* @description 针对表payment_type(支付方式表)的数据库操作Mapper
* @createDate 2023-07-24 15:48:00
* @Entity com.atguigu.lease.model.PaymentType
*/
@Repository
public interface PaymentTypeMapper extends BaseMapper<PaymentType> {
List<PaymentType> selectListByRoomId(Long id);
}

View File

@ -0,0 +1,18 @@
package com.atguigu.lease.web.admin.mapper;
import com.atguigu.lease.model.entity.ProvinceInfo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @author liubo
* @description 针对表province_info的数据库操作Mapper
* @createDate 2023-07-24 15:48:00
* @Entity com.atguigu.lease.model.ProvinceInfo
*/
public interface ProvinceInfoMapper extends BaseMapper<ProvinceInfo> {
}

View File

@ -0,0 +1,18 @@
package com.atguigu.lease.web.admin.mapper;
import com.atguigu.lease.model.entity.RoomAttrValue;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @author liubo
* @description 针对表room_attr_value(房间&基本属性值关联表)的数据库操作Mapper
* @createDate 2023-07-24 15:48:00
* @Entity com.atguigu.lease.model.RoomAttrValue
*/
public interface RoomAttrValueMapper extends BaseMapper<RoomAttrValue> {
}

View File

@ -0,0 +1,20 @@
package com.atguigu.lease.web.admin.mapper;
import com.atguigu.lease.model.entity.RoomFacility;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.stereotype.Repository;
/**
* @author liubo
* @description 针对表room_facility(房间&配套关联表)的数据库操作Mapper
* @createDate 2023-07-24 15:48:00
* @Entity com.atguigu.lease.model.RoomFacility
*/
@Repository
public interface RoomFacilityMapper extends BaseMapper<RoomFacility> {
}

View File

@ -0,0 +1,29 @@
package com.atguigu.lease.web.admin.mapper;
import com.atguigu.lease.model.entity.RoomInfo;
import com.atguigu.lease.web.admin.vo.room.RoomDetailVo;
import com.atguigu.lease.web.admin.vo.room.RoomItemVo;
import com.atguigu.lease.web.admin.vo.room.RoomQueryVo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.stereotype.Repository;
/**
* @author liubo
* @description 针对表room_info(房间信息表)的数据库操作Mapper
* @createDate 2023-07-24 15:48:00
* @Entity com.atguigu.lease.model.RoomInfo
*/
@Repository
public interface RoomInfoMapper extends BaseMapper<RoomInfo> {
IPage<RoomItemVo> selectRoomInfoPage(Page<RoomItemVo> page, RoomQueryVo queryVo);
Long countRoomMany();
}

View File

@ -0,0 +1,18 @@
package com.atguigu.lease.web.admin.mapper;
import com.atguigu.lease.model.entity.RoomLabel;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @author liubo
* @description 针对表room_label(房间&标签关联表)的数据库操作Mapper
* @createDate 2023-07-24 15:48:00
* @Entity com.atguigu.lease.model.RoomLabel
*/
public interface RoomLabelMapper extends BaseMapper<RoomLabel> {
}

View File

@ -0,0 +1,18 @@
package com.atguigu.lease.web.admin.mapper;
import com.atguigu.lease.model.entity.RoomLeaseTerm;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @author liubo
* @description 针对表room_lease_term(房间租期管理表)的数据库操作Mapper
* @createDate 2023-07-24 15:48:00
* @Entity com.atguigu.lease.model.RoomLeaseTerm
*/
public interface RoomLeaseTermMapper extends BaseMapper<RoomLeaseTerm> {
}

Some files were not shown because too many files have changed in this diff Show More