commit 8312e81829cfa1697f1c7438f11dc572526aa34d
Author: Y1NanPing <735289578@qq.com>
Date: Tue Jun 17 19:10:21 2025 +0800
gongyu project
diff --git a/common/pom.xml b/common/pom.xml
new file mode 100644
index 0000000..ea769bf
--- /dev/null
+++ b/common/pom.xml
@@ -0,0 +1,70 @@
+
+
+
+ lease
+ com.atguigu
+ 1.0-SNAPSHOT
+
+ 4.0.0
+
+ common
+
+
+ 17
+ 17
+
+
+
+
+
+ com.atguigu
+ model
+ 1.0-SNAPSHOT
+
+
+ io.jsonwebtoken
+ jjwt-api
+
+
+
+ io.jsonwebtoken
+ jjwt-impl
+ runtime
+
+
+
+ io.jsonwebtoken
+ jjwt-jackson
+ runtime
+
+
+ commons-codec
+ commons-codec
+
+
+
+ commons-lang
+ commons-lang
+ 2.6
+
+
+ org.eclipse.jetty
+ jetty-util
+ 9.3.7.v20160115
+
+
+ org.apache.httpcomponents
+ httpclient
+ 4.2.1
+
+
+ org.apache.httpcomponents
+ httpcore
+ 4.2.1
+
+
+
+
+
\ No newline at end of file
diff --git a/common/src/main/java/com/atguigu/lease/common/config/Knife4jConfiguration.java b/common/src/main/java/com/atguigu/lease/common/config/Knife4jConfiguration.java
new file mode 100644
index 0000000..2b766f2
--- /dev/null
+++ b/common/src/main/java/com/atguigu/lease/common/config/Knife4jConfiguration.java
@@ -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();
+ }
+}
diff --git a/common/src/main/java/com/atguigu/lease/common/config/MinioConfiguration.java b/common/src/main/java/com/atguigu/lease/common/config/MinioConfiguration.java
new file mode 100644
index 0000000..f7ab064
--- /dev/null
+++ b/common/src/main/java/com/atguigu/lease/common/config/MinioConfiguration.java
@@ -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();
+ }
+}
diff --git a/common/src/main/java/com/atguigu/lease/common/constant/RedisConstant.java b/common/src/main/java/com/atguigu/lease/common/constant/RedisConstant.java
new file mode 100644
index 0000000..d30c3b5
--- /dev/null
+++ b/common/src/main/java/com/atguigu/lease/common/constant/RedisConstant.java
@@ -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;
+}
\ No newline at end of file
diff --git a/common/src/main/java/com/atguigu/lease/common/exception/GlobalExceptionHandler.java b/common/src/main/java/com/atguigu/lease/common/exception/GlobalExceptionHandler.java
new file mode 100644
index 0000000..694fffa
--- /dev/null
+++ b/common/src/main/java/com/atguigu/lease/common/exception/GlobalExceptionHandler.java
@@ -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);
+ }
+
+}
\ No newline at end of file
diff --git a/common/src/main/java/com/atguigu/lease/common/exception/LeaseException.java b/common/src/main/java/com/atguigu/lease/common/exception/LeaseException.java
new file mode 100644
index 0000000..1350ac0
--- /dev/null
+++ b/common/src/main/java/com/atguigu/lease/common/exception/LeaseException.java
@@ -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() +
+ '}';
+ }
+}
\ No newline at end of file
diff --git a/common/src/main/java/com/atguigu/lease/common/minio/MinioProperties.java b/common/src/main/java/com/atguigu/lease/common/minio/MinioProperties.java
new file mode 100644
index 0000000..164745f
--- /dev/null
+++ b/common/src/main/java/com/atguigu/lease/common/minio/MinioProperties.java
@@ -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;
+}
diff --git a/common/src/main/java/com/atguigu/lease/common/mybatisplus/MybatisPlusConfiguration.java b/common/src/main/java/com/atguigu/lease/common/mybatisplus/MybatisPlusConfiguration.java
new file mode 100644
index 0000000..4006ff7
--- /dev/null
+++ b/common/src/main/java/com/atguigu/lease/common/mybatisplus/MybatisPlusConfiguration.java
@@ -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;
+ }
+
+
+}
diff --git a/common/src/main/java/com/atguigu/lease/common/result/Result.java b/common/src/main/java/com/atguigu/lease/common/result/Result.java
new file mode 100644
index 0000000..8dcbda0
--- /dev/null
+++ b/common/src/main/java/com/atguigu/lease/common/result/Result.java
@@ -0,0 +1,57 @@
+package com.atguigu.lease.common.result;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+
+/**
+ * 全局统一返回结果类
+ */
+@Data
+
+public class Result {
+
+ //返回码
+ private Integer code;
+
+ //返回消息
+ private String message;
+
+ //返回数据
+ private T data;
+
+ public Result() {
+ }
+
+ private static Result build(T data) {
+ Result result = new Result<>();
+ if (data != null)
+ result.setData(data);
+ return result;
+ }
+
+ public static Result build(T body, ResultCodeEnum resultCodeEnum) {
+ Result result = build(body);
+ result.setCode(resultCodeEnum.getCode());
+ result.setMessage(resultCodeEnum.getMessage());
+ return result;
+ }
+
+
+ public static Result ok(T data) {
+ return build(data, ResultCodeEnum.SUCCESS);
+ }
+
+ public static Result ok() {
+ return Result.ok(null);
+ }
+
+ public static Result fail() {
+ return build(null, ResultCodeEnum.FAIL);
+ }
+ public static Result fail(Integer code, String message) {
+ Result result = build(null);
+ result.setCode(code);
+ result.setMessage(message);
+ return result;
+ }
+}
diff --git a/common/src/main/java/com/atguigu/lease/common/result/ResultCodeEnum.java b/common/src/main/java/com/atguigu/lease/common/result/ResultCodeEnum.java
new file mode 100644
index 0000000..3443fb5
--- /dev/null
+++ b/common/src/main/java/com/atguigu/lease/common/result/ResultCodeEnum.java
@@ -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;
+ }
+}
diff --git a/common/src/main/java/com/atguigu/lease/common/utils/HttpUtils.java b/common/src/main/java/com/atguigu/lease/common/utils/HttpUtils.java
new file mode 100644
index 0000000..dcaf6e7
--- /dev/null
+++ b/common/src/main/java/com/atguigu/lease/common/utils/HttpUtils.java
@@ -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 headers,
+ Map querys)
+ throws Exception {
+ HttpClient httpClient = wrapClient(host);
+
+ HttpGet request = new HttpGet(buildUrl(host, path, querys));
+ for (Map.Entry 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 headers,
+ Map querys,
+ Map bodys)
+ throws Exception {
+ HttpClient httpClient = wrapClient(host);
+
+ HttpPost request = new HttpPost(buildUrl(host, path, querys));
+ for (Map.Entry e : headers.entrySet()) {
+ request.addHeader(e.getKey(), e.getValue());
+ }
+
+ if (bodys != null) {
+ List nameValuePairList = new ArrayList();
+
+ 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 headers,
+ Map querys,
+ String body)
+ throws Exception {
+ HttpClient httpClient = wrapClient(host);
+
+ HttpPost request = new HttpPost(buildUrl(host, path, querys));
+ for (Map.Entry 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 headers,
+ Map querys,
+ byte[] body)
+ throws Exception {
+ HttpClient httpClient = wrapClient(host);
+
+ HttpPost request = new HttpPost(buildUrl(host, path, querys));
+ for (Map.Entry 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 headers,
+ Map querys,
+ String body)
+ throws Exception {
+ HttpClient httpClient = wrapClient(host);
+
+ HttpPut request = new HttpPut(buildUrl(host, path, querys));
+ for (Map.Entry 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 headers,
+ Map querys,
+ byte[] body)
+ throws Exception {
+ HttpClient httpClient = wrapClient(host);
+
+ HttpPut request = new HttpPut(buildUrl(host, path, querys));
+ for (Map.Entry 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 headers,
+ Map querys)
+ throws Exception {
+ HttpClient httpClient = wrapClient(host);
+
+ HttpDelete request = new HttpDelete(buildUrl(host, path, querys));
+ for (Map.Entry e : headers.entrySet()) {
+ request.addHeader(e.getKey(), e.getValue());
+ }
+
+ return httpClient.execute(request);
+ }
+
+ private static String buildUrl(String host, String path, Map 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 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);
+ }
+ }
+}
diff --git a/common/src/main/java/com/atguigu/lease/common/utils/JwtUtil.java b/common/src/main/java/com/atguigu/lease/common/utils/JwtUtil.java
new file mode 100644
index 0000000..6d71bd5
--- /dev/null
+++ b/common/src/main/java/com/atguigu/lease/common/utils/JwtUtil.java
@@ -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 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);
+ }
+}
\ No newline at end of file
diff --git a/common/src/main/java/com/atguigu/lease/common/utils/LoginUser.java b/common/src/main/java/com/atguigu/lease/common/utils/LoginUser.java
new file mode 100644
index 0000000..a8dc528
--- /dev/null
+++ b/common/src/main/java/com/atguigu/lease/common/utils/LoginUser.java
@@ -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;
+}
\ No newline at end of file
diff --git a/common/src/main/java/com/atguigu/lease/common/utils/LoginUserContext.java b/common/src/main/java/com/atguigu/lease/common/utils/LoginUserContext.java
new file mode 100644
index 0000000..329cc3c
--- /dev/null
+++ b/common/src/main/java/com/atguigu/lease/common/utils/LoginUserContext.java
@@ -0,0 +1,21 @@
+package com.atguigu.lease.common.utils;
+
+public class LoginUserContext {
+
+ private static final ThreadLocal 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();
+ }
+}
\ No newline at end of file
diff --git a/common/src/main/java/com/atguigu/lease/common/utils/VerifyCodeUtil.java b/common/src/main/java/com/atguigu/lease/common/utils/VerifyCodeUtil.java
new file mode 100644
index 0000000..737807d
--- /dev/null
+++ b/common/src/main/java/com/atguigu/lease/common/utils/VerifyCodeUtil.java
@@ -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();
+ }
+}
\ No newline at end of file
diff --git a/model/pom.xml b/model/pom.xml
new file mode 100644
index 0000000..83a9911
--- /dev/null
+++ b/model/pom.xml
@@ -0,0 +1,37 @@
+
+
+
+ lease
+ com.atguigu
+ 1.0-SNAPSHOT
+
+ 4.0.0
+
+ model
+
+
+ 17
+ 17
+
+
+
+
+
+ com.baomidou
+ mybatis-plus-boot-starter
+
+
+
+ com.github.xiaoymin
+ knife4j-openapi3-jakarta-spring-boot-starter
+ 4.3.0
+
+
+
+ org.projectlombok
+ lombok
+
+
+
\ No newline at end of file
diff --git a/model/src/main/java/com/atguigu/lease/model/entity/ApartmentFacility.java b/model/src/main/java/com/atguigu/lease/model/entity/ApartmentFacility.java
new file mode 100644
index 0000000..8b625ab
--- /dev/null
+++ b/model/src/main/java/com/atguigu/lease/model/entity/ApartmentFacility.java
@@ -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;
+
+
+}
\ No newline at end of file
diff --git a/model/src/main/java/com/atguigu/lease/model/entity/ApartmentFeeValue.java b/model/src/main/java/com/atguigu/lease/model/entity/ApartmentFeeValue.java
new file mode 100644
index 0000000..4fbd520
--- /dev/null
+++ b/model/src/main/java/com/atguigu/lease/model/entity/ApartmentFeeValue.java
@@ -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;
+
+}
\ No newline at end of file
diff --git a/model/src/main/java/com/atguigu/lease/model/entity/ApartmentInfo.java b/model/src/main/java/com/atguigu/lease/model/entity/ApartmentInfo.java
new file mode 100644
index 0000000..f4e9a9d
--- /dev/null
+++ b/model/src/main/java/com/atguigu/lease/model/entity/ApartmentInfo.java
@@ -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;
+
+}
\ No newline at end of file
diff --git a/model/src/main/java/com/atguigu/lease/model/entity/ApartmentLabel.java b/model/src/main/java/com/atguigu/lease/model/entity/ApartmentLabel.java
new file mode 100644
index 0000000..7aa37d9
--- /dev/null
+++ b/model/src/main/java/com/atguigu/lease/model/entity/ApartmentLabel.java
@@ -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;
+
+}
\ No newline at end of file
diff --git a/model/src/main/java/com/atguigu/lease/model/entity/AttrKey.java b/model/src/main/java/com/atguigu/lease/model/entity/AttrKey.java
new file mode 100644
index 0000000..b6eed5f
--- /dev/null
+++ b/model/src/main/java/com/atguigu/lease/model/entity/AttrKey.java
@@ -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;
+
+}
\ No newline at end of file
diff --git a/model/src/main/java/com/atguigu/lease/model/entity/AttrValue.java b/model/src/main/java/com/atguigu/lease/model/entity/AttrValue.java
new file mode 100644
index 0000000..fd46479
--- /dev/null
+++ b/model/src/main/java/com/atguigu/lease/model/entity/AttrValue.java
@@ -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;
+}
\ No newline at end of file
diff --git a/model/src/main/java/com/atguigu/lease/model/entity/BaseEntity.java b/model/src/main/java/com/atguigu/lease/model/entity/BaseEntity.java
new file mode 100644
index 0000000..66c18f3
--- /dev/null
+++ b/model/src/main/java/com/atguigu/lease/model/entity/BaseEntity.java
@@ -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;
+
+}
\ No newline at end of file
diff --git a/model/src/main/java/com/atguigu/lease/model/entity/BrowsingHistory.java b/model/src/main/java/com/atguigu/lease/model/entity/BrowsingHistory.java
new file mode 100644
index 0000000..8d35a44
--- /dev/null
+++ b/model/src/main/java/com/atguigu/lease/model/entity/BrowsingHistory.java
@@ -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;
+
+}
\ No newline at end of file
diff --git a/model/src/main/java/com/atguigu/lease/model/entity/CityInfo.java b/model/src/main/java/com/atguigu/lease/model/entity/CityInfo.java
new file mode 100644
index 0000000..5275b6c
--- /dev/null
+++ b/model/src/main/java/com/atguigu/lease/model/entity/CityInfo.java
@@ -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;
+
+}
\ No newline at end of file
diff --git a/model/src/main/java/com/atguigu/lease/model/entity/DistrictInfo.java b/model/src/main/java/com/atguigu/lease/model/entity/DistrictInfo.java
new file mode 100644
index 0000000..5d4b42b
--- /dev/null
+++ b/model/src/main/java/com/atguigu/lease/model/entity/DistrictInfo.java
@@ -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;
+
+}
\ No newline at end of file
diff --git a/model/src/main/java/com/atguigu/lease/model/entity/FacilityInfo.java b/model/src/main/java/com/atguigu/lease/model/entity/FacilityInfo.java
new file mode 100644
index 0000000..4874185
--- /dev/null
+++ b/model/src/main/java/com/atguigu/lease/model/entity/FacilityInfo.java
@@ -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;
+
+}
\ No newline at end of file
diff --git a/model/src/main/java/com/atguigu/lease/model/entity/FeeKey.java b/model/src/main/java/com/atguigu/lease/model/entity/FeeKey.java
new file mode 100644
index 0000000..ec098a0
--- /dev/null
+++ b/model/src/main/java/com/atguigu/lease/model/entity/FeeKey.java
@@ -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;
+
+
+}
\ No newline at end of file
diff --git a/model/src/main/java/com/atguigu/lease/model/entity/FeeValue.java b/model/src/main/java/com/atguigu/lease/model/entity/FeeValue.java
new file mode 100644
index 0000000..25a03d5
--- /dev/null
+++ b/model/src/main/java/com/atguigu/lease/model/entity/FeeValue.java
@@ -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;
+
+}
\ No newline at end of file
diff --git a/model/src/main/java/com/atguigu/lease/model/entity/GraphInfo.java b/model/src/main/java/com/atguigu/lease/model/entity/GraphInfo.java
new file mode 100644
index 0000000..164a658
--- /dev/null
+++ b/model/src/main/java/com/atguigu/lease/model/entity/GraphInfo.java
@@ -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;
+
+}
\ No newline at end of file
diff --git a/model/src/main/java/com/atguigu/lease/model/entity/LabelInfo.java b/model/src/main/java/com/atguigu/lease/model/entity/LabelInfo.java
new file mode 100644
index 0000000..af61c7b
--- /dev/null
+++ b/model/src/main/java/com/atguigu/lease/model/entity/LabelInfo.java
@@ -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;
+
+
+}
\ No newline at end of file
diff --git a/model/src/main/java/com/atguigu/lease/model/entity/LeaseAgreement.java b/model/src/main/java/com/atguigu/lease/model/entity/LeaseAgreement.java
new file mode 100644
index 0000000..87203af
--- /dev/null
+++ b/model/src/main/java/com/atguigu/lease/model/entity/LeaseAgreement.java
@@ -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;
+
+}
\ No newline at end of file
diff --git a/model/src/main/java/com/atguigu/lease/model/entity/LeaseTerm.java b/model/src/main/java/com/atguigu/lease/model/entity/LeaseTerm.java
new file mode 100644
index 0000000..07cc0e3
--- /dev/null
+++ b/model/src/main/java/com/atguigu/lease/model/entity/LeaseTerm.java
@@ -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;
+
+}
\ No newline at end of file
diff --git a/model/src/main/java/com/atguigu/lease/model/entity/PaymentType.java b/model/src/main/java/com/atguigu/lease/model/entity/PaymentType.java
new file mode 100644
index 0000000..74868bf
--- /dev/null
+++ b/model/src/main/java/com/atguigu/lease/model/entity/PaymentType.java
@@ -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;
+
+
+}
\ No newline at end of file
diff --git a/model/src/main/java/com/atguigu/lease/model/entity/ProvinceInfo.java b/model/src/main/java/com/atguigu/lease/model/entity/ProvinceInfo.java
new file mode 100644
index 0000000..a558b08
--- /dev/null
+++ b/model/src/main/java/com/atguigu/lease/model/entity/ProvinceInfo.java
@@ -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;
+
+}
\ No newline at end of file
diff --git a/model/src/main/java/com/atguigu/lease/model/entity/RoomAttrValue.java b/model/src/main/java/com/atguigu/lease/model/entity/RoomAttrValue.java
new file mode 100644
index 0000000..453f702
--- /dev/null
+++ b/model/src/main/java/com/atguigu/lease/model/entity/RoomAttrValue.java
@@ -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;
+}
\ No newline at end of file
diff --git a/model/src/main/java/com/atguigu/lease/model/entity/RoomFacility.java b/model/src/main/java/com/atguigu/lease/model/entity/RoomFacility.java
new file mode 100644
index 0000000..f35f8ea
--- /dev/null
+++ b/model/src/main/java/com/atguigu/lease/model/entity/RoomFacility.java
@@ -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;
+
+}
\ No newline at end of file
diff --git a/model/src/main/java/com/atguigu/lease/model/entity/RoomInfo.java b/model/src/main/java/com/atguigu/lease/model/entity/RoomInfo.java
new file mode 100644
index 0000000..3498ba1
--- /dev/null
+++ b/model/src/main/java/com/atguigu/lease/model/entity/RoomInfo.java
@@ -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;
+
+}
\ No newline at end of file
diff --git a/model/src/main/java/com/atguigu/lease/model/entity/RoomLabel.java b/model/src/main/java/com/atguigu/lease/model/entity/RoomLabel.java
new file mode 100644
index 0000000..518eef1
--- /dev/null
+++ b/model/src/main/java/com/atguigu/lease/model/entity/RoomLabel.java
@@ -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;
+
+}
\ No newline at end of file
diff --git a/model/src/main/java/com/atguigu/lease/model/entity/RoomLeaseTerm.java b/model/src/main/java/com/atguigu/lease/model/entity/RoomLeaseTerm.java
new file mode 100644
index 0000000..9962f54
--- /dev/null
+++ b/model/src/main/java/com/atguigu/lease/model/entity/RoomLeaseTerm.java
@@ -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;
+
+}
\ No newline at end of file
diff --git a/model/src/main/java/com/atguigu/lease/model/entity/RoomPaymentType.java b/model/src/main/java/com/atguigu/lease/model/entity/RoomPaymentType.java
new file mode 100644
index 0000000..4622ca6
--- /dev/null
+++ b/model/src/main/java/com/atguigu/lease/model/entity/RoomPaymentType.java
@@ -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;
+
+
+}
\ No newline at end of file
diff --git a/model/src/main/java/com/atguigu/lease/model/entity/SystemPost.java b/model/src/main/java/com/atguigu/lease/model/entity/SystemPost.java
new file mode 100644
index 0000000..138682e
--- /dev/null
+++ b/model/src/main/java/com/atguigu/lease/model/entity/SystemPost.java
@@ -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;
+
+
+}
\ No newline at end of file
diff --git a/model/src/main/java/com/atguigu/lease/model/entity/SystemUser.java b/model/src/main/java/com/atguigu/lease/model/entity/SystemUser.java
new file mode 100644
index 0000000..daad31d
--- /dev/null
+++ b/model/src/main/java/com/atguigu/lease/model/entity/SystemUser.java
@@ -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;
+
+
+}
\ No newline at end of file
diff --git a/model/src/main/java/com/atguigu/lease/model/entity/UserInfo.java b/model/src/main/java/com/atguigu/lease/model/entity/UserInfo.java
new file mode 100644
index 0000000..8321a2a
--- /dev/null
+++ b/model/src/main/java/com/atguigu/lease/model/entity/UserInfo.java
@@ -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;
+
+
+}
\ No newline at end of file
diff --git a/model/src/main/java/com/atguigu/lease/model/entity/ViewAppointment.java b/model/src/main/java/com/atguigu/lease/model/entity/ViewAppointment.java
new file mode 100644
index 0000000..0b7f6cd
--- /dev/null
+++ b/model/src/main/java/com/atguigu/lease/model/entity/ViewAppointment.java
@@ -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;
+}
\ No newline at end of file
diff --git a/model/src/main/java/com/atguigu/lease/model/enums/AppointmentStatus.java b/model/src/main/java/com/atguigu/lease/model/enums/AppointmentStatus.java
new file mode 100644
index 0000000..35b2556
--- /dev/null
+++ b/model/src/main/java/com/atguigu/lease/model/enums/AppointmentStatus.java
@@ -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;
+ }
+}
diff --git a/model/src/main/java/com/atguigu/lease/model/enums/BaseEnum.java b/model/src/main/java/com/atguigu/lease/model/enums/BaseEnum.java
new file mode 100644
index 0000000..b90127f
--- /dev/null
+++ b/model/src/main/java/com/atguigu/lease/model/enums/BaseEnum.java
@@ -0,0 +1,8 @@
+package com.atguigu.lease.model.enums;
+
+public interface BaseEnum {
+
+ Integer getCode();
+
+ String getName();
+}
diff --git a/model/src/main/java/com/atguigu/lease/model/enums/BaseStatus.java b/model/src/main/java/com/atguigu/lease/model/enums/BaseStatus.java
new file mode 100644
index 0000000..70939be
--- /dev/null
+++ b/model/src/main/java/com/atguigu/lease/model/enums/BaseStatus.java
@@ -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;
+ }
+}
diff --git a/model/src/main/java/com/atguigu/lease/model/enums/ItemType.java b/model/src/main/java/com/atguigu/lease/model/enums/ItemType.java
new file mode 100644
index 0000000..be5231c
--- /dev/null
+++ b/model/src/main/java/com/atguigu/lease/model/enums/ItemType.java
@@ -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;
+ }
+
+}
diff --git a/model/src/main/java/com/atguigu/lease/model/enums/LeaseSourceType.java b/model/src/main/java/com/atguigu/lease/model/enums/LeaseSourceType.java
new file mode 100644
index 0000000..3a9866e
--- /dev/null
+++ b/model/src/main/java/com/atguigu/lease/model/enums/LeaseSourceType.java
@@ -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;
+ }
+}
diff --git a/model/src/main/java/com/atguigu/lease/model/enums/LeaseStatus.java b/model/src/main/java/com/atguigu/lease/model/enums/LeaseStatus.java
new file mode 100644
index 0000000..d394872
--- /dev/null
+++ b/model/src/main/java/com/atguigu/lease/model/enums/LeaseStatus.java
@@ -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;
+ }
+
+}
diff --git a/model/src/main/java/com/atguigu/lease/model/enums/ReleaseStatus.java b/model/src/main/java/com/atguigu/lease/model/enums/ReleaseStatus.java
new file mode 100644
index 0000000..47c174d
--- /dev/null
+++ b/model/src/main/java/com/atguigu/lease/model/enums/ReleaseStatus.java
@@ -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;
+ }
+
+}
diff --git a/model/src/main/java/com/atguigu/lease/model/enums/SystemUserType.java b/model/src/main/java/com/atguigu/lease/model/enums/SystemUserType.java
new file mode 100644
index 0000000..25a5bd9
--- /dev/null
+++ b/model/src/main/java/com/atguigu/lease/model/enums/SystemUserType.java
@@ -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;
+ }
+}
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..3834479
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,112 @@
+
+
+ 4.0.0
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 3.0.5
+
+
+ com.atguigu
+ lease
+ pom
+ 1.0-SNAPSHOT
+
+ common
+ model
+ web
+
+
+
+ 17
+ 17
+ UTF-8
+ 3.5.3.1
+ 2.9.2
+ 0.11.2
+ 1.6.2
+ 8.2.0
+ 4.1.0
+ 2.0.23
+
+
+
+
+
+
+
+
+ com.baomidou
+ mybatis-plus-boot-starter
+ ${mybatis-plus.version}
+
+
+
+
+
+ com.github.xiaoymin
+ knife4j-openapi3-jakarta-spring-boot-starter
+ ${knife4j.version}
+
+
+
+
+
+ io.jsonwebtoken
+ jjwt-api
+ ${jwt.version}
+
+
+ io.jsonwebtoken
+ jjwt-impl
+ runtime
+ ${jwt.version}
+
+
+ io.jsonwebtoken
+ jjwt-jackson
+ runtime
+ ${jwt.version}
+
+
+
+
+
+ com.github.whvcse
+ easy-captcha
+ ${easycaptcha.version}
+
+
+
+
+
+ io.minio
+ minio
+ ${minio.version}
+
+
+
+
+
+ com.aliyun
+ dysmsapi20170525
+ ${aliyun.sms.version}
+
+
+
+
+
+ com.github.xiaoymin
+ knife4j-openapi3-jakarta-spring-boot-starter
+ 4.3.0
+
+
+ io.minio
+ minio
+ 8.5.3
+
+
+
\ No newline at end of file
diff --git a/web/pom.xml b/web/pom.xml
new file mode 100644
index 0000000..da321b3
--- /dev/null
+++ b/web/pom.xml
@@ -0,0 +1,59 @@
+
+
+
+ lease
+ com.atguigu
+ 1.0-SNAPSHOT
+
+ 4.0.0
+
+ web
+ pom
+
+ web-admin
+ web-app
+
+
+
+ 17
+ 17
+
+
+
+
+ com.atguigu
+ common
+ 1.0-SNAPSHOT
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+
+ com.mysql
+ mysql-connector-j
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
\ No newline at end of file
diff --git a/web/web-admin/pom.xml b/web/web-admin/pom.xml
new file mode 100644
index 0000000..b3f6533
--- /dev/null
+++ b/web/web-admin/pom.xml
@@ -0,0 +1,34 @@
+
+
+
+ web
+ com.atguigu
+ 1.0-SNAPSHOT
+
+ 4.0.0
+
+ web-admin
+
+
+ 17
+ 17
+
+
+
+ com.github.whvcse
+ easy-captcha
+
+
+ org.springframework.boot
+ spring-boot-starter-data-redis
+
+
+ commons-codec
+ commons-codec
+
+
+
+
+
\ No newline at end of file
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/AdminWebApplication.java b/web/web-admin/src/main/java/com/atguigu/lease/AdminWebApplication.java
new file mode 100644
index 0000000..10479f7
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/AdminWebApplication.java
@@ -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);
+ }
+}
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/controller/apartment/ApartmentController.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/controller/apartment/ApartmentController.java
new file mode 100644
index 0000000..4a8bfd1
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/controller/apartment/ApartmentController.java
@@ -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> pageItem(@RequestParam long current, @RequestParam long size, ApartmentQueryVo queryVo) {
+ Page page = new Page<>(current,size);
+ IPage pageModel =
+ apartmentInfoService.selectApartmentInfoPage(page,queryVo);
+ return Result.ok(pageModel);
+ }
+
+ @Operation(summary = "根据ID获取公寓详细信息")
+ @GetMapping("getDetailById")
+ public Result 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> listInfoByDistrictId(@RequestParam Long id) {
+ LambdaQueryWrapper query = new LambdaQueryWrapper<>();
+ query.eq(ApartmentInfo::getDistrictId,id);
+ List list = apartmentInfoService.list(query);
+ return Result.ok(list);
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/controller/apartment/AttrController.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/controller/apartment/AttrController.java
new file mode 100644
index 0000000..db801ad
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/controller/apartment/AttrController.java
@@ -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> listAttrInfo() {
+ List attrKeyVos = attrKeyService.listAttrInfo();
+ return Result.ok(attrKeyVos);
+
+
+ }
+
+ @Operation(summary = "根据id删除属性名称")
+ @DeleteMapping("key/deleteById")
+ public Result removeAttrKeyById(@RequestParam Long attrKeyId) {
+ LambdaQueryWrapper 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();
+ }
+
+}
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/controller/apartment/FacilityController.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/controller/apartment/FacilityController.java
new file mode 100644
index 0000000..3aa8f70
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/controller/apartment/FacilityController.java
@@ -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> listFacility(@RequestParam(required = false) ItemType type) {
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ LambdaQueryWrapper eq = queryWrapper.eq(FacilityInfo::getType, type);
+ List 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();
+ }
+ }
+
+}
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/controller/apartment/FeeController.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/controller/apartment/FeeController.java
new file mode 100644
index 0000000..f31a2c1
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/controller/apartment/FeeController.java
@@ -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> feeInfoList() {
+ List feeKeyVos = feeKeyService.saveOrUpdateFeeKey();
+ return Result.ok(feeKeyVos);
+ }
+
+ @Operation(summary = "根据id删除杂费名称")
+ @DeleteMapping("key/deleteById")
+ public Result deleteFeeKeyById(@RequestParam Long feeKeyId) {
+ LambdaQueryWrapper 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();
+ }
+ }
+}
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/controller/apartment/FileUploadController.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/controller/apartment/FileUploadController.java
new file mode 100644
index 0000000..e7ec2f9
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/controller/apartment/FileUploadController.java
@@ -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 upload(@RequestParam MultipartFile file) {
+ String url = fileService.upload(file);
+ return Result.ok(url);
+ }
+
+}
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/controller/apartment/LabelController.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/controller/apartment/LabelController.java
new file mode 100644
index 0000000..6d968d1
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/controller/apartment/LabelController.java
@@ -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> labelList(@RequestParam(required = false) ItemType itemType) {
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(LabelInfo::getType,itemType);
+ List 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();
+ }
+
+ }
+}
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/controller/apartment/LeaseTermController.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/controller/apartment/LeaseTermController.java
new file mode 100644
index 0000000..8c75bd2
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/controller/apartment/LeaseTermController.java
@@ -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> listLeaseTerm() {
+ List 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();
+ }
+ }
+}
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/controller/apartment/PaymentTypeController.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/controller/apartment/PaymentTypeController.java
new file mode 100644
index 0000000..b88fcc9
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/controller/apartment/PaymentTypeController.java
@@ -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> listPaymentType() {
+ List 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();
+
+ }
+
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/controller/apartment/RegionInfoController.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/controller/apartment/RegionInfoController.java
new file mode 100644
index 0000000..309203e
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/controller/apartment/RegionInfoController.java
@@ -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> listProvince() {
+ List list = provinceInfoService.list();
+ return Result.ok(list);
+ }
+
+ @Operation(summary = "根据省份id查询城市信息列表")
+ @GetMapping("city/listByProvinceId")
+ public Result> listCityInfoByProvinceId(@RequestParam Long id) {
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(CityInfo::getProvinceId, id);
+ List list = cityInfoService.list(queryWrapper);
+ return Result.ok(list);
+ }
+
+ @GetMapping("district/listByCityId")
+ @Operation(summary = "根据城市id查询区县信息")
+ public Result> listDistrictInfoByCityId(@RequestParam Long id) {
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(DistrictInfo::getCityId, id);
+ List list = districtInfoService.list(queryWrapper);
+ return Result.ok(list);
+ }
+
+}
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/controller/apartment/RoomController.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/controller/apartment/RoomController.java
new file mode 100644
index 0000000..ddd6aa2
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/controller/apartment/RoomController.java
@@ -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> pageItem(@RequestParam long current, @RequestParam long size, RoomQueryVo queryVo) {
+ Page page =new Page<>(current,size);
+ IPage pageModel = roomInfoService.selectRoomInfoPage(page,queryVo);
+ return Result.ok(pageModel);
+ }
+
+ @Operation(summary = "根据id获取房间详细信息")
+ @GetMapping("getDetailById")
+ public Result 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 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> listBasicByApartmentId(Long id) {
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(RoomInfo::getApartmentId, id);
+ queryWrapper.eq(RoomInfo::getIsRelease, ReleaseStatus.RELEASED);
+ List list = roomInfoService.list(queryWrapper);
+ return Result.ok(list);
+ }
+
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/controller/lease/LeaseAgreementController.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/controller/lease/LeaseAgreementController.java
new file mode 100644
index 0000000..61b2eef
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/controller/lease/LeaseAgreementController.java
@@ -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> page(@RequestParam long current, @RequestParam long size, AgreementQueryVo queryVo) {
+ Page page = new Page<>(current, size);
+ IPage pageModel = leaseAgreementService.selectPageAgreement(page,queryVo);
+ return Result.ok(pageModel);
+ }
+
+ @Operation(summary = "根据id查询租约信息")
+ @GetMapping(name = "getById")
+ public Result 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 updateWrapper = new LambdaUpdateWrapper<>();
+ updateWrapper.eq(LeaseAgreement::getId, id);
+ updateWrapper.set(LeaseAgreement::getStatus, status);
+ leaseAgreementService.update(updateWrapper);
+ return Result.ok();
+ }
+
+}
+
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/controller/lease/ViewAppointmentController.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/controller/lease/ViewAppointmentController.java
new file mode 100644
index 0000000..3059ef6
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/controller/lease/ViewAppointmentController.java
@@ -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> page(@RequestParam long current, @RequestParam long size, AppointmentQueryVo queryVo) {
+ Page page = new Page<>(current, size);
+ IPage pageModel =
+ viewAppointmentService.selectAppointmentInfoPage(page, queryVo);
+ return Result.ok(pageModel);
+ }
+
+ @Operation(summary = "根据id更新预约状态")
+ @PostMapping("updateStatusById")
+ public Result updateStatusById(@RequestParam Long id, @RequestParam AppointmentStatus status) {
+ LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
+ wrapper.eq(ViewAppointment::getId, id);
+ viewAppointmentService.update(wrapper);
+ return Result.ok();
+ }
+
+}
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/controller/login/LoginController.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/controller/login/LoginController.java
new file mode 100644
index 0000000..40cb509
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/controller/login/LoginController.java
@@ -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 getCaptcha() {
+ CaptchaVo captchaVo = loginService.getCaptcha();
+ return Result.ok(captchaVo);
+ }
+
+ @Operation(summary = "登录")
+ @PostMapping("login")
+ public Result login(@RequestBody LoginVo loginVo) {
+ String token = loginService.login(loginVo);
+ return Result.ok(token);
+ }
+
+ @Operation(summary = "获取登陆用户个人信息")
+ @GetMapping("info")
+ public Result 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);
+ }
+}
\ No newline at end of file
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/controller/system/SystemPostController.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/controller/system/SystemPostController.java
new file mode 100644
index 0000000..4110252
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/controller/system/SystemPostController.java
@@ -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> page(@RequestParam long current, @RequestParam long size) {
+ Page page = new Page<>(current, size);
+ IPage 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 getById(@RequestParam Long id) {
+ SystemPost byId = systemPostService.getById(id);
+ return Result.ok(byId);
+ }
+
+ @Operation(summary = "获取全部岗位列表")
+ @GetMapping("list")
+ public Result> list() {
+ List list = systemPostService.list();
+ return Result.ok(list);
+ }
+
+ @Operation(summary = "根据岗位id修改状态")
+ @PostMapping("updateStatusByPostId")
+ public Result updateStatusByPostId(@RequestParam Long id, @RequestParam BaseStatus status) {
+ LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>();
+ wrapper.eq(SystemPost::getId, id);
+ wrapper.set(SystemPost::getStatus, status);
+ systemPostService.update(wrapper);
+ return Result.ok();
+ }
+}
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/controller/system/SystemUserController.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/controller/system/SystemUserController.java
new file mode 100644
index 0000000..54bc29b
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/controller/system/SystemUserController.java
@@ -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> page(@RequestParam long current, @RequestParam long size, SystemUserQueryVo queryVo) {
+ Page page = new Page<>(current,size);
+ IPage pageModel = systemUserService.selectPageSystemUser(page,queryVo);
+ return Result.ok(pageModel);
+ }
+
+ @Operation(summary = "根据ID查询后台用户信息")
+ @GetMapping("getById")
+ public Result 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 isUsernameExists(@RequestParam String username) {
+ LambdaQueryWrapper 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 wrapper = new LambdaUpdateWrapper<>();
+ wrapper.eq(SystemUser::getId, id);
+ wrapper.set(SystemUser::getStatus, status);
+ systemUserService.update(wrapper);
+ return Result.ok();
+ }
+}
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/controller/user/UserInfoController.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/controller/user/UserInfoController.java
new file mode 100644
index 0000000..6fe3d59
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/controller/user/UserInfoController.java
@@ -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> pageUserInfo(@RequestParam long current, @RequestParam long size, UserInfoQueryVo queryVo) {
+ Page pageParam = new Page<>(current,size);
+ //封装条件
+ LambdaQueryWrapper 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 pageModel = userInfoService.page(pageParam, wrapper);
+
+ return Result.ok(pageModel);
+ }
+
+ @Operation(summary = "根据用户id更新账号状态")
+ @PostMapping("updateStatusById")
+ public Result updateStatusById(@RequestParam Long id, @RequestParam BaseStatus status) {
+ LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>();
+ updateWrapper.eq(UserInfo::getId, id);
+
+ updateWrapper.set(UserInfo::getStatus, status);
+
+ userInfoService.update(updateWrapper);
+ return Result.ok();
+
+
+ }
+}
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/custom/converter/StringToBaseEnumConverterFactory.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/custom/converter/StringToBaseEnumConverterFactory.java
new file mode 100644
index 0000000..1ccfb8e
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/custom/converter/StringToBaseEnumConverterFactory.java
@@ -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 {
+
+ @Override
+ public Converter getConverter(Class targetType) {
+ return new Converter() {
+ @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);
+ }
+ };
+ }
+}
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/custom/converter/WebMvcConfiguration.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/custom/converter/WebMvcConfiguration.java
new file mode 100644
index 0000000..aaac622
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/custom/converter/WebMvcConfiguration.java
@@ -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);
+ }
+}
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/interceptor/AuthenticationInterceptor.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/interceptor/AuthenticationInterceptor.java
new file mode 100644
index 0000000..d342a14
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/interceptor/AuthenticationInterceptor.java
@@ -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();
+ }
+
+}
\ No newline at end of file
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/interceptor/LoginWebMvcConfigurer.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/interceptor/LoginWebMvcConfigurer.java
new file mode 100644
index 0000000..5d6cc6c
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/interceptor/LoginWebMvcConfigurer.java
@@ -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/**");
+ }
+}
\ No newline at end of file
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/ApartmentFacilityMapper.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/ApartmentFacilityMapper.java
new file mode 100644
index 0000000..b9a3e54
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/ApartmentFacilityMapper.java
@@ -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 {
+
+}
+
+
+
+
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/ApartmentFeeValueMapper.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/ApartmentFeeValueMapper.java
new file mode 100644
index 0000000..95db25b
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/ApartmentFeeValueMapper.java
@@ -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 {
+
+}
+
+
+
+
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/ApartmentInfoMapper.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/ApartmentInfoMapper.java
new file mode 100644
index 0000000..4dd5d0f
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/ApartmentInfoMapper.java
@@ -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 {
+
+
+ IPage selectApartmentInfoPage(Page page, ApartmentQueryVo queryVo);
+}
+
+
+
+
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/ApartmentLabelMapper.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/ApartmentLabelMapper.java
new file mode 100644
index 0000000..c477a48
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/ApartmentLabelMapper.java
@@ -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 {
+
+}
+
+
+
+
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/AttrKeyMapper.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/AttrKeyMapper.java
new file mode 100644
index 0000000..d347f80
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/AttrKeyMapper.java
@@ -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 {
+
+ List listAttrInfo();
+}
+
+
+
+
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/AttrValueMapper.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/AttrValueMapper.java
new file mode 100644
index 0000000..14bacb2
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/AttrValueMapper.java
@@ -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 {
+
+ List selectListByRoomId(Long id);
+}
+
+
+
+
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/BrowsingHistoryMapper.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/BrowsingHistoryMapper.java
new file mode 100644
index 0000000..a407f91
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/BrowsingHistoryMapper.java
@@ -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 {
+
+}
+
+
+
+
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/CityInfoMapper.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/CityInfoMapper.java
new file mode 100644
index 0000000..3da96fd
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/CityInfoMapper.java
@@ -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 {
+
+}
+
+
+
+
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/DistrictInfoMapper.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/DistrictInfoMapper.java
new file mode 100644
index 0000000..4f404df
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/DistrictInfoMapper.java
@@ -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 {
+
+}
+
+
+
+
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/FacilityInfoMapper.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/FacilityInfoMapper.java
new file mode 100644
index 0000000..df54403
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/FacilityInfoMapper.java
@@ -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 {
+ List findFacilityListByApartmentId(Long id);
+
+ List findFacilityListByRoomId(Long id);
+}
+
+
+
+
+
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/FeeKeyMapper.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/FeeKeyMapper.java
new file mode 100644
index 0000000..5134f09
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/FeeKeyMapper.java
@@ -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 {
+ List saveOrUpdateFeeKey();
+}
+
+
+
+
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/FeeValueMapper.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/FeeValueMapper.java
new file mode 100644
index 0000000..7874d7e
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/FeeValueMapper.java
@@ -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 {
+ List findLabelListByApartmentId(Long id);
+
+}
+
+
+
+
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/GraphInfoMapper.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/GraphInfoMapper.java
new file mode 100644
index 0000000..d4b8fd9
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/GraphInfoMapper.java
@@ -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 {
+ List selectGraphListByApartmentId(@Param("itemType") ItemType itemType,
+ @Param("itemId") Long itemId);
+
+ List selectGraphListByRoomId(@Param("itemType")ItemType itemType,
+ @Param("itemId") Long itemId);
+}
+
+
+
+
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/LabelInfoMapper.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/LabelInfoMapper.java
new file mode 100644
index 0000000..6c52582
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/LabelInfoMapper.java
@@ -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 {
+ List findLabelListByApartmentId(Long id);
+
+ List selectListByRoomId(Long id);
+}
+
+
+
+
+
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/LeaseAgreementMapper.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/LeaseAgreementMapper.java
new file mode 100644
index 0000000..6011bad
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/LeaseAgreementMapper.java
@@ -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 {
+
+ IPage selectPageAgreement(Page page, AgreementQueryVo queryVo);
+}
+
+
+
+
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/LeaseTermMapper.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/LeaseTermMapper.java
new file mode 100644
index 0000000..763e249
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/LeaseTermMapper.java
@@ -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 {
+
+ List selectListByRoomId(Long id);
+}
+
+
+
+
+
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/PaymentTypeMapper.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/PaymentTypeMapper.java
new file mode 100644
index 0000000..af35e3c
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/PaymentTypeMapper.java
@@ -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 {
+
+ List selectListByRoomId(Long id);
+}
+
+
+
+
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/ProvinceInfoMapper.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/ProvinceInfoMapper.java
new file mode 100644
index 0000000..20d8c46
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/ProvinceInfoMapper.java
@@ -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 {
+
+}
+
+
+
+
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/RoomAttrValueMapper.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/RoomAttrValueMapper.java
new file mode 100644
index 0000000..b905b0e
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/RoomAttrValueMapper.java
@@ -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 {
+
+}
+
+
+
+
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/RoomFacilityMapper.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/RoomFacilityMapper.java
new file mode 100644
index 0000000..39651cf
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/RoomFacilityMapper.java
@@ -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 {
+
+}
+
+
+
+
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/RoomInfoMapper.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/RoomInfoMapper.java
new file mode 100644
index 0000000..60adfe6
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/RoomInfoMapper.java
@@ -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 {
+
+ IPage selectRoomInfoPage(Page page, RoomQueryVo queryVo);
+ Long countRoomMany();
+
+
+}
+
+
+
+
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/RoomLabelMapper.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/RoomLabelMapper.java
new file mode 100644
index 0000000..f512b39
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/RoomLabelMapper.java
@@ -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 {
+
+}
+
+
+
+
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/RoomLeaseTermMapper.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/RoomLeaseTermMapper.java
new file mode 100644
index 0000000..0dc4a59
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/RoomLeaseTermMapper.java
@@ -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 {
+
+}
+
+
+
+
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/RoomPaymentTypeMapper.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/RoomPaymentTypeMapper.java
new file mode 100644
index 0000000..8f6bd12
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/RoomPaymentTypeMapper.java
@@ -0,0 +1,18 @@
+package com.atguigu.lease.web.admin.mapper;
+
+import com.atguigu.lease.model.entity.RoomPaymentType;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author liubo
+* @description 针对表【room_payment_type(房间&支付方式关联表)】的数据库操作Mapper
+* @createDate 2023-07-24 15:48:00
+* @Entity com.atguigu.lease.model.RoomPaymentType
+*/
+public interface RoomPaymentTypeMapper extends BaseMapper {
+
+}
+
+
+
+
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/SystemPostMapper.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/SystemPostMapper.java
new file mode 100644
index 0000000..71ddddf
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/SystemPostMapper.java
@@ -0,0 +1,18 @@
+package com.atguigu.lease.web.admin.mapper;
+
+import com.atguigu.lease.model.entity.SystemPost;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author liubo
+* @description 针对表【system_post(岗位信息表)】的数据库操作Mapper
+* @createDate 2023-07-24 15:48:00
+* @Entity com.atguigu.lease.model.SystemPost
+*/
+public interface SystemPostMapper extends BaseMapper {
+
+}
+
+
+
+
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/SystemUserMapper.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/SystemUserMapper.java
new file mode 100644
index 0000000..cf69aea
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/SystemUserMapper.java
@@ -0,0 +1,27 @@
+package com.atguigu.lease.web.admin.mapper;
+
+import com.atguigu.lease.model.entity.SystemUser;
+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.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
+
+/**
+* @author liubo
+* @description 针对表【system_user(员工信息表)】的数据库操作Mapper
+* @createDate 2023-07-24 15:48:00
+* @Entity com.atguigu.lease.model.SystemUser
+*/
+@Repository
+public interface SystemUserMapper extends BaseMapper {
+
+ IPage selectPageSystemUser(Page page, SystemUserQueryVo queryVo);
+
+}
+
+
+
+
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/UserInfoMapper.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/UserInfoMapper.java
new file mode 100644
index 0000000..2e66b4f
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/UserInfoMapper.java
@@ -0,0 +1,24 @@
+package com.atguigu.lease.web.admin.mapper;
+
+import com.atguigu.lease.model.entity.UserInfo;
+import com.atguigu.lease.web.admin.vo.user.UserInfoQueryVo;
+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 针对表【user_info(用户信息表)】的数据库操作Mapper
+* @createDate 2023-07-24 15:48:00
+* @Entity com.atguigu.lease.model.UserInfo
+*/
+@Repository
+public interface UserInfoMapper extends BaseMapper {
+
+ IPage selectPageUserInfo(Page page, UserInfoQueryVo queryVo);
+}
+
+
+
+
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/ViewAppointmentMapper.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/ViewAppointmentMapper.java
new file mode 100644
index 0000000..6837011
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/mapper/ViewAppointmentMapper.java
@@ -0,0 +1,26 @@
+package com.atguigu.lease.web.admin.mapper;
+
+import com.atguigu.lease.model.entity.ViewAppointment;
+import com.atguigu.lease.web.admin.vo.appointment.AppointmentQueryVo;
+import com.atguigu.lease.web.admin.vo.appointment.AppointmentVo;
+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.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
+
+/**
+* @author liubo
+* @description 针对表【view_appointment(预约看房信息表)】的数据库操作Mapper
+* @createDate 2023-07-24 15:48:00
+* @Entity com.atguigu.lease.model.ViewAppointment
+*/
+@Repository
+public interface ViewAppointmentMapper extends BaseMapper {
+
+ IPage selectAppointmentInfoPage(Page page, AppointmentQueryVo queryVo);
+}
+
+
+
+
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/schedule/ScheduleTask.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/schedule/ScheduleTask.java
new file mode 100644
index 0000000..33dab5c
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/schedule/ScheduleTask.java
@@ -0,0 +1,44 @@
+package com.atguigu.lease.web.admin.schedule;
+
+import com.atguigu.lease.model.entity.LeaseAgreement;
+import com.atguigu.lease.model.enums.LeaseStatus;
+import com.atguigu.lease.web.admin.service.LeaseAgreementService;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+
+@Component
+public class ScheduleTask {
+
+ //每隔5秒执行一次
+ //注解+cron表达式
+// @Scheduled(cron = "0/5 * * * * ?")
+// public void test1() {
+// System.out.println(new Date().toLocaleString());
+// }
+
+ @Autowired
+ private LeaseAgreementService leaseAgreementService;
+
+ //每天晚上八点,查询哪些出租过期了,更新租约状态
+ @Scheduled(cron = "0 0 20 * * ? ")
+ public void updateLeaseStatus() {
+ //update lease_agreement la set la.status=4
+ //where la.lease_end_date wrapper = new LambdaUpdateWrapper<>();
+ //设置修改条件 la.lease_end_date {
+
+}
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/ApartmentFeeValueService.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/ApartmentFeeValueService.java
new file mode 100644
index 0000000..cc67a19
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/ApartmentFeeValueService.java
@@ -0,0 +1,13 @@
+package com.atguigu.lease.web.admin.service;
+
+import com.atguigu.lease.model.entity.ApartmentFeeValue;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author liubo
+* @description 针对表【apartment_fee_value(公寓&杂费关联表)】的数据库操作Service
+* @createDate 2023-07-24 15:48:00
+*/
+public interface ApartmentFeeValueService extends IService {
+
+}
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/ApartmentInfoService.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/ApartmentInfoService.java
new file mode 100644
index 0000000..ae997c8
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/ApartmentInfoService.java
@@ -0,0 +1,26 @@
+package com.atguigu.lease.web.admin.service;
+
+import com.atguigu.lease.model.entity.ApartmentInfo;
+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.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author liubo
+* @description 针对表【apartment_info(公寓信息表)】的数据库操作Service
+* @createDate 2023-07-24 15:48:00
+*/
+public interface ApartmentInfoService extends IService {
+
+ void saveOrUpdateApartment(ApartmentSubmitVo apartmentSubmitVo);
+
+ ApartmentDetailVo getDetailById(Long id);
+
+ IPage selectApartmentInfoPage(Page page, ApartmentQueryVo queryVo);
+
+ void removeApartmentById(Long id);
+}
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/ApartmentLabelService.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/ApartmentLabelService.java
new file mode 100644
index 0000000..64665e8
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/ApartmentLabelService.java
@@ -0,0 +1,13 @@
+package com.atguigu.lease.web.admin.service;
+
+import com.atguigu.lease.model.entity.ApartmentLabel;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author liubo
+* @description 针对表【apartment_label(公寓标签关联表)】的数据库操作Service
+* @createDate 2023-07-24 15:48:00
+*/
+public interface ApartmentLabelService extends IService {
+
+}
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/AttrKeyService.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/AttrKeyService.java
new file mode 100644
index 0000000..2598c5a
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/AttrKeyService.java
@@ -0,0 +1,17 @@
+package com.atguigu.lease.web.admin.service;
+
+import com.atguigu.lease.model.entity.AttrKey;
+import com.atguigu.lease.web.admin.vo.attr.AttrKeyVo;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+/**
+* @author liubo
+* @description 针对表【attr_key(房间基本属性表)】的数据库操作Service
+* @createDate 2023-07-24 15:48:00
+*/
+public interface AttrKeyService extends IService {
+
+ List listAttrInfo();
+}
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/AttrValueService.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/AttrValueService.java
new file mode 100644
index 0000000..45fc392
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/AttrValueService.java
@@ -0,0 +1,13 @@
+package com.atguigu.lease.web.admin.service;
+
+import com.atguigu.lease.model.entity.AttrValue;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author liubo
+* @description 针对表【attr_value(房间基本属性值表)】的数据库操作Service
+* @createDate 2023-07-24 15:48:00
+*/
+public interface AttrValueService extends IService {
+
+}
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/BrowsingHistoryService.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/BrowsingHistoryService.java
new file mode 100644
index 0000000..6ab839e
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/BrowsingHistoryService.java
@@ -0,0 +1,13 @@
+package com.atguigu.lease.web.admin.service;
+
+import com.atguigu.lease.model.entity.BrowsingHistory;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author liubo
+* @description 针对表【browsing_history(浏览历史)】的数据库操作Service
+* @createDate 2023-07-24 15:48:00
+*/
+public interface BrowsingHistoryService extends IService {
+
+}
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/CityInfoService.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/CityInfoService.java
new file mode 100644
index 0000000..b1d10d5
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/CityInfoService.java
@@ -0,0 +1,13 @@
+package com.atguigu.lease.web.admin.service;
+
+import com.atguigu.lease.model.entity.CityInfo;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author liubo
+* @description 针对表【city_info】的数据库操作Service
+* @createDate 2023-07-24 15:48:00
+*/
+public interface CityInfoService extends IService {
+
+}
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/DistrictInfoService.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/DistrictInfoService.java
new file mode 100644
index 0000000..992d065
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/DistrictInfoService.java
@@ -0,0 +1,13 @@
+package com.atguigu.lease.web.admin.service;
+
+import com.atguigu.lease.model.entity.DistrictInfo;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author liubo
+* @description 针对表【district_info】的数据库操作Service
+* @createDate 2023-07-24 15:48:00
+*/
+public interface DistrictInfoService extends IService {
+
+}
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/FacilityInfoService.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/FacilityInfoService.java
new file mode 100644
index 0000000..0f18e98
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/FacilityInfoService.java
@@ -0,0 +1,13 @@
+package com.atguigu.lease.web.admin.service;
+
+import com.atguigu.lease.model.entity.FacilityInfo;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author liubo
+* @description 针对表【facility_info(配套信息表)】的数据库操作Service
+* @createDate 2023-07-24 15:48:00
+*/
+public interface FacilityInfoService extends IService {
+
+}
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/FeeKeyService.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/FeeKeyService.java
new file mode 100644
index 0000000..908fa8e
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/FeeKeyService.java
@@ -0,0 +1,16 @@
+package com.atguigu.lease.web.admin.service;
+
+import com.atguigu.lease.model.entity.FeeKey;
+import com.atguigu.lease.web.admin.vo.fee.FeeKeyVo;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+/**
+* @author liubo
+* @description 针对表【fee_key(杂项费用名称表)】的数据库操作Service
+* @createDate 2023-07-24 15:48:00
+*/
+public interface FeeKeyService extends IService {
+ List saveOrUpdateFeeKey();
+}
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/FeeValueService.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/FeeValueService.java
new file mode 100644
index 0000000..cc848cd
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/FeeValueService.java
@@ -0,0 +1,13 @@
+package com.atguigu.lease.web.admin.service;
+
+import com.atguigu.lease.model.entity.FeeValue;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author liubo
+* @description 针对表【fee_value(杂项费用值表)】的数据库操作Service
+* @createDate 2023-07-24 15:48:00
+*/
+public interface FeeValueService extends IService {
+
+}
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/FileService.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/FileService.java
new file mode 100644
index 0000000..a358b57
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/FileService.java
@@ -0,0 +1,8 @@
+package com.atguigu.lease.web.admin.service;
+
+import org.springframework.web.multipart.MultipartFile;
+
+public interface FileService {
+
+ String upload(MultipartFile file);
+}
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/GraphInfoService.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/GraphInfoService.java
new file mode 100644
index 0000000..71781c4
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/GraphInfoService.java
@@ -0,0 +1,13 @@
+package com.atguigu.lease.web.admin.service;
+
+import com.atguigu.lease.model.entity.GraphInfo;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author liubo
+* @description 针对表【graph_info(图片信息表)】的数据库操作Service
+* @createDate 2023-07-24 15:48:00
+*/
+public interface GraphInfoService extends IService {
+
+}
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/LabelInfoService.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/LabelInfoService.java
new file mode 100644
index 0000000..758a455
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/LabelInfoService.java
@@ -0,0 +1,13 @@
+package com.atguigu.lease.web.admin.service;
+
+import com.atguigu.lease.model.entity.LabelInfo;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author liubo
+* @description 针对表【label_info(标签信息表)】的数据库操作Service
+* @createDate 2023-07-24 15:48:00
+*/
+public interface LabelInfoService extends IService {
+
+}
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/LeaseAgreementService.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/LeaseAgreementService.java
new file mode 100644
index 0000000..0954e03
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/LeaseAgreementService.java
@@ -0,0 +1,20 @@
+package com.atguigu.lease.web.admin.service;
+
+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.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author liubo
+* @description 针对表【lease_agreement(租约信息表)】的数据库操作Service
+* @createDate 2023-07-24 15:48:00
+*/
+public interface LeaseAgreementService extends IService {
+
+ IPage selectPageAgreement(Page page, AgreementQueryVo queryVo);
+
+ AgreementVo getAgreement(Long id);
+}
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/LeaseTermService.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/LeaseTermService.java
new file mode 100644
index 0000000..ef5ec5c
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/LeaseTermService.java
@@ -0,0 +1,13 @@
+package com.atguigu.lease.web.admin.service;
+
+import com.atguigu.lease.model.entity.LeaseTerm;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author liubo
+* @description 针对表【lease_term(租期)】的数据库操作Service
+* @createDate 2023-07-24 15:48:00
+*/
+public interface LeaseTermService extends IService {
+
+}
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/LoginService.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/LoginService.java
new file mode 100644
index 0000000..46c1e78
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/LoginService.java
@@ -0,0 +1,14 @@
+package com.atguigu.lease.web.admin.service;
+
+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;
+
+public interface LoginService {
+
+ CaptchaVo getCaptcha();
+
+ String login(LoginVo loginVo);
+
+ SystemUserInfoVo getSystemUserInfoById(Long userId);
+}
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/PaymentTypeService.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/PaymentTypeService.java
new file mode 100644
index 0000000..e77659c
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/PaymentTypeService.java
@@ -0,0 +1,13 @@
+package com.atguigu.lease.web.admin.service;
+
+import com.atguigu.lease.model.entity.PaymentType;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author liubo
+* @description 针对表【payment_type(支付方式表)】的数据库操作Service
+* @createDate 2023-07-24 15:48:00
+*/
+public interface PaymentTypeService extends IService {
+
+}
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/ProvinceInfoService.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/ProvinceInfoService.java
new file mode 100644
index 0000000..2f50d11
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/ProvinceInfoService.java
@@ -0,0 +1,13 @@
+package com.atguigu.lease.web.admin.service;
+
+import com.atguigu.lease.model.entity.ProvinceInfo;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author liubo
+* @description 针对表【province_info】的数据库操作Service
+* @createDate 2023-07-24 15:48:00
+*/
+public interface ProvinceInfoService extends IService {
+
+}
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/RoomAttrValueService.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/RoomAttrValueService.java
new file mode 100644
index 0000000..20c492c
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/RoomAttrValueService.java
@@ -0,0 +1,13 @@
+package com.atguigu.lease.web.admin.service;
+
+import com.atguigu.lease.model.entity.RoomAttrValue;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author liubo
+* @description 针对表【room_attr_value(房间&基本属性值关联表)】的数据库操作Service
+* @createDate 2023-07-24 15:48:00
+*/
+public interface RoomAttrValueService extends IService {
+
+}
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/RoomFacilityService.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/RoomFacilityService.java
new file mode 100644
index 0000000..d4242cf
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/RoomFacilityService.java
@@ -0,0 +1,13 @@
+package com.atguigu.lease.web.admin.service;
+
+import com.atguigu.lease.model.entity.RoomFacility;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author liubo
+* @description 针对表【room_facility(房间&配套关联表)】的数据库操作Service
+* @createDate 2023-07-24 15:48:00
+*/
+public interface RoomFacilityService extends IService {
+
+}
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/RoomInfoService.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/RoomInfoService.java
new file mode 100644
index 0000000..4caabc2
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/RoomInfoService.java
@@ -0,0 +1,26 @@
+package com.atguigu.lease.web.admin.service;
+
+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.atguigu.lease.web.admin.vo.room.RoomSubmitVo;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author liubo
+* @description 针对表【room_info(房间信息表)】的数据库操作Service
+* @createDate 2023-07-24 15:48:00
+*/
+public interface RoomInfoService extends IService {
+
+ void saveOrUpdateRoomInfo(RoomSubmitVo roomSubmitVo);
+
+ IPage selectRoomInfoPage(Page page, RoomQueryVo queryVo);
+
+ RoomDetailVo getDetailById(Long id);
+
+ void removeRoomById(Long id);
+}
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/RoomLabelService.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/RoomLabelService.java
new file mode 100644
index 0000000..bde24f8
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/RoomLabelService.java
@@ -0,0 +1,13 @@
+package com.atguigu.lease.web.admin.service;
+
+import com.atguigu.lease.model.entity.RoomLabel;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author liubo
+* @description 针对表【room_label(房间&标签关联表)】的数据库操作Service
+* @createDate 2023-07-24 15:48:00
+*/
+public interface RoomLabelService extends IService {
+
+}
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/RoomLeaseTermService.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/RoomLeaseTermService.java
new file mode 100644
index 0000000..79627d3
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/RoomLeaseTermService.java
@@ -0,0 +1,13 @@
+package com.atguigu.lease.web.admin.service;
+
+import com.atguigu.lease.model.entity.RoomLeaseTerm;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author liubo
+* @description 针对表【room_lease_term(房间租期管理表)】的数据库操作Service
+* @createDate 2023-07-24 15:48:00
+*/
+public interface RoomLeaseTermService extends IService {
+
+}
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/RoomPaymentTypeService.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/RoomPaymentTypeService.java
new file mode 100644
index 0000000..5e41076
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/RoomPaymentTypeService.java
@@ -0,0 +1,13 @@
+package com.atguigu.lease.web.admin.service;
+
+import com.atguigu.lease.model.entity.RoomPaymentType;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author liubo
+* @description 针对表【room_payment_type(房间&支付方式关联表)】的数据库操作Service
+* @createDate 2023-07-24 15:48:00
+*/
+public interface RoomPaymentTypeService extends IService {
+
+}
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/SystemPostService.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/SystemPostService.java
new file mode 100644
index 0000000..deddf2d
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/SystemPostService.java
@@ -0,0 +1,13 @@
+package com.atguigu.lease.web.admin.service;
+
+import com.atguigu.lease.model.entity.SystemPost;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author liubo
+* @description 针对表【system_post(岗位信息表)】的数据库操作Service
+* @createDate 2023-07-24 15:48:00
+*/
+public interface SystemPostService extends IService {
+
+}
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/SystemUserService.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/SystemUserService.java
new file mode 100644
index 0000000..8f4c757
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/SystemUserService.java
@@ -0,0 +1,22 @@
+package com.atguigu.lease.web.admin.service;
+
+import com.atguigu.lease.model.entity.SystemUser;
+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.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author liubo
+* @description 针对表【system_user(员工信息表)】的数据库操作Service
+* @createDate 2023-07-24 15:48:00
+*/
+public interface SystemUserService extends IService {
+
+ IPage selectPageSystemUser(Page page, SystemUserQueryVo queryVo);
+
+ SystemUserItemVo getUserById(Long id);
+}
+
+
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/UserInfoService.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/UserInfoService.java
new file mode 100644
index 0000000..855fa8b
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/UserInfoService.java
@@ -0,0 +1,18 @@
+package com.atguigu.lease.web.admin.service;
+
+import com.atguigu.lease.model.entity.UserInfo;
+import com.atguigu.lease.web.admin.vo.user.UserInfoQueryVo;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author liubo
+* @description 针对表【user_info(用户信息表)】的数据库操作Service
+* @createDate 2023-07-24 15:48:00
+*/
+public interface UserInfoService extends IService {
+
+
+
+}
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/ViewAppointmentService.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/ViewAppointmentService.java
new file mode 100644
index 0000000..42faa1b
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/ViewAppointmentService.java
@@ -0,0 +1,18 @@
+package com.atguigu.lease.web.admin.service;
+
+import com.atguigu.lease.model.entity.ViewAppointment;
+import com.atguigu.lease.web.admin.vo.appointment.AppointmentQueryVo;
+import com.atguigu.lease.web.admin.vo.appointment.AppointmentVo;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author liubo
+* @description 针对表【view_appointment(预约看房信息表)】的数据库操作Service
+* @createDate 2023-07-24 15:48:00
+*/
+public interface ViewAppointmentService extends IService {
+
+ IPage selectAppointmentInfoPage(Page page, AppointmentQueryVo queryVo);
+}
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/impl/ApartmentFacilityServiceImpl.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/impl/ApartmentFacilityServiceImpl.java
new file mode 100644
index 0000000..666dde4
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/impl/ApartmentFacilityServiceImpl.java
@@ -0,0 +1,22 @@
+package com.atguigu.lease.web.admin.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.atguigu.lease.model.entity.ApartmentFacility;
+import com.atguigu.lease.web.admin.service.ApartmentFacilityService;
+import com.atguigu.lease.web.admin.mapper.ApartmentFacilityMapper;
+import org.springframework.stereotype.Service;
+
+/**
+* @author liubo
+* @description 针对表【apartment_facility(公寓&配套关联表)】的数据库操作Service实现
+* @createDate 2023-07-24 15:48:00
+*/
+@Service
+public class ApartmentFacilityServiceImpl extends ServiceImpl
+ implements ApartmentFacilityService{
+
+}
+
+
+
+
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/impl/ApartmentFeeValueServiceImpl.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/impl/ApartmentFeeValueServiceImpl.java
new file mode 100644
index 0000000..c7ff106
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/impl/ApartmentFeeValueServiceImpl.java
@@ -0,0 +1,22 @@
+package com.atguigu.lease.web.admin.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.atguigu.lease.model.entity.ApartmentFeeValue;
+import com.atguigu.lease.web.admin.service.ApartmentFeeValueService;
+import com.atguigu.lease.web.admin.mapper.ApartmentFeeValueMapper;
+import org.springframework.stereotype.Service;
+
+/**
+* @author liubo
+* @description 针对表【apartment_fee_value(公寓&杂费关联表)】的数据库操作Service实现
+* @createDate 2023-07-24 15:48:00
+*/
+@Service
+public class ApartmentFeeValueServiceImpl extends ServiceImpl
+ implements ApartmentFeeValueService{
+
+}
+
+
+
+
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/impl/ApartmentInfoServiceImpl.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/impl/ApartmentInfoServiceImpl.java
new file mode 100644
index 0000000..dcda7b7
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/impl/ApartmentInfoServiceImpl.java
@@ -0,0 +1,230 @@
+package com.atguigu.lease.web.admin.service.impl;
+
+import com.atguigu.lease.common.result.ResultCodeEnum;
+import com.atguigu.lease.model.entity.*;
+import com.atguigu.lease.model.enums.ItemType;
+import com.atguigu.lease.web.admin.mapper.*;
+import com.atguigu.lease.web.admin.service.*;
+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.atguigu.lease.web.admin.vo.fee.FeeValueVo;
+import com.atguigu.lease.web.admin.vo.graph.GraphVo;
+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.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author liubo
+ * @description 针对表【apartment_info(公寓信息表)】的数据库操作Service实现
+ * @createDate 2023-07-24 15:48:00
+ */
+@Service
+public class ApartmentInfoServiceImpl extends ServiceImpl
+ implements ApartmentInfoService {
+
+ //注入公寓基本信息的Mapper
+ @Autowired
+ private ApartmentInfoMapper apartmentInfoMapper;
+ //注入其他四个相关表的Service 在里面用表
+
+ //公寓基础数据
+ @Autowired
+ private GraphInfoService graphInfoService;
+ //公寓标签
+ @Autowired
+ private ApartmentLabelService apartmentLabelService;
+ //公寓费用
+ @Autowired
+ private ApartmentFeeValueService apartmentFeeValueService;
+ //公寓设施
+ @Autowired
+ private ApartmentFacilityService apartmentFacilityService;
+ @Autowired
+ private FacilityInfoMapper facilityInfoMapper;
+ @Autowired
+ private LabelInfoMapper labelInfoMapper;
+
+ @Autowired
+ private FeeValueMapper feeValueMapper;
+ @Autowired
+ private GraphInfoMapper graphInfoMapper;
+ @Autowired
+ private RoomInfoMapper roomInfoMapper;
+
+
+ @Override
+ public void saveOrUpdateApartment(ApartmentSubmitVo apartmentSubmitVo) {
+
+ //判定一下id有没有 如果为空的话就是添加,不为空就是修改
+ //修改的话就先删除其他的已经存储的代码 再次用内部的数据去修改
+ boolean b = apartmentSubmitVo.getId() != null;
+ this.saveOrUpdate(apartmentSubmitVo);
+ //修改的时候就删除数据库中储存的代码
+ if(b){
+ //
+ LambdaQueryWrapper wrapperApartmentFacility
+ = new LambdaQueryWrapper<>();
+ wrapperApartmentFacility.eq(ApartmentFacility::getApartmentId,apartmentSubmitVo.getId());
+ apartmentFacilityService.remove(wrapperApartmentFacility);
+
+ LambdaQueryWrapper wrapperApartmentFeeValue
+ = new LambdaQueryWrapper<>();
+ wrapperApartmentFeeValue.eq(ApartmentFeeValue::getApartmentId,
+ apartmentSubmitVo.getId());
+ apartmentFeeValueService.remove(wrapperApartmentFeeValue);
+
+ LambdaQueryWrapper wrapperApartmentLabel
+ = new LambdaQueryWrapper<>();
+ wrapperApartmentLabel.eq(ApartmentLabel::getApartmentId,
+ apartmentSubmitVo.getId());
+ apartmentLabelService.remove(wrapperApartmentLabel);
+
+ LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
+ wrapper.eq(GraphInfo::getItemId,apartmentSubmitVo.getId());
+ wrapper.eq(GraphInfo::getItemType, ItemType.APARTMENT);
+ graphInfoService.remove(wrapper);
+ }
+// 一个公寓id 对应多个配套数据,添加多条记录
+
+ List facilityInfoIds = apartmentSubmitVo.getFacilityInfoIds();
+ if(!CollectionUtils.isEmpty(facilityInfoIds)) {
+ List afList = new ArrayList<>();
+ for (Long facilityInfoId : facilityInfoIds){
+ //创建apartmentFacility对象,向设置需要添加值
+ ApartmentFacility apartmentFacility = new ApartmentFacility();
+ //设置配套数据id
+ apartmentFacility.setFacilityId(facilityInfoId);
+ //设置公寓id
+ apartmentFacility.setApartmentId(apartmentSubmitVo.getId());
+ //放到集合
+ afList.add(apartmentFacility);
+ }
+ apartmentFacilityService.saveBatch(afList);
+
+ }
+
+ List feeValueIds = apartmentSubmitVo.getFeeValueIds();
+ if(!CollectionUtils.isEmpty(feeValueIds)){
+ List afvList = new ArrayList<>();
+ for (Long feeValueId : feeValueIds) {
+ ApartmentFeeValue apartmentFeeValue = new ApartmentFeeValue();
+ apartmentFeeValue.setApartmentId(apartmentSubmitVo.getId());
+ apartmentFeeValue.setFeeValueId(feeValueId);
+ afvList.add(apartmentFeeValue);
+ }
+ apartmentFeeValueService.saveBatch(afvList);
+ }
+
+ List labelIds = apartmentSubmitVo.getLabelIds();
+ if(!CollectionUtils.isEmpty(labelIds)){
+ List alList = new ArrayList<>();
+ for (Long labelId : labelIds) {
+ ApartmentLabel apartmentLabel = new ApartmentLabel();
+ apartmentLabel.setApartmentId(apartmentSubmitVo.getId());
+ apartmentLabel.setLabelId(labelId);
+ alList.add(apartmentLabel);
+ }
+ apartmentLabelService.saveBatch(alList);
+
+ }
+ List graphVoList = apartmentSubmitVo.getGraphVoList();
+ if(!CollectionUtils.isEmpty(graphVoList)){
+ List list = new ArrayList<>();
+ for (GraphVo graphVo : graphVoList) {
+ GraphInfo graphInfo = new GraphInfo();
+ graphInfo.setItemId(apartmentSubmitVo.getId());
+ graphInfo.setItemType(ItemType.APARTMENT);
+ graphInfo.setName(graphVo.getName());
+ graphInfo.setUrl(graphVo.getUrl());
+ list.add(graphInfo);
+ }
+ graphInfoService.saveBatch(list);
+ }
+ }
+
+ @Override
+ public ApartmentDetailVo getDetailById(Long id) {
+ ApartmentInfo apartmentInfo = this.getById(id);
+ if (apartmentInfo == null) {
+ return null;
+ }
+ List facilityListByApartmentId = facilityInfoMapper.findFacilityListByApartmentId(id);
+ List labelListByApartmentId = labelInfoMapper.findLabelListByApartmentId(id);
+ List labelListByApartmentId1 = feeValueMapper.findLabelListByApartmentId(id);
+ List graphInfos = graphInfoMapper.selectGraphListByApartmentId(ItemType.APARTMENT, id);
+ ApartmentDetailVo apartmentDetailVo = new ApartmentDetailVo();
+ BeanUtils.copyProperties(apartmentInfo,apartmentDetailVo);
+
+ apartmentDetailVo.setFacilityInfoList(facilityListByApartmentId);
+ apartmentDetailVo.setLabelInfoList(labelListByApartmentId);
+ apartmentDetailVo.setFeeValueVoList(labelListByApartmentId1);
+ apartmentDetailVo.setGraphVoList(graphInfos);
+ return apartmentDetailVo;
+
+
+ }
+
+ @Override
+ public IPage selectApartmentInfoPage(Page page, ApartmentQueryVo queryVo) {
+ IPage apartmentItemVoIPage = apartmentInfoMapper.selectApartmentInfoPage(page, queryVo);
+ return apartmentItemVoIPage;
+ }
+
+ @Override
+ public void removeApartmentById(Long id) {
+ //先判断是否有房间 有房间了不能删
+ //条件判断:看有没有房间
+ LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>();
+ wrapper.eq(RoomInfo::getApartmentId,id);
+ //看看有没有房间 有了就提示信息
+ Long l = roomInfoMapper.countRoomMany();
+ if (l > 0){
+ throw new RuntimeException("存在房间信息,不能删除");
+ }
+ //删除
+ this.removeById(id);
+ //删除配套信息
+ LambdaQueryWrapper wrapper1
+ = new LambdaQueryWrapper<>();
+ wrapper1.eq(ApartmentFacility::getApartmentId,id);
+ apartmentFacilityService.remove(wrapper1);
+
+ //删除标签信息
+ LambdaQueryWrapper wrapper2
+ = new LambdaQueryWrapper<>();
+ wrapper2.eq(ApartmentLabel::getApartmentId,id);
+ apartmentLabelService.remove(wrapper2);
+
+ //删除杂费信息
+ LambdaQueryWrapper wrapper3
+ = new LambdaQueryWrapper<>();
+ wrapper3.eq(ApartmentFeeValue::getApartmentId,id);
+ apartmentFeeValueService.remove(wrapper3);
+
+ //删除图片信息
+ LambdaQueryWrapper wrapper4
+ = new LambdaQueryWrapper<>();
+ wrapper4.eq(GraphInfo::getItemId,id);
+ wrapper4.eq(GraphInfo::getItemType,ItemType.APARTMENT);
+ graphInfoService.remove(wrapper4);
+
+
+
+ }
+
+}
+
+
+
+
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/impl/ApartmentLabelServiceImpl.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/impl/ApartmentLabelServiceImpl.java
new file mode 100644
index 0000000..32c79a9
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/impl/ApartmentLabelServiceImpl.java
@@ -0,0 +1,22 @@
+package com.atguigu.lease.web.admin.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.atguigu.lease.model.entity.ApartmentLabel;
+import com.atguigu.lease.web.admin.service.ApartmentLabelService;
+import com.atguigu.lease.web.admin.mapper.ApartmentLabelMapper;
+import org.springframework.stereotype.Service;
+
+/**
+* @author liubo
+* @description 针对表【apartment_label(公寓标签关联表)】的数据库操作Service实现
+* @createDate 2023-07-24 15:48:00
+*/
+@Service
+public class ApartmentLabelServiceImpl extends ServiceImpl
+ implements ApartmentLabelService{
+
+}
+
+
+
+
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/impl/AttrKeyServiceImpl.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/impl/AttrKeyServiceImpl.java
new file mode 100644
index 0000000..c5995ef
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/impl/AttrKeyServiceImpl.java
@@ -0,0 +1,33 @@
+package com.atguigu.lease.web.admin.service.impl;
+
+import com.atguigu.lease.model.entity.AttrKey;
+import com.atguigu.lease.web.admin.mapper.AttrKeyMapper;
+import com.atguigu.lease.web.admin.service.AttrKeyService;
+import com.atguigu.lease.web.admin.vo.attr.AttrKeyVo;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+* @author liubo
+* @description 针对表【attr_key(房间基本属性表)】的数据库操作Service实现
+* @createDate 2023-07-24 15:48:00
+*/
+@Service
+public class AttrKeyServiceImpl extends ServiceImpl
+ implements AttrKeyService{
+
+ @Autowired
+ private AttrKeyMapper attrKeyMapper;
+ @Override
+ public List listAttrInfo() {
+ List attrKeyVos = attrKeyMapper.listAttrInfo();
+ return attrKeyVos;
+ }
+}
+
+
+
+
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/impl/AttrValueServiceImpl.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/impl/AttrValueServiceImpl.java
new file mode 100644
index 0000000..d259ef2
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/impl/AttrValueServiceImpl.java
@@ -0,0 +1,22 @@
+package com.atguigu.lease.web.admin.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.atguigu.lease.model.entity.AttrValue;
+import com.atguigu.lease.web.admin.service.AttrValueService;
+import com.atguigu.lease.web.admin.mapper.AttrValueMapper;
+import org.springframework.stereotype.Service;
+
+/**
+* @author liubo
+* @description 针对表【attr_value(房间基本属性值表)】的数据库操作Service实现
+* @createDate 2023-07-24 15:48:00
+*/
+@Service
+public class AttrValueServiceImpl extends ServiceImpl
+ implements AttrValueService{
+
+}
+
+
+
+
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/impl/BrowsingHistoryServiceImpl.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/impl/BrowsingHistoryServiceImpl.java
new file mode 100644
index 0000000..eb48df2
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/impl/BrowsingHistoryServiceImpl.java
@@ -0,0 +1,22 @@
+package com.atguigu.lease.web.admin.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.atguigu.lease.model.entity.BrowsingHistory;
+import com.atguigu.lease.web.admin.service.BrowsingHistoryService;
+import com.atguigu.lease.web.admin.mapper.BrowsingHistoryMapper;
+import org.springframework.stereotype.Service;
+
+/**
+* @author liubo
+* @description 针对表【browsing_history(浏览历史)】的数据库操作Service实现
+* @createDate 2023-07-24 15:48:00
+*/
+@Service
+public class BrowsingHistoryServiceImpl extends ServiceImpl
+ implements BrowsingHistoryService{
+
+}
+
+
+
+
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/impl/CityInfoServiceImpl.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/impl/CityInfoServiceImpl.java
new file mode 100644
index 0000000..6069103
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/impl/CityInfoServiceImpl.java
@@ -0,0 +1,22 @@
+package com.atguigu.lease.web.admin.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.atguigu.lease.model.entity.CityInfo;
+import com.atguigu.lease.web.admin.service.CityInfoService;
+import com.atguigu.lease.web.admin.mapper.CityInfoMapper;
+import org.springframework.stereotype.Service;
+
+/**
+* @author liubo
+* @description 针对表【city_info】的数据库操作Service实现
+* @createDate 2023-07-24 15:48:00
+*/
+@Service
+public class CityInfoServiceImpl extends ServiceImpl
+ implements CityInfoService{
+
+}
+
+
+
+
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/impl/DistrictInfoServiceImpl.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/impl/DistrictInfoServiceImpl.java
new file mode 100644
index 0000000..3007e7f
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/impl/DistrictInfoServiceImpl.java
@@ -0,0 +1,22 @@
+package com.atguigu.lease.web.admin.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.atguigu.lease.model.entity.DistrictInfo;
+import com.atguigu.lease.web.admin.service.DistrictInfoService;
+import com.atguigu.lease.web.admin.mapper.DistrictInfoMapper;
+import org.springframework.stereotype.Service;
+
+/**
+* @author liubo
+* @description 针对表【district_info】的数据库操作Service实现
+* @createDate 2023-07-24 15:48:00
+*/
+@Service
+public class DistrictInfoServiceImpl extends ServiceImpl
+ implements DistrictInfoService{
+
+}
+
+
+
+
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/impl/FacilityInfoServiceImpl.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/impl/FacilityInfoServiceImpl.java
new file mode 100644
index 0000000..0219f71
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/impl/FacilityInfoServiceImpl.java
@@ -0,0 +1,22 @@
+package com.atguigu.lease.web.admin.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.atguigu.lease.model.entity.FacilityInfo;
+import com.atguigu.lease.web.admin.service.FacilityInfoService;
+import com.atguigu.lease.web.admin.mapper.FacilityInfoMapper;
+import org.springframework.stereotype.Service;
+
+/**
+* @author liubo
+* @description 针对表【facility_info(配套信息表)】的数据库操作Service实现
+* @createDate 2023-07-24 15:48:00
+*/
+@Service
+public class FacilityInfoServiceImpl extends ServiceImpl
+ implements FacilityInfoService{
+
+}
+
+
+
+
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/impl/FeeKeyServiceImpl.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/impl/FeeKeyServiceImpl.java
new file mode 100644
index 0000000..bd9294d
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/impl/FeeKeyServiceImpl.java
@@ -0,0 +1,35 @@
+package com.atguigu.lease.web.admin.service.impl;
+
+import com.atguigu.lease.model.entity.FeeKey;
+import com.atguigu.lease.web.admin.mapper.FeeKeyMapper;
+import com.atguigu.lease.web.admin.service.FeeKeyService;
+import com.atguigu.lease.web.admin.vo.fee.FeeKeyVo;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+* @author liubo
+* @description 针对表【fee_key(杂项费用名称表)】的数据库操作Service实现
+* @createDate 2023-07-24 15:48:00
+*/
+@Service
+public class FeeKeyServiceImpl extends ServiceImpl
+ implements FeeKeyService{
+
+ @Autowired
+private FeeKeyMapper feeKeyMapper;
+
+
+@Override
+ public List saveOrUpdateFeeKey() {
+ List feeKeyVos = feeKeyMapper.saveOrUpdateFeeKey();
+ return feeKeyVos;
+ }
+}
+
+
+
+
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/impl/FeeValueServiceImpl.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/impl/FeeValueServiceImpl.java
new file mode 100644
index 0000000..40a9375
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/impl/FeeValueServiceImpl.java
@@ -0,0 +1,22 @@
+package com.atguigu.lease.web.admin.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.atguigu.lease.model.entity.FeeValue;
+import com.atguigu.lease.web.admin.service.FeeValueService;
+import com.atguigu.lease.web.admin.mapper.FeeValueMapper;
+import org.springframework.stereotype.Service;
+
+/**
+* @author liubo
+* @description 针对表【fee_value(杂项费用值表)】的数据库操作Service实现
+* @createDate 2023-07-24 15:48:00
+*/
+@Service
+public class FeeValueServiceImpl extends ServiceImpl
+ implements FeeValueService{
+
+}
+
+
+
+
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/impl/FileServiceImpl.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/impl/FileServiceImpl.java
new file mode 100644
index 0000000..76778f4
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/impl/FileServiceImpl.java
@@ -0,0 +1,81 @@
+package com.atguigu.lease.web.admin.service.impl;
+
+import com.atguigu.lease.common.minio.MinioProperties;
+import com.atguigu.lease.web.admin.service.FileService;
+import io.minio.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.UUID;
+
+@Service
+public class FileServiceImpl implements FileService {
+ @Autowired
+ private MinioClient client;
+
+ @Autowired
+ private MinioProperties properties;
+ @Override
+ public String upload(MultipartFile file) {
+ try {
+ //判断bucket是否存在
+ boolean bucketExists =
+ client.bucketExists(BucketExistsArgs.builder()
+ .bucket(properties.getBucketname())
+ .build());
+ //bucket不存在,创建
+ if (!bucketExists) {
+ //创建bucket
+ client.makeBucket(MakeBucketArgs.builder()
+ .bucket(properties.getBucketname()).build());
+ //设置bucket策略:私有、公共、自定义
+ client.setBucketPolicy(SetBucketPolicyArgs.builder()
+ .bucket(properties.getBucketname())
+ .config(createBucketPolicyConfig(properties.getBucketname())).build());
+ }
+
+ //String filename = new SimpleDateFormat("yyyyMMdd").format(new Date()) + "/" + UUID.randomUUID() + "-" + file.getOriginalFilename();
+ String uuid = UUID.randomUUID().toString();
+ String filename = uuid+"-"+file.getOriginalFilename();
+ // UUID-01.jpg
+ //上传文件到minio
+ client.putObject(PutObjectArgs.builder().
+ bucket(properties.getBucketname()). //bucket名称
+ object(filename). //在bucket文件名称
+ stream(file.getInputStream(), file.getSize(), -1).
+ contentType(file.getContentType()).build());
+
+ //返回文件在minio里面地址
+ // http://127.0.0.1:9000/atguigu/01.jpg
+// String url = properties.getEndpoint()
+// +"/"+properties.getBucketname()
+// +"/"+filename;
+
+ return String.join("/", properties.getEndpoint(),
+ properties.getBucketname(), filename);
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ private String createBucketPolicyConfig(String bucketName) {
+
+ return """
+ {
+ "Statement" : [ {
+ "Action" : "s3:GetObject",
+ "Effect" : "Allow",
+ "Principal" : "*",
+ "Resource" : "arn:aws:s3:::%s/*"
+ } ],
+ "Version" : "2012-10-17"
+ }
+ """.formatted(bucketName);
+ }
+
+
+ }
+
diff --git a/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/impl/GraphInfoServiceImpl.java b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/impl/GraphInfoServiceImpl.java
new file mode 100644
index 0000000..0527930
--- /dev/null
+++ b/web/web-admin/src/main/java/com/atguigu/lease/web/admin/service/impl/GraphInfoServiceImpl.java
@@ -0,0 +1,22 @@
+package com.atguigu.lease.web.admin.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.atguigu.lease.model.entity.GraphInfo;
+import com.atguigu.lease.web.admin.service.GraphInfoService;
+import com.atguigu.lease.web.admin.mapper.GraphInfoMapper;
+import org.springframework.stereotype.Service;
+
+/**
+* @author liubo
+* @description 针对表【graph_info(图片信息表)】的数据库操作Service实现
+* @createDate 2023-07-24 15:48:00
+*/
+@Service
+public class GraphInfoServiceImpl extends ServiceImpl