diff --git a/.gitignore b/.gitignore
index 9acb04ae..b9d3f4d2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,4 +4,5 @@
*/target/*
*/*.iml
/.gradle/
-/application.pid
\ No newline at end of file
+/application.pid
+.vscode/
\ No newline at end of file
diff --git a/eladmin-fin/pom.xml b/eladmin-fin/pom.xml
new file mode 100644
index 00000000..4daaab48
--- /dev/null
+++ b/eladmin-fin/pom.xml
@@ -0,0 +1,29 @@
+
+
+
+ eladmin
+ me.zhengjie
+ 2.6
+
+ 4.0.0
+
+ eladmin-fin
+ 理财模块
+
+
+ 8
+ 8
+ UTF-8
+
+
+
+
+ me.zhengjie
+ eladmin-tools
+ 2.6
+
+
+
+
\ No newline at end of file
diff --git a/eladmin-fin/src/main/java/me/zhengjie/fin/stock/domain/Stock.java b/eladmin-fin/src/main/java/me/zhengjie/fin/stock/domain/Stock.java
new file mode 100644
index 00000000..b088492d
--- /dev/null
+++ b/eladmin-fin/src/main/java/me/zhengjie/fin/stock/domain/Stock.java
@@ -0,0 +1,91 @@
+/*
+* Copyright 2019-2020 Zheng Jie
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package me.zhengjie.fin.stock.domain;
+
+import lombok.Data;
+import cn.hutool.core.bean.BeanUtil;
+import io.swagger.annotations.ApiModelProperty;
+import cn.hutool.core.bean.copier.CopyOptions;
+import javax.persistence.*;
+import javax.validation.constraints.*;
+import java.sql.Timestamp;
+import java.math.BigDecimal;
+import java.io.Serializable;
+
+/**
+ * @website https://eladmin.vip
+ * @description /
+ * @author zhangjc
+ * @date 2023-02-07
+ **/
+@Entity
+@Data
+@Table(name = "stock")
+public class Stock implements Serializable {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ @Column(name = "`id`")
+ @ApiModelProperty(value = "id")
+ private Integer id;
+
+ @Column(name = "`stock_code`", unique = true, nullable = false)
+ @NotBlank
+ @ApiModelProperty(value = "stockCode")
+ private String stockCode;
+
+ @Column(name = "`stock_name`", unique = true, nullable = false)
+ @NotBlank
+ @ApiModelProperty(value = "stockName")
+ private String stockName;
+
+ @Column(name = "`hold_amount`")
+ @ApiModelProperty(value = "holdAmount")
+ private Float holdAmount;
+
+ @Column(name = "`hold_share`", nullable = false)
+ @NotNull
+ @ApiModelProperty(value = "holdShare")
+ private Float holdShare;
+
+ @Column(name = "`current_price`")
+ @ApiModelProperty(value = "currentPrice")
+ private Float currentPrice;
+
+ @Column(name = "`price_time`")
+ @ApiModelProperty(value = "priceTime")
+ private Timestamp priceTime;
+
+ @Column(name = "`create_by`")
+ @ApiModelProperty(value = "createBy")
+ private String createBy;
+
+ @Column(name = "`create_time`")
+ @ApiModelProperty(value = "createTime")
+ private Timestamp createTime;
+
+ @Column(name = "`update_by`")
+ @ApiModelProperty(value = "updateBy")
+ private String updateBy;
+
+ @Column(name = "`update_time`")
+ @ApiModelProperty(value = "updateTime")
+ private Timestamp updateTime;
+
+ public void copy(Stock source) {
+ BeanUtil.copyProperties(source, this, CopyOptions.create().setIgnoreNullValue(true));
+ }
+}
\ No newline at end of file
diff --git a/eladmin-fin/src/main/java/me/zhengjie/fin/stock/repository/StockRepository.java b/eladmin-fin/src/main/java/me/zhengjie/fin/stock/repository/StockRepository.java
new file mode 100644
index 00000000..f19676e8
--- /dev/null
+++ b/eladmin-fin/src/main/java/me/zhengjie/fin/stock/repository/StockRepository.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2019-2020 Zheng Jie
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package me.zhengjie.fin.stock.repository;
+
+import me.zhengjie.fin.stock.domain.Stock;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+
+/**
+ * @author zhangjc
+ * @date 2023-02-15
+ */
+public interface StockRepository extends JpaRepository, JpaSpecificationExecutor {
+
+ /**
+ * 根据ID查询
+ *
+ * @param id /
+ * @return /
+ */
+ Stock findById(String id);
+}
diff --git a/eladmin-fin/src/main/java/me/zhengjie/fin/stock/rest/StockController.java b/eladmin-fin/src/main/java/me/zhengjie/fin/stock/rest/StockController.java
new file mode 100644
index 00000000..af96a8f1
--- /dev/null
+++ b/eladmin-fin/src/main/java/me/zhengjie/fin/stock/rest/StockController.java
@@ -0,0 +1,95 @@
+/*
+ * Copyright 2019-2020 Zheng Jie
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package me.zhengjie.fin.stock.rest;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import me.zhengjie.annotation.Log;
+import me.zhengjie.fin.stock.domain.Stock;
+import me.zhengjie.fin.stock.service.StockService;
+import me.zhengjie.fin.stock.service.dto.StockQueryCriteria;
+import org.springframework.data.domain.Pageable;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.Set;
+
+/**
+ * @author zhangjc
+ * @date 2023-02-14
+ */
+@RestController
+@Api(tags = "理财:股票")
+@RequiredArgsConstructor
+@RequestMapping("/api/stock")
+public class StockController {
+
+ private final StockService stockService;
+
+ @ApiOperation("导出股票数据")
+ @GetMapping(value = "/download")
+ @PreAuthorize("@el.check('stock:list')")
+ public void exportStock(HttpServletResponse response, StockQueryCriteria criteria) throws IOException {
+ stockService.download(stockService.queryAll(criteria), response);
+ }
+
+ @ApiOperation(value = "查询服务器")
+ @GetMapping
+ @PreAuthorize("@el.check('Stock:list')")
+ public ResponseEntity