Forráskód Böngészése

Merge branch 'master' of https://e.coding.net/chuanghaikeji/smarCampus/backend_dormitory

夏文涛 1 éve
szülő
commit
e26cf6e542

+ 0 - 205
mybatis_plus.iml

@@ -1,205 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
-  <component name="FacetManager">
-    <facet type="Spring" name="Spring">
-      <configuration />
-    </facet>
-    <facet type="web" name="Web">
-      <configuration>
-        <webroots />
-        <sourceRoots>
-          <root url="file://$MODULE_DIR$/src/main/java" />
-          <root url="file://$MODULE_DIR$/src/main/resources" />
-        </sourceRoots>
-      </configuration>
-    </facet>
-  </component>
-  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
-    <output url="file://$MODULE_DIR$/target/classes" />
-    <output-test url="file://$MODULE_DIR$/target/test-classes" />
-    <content url="file://$MODULE_DIR$">
-      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
-      <excludeFolder url="file://$MODULE_DIR$/target" />
-    </content>
-    <orderEntry type="inheritedJdk" />
-    <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="library" name="Maven: com.github.penggle:kaptcha:2.3.2" level="project" />
-    <orderEntry type="library" name="Maven: javax.servlet:javax.servlet-api:4.0.1" level="project" />
-    <orderEntry type="library" name="Maven: com.jhlabs:filters:2.0.235-1" level="project" />
-    <orderEntry type="library" name="Maven: com.github.whvcse:easy-captcha:1.6.2" level="project" />
-    <orderEntry type="library" name="Maven: javax.validation:validation-api:2.0.1.Final" level="project" />
-    <orderEntry type="library" name="Maven: org.hibernate.validator:hibernate-validator:6.1.5.Final" level="project" />
-    <orderEntry type="library" name="Maven: org.jboss.logging:jboss-logging:3.4.1.Final" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml:classmate:1.5.1" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.poi:poi:4.1.0" level="project" />
-    <orderEntry type="library" name="Maven: commons-codec:commons-codec:1.15" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.commons:commons-collections4:4.3" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.commons:commons-math3:3.6.1" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml:4.1.0" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml-schemas:4.1.0" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.xmlbeans:xmlbeans:3.1.0" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.commons:commons-compress:1.18" level="project" />
-    <orderEntry type="library" name="Maven: com.github.virtuald:curvesapi:1.06" level="project" />
-    <orderEntry type="library" name="Maven: com.alibaba:fastjson:2.0.12" level="project" />
-    <orderEntry type="library" name="Maven: com.alibaba.fastjson2:fastjson2-extension:2.0.12" level="project" />
-    <orderEntry type="library" name="Maven: com.alibaba.fastjson2:fastjson2:2.0.12" level="project" />
-    <orderEntry type="library" name="Maven: com.auth0:java-jwt:3.10.0" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.11.3" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.11.3" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.11.3" level="project" />
-    <orderEntry type="library" name="Maven: io.jsonwebtoken:jjwt:0.9.1" level="project" />
-    <orderEntry type="library" name="Maven: com.github.qcloudsms:qcloudsms:1.0.6" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpmime:4.5.13" level="project" />
-    <orderEntry type="library" name="Maven: com.tencentcloudapi:tencentcloud-sdk-java:3.1.742" level="project" />
-    <orderEntry type="library" name="Maven: commons-logging:commons-logging:1.2" level="project" />
-    <orderEntry type="library" name="Maven: com.squareup.okio:okio:2.10.0" level="project" />
-    <orderEntry type="library" name="Maven: org.jetbrains.kotlin:kotlin-stdlib:1.4.10" level="project" />
-    <orderEntry type="library" name="Maven: org.jetbrains:annotations:13.0" level="project" />
-    <orderEntry type="library" name="Maven: org.jetbrains.kotlin:kotlin-stdlib-common:1.4.10" level="project" />
-    <orderEntry type="library" name="Maven: com.squareup.okhttp3:okhttp:3.14.9" level="project" />
-    <orderEntry type="library" name="Maven: javax.xml.bind:jaxb-api:2.3.1" level="project" />
-    <orderEntry type="library" name="Maven: javax.activation:javax.activation-api:1.2.0" level="project" />
-    <orderEntry type="library" name="Maven: com.squareup.okhttp3:logging-interceptor:3.14.9" level="project" />
-    <orderEntry type="library" name="Maven: org.ini4j:ini4j:0.5.4" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-aop:2.4.0" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.4.0" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.4.0" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.4.0" level="project" />
-    <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
-    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.13.3" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.13.3" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.30" level="project" />
-    <orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
-    <orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.27" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.3.1" level="project" />
-    <orderEntry type="library" name="Maven: org.aspectj:aspectjweaver:1.9.6" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpclient:4.5.10" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.4.13" level="project" />
-    <orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.7" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-quartz:2.4.0" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-context-support:5.3.1" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.3.1" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-tx:5.3.1" level="project" />
-    <orderEntry type="library" name="Maven: org.quartz-scheduler:quartz:2.3.2" level="project" />
-    <orderEntry type="library" name="Maven: com.mchange:mchange-commons-java:0.2.15" level="project" />
-    <orderEntry type="library" name="Maven: mysql:mysql-connector-java:8.0.22" level="project" />
-    <orderEntry type="library" name="Maven: org.projectlombok:lombok:1.18.16" level="project" />
-    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-boot-starter:3.0.5" level="project" />
-    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus:3.0.5" level="project" />
-    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-extension:3.0.5" level="project" />
-    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-core:3.0.5" level="project" />
-    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-annotation:3.0.5" level="project" />
-    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-generator:3.0.5" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.4.0" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.4.0" level="project" />
-    <orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.4.5" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.3.1" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.4.0" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.4.0" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.11.3" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.3" level="project" />
-    <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.11.3" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.4.0" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.39" level="project" />
-    <orderEntry type="library" name="Maven: org.glassfish:jakarta.el:3.0.3" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.39" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.3.1" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.3.1" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-starter-test:2.4.0" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test:2.4.0" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test-autoconfigure:2.4.0" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: com.jayway.jsonpath:json-path:2.4.0" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: net.minidev:json-smart:2.3" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: net.minidev:accessors-smart:1.2" level="project" />
-    <orderEntry type="library" name="Maven: jakarta.xml.bind:jakarta.xml.bind-api:2.3.3" level="project" />
-    <orderEntry type="library" name="Maven: jakarta.activation:jakarta.activation-api:1.2.2" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.assertj:assertj-core:3.18.1" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest:2.2" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter:5.7.0" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-api:5.7.0" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.apiguardian:apiguardian-api:1.1.0" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.opentest4j:opentest4j:1.2.0" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.junit.platform:junit-platform-commons:1.7.0" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-params:5.7.0" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-engine:5.7.0" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.junit.platform:junit-platform-engine:1.7.0" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-core:3.6.0" level="project" />
-    <orderEntry type="library" name="Maven: net.bytebuddy:byte-buddy:1.10.18" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: net.bytebuddy:byte-buddy-agent:1.10.18" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.objenesis:objenesis:3.1" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-junit-jupiter:3.6.0" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.skyscreamer:jsonassert:1.5.0" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: com.vaadin.external.google:android-json:0.0.20131108.vaadin1" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.3.1" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.3.1" level="project" />
-    <orderEntry type="library" scope="TEST" name="Maven: org.xmlunit:xmlunit-core:2.7.0" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-web:5.3.22" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.3.1" level="project" />
-    <orderEntry type="library" name="Maven: org.eclipse.jgit:org.eclipse.jgit:5.4.3.201909031940-r" level="project" />
-    <orderEntry type="library" name="Maven: com.jcraft:jsch:0.1.55" level="project" />
-    <orderEntry type="library" name="Maven: com.jcraft:jzlib:1.1.1" level="project" />
-    <orderEntry type="library" name="Maven: com.googlecode.javaewah:JavaEWAH:1.1.6" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.30" level="project" />
-    <orderEntry type="library" name="Maven: org.bouncycastle:bcpg-jdk15on:1.61" level="project" />
-    <orderEntry type="library" name="Maven: org.bouncycastle:bcprov-jdk15on:1.61" level="project" />
-    <orderEntry type="library" name="Maven: org.bouncycastle:bcpkix-jdk15on:1.61" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-configuration-processor:2.4.0" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-redis:2.4.0" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-redis:2.4.1" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-keyvalue:2.4.1" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:2.4.1" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-oxm:5.3.1" level="project" />
-    <orderEntry type="library" name="Maven: redis.clients:jedis:3.3.0" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.commons:commons-pool2:2.9.0" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-swagger2:2.9.2" level="project" />
-    <orderEntry type="library" name="Maven: io.swagger:swagger-annotations:1.5.20" level="project" />
-    <orderEntry type="library" name="Maven: io.swagger:swagger-models:1.5.20" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-spi:2.9.2" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-core:2.9.2" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-schema:2.9.2" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-swagger-common:2.9.2" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-spring-web:2.9.2" level="project" />
-    <orderEntry type="library" name="Maven: com.google.guava:guava:20.0" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-core:1.2.0.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-metadata:1.2.0.RELEASE" level="project" />
-    <orderEntry type="library" name="Maven: org.mapstruct:mapstruct:1.2.0.Final" level="project" />
-    <orderEntry type="library" name="Maven: io.springfox:springfox-swagger-ui:2.9.2" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.velocity:velocity-engine-core:2.0" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.11" level="project" />
-    <orderEntry type="library" name="Maven: jakarta.validation:jakarta.validation-api:2.0.2" level="project" />
-    <orderEntry type="library" name="Maven: com.qcloud:cos_api:5.6.155" level="project" />
-    <orderEntry type="library" name="Maven: joda-time:joda-time:2.9.9" level="project" />
-    <orderEntry type="library" name="Maven: com.tencentcloudapi:tencentcloud-sdk-java-kms:3.1.213" level="project" />
-    <orderEntry type="library" name="Maven: com.tencentcloudapi:tencentcloud-sdk-java-common:3.1.213" level="project" />
-    <orderEntry type="library" name="Maven: com.squareup.okhttp:logging-interceptor:2.7.5" level="project" />
-    <orderEntry type="library" name="Maven: com.squareup.okhttp:okhttp:2.7.5" level="project" />
-    <orderEntry type="library" name="Maven: com.thoughtworks.xstream:xstream:1.4.20" level="project" />
-    <orderEntry type="library" name="Maven: io.github.x-stream:mxparser:1.2.2" level="project" />
-    <orderEntry type="library" name="Maven: xmlpull:xmlpull:1.1.3.1" level="project" />
-    <orderEntry type="library" name="Maven: org.json:json:20210307" level="project" />
-    <orderEntry type="library" name="Maven: cn.hutool:hutool-all:5.4.3" level="project" />
-    <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-starter:1.4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.2" level="project" />
-    <orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:2.2.2" level="project" />
-    <orderEntry type="library" name="Maven: org.mybatis:mybatis:3.5.9" level="project" />
-    <orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:2.0.7" level="project" />
-    <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-autoconfigure:1.4.2" level="project" />
-    <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper:5.3.0" level="project" />
-    <orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.springframework:spring-test:6.0.9" level="project" />
-    <orderEntry type="library" name="Maven: commons-io:commons-io:2.6" level="project" />
-    <orderEntry type="library" name="Maven: commons-fileupload:commons-fileupload:1.4" level="project" />
-    <orderEntry type="library" name="Maven: com.alibaba:druid:1.2.16" level="project" />
-    <orderEntry type="library" name="Maven: com.alibaba:easyexcel:2.2.11" level="project" />
-    <orderEntry type="library" name="Maven: cglib:cglib:3.1" level="project" />
-    <orderEntry type="library" name="Maven: org.ow2.asm:asm:4.2" level="project" />
-    <orderEntry type="library" name="Maven: org.ehcache:ehcache:3.9.0" level="project" />
-    <orderEntry type="library" name="Maven: org.glassfish.jaxb:jaxb-runtime:2.3.3" level="project" />
-    <orderEntry type="library" name="Maven: org.glassfish.jaxb:txw2:2.3.3" level="project" />
-    <orderEntry type="library" name="Maven: com.sun.istack:istack-commons-runtime:3.0.11" level="project" />
-    <orderEntry type="library" scope="RUNTIME" name="Maven: com.sun.activation:jakarta.activation:1.2.2" level="project" />
-  </component>
-</module>

