diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..cb688e2
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,191 @@
+
+
+ 4.0.0
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 3.2.5
+
+
+ com.supervision
+ spring-ai-demo
+ 1.0.0
+ spring-ai-demo
+ spring-ai-demo
+
+ 17
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+
+ org.projectlombok
+ lombok
+ true
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+
+ io.springboot.ai
+ spring-ai-ollama-spring-boot-starter
+
+
+
+ cn.hutool
+ hutool-all
+ 5.8.26
+
+
+
+ org.apache.poi
+ poi-ooxml
+ 4.1.2
+
+
+
+ com.baomidou
+ mybatis-plus-spring-boot3-starter
+ 3.5.5
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-jdbc
+
+
+ mysql
+ mysql-connector-java
+ 8.0.26
+
+
+
+ com.alibaba
+ druid-spring-boot-3-starter
+ 1.2.21
+
+
+
+
+ org.neo4j.driver
+ neo4j-java-driver
+ 5.21.0
+
+
+ org.springframework.boot
+ spring-boot-starter-data-neo4j
+ 2.2.5.RELEASE
+
+
+
+ com.github.xiaoymin
+ knife4j-spring-boot-starter
+ 2.0.8
+
+
+
+ org.springdoc
+ springdoc-openapi-starter-webmvc-ui
+ 2.1.0
+
+
+
+ org.springdoc
+ springdoc-openapi-starter-webmvc-api
+ 2.1.0
+
+
+
+ javax.servlet
+ javax.servlet-api
+ 4.0.1
+
+
+
+ jakarta.validation
+ jakarta.validation-api
+ 2.0.2
+
+
+
+ org.hibernate.validator
+ hibernate-validator
+ 6.1.7.Final
+
+
+
+
+ org.glassfish
+ jakarta.el
+ 3.0.3
+
+
+
+ org.apache.commons
+ commons-lang3
+ 3.9
+
+
+
+
+ io.minio
+ minio
+ 8.2.2
+
+
+
+
+
+
+
+
+ io.springboot.ai
+ spring-ai-bom
+ 1.0.3
+ pom
+ import
+
+
+
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+ org.projectlombok
+ lombok
+
+
+
+
+
+
+
+
+ spring-milestones
+ Spring Milestones
+ https://repo.spring.io/milestone
+
+ false
+
+
+
+
+
diff --git a/src/main/java/com/supervision/SpringAiDemoApplication.java b/src/main/java/com/supervision/SpringAiDemoApplication.java
new file mode 100644
index 0000000..f4e0920
--- /dev/null
+++ b/src/main/java/com/supervision/SpringAiDemoApplication.java
@@ -0,0 +1,15 @@
+package com.supervision;
+
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@MapperScan(basePackages = {"com.supervision.**.mapper"})
+@SpringBootApplication(scanBasePackages = {"com.supervision.**"})
+public class SpringAiDemoApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(SpringAiDemoApplication.class, args);
+ }
+
+}
diff --git a/src/main/java/com/supervision/common/constant/Constants.java b/src/main/java/com/supervision/common/constant/Constants.java
new file mode 100644
index 0000000..05a4d07
--- /dev/null
+++ b/src/main/java/com/supervision/common/constant/Constants.java
@@ -0,0 +1,69 @@
+package com.supervision.common.constant;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * 通用常量信息
+ *
+ * @author qimaoyu
+ * @version 1.0.0 2020/10/20 11:07
+ * @since JDK17
+ */
+public class Constants {//常量类
+ /**
+ * UTF-8 字符集
+ */
+ public static final String UTF8 = "UTF-8";
+
+ /**
+ * GBK 字符集
+ */
+ public static final String GBK = "GBK";
+
+ /**
+ * http请求
+ */
+ public static final String HTTP = "http://";
+
+ /**
+ * https请求
+ */
+ public static final String HTTPS = "https://";
+
+ /**
+ * 成功标记
+ */
+ public static final Integer SUCCESS = 200;
+
+ /**
+ * 失败标记
+ */
+ public static final Integer FAIL = 500;
+
+ /**
+ * 短信字符集
+ */
+ public static final String PHONE_ENCODING = "UTF-8";
+
+
+ /**
+ * jwt:
+ * secret: XX$^^&^%%VHGZ!@@$#%@#%$%$^VBJHA7938217649&*^GBHU
+ * issuer: dareway.user
+ * expires: 12
+ * 令牌有效期(小时)
+ */
+ public static final String SECRET = "XX$^^&^%%VHGZ!@@$#%@#%$%$^VBJHA7938217649&*^GBHU";
+ public static final String ISSUER = "dareway.user";
+ public static final int EXPIRES_TIME = 12;
+
+ public static final String TOTAL_COUNT = "total";
+ public static final String RESULT_LIST = "result";
+
+ public static final String COMMA = ",";
+
+ public static final String CONTENT_TYPE_OCTET_STREAM = "application/octet-stream";
+
+}
diff --git a/src/main/java/com/supervision/common/domain/R.java b/src/main/java/com/supervision/common/domain/R.java
new file mode 100644
index 0000000..832b4de
--- /dev/null
+++ b/src/main/java/com/supervision/common/domain/R.java
@@ -0,0 +1,147 @@
+package com.supervision.common.domain;
+
+
+import com.supervision.common.constant.Constants;
+import com.supervision.common.enums.ResultStatusEnum;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.*;
+
+/**
+ * 响应信息主体
+ *
+ * @author qimaoyu
+ */
+@Data
+public class R implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ public static final String TOTAL_COUNT = "total";
+ public static final String RESULT_LIST = "result";
+
+ /** 成功 */
+ public static final int SUCCESS = Constants.SUCCESS;
+
+ /** 失败 */
+ public static final int FAIL = Constants.FAIL;
+
+ private int code;
+
+ private String msg;
+
+ private T data;
+
+ public static R ok() {
+ return restResult(null, SUCCESS, null);
+ }
+
+ public static R okMsg(String msg) {
+ return restResult(null, SUCCESS, msg);
+ }
+
+ public static R ok(T data) {
+ return restResult(data, SUCCESS, null);
+ }
+
+ public static R ok(T data, String msg) {
+ return restResult(data, SUCCESS, msg);
+ }
+
+ public static R fail() {
+ return restResult(null, FAIL, null);
+ }
+
+ public static R fail(String msg) {
+ return restResult(null, FAIL, msg);
+ }
+
+ public static R fail(T data) {
+ return restResult(data, FAIL, null);
+ }
+
+ public static R fail(T data, String msg) {
+ return restResult(data, FAIL, msg);
+ }
+
+ public static R fail(int code, String msg) {
+ return restResult(null, code, msg);
+ }
+
+ public static R fail(ResultStatusEnum resultStatusEnum) {
+ return restResult(resultStatusEnum);
+ }
+
+ public static R fail(ResultStatusEnum resultStatusEnum, T data) {return restResult(resultStatusEnum,data);}
+
+ private static R restResult(ResultStatusEnum resultStatusEnum, T data) {
+ R apiResult = new R<>();
+ apiResult.setCode(resultStatusEnum.getCode());
+ apiResult.setData(data);
+ apiResult.setMsg(resultStatusEnum.getMessage());
+ return apiResult;
+ }
+
+ private static R restResult(ResultStatusEnum resultStatusEnum) {
+ R apiResult = new R<>();
+ apiResult.setCode(resultStatusEnum.getCode());
+ apiResult.setData(null);
+ apiResult.setMsg(resultStatusEnum.getMessage());
+ return apiResult;
+ }
+
+ private static R restResult(T data, int code, String msg) {
+ R apiResult = new R<>();
+ apiResult.setCode(code);
+ apiResult.setData(data);
+ apiResult.setMsg(msg);
+ return apiResult;
+ }
+
+
+
+ public static Map buildDataMap(List list) {
+ Map dataMap = new HashMap<>();
+ if (list == null) {
+ dataMap.put(TOTAL_COUNT, 0);
+ dataMap.put(RESULT_LIST, new ArrayList<>());
+ } else {
+ dataMap.put(TOTAL_COUNT, list.size());
+ dataMap.put(RESULT_LIST, list);
+ }
+ return dataMap;
+ }
+
+ public static Map buildDataMap(List list, Long total) {
+ Map dataMap = new HashMap<>();
+ dataMap.put(TOTAL_COUNT, total);
+ dataMap.put(RESULT_LIST, list);
+ return dataMap;
+ }
+
+ public static Map buildDataMap(Set list) {
+ Map dataMap = new HashMap<>();
+ if (list == null) {
+ dataMap.put(TOTAL_COUNT, 0);
+ dataMap.put(RESULT_LIST, new ArrayList<>());
+ } else {
+ dataMap.put(TOTAL_COUNT, list.size());
+ dataMap.put(RESULT_LIST, list);
+ }
+ return dataMap;
+ }
+
+ public static Map buildDataMap(Object object) {
+ if (object == null) {
+ return null;
+ }
+ List