diff --git a/build.gradle b/build.gradle
index 8db92a1..efcaa20 100644
--- a/build.gradle
+++ b/build.gradle
@@ -26,6 +26,12 @@ repositories {
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:3.0.4'
+ implementation group: 'org.xerial', name: 'sqlite-jdbc', version: '3.48.0.0'
+ implementation group: 'com.baomidou', name: 'mybatis-plus-boot-starter', version: '3.5.10.1'
+ implementation group: 'com.baomidou', name: 'mybatis-plus-jsqlparser', version: '3.5.10.1'
+ implementation group: 'com.github.xiaoymin', name: 'knife4j-openapi3-jakarta-spring-boot-starter', version: '4.5.0'
+ implementation group: 'cn.hutool', name: 'hutool-all', version: '5.8.35'
+
compileOnly 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
annotationProcessor 'org.projectlombok:lombok'
diff --git a/sql/demo.sql b/sql/demo.sql
new file mode 100644
index 0000000..d24270e
--- /dev/null
+++ b/sql/demo.sql
@@ -0,0 +1,50 @@
+-- 表名: collect_info
+-- 描述: 收集信息
+
+CREATE TABLE collect_info
+(
+ id INTEGER PRIMARY KEY AUTOINCREMENT, -- 自增主键 id
+ name TEXT, -- 生产线id
+ lon REAL, -- 经度
+ lat REAL, -- 纬度
+ create_time TEXT -- 创建时间,格式 'YYYY-MM-DD HH:MM:SS'
+);
+
+-- 插入 30 条测试数据
+-- 数据规则说明:
+-- 1. 生产线名称依次为 '生产线1' ~ '生产线30'
+-- 2. 经度从 116.397128 起,每条记录递增 0.1
+-- 3. 纬度从 39.916527 起,每条记录递增 0.1
+-- 4. 创建时间从 '2023-01-01 08:00:00' 起,每条记录递增 5 分钟
+
+INSERT INTO collect_info (name, lon, lat, create_time)
+VALUES ('生产线1', 116.397128, 39.916527, '2023-01-01 08:00:00'),
+ ('生产线2', 116.497128, 40.016527, '2023-01-01 08:05:00'),
+ ('生产线3', 116.597128, 40.116527, '2023-01-01 08:10:00'),
+ ('生产线4', 116.697128, 40.216527, '2023-01-01 08:15:00'),
+ ('生产线5', 116.797128, 40.316527, '2023-01-01 08:20:00'),
+ ('生产线6', 116.897128, 40.416527, '2023-01-01 08:25:00'),
+ ('生产线7', 116.997128, 40.516527, '2023-01-01 08:30:00'),
+ ('生产线8', 117.097128, 40.616527, '2023-01-01 08:35:00'),
+ ('生产线9', 117.197128, 40.716527, '2023-01-01 08:40:00'),
+ ('生产线10', 117.297128, 40.816527, '2023-01-01 08:45:00'),
+ ('生产线11', 117.397128, 40.916527, '2023-01-01 08:50:00'),
+ ('生产线12', 117.497128, 41.016527, '2023-01-01 08:55:00'),
+ ('生产线13', 117.597128, 41.116527, '2023-01-01 09:00:00'),
+ ('生产线14', 117.697128, 41.216527, '2023-01-01 09:05:00'),
+ ('生产线15', 117.797128, 41.316527, '2023-01-01 09:10:00'),
+ ('生产线16', 117.897128, 41.416527, '2023-01-01 09:15:00'),
+ ('生产线17', 117.997128, 41.516527, '2023-01-01 09:20:00'),
+ ('生产线18', 118.097128, 41.616527, '2023-01-01 09:25:00'),
+ ('生产线19', 118.197128, 41.716527, '2023-01-01 09:30:00'),
+ ('生产线20', 118.297128, 41.816527, '2023-01-01 09:35:00'),
+ ('生产线21', 118.397128, 41.916527, '2023-01-01 09:40:00'),
+ ('生产线22', 118.497128, 42.016527, '2023-01-01 09:45:00'),
+ ('生产线23', 118.597128, 42.116527, '2023-01-01 09:50:00'),
+ ('生产线24', 118.697128, 42.216527, '2023-01-01 09:55:00'),
+ ('生产线25', 118.797128, 42.316527, '2023-01-01 10:00:00'),
+ ('生产线26', 118.897128, 42.416527, '2023-01-01 10:05:00'),
+ ('生产线27', 118.997128, 42.516527, '2023-01-01 10:10:00'),
+ ('生产线28', 119.097128, 42.616527, '2023-01-01 10:15:00'),
+ ('生产线29', 119.197128, 42.716527, '2023-01-01 10:20:00'),
+ ('生产线30', 119.297128, 42.816527, '2023-01-01 10:25:00');
diff --git a/src/main/java/com/qyft/gd/common/config/MybatisPlusConfig.java b/src/main/java/com/qyft/gd/common/config/MybatisPlusConfig.java
new file mode 100644
index 0000000..6eea83f
--- /dev/null
+++ b/src/main/java/com/qyft/gd/common/config/MybatisPlusConfig.java
@@ -0,0 +1,50 @@
+package com.qyft.gd.common.config;
+
+import com.baomidou.mybatisplus.annotation.DbType;
+import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
+
+/**
+ *
+ */
+@EnableTransactionManagement
+@Configuration
+public class MybatisPlusConfig {
+
+ @Bean
+ public MybatisPlusInterceptor mybatisPlusInterceptor() {
+ MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
+ // 乐观锁插件
+ interceptor.addInnerInterceptor(optimisticLockerInnerInterceptor());
+ // 分页插件
+ interceptor.addInnerInterceptor(paginationInnerInterceptor());
+ // 阻断插件
+// interceptor.addInnerInterceptor(blockAttackInnerInterceptor());
+ return interceptor;
+ }
+
+ /**
+ * 分页插件,自动识别数据库类型
+ * https://baomidou.com/guide/interceptor-pagination.html
+ */
+ public PaginationInnerInterceptor paginationInnerInterceptor() {
+ PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor();
+ // 设置数据库类型为mysql
+ paginationInnerInterceptor.setDbType(DbType.POSTGRE_SQL);
+ // 设置最大单页限制数量,默认 500 条,-1 不受限制
+ paginationInnerInterceptor.setMaxLimit(-1L);
+ return paginationInnerInterceptor;
+ }
+
+ /**
+ * 乐观锁插件
+ * https://baomidou.com/guide/interceptor-optimistic-locker.html
+ */
+ public OptimisticLockerInnerInterceptor optimisticLockerInnerInterceptor() {
+ return new OptimisticLockerInnerInterceptor();
+ }
+}
diff --git a/src/main/java/com/qyft/gd/common/config/SwaggerConfig.java b/src/main/java/com/qyft/gd/common/config/SwaggerConfig.java
new file mode 100644
index 0000000..4ee7844
--- /dev/null
+++ b/src/main/java/com/qyft/gd/common/config/SwaggerConfig.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2018 Zhejiang xiaominfo Technology CO.,LTD.
+ * All rights reserved.
+ * Official Web Site: http://www.xiaominfo.com.
+ * Developer Web Site: http://open.xiaominfo.com.
+ */
+
+package com.qyft.gd.common.config;
+
+import cn.hutool.core.util.RandomUtil;
+import io.swagger.v3.oas.models.OpenAPI;
+import io.swagger.v3.oas.models.info.Info;
+import io.swagger.v3.oas.models.info.License;
+import org.springdoc.core.customizers.GlobalOpenApiCustomizer;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/***
+ * 创建Swagger配置
+ * @since:knife4j-springdoc-openapi-demo 1.0
+ * @author xiaoymin@foxmail.com
+ * 2020/03/15 20:40
+ */
+@Configuration
+public class SwaggerConfig {
+ /**
+ * 根据@Tag 上的排序,写入x-order
+ *
+ * @return the global open api customizer
+ */
+ @Bean
+ public GlobalOpenApiCustomizer orderGlobalOpenApiCustomizer() {
+ return openApi -> {
+ if (openApi.getTags()!=null){
+ openApi.getTags().forEach(tag -> {
+ Map map=new HashMap<>();
+ map.put("x-order", RandomUtil.randomInt(0,100));
+ tag.setExtensions(map);
+ });
+ }
+ if(openApi.getPaths()!=null){
+ openApi.addExtension("x-test123","333");
+ openApi.getPaths().addExtension("x-abb",RandomUtil.randomInt(1,100));
+ }
+
+ };
+ }
+
+ @Bean
+ public OpenAPI customOpenAPI() {
+ return new OpenAPI()
+ .info(new Info()
+ .title("XXX用户系统API")
+ .version("1.0")
+
+ .description( "Knife4j集成springdoc-openapi示例")
+ .termsOfService("http://doc.xiaominfo.com")
+ .license(new License().name("Apache 2.0")
+ .url("http://doc.xiaominfo.com")));
+ }
+
+
+}
diff --git a/src/main/java/com/qyft/gd/controller/demo/DemoController.java b/src/main/java/com/qyft/gd/controller/demo/DemoController.java
new file mode 100644
index 0000000..6cc3692
--- /dev/null
+++ b/src/main/java/com/qyft/gd/controller/demo/DemoController.java
@@ -0,0 +1,30 @@
+package com.qyft.gd.controller.demo;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.qyft.gd.model.entity.demo.DemoCollectInfo;
+import com.qyft.gd.service.demo.IDemoCollectInfoService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.extern.slf4j.Slf4j;
+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.RestController;
+
+@Slf4j
+@Tag(name = "数据")
+@RestController
+@RequestMapping("/demo")
+public class DemoController {
+
+ @Autowired
+ IDemoCollectInfoService poiCollectInfoService;
+
+ @Operation(summary = "分页列表")
+ @GetMapping(value = "/list")
+ public IPage queryList() {
+ return poiCollectInfoService.page(new Page(1, 10), null);
+ }
+
+}
diff --git a/src/main/java/com/qyft/gd/mapper/demo/PoiCollectInfoMapper.java b/src/main/java/com/qyft/gd/mapper/demo/PoiCollectInfoMapper.java
new file mode 100644
index 0000000..9e8de97
--- /dev/null
+++ b/src/main/java/com/qyft/gd/mapper/demo/PoiCollectInfoMapper.java
@@ -0,0 +1,11 @@
+package com.qyft.gd.mapper.demo;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.qyft.gd.model.entity.demo.DemoCollectInfo;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface PoiCollectInfoMapper extends BaseMapper {
+
+
+}
diff --git a/src/main/java/com/qyft/gd/model/dto/demo/DemoUploadFileDto.java b/src/main/java/com/qyft/gd/model/dto/demo/DemoUploadFileDto.java
new file mode 100644
index 0000000..77c92a5
--- /dev/null
+++ b/src/main/java/com/qyft/gd/model/dto/demo/DemoUploadFileDto.java
@@ -0,0 +1,14 @@
+package com.qyft.gd.model.dto.demo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import org.springframework.web.multipart.MultipartFile;
+
+@Schema(name = "上传文件")
+@Data
+public class DemoUploadFileDto {
+
+ @Schema(description = "文件名称")
+ private MultipartFile file;
+
+}
diff --git a/src/main/java/com/qyft/gd/model/entity/demo/DemoCollectInfo.java b/src/main/java/com/qyft/gd/model/entity/demo/DemoCollectInfo.java
new file mode 100644
index 0000000..3666310
--- /dev/null
+++ b/src/main/java/com/qyft/gd/model/entity/demo/DemoCollectInfo.java
@@ -0,0 +1,44 @@
+package com.qyft.gd.model.entity.demo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+@Schema(description = "收集信息")
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("collect_info")
+public class DemoCollectInfo implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ @Schema(description = "id", example = "1", requiredMode = Schema.RequiredMode.REQUIRED)
+ @TableId(value = "id", type = IdType.ASSIGN_ID)
+ private Long id;
+
+ @Schema(description = "生产线id")
+ @TableField(value = "name")
+ private String name;
+
+ @Schema(description = "经度")
+ @TableField(value = "lon")
+ private Double lon;
+
+ @Schema(description = "纬度")
+ @TableField(value = "lat")
+ private Double lat;
+
+ @Schema(description = "创建时间")
+ @TableField(value = "create_time")
+ private String createTime;
+}
diff --git a/src/main/java/com/qyft/gd/service/demo/IDemoCollectInfoService.java b/src/main/java/com/qyft/gd/service/demo/IDemoCollectInfoService.java
new file mode 100644
index 0000000..8f08ee8
--- /dev/null
+++ b/src/main/java/com/qyft/gd/service/demo/IDemoCollectInfoService.java
@@ -0,0 +1,10 @@
+package com.qyft.gd.service.demo;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.qyft.gd.model.entity.demo.DemoCollectInfo;
+
+
+public interface IDemoCollectInfoService extends IService {
+
+
+}
diff --git a/src/main/java/com/qyft/gd/service/demo/impl/DemoCollectInfoServiceImpl.java b/src/main/java/com/qyft/gd/service/demo/impl/DemoCollectInfoServiceImpl.java
new file mode 100644
index 0000000..f02093f
--- /dev/null
+++ b/src/main/java/com/qyft/gd/service/demo/impl/DemoCollectInfoServiceImpl.java
@@ -0,0 +1,13 @@
+package com.qyft.gd.service.demo.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qyft.gd.mapper.demo.PoiCollectInfoMapper;
+import com.qyft.gd.model.entity.demo.DemoCollectInfo;
+import com.qyft.gd.service.demo.IDemoCollectInfoService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class DemoCollectInfoServiceImpl extends ServiceImpl implements IDemoCollectInfoService {
+
+
+}
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 9423995..359fb91 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -1 +1,27 @@
-spring.application.name=graphite_digestion_instrument
+server:
+ servlet:
+ context-path: /
+ port: 8080
+
+spring:
+ application:
+ name: graphite_digestion_instrument
+ datasource:
+ url: jdbc:sqlite:D:\\graphite_digestion.db
+ driver-class-name: org.sqlite.JDBC
+# sql:
+# init:
+# mode:
+
+mybatis-plus:
+ configuration:
+ # 开启 SQL 日志输出(可选)
+ log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+ # 如果需要加载 XML 文件(自定义 SQL),可配置 mapper-locations:
+ mapper-locations: classpath*:mapper/*.xml
+
+# 可选:开启 SQL 打印,调试时方便查看
+logging:
+ level:
+ root: INFO
+ org.mybatis: DEBUG
diff --git a/src/main/resources/mapper/demo/DemoCollectInfoMapper.xml b/src/main/resources/mapper/demo/DemoCollectInfoMapper.xml
new file mode 100644
index 0000000..e6aed9e
--- /dev/null
+++ b/src/main/resources/mapper/demo/DemoCollectInfoMapper.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+