+ 56 - 0
src/main/java/com/template/api/WelcomeVisitorControllerAPI.java

@@ -0,0 +1,56 @@
+package com.template.api;
+
+import com.template.model.query.WelcomeVisitorQuery;
+import com.template.model.request.WelcomeVisitorRequest;
+import com.template.model.result.CommonResult;
+import com.template.model.result.PageUtils;
+import com.template.model.vo.WelcomeVisitorVO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import java.util.List;
+
+/**
+ * 访客相关接口
+ * @author codingliang
+ * @date 2025-06-16
+ */
+@RequestMapping("api/visitor")
+@Api(tags = {"visitor"}, value = "访客")
+public interface WelcomeVisitorControllerAPI {
+
+    @PostMapping
+    @ApiOperation(value = "新增访客记录")
+    CommonResult addVisitor(@Validated @RequestBody WelcomeVisitorRequest visitorRequest);
+
+    @GetMapping
+    @ApiOperation(value = "获取当前用户访客记录")
+    CommonResult<WelcomeVisitorVO> getByCurUser();
+
+    @DeleteMapping
+    @ApiOperation(value = "删除当前用户的访客记录")
+    CommonResult deleteByCurUser();
+
+    @GetMapping("admin/page")
+    @ApiOperation(value = "访客记录分页")
+    CommonResult<PageUtils<WelcomeVisitorVO>> page(@Validated WelcomeVisitorQuery visitorQuery);
+
+    @PostMapping("admin/add")
+    @ApiOperation(value = "管理员新增访客记录")
+    CommonResult addVisitorByAdmin(@Validated @RequestBody WelcomeVisitorRequest visitorRequest);
+
+    @GetMapping("admin/{id}")
+    @ApiOperation(value = "根据记录id获取访客记录")
+    CommonResult<WelcomeVisitorVO> getById(@PathVariable Long id);
+
+    @DeleteMapping("admin/batch-del")
+    @ApiOperation(value = "删除当前用户的所有访客记录")
+    CommonResult deleteByIds(@RequestBody List<Long> ids);
+}

+ 1 - 0
src/main/java/com/template/common/result/ResponseStatusEnum.java

@@ -39,6 +39,7 @@ public enum ResponseStatusEnum implements Code{
     SYSTEM_LOGIN_ERROR(401,false,"无效token"),
     PARAM_ERROR(560, false, "参数不能为空!"),
     GZH_ERROR(561, false, "设置失败,请先关联公众号!"),
+    DATA_NOT_FOUND(998, false, "数据不存在"),
     EXISTS(999,false,"已存在");
 
     // 响应业务状态

+ 37 - 0
src/main/java/com/template/common/utils/BeanUtil.java

@@ -0,0 +1,37 @@
+package com.template.common.utils;
+
+import org.springframework.beans.BeanUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.function.Supplier;
+
+public class BeanUtil {
+
+	/**
+	 * 普通对象复制
+	 *
+	 * @param source
+	 * @param target
+	 */
+	public static void copyProperties(Object source, Object target) {
+		BeanUtils.copyProperties(source, target);
+	}
+
+	/**
+	 * 集合数据的拷贝
+	 *
+	 * @param sources: 数据源类
+	 * @param target:  目标类::new(eg: UserVO::new)
+	 * @return
+	 */
+	public static <S, T> List<T> copyListProperties(List<S> sources, Supplier<T> target) {
+		List<T> list = new ArrayList<>(sources.size());
+		for (S source : sources) {
+			T t = target.get();
+			copyProperties(source, t);
+			list.add(t);
+		}
+		return list;
+	}
+}

+ 33 - 0
src/main/java/com/template/common/utils/IPageUtil.java

@@ -0,0 +1,33 @@
+package com.template.common.utils;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.template.model.query.PageQuery;
+
+/**
+ * Ipage工具
+ * @author codingliang
+ * @date 2025-06-17
+ */
+public class IPageUtil<T> {
+    /**
+     * 获取分页对象
+     *
+     * @param query 分页参数
+     */
+    public IPage<T> getPage(PageQuery query) {
+        Page<T> page = new Page<>(query.getPage(), query.getLimit());
+
+        // 排序
+        if (StrUtil.isNotBlank(query.getOrder())) {
+            if (query.isAsc()) {
+                return page.setAsc(query.getOrder());
+            } else {
+                return page.setDesc(query.getOrder());
+            }
+        }
+
+        return page;
+    }
+}

+ 68 - 11
src/main/java/com/template/controller/WelcomeVisitorController.java

@@ -1,20 +1,77 @@
 package com.template.controller;
 
-
-import org.springframework.web.bind.annotation.RequestMapping;
-
+import cn.hutool.core.util.StrUtil;
+import com.template.api.WelcomeVisitorControllerAPI;
+import com.template.common.exception.MyCustomException;
+import com.template.common.result.ResponseStatusEnum;
+import com.template.model.query.WelcomeVisitorQuery;
+import com.template.model.request.WelcomeVisitorRequest;
+import com.template.model.result.CommonResult;
+import com.template.model.result.PageUtils;
+import com.template.model.vo.WelcomeVisitorVO;
+import com.template.services.WelcomeVisitorService;
+import lombok.RequiredArgsConstructor;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.Arrays;
+import java.util.List;
+
 /**
- * <p>
- *  前端控制器
- * </p>
- *
- * @author ceshi
- * @since 2025-06-16
+ * 访客相关接口
+ * @author codingliang
+ * @date 2025-06-16
  */
 @RestController
-public class WelcomeVisitorController {
+@RequiredArgsConstructor
+public class WelcomeVisitorController implements WelcomeVisitorControllerAPI {
 
-}
+    private final WelcomeVisitorService welcomeVisitorService;
+
+
+    @Override
+    public CommonResult addVisitor(WelcomeVisitorRequest visitorRequest) {
+        welcomeVisitorService.addVisitor(visitorRequest);
+        return CommonResult.ok();
+    }
+
+    @Override
+    public CommonResult<WelcomeVisitorVO> getByCurUser() {
+        WelcomeVisitorVO vo = welcomeVisitorService.getByCurUser();
+        return CommonResult.ok(vo);
+    }
 
+    @Override
+    public CommonResult<WelcomeVisitorVO> getById(Long id) {
+        WelcomeVisitorVO vo = welcomeVisitorService.getOneById(id);
+        return CommonResult.ok(vo);
+    }
+
+    @Override
+    public CommonResult deleteByCurUser() {
+        welcomeVisitorService.deleteByCurUser();
+        return CommonResult.ok();
+    }
+
+    @Override
+    public CommonResult<PageUtils<WelcomeVisitorVO>> page(WelcomeVisitorQuery visitorQuery) {
+        PageUtils<WelcomeVisitorVO> pages = welcomeVisitorService.page(visitorQuery);
+        return CommonResult.ok(pages);
+    }
+
+    @Override
+    public CommonResult addVisitorByAdmin(WelcomeVisitorRequest visitorRequest) {
+        if (StrUtil.isBlank(visitorRequest.getStudentCard())) {
+            throw new MyCustomException(ResponseStatusEnum.SEND_PARAMS);
+        }
+
+        welcomeVisitorService.addVisitorByAdmin(visitorRequest);
+
+        return CommonResult.ok();
+    }
+
+    @Override
+    public CommonResult deleteByIds(List<Long> ids) {
+        welcomeVisitorService.removeByIds(ids);
+        return null;
+    }
+}

+ 0 - 2
src/main/java/com/template/model/pojo/WelcomeVisitor.java

@@ -62,6 +62,4 @@ public class WelcomeVisitor implements Serializable {
 
     @ApiModelProperty(value = "备注")
     private String remark;
-
-
 }

+ 32 - 0
src/main/java/com/template/model/query/PageQuery.java

@@ -0,0 +1,32 @@
+package com.template.model.query;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.hibernate.validator.constraints.Range;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+
+/**
+ * 分页查询
+ * @author codingliang
+ * @date 2025-06-17
+ */
+@Data
+public class PageQuery {
+    @NotNull(message = "页码不能为空")
+    @Min(value = 1, message = "页码最小值为 1")
+    @ApiModelProperty(value = "当前页码", required = true)
+    Integer page;
+
+    @NotNull(message = "每页条数不能为空")
+    @Range(min = 1, max = 1000, message = "每页条数,取值范围 1-1000")
+    @ApiModelProperty(value = "每页条数", required = true)
+    Integer limit;
+
+    @ApiModelProperty(value = "排序字段")
+    String order;
+
+    @ApiModelProperty(value = "是否升序")
+    boolean asc;
+}

+ 21 - 0
src/main/java/com/template/model/query/WelcomeVisitorQuery.java

@@ -0,0 +1,21 @@
+package com.template.model.query;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 访客查询
+ * @author codingliang
+ * @date 2025-06-17
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class WelcomeVisitorQuery extends PageQuery {
+
+    @ApiModelProperty(value = "车牌号,模糊搜索")
+    private String carNumber;
+
+    @ApiModelProperty(value = "访客姓名,模糊搜索")
+    private String name;
+}

+ 67 - 0
src/main/java/com/template/model/request/WelcomeVisitorRequest.java

@@ -0,0 +1,67 @@
+package com.template.model.request;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Pattern;
+import java.io.Serializable;
+
+/**
+ * VisitorRequest对象
+ */
+@Data
+@ApiModel(value="VisitorRequest")
+public class WelcomeVisitorRequest implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "主键ID")
+    private Integer id;
+
+    @ApiModelProperty(value = "学生身份证号")
+    private String studentCard;
+
+    @ApiModelProperty(value = "访客姓名")
+    @NotBlank(message = "访客姓名不能为空")
+    private String name;
+
+    @ApiModelProperty(value = "访客手机号")
+    @NotBlank(message = "访客手机号不能为空")
+    @Pattern(regexp = "^1[3-9]\\d{9}$", message = "手机号格式不正确")
+    private String phone;
+
+    @ApiModelProperty(value = "证件号")
+    @NotBlank(message = "证件号不能为空")
+    private String cardId;
+
+    @ApiModelProperty(value = "校区名称")
+    @NotBlank(message = "校区名称不能为空")
+    private String school;
+
+    @ApiModelProperty(value = "到访开始时间")
+    @NotBlank(message = "到访开始时间不能为空")
+    @Pattern(regexp = "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01]) (2[0-3]|[01]\\d):[0-5]\\d:[0-5]\\d$", message = "到访开始时间格式应为 yyyy-MM-dd HH:mm:ss")
+    private String startTime;
+
+    @ApiModelProperty(value = "到访结束时间")
+    @NotBlank(message = "到访结束时间不能为空")
+    @Pattern(regexp = "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01]) (2[0-3]|[01]\\d):[0-5]\\d:[0-5]\\d$", message = "到访结束时间格式应为 yyyy-MM-dd HH:mm:ss")
+    private String endTime;
+
+    @ApiModelProperty(value = "车牌号")
+    @NotBlank(message = "车牌号不能为空")
+    private String carNumber;
+
+    @ApiModelProperty(value = "同行人数")
+    @NotNull(message = "同行人数不能为空")
+    @Min(value = 1, message = "同行人数不能少于1")
+    private Integer peerNum;
+
+    @ApiModelProperty(value = "访问事由")
+    @NotBlank(message = "访问事由不能为空")
+    private String visitorReason;
+}

+ 0 - 2
src/main/java/com/template/model/result/PageUtils.java

@@ -2,7 +2,6 @@ package com.template.model.result;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import lombok.Data;
-import lombok.NoArgsConstructor;
 
 import java.io.Serializable;
 import java.util.List;
@@ -60,5 +59,4 @@ public class PageUtils<T> implements Serializable {
 		this.currPage = (int)page.getCurrent();
 		this.totalPage = (int)page.getPages();
 	}
-
 }

+ 50 - 0
src/main/java/com/template/model/vo/WelcomeVisitorVO.java

@@ -0,0 +1,50 @@
+package com.template.model.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+@ApiModel(value="WelcomeVisitorVO对象")
+public class WelcomeVisitorVO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "主键ID")
+    private Integer id;
+
+    @ApiModelProperty(value = "学生身份证号")
+    private String studentCard;
+
+    @ApiModelProperty(value = "访客姓名")
+    private String name;
+
+    @ApiModelProperty(value = "访客手机号")
+    private String phone;
+
+    @ApiModelProperty(value = "证件号")
+    private String cardId;
+
+    @ApiModelProperty(value = "校区名称")
+    private String school;
+
+    @ApiModelProperty(value = "到访开始时间")
+    private String startTime;
+
+    @ApiModelProperty(value = "到访结束时间")
+    private String endTime;
+
+    @ApiModelProperty(value = "车牌号")
+    private String carNumber;
+
+    @ApiModelProperty(value = "同行人数")
+    private Integer peerNum;
+
+    @ApiModelProperty(value = "访问事由")
+    private String visitorReason;
+
+    @ApiModelProperty(value = "备注")
+    private String remark;
+}

+ 41 - 6
src/main/java/com/template/services/WelcomeVisitorService.java

@@ -2,15 +2,50 @@ package com.template.services;
 
 import com.template.model.pojo.WelcomeVisitor;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.template.model.query.WelcomeVisitorQuery;
+import com.template.model.request.WelcomeVisitorRequest;
+import com.template.model.result.PageUtils;
+import com.template.model.vo.WelcomeVisitorVO;
 
 /**
- * <p>
- *  服务类
- * </p>
- *
- * @author ceshi
- * @since 2025-06-16
+ * 访客service
  */
 public interface WelcomeVisitorService extends IService<WelcomeVisitor> {
 
+    /**
+     * 新增访客记录
+     * @param visitorRequest 访客信息
+     */
+    void addVisitor(WelcomeVisitorRequest visitorRequest);
+
+    /**
+     * 获取当前用户访客记录
+     * @return 访客信息
+     */
+    WelcomeVisitorVO getByCurUser();
+
+    /**
+     * 根据记录id获取访客记录
+     * @param id 记录id
+     * @return 访客信息
+     */
+    WelcomeVisitorVO getOneById(Long id);
+
+    /**
+     * 删除当前用户的访客记录
+     */
+    void deleteByCurUser();
+
+    /**
+     * 管理员新增访客记录
+     * @param visitorRequest 访客信息
+     */
+    void addVisitorByAdmin(WelcomeVisitorRequest visitorRequest);
+
+    /**
+     * 访客记录分页
+     * @param visitorQuery 分页条件
+     * @return 分页结果
+     */
+    PageUtils<WelcomeVisitorVO> page(WelcomeVisitorQuery visitorQuery);
 }

+ 112 - 10
src/main/java/com/template/services/impl/WelcomeVisitorServiceImpl.java

@@ -1,20 +1,122 @@
 package com.template.services.impl;
 
-import com.template.model.pojo.WelcomeVisitor;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.template.common.exception.MyCustomException;
+import com.template.common.result.ResponseStatusEnum;
+import com.template.common.utils.BeanUtil;
+import com.template.common.utils.IPageUtil;
 import com.template.mapper.WelcomeVisitorMapper;
+import com.template.model.pojo.WelcomeVisitor;
+import com.template.model.query.WelcomeVisitorQuery;
+import com.template.model.request.WelcomeVisitorRequest;
+import com.template.model.result.PageUtils;
+import com.template.model.vo.WelcomeVisitorVO;
 import com.template.services.WelcomeVisitorService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 
-/**
- * <p>
- *  服务实现类
- * </p>
- *
- * @author ceshi
- * @since 2025-06-16
- */
+import java.util.List;
+
 @Service
 public class WelcomeVisitorServiceImpl extends ServiceImpl<WelcomeVisitorMapper, WelcomeVisitor> implements WelcomeVisitorService {
 
+    @Override
+    public void addVisitor(WelcomeVisitorRequest visitorRequest) {
+        // TODO 获取studyCard
+        String studyCard = "";
+
+        // 查询当前用户是否已有访客记录
+        LambdaQueryWrapper<WelcomeVisitor> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(WelcomeVisitor::getStudentCard, studyCard);
+        if (this.count(queryWrapper) > 0) {
+            throw new MyCustomException(ResponseStatusEnum.EXISTS);
+        }
+
+        // TODO 查询学生学费缴纳情况
+
+        // 新增访客记录
+        WelcomeVisitor visitor = new WelcomeVisitor();
+        BeanUtils.copyProperties(visitorRequest, visitor);
+        visitor.setStudentCard(studyCard);
+
+        save(visitor);
+    }
+
+    @Override
+    public WelcomeVisitorVO getByCurUser() {
+        // TODO 获取studyCard
+        String studyCard = "";
+
+        LambdaQueryWrapper<WelcomeVisitor> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(WelcomeVisitor::getStudentCard, studyCard);
+
+        WelcomeVisitor visitor = this.getOne(queryWrapper);
+        if (ObjectUtil.isNull(visitor)) {
+            throw new MyCustomException(ResponseStatusEnum.DATA_NOT_FOUND);
+        }
+
+        WelcomeVisitorVO vo = new WelcomeVisitorVO();
+        BeanUtils.copyProperties(visitor, vo);
+
+        return vo;
+    }
+
+    @Override
+    public WelcomeVisitorVO getOneById(Long id) {
+        WelcomeVisitor visitor = this.getById(id);
+
+        if (ObjectUtil.isNull(visitor)) {
+            throw new MyCustomException(ResponseStatusEnum.DATA_NOT_FOUND);
+        }
+
+        WelcomeVisitorVO vo = new WelcomeVisitorVO();
+        BeanUtils.copyProperties(visitor, vo);
+
+        return vo;
+    }
+
+    @Override
+    public void deleteByCurUser() {
+        // TODO 获取studyCard
+        String studyCard = "";
+
+        LambdaQueryWrapper<WelcomeVisitor> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(WelcomeVisitor::getStudentCard, studyCard);
+
+        remove(queryWrapper);
+    }
+
+    @Override
+    public void addVisitorByAdmin(WelcomeVisitorRequest visitorRequest) {
+        // 查询当前用户是否已有访客记录
+        LambdaQueryWrapper<WelcomeVisitor> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(WelcomeVisitor::getStudentCard, visitorRequest.getStudentCard());
+        if (this.count(queryWrapper) > 0) {
+            throw new MyCustomException(ResponseStatusEnum.EXISTS);
+        }
+
+        // TODO 查询学生学费缴纳情况
+
+        // 新增访客记录
+        WelcomeVisitor visitor = new WelcomeVisitor();
+        BeanUtils.copyProperties(visitorRequest, visitor);
+
+        save(visitor);
+    }
+
+    @Override
+    public PageUtils<WelcomeVisitorVO> page(WelcomeVisitorQuery visitorQuery) {
+        LambdaQueryWrapper<WelcomeVisitor> wrapper = new LambdaQueryWrapper<>();
+        wrapper.like(StrUtil.isNotBlank(visitorQuery.getCarNumber()), WelcomeVisitor::getCarNumber, visitorQuery.getCarNumber());
+        wrapper.like(StrUtil.isNotBlank(visitorQuery.getName()), WelcomeVisitor::getName, visitorQuery.getName());
+
+        IPage<WelcomeVisitor> page = baseMapper.selectPage(new IPageUtil<WelcomeVisitor>().getPage(visitorQuery), wrapper);
+
+        List<WelcomeVisitorVO> welcomeVisitorVOS = BeanUtil.copyListProperties(page.getRecords(), WelcomeVisitorVO::new);
+        return new PageUtils<>(welcomeVisitorVOS, (int) page.getTotal(), (int) page.getSize(), (int) page.getCurrent());
+    }
 }

BIN
框架代码说明文档/~$生成代码说明.docx