From 4bd3c7ab40707ff5ec2e7ff2466030135e46538a Mon Sep 17 00:00:00 2001 From: OpenCode Date: Thu, 16 Jul 2026 17:29:54 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A4=A7A=E8=AE=B0=E5=BD=95=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=E5=90=8E=E7=AB=AF=20-=20=E8=82=A1=E7=A5=A8=E4=BA=A4?= =?UTF-8?q?=E6=98=93=E8=AE=B0=E5=BD=95CRUD=E4=B8=8E=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E9=9A=94=E7=A6=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增StockRecord实体,含userId字段实现用户数据隔离 - Controller查询自动按userId过滤,归档/恢复增加用户校验 - Service新增时自动注入当前用户ID - 支持归档/恢复操作 --- .../admin/AdminStockRecordController.java | 42 ++++++++++++++++++ .../stock/entity/StockRecordEntity.java | 40 +++++++++++++++++ .../stock/mapper/StockRecordMapper.java | 7 +++ .../stock/service/StockRecordService.java | 9 ++++ .../service/impl/StockRecordServiceImpl.java | 44 +++++++++++++++++++ 5 files changed, 142 insertions(+) create mode 100644 src/main/java/com/cool/modules/stock/controller/admin/AdminStockRecordController.java create mode 100644 src/main/java/com/cool/modules/stock/entity/StockRecordEntity.java create mode 100644 src/main/java/com/cool/modules/stock/mapper/StockRecordMapper.java create mode 100644 src/main/java/com/cool/modules/stock/service/StockRecordService.java create mode 100644 src/main/java/com/cool/modules/stock/service/impl/StockRecordServiceImpl.java diff --git a/src/main/java/com/cool/modules/stock/controller/admin/AdminStockRecordController.java b/src/main/java/com/cool/modules/stock/controller/admin/AdminStockRecordController.java new file mode 100644 index 0000000..fddff3b --- /dev/null +++ b/src/main/java/com/cool/modules/stock/controller/admin/AdminStockRecordController.java @@ -0,0 +1,42 @@ +package com.cool.modules.stock.controller.admin; + +import cn.hutool.json.JSONObject; +import com.cool.core.annotation.CoolRestController; +import com.cool.core.base.BaseController; +import com.cool.core.request.R; +import com.cool.core.util.CoolSecurityUtil; +import com.cool.modules.stock.entity.StockRecordEntity; +import com.cool.modules.stock.service.StockRecordService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.servlet.http.HttpServletRequest; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +import static com.cool.modules.stock.entity.table.StockRecordEntityTableDef.STOCK_RECORD_ENTITY; + +@Tag(name = "股票交易记录", description = "股票交易记录") +@CoolRestController(api = {"add", "delete", "update", "page", "list", "info"}) +public class AdminStockRecordController extends BaseController { + @Override + protected void init(HttpServletRequest request, JSONObject requestParams) { + setPageOption(createOp().fieldEq(STOCK_RECORD_ENTITY.USER_ID, STOCK_RECORD_ENTITY.ARCHIVED, STOCK_RECORD_ENTITY.STOCK_NAME)); + setListOption(createOp().fieldEq(STOCK_RECORD_ENTITY.USER_ID, STOCK_RECORD_ENTITY.ARCHIVED, STOCK_RECORD_ENTITY.STOCK_NAME)); + } + + @Operation(summary = "归档") + @PostMapping("/archive") + public R archive(@RequestBody JSONObject params) { + Long id = params.getLong("id"); + service.archive(id, CoolSecurityUtil.getCurrentUserId()); + return R.ok(); + } + + @Operation(summary = "恢复") + @PostMapping("/restore") + public R restore(@RequestBody JSONObject params) { + Long id = params.getLong("id"); + service.restore(id, CoolSecurityUtil.getCurrentUserId()); + return R.ok(); + } +} diff --git a/src/main/java/com/cool/modules/stock/entity/StockRecordEntity.java b/src/main/java/com/cool/modules/stock/entity/StockRecordEntity.java new file mode 100644 index 0000000..05c6731 --- /dev/null +++ b/src/main/java/com/cool/modules/stock/entity/StockRecordEntity.java @@ -0,0 +1,40 @@ +package com.cool.modules.stock.entity; + +import com.cool.core.annotation.ColumnDefine; +import com.cool.core.base.BaseEntity; +import com.mybatisflex.annotation.Column; +import com.mybatisflex.annotation.Table; +import lombok.Getter; +import lombok.Setter; + +import java.math.BigDecimal; + +@Getter +@Setter +@Table(value = "stock_record", comment = "股票交易记录") +public class StockRecordEntity extends BaseEntity { + + @ColumnDefine(comment = "用户ID", notNull = true) + private Long userId; + + @ColumnDefine(comment = "股票名称", notNull = true) + private String stockName; + + @ColumnDefine(comment = "买入价", type = "decimal", length = 12, decimalLength = 2) + private BigDecimal buyPrice; + + @ColumnDefine(comment = "买入数量", defaultValue = "100") + private Integer buyQuantity; + + @ColumnDefine(comment = "卖出价", type = "decimal", length = 12, decimalLength = 2) + private BigDecimal sellPrice; + + @ColumnDefine(comment = "卖出数量", defaultValue = "100") + private Integer sellQuantity; + + @ColumnDefine(comment = "是否已归档", defaultValue = "0") + private Boolean archived; + + @ColumnDefine(comment = "归档时间") + private java.util.Date archivedTime; +} diff --git a/src/main/java/com/cool/modules/stock/mapper/StockRecordMapper.java b/src/main/java/com/cool/modules/stock/mapper/StockRecordMapper.java new file mode 100644 index 0000000..217c7c4 --- /dev/null +++ b/src/main/java/com/cool/modules/stock/mapper/StockRecordMapper.java @@ -0,0 +1,7 @@ +package com.cool.modules.stock.mapper; + +import com.mybatisflex.core.BaseMapper; +import com.cool.modules.stock.entity.StockRecordEntity; + +public interface StockRecordMapper extends BaseMapper { +} diff --git a/src/main/java/com/cool/modules/stock/service/StockRecordService.java b/src/main/java/com/cool/modules/stock/service/StockRecordService.java new file mode 100644 index 0000000..904946d --- /dev/null +++ b/src/main/java/com/cool/modules/stock/service/StockRecordService.java @@ -0,0 +1,9 @@ +package com.cool.modules.stock.service; + +import com.cool.core.base.BaseService; +import com.cool.modules.stock.entity.StockRecordEntity; + +public interface StockRecordService extends BaseService { + void archive(Long id, Long userId); + void restore(Long id, Long userId); +} diff --git a/src/main/java/com/cool/modules/stock/service/impl/StockRecordServiceImpl.java b/src/main/java/com/cool/modules/stock/service/impl/StockRecordServiceImpl.java new file mode 100644 index 0000000..a6dd400 --- /dev/null +++ b/src/main/java/com/cool/modules/stock/service/impl/StockRecordServiceImpl.java @@ -0,0 +1,44 @@ +package com.cool.modules.stock.service.impl; + +import cn.hutool.json.JSONObject; +import com.cool.core.base.BaseServiceImpl; +import com.cool.core.base.ModifyEnum; +import com.cool.core.util.CoolSecurityUtil; +import com.cool.modules.stock.entity.StockRecordEntity; +import com.cool.modules.stock.mapper.StockRecordMapper; +import com.cool.modules.stock.service.StockRecordService; +import org.springframework.stereotype.Service; + +import java.util.Date; + +@Service +public class StockRecordServiceImpl extends BaseServiceImpl + implements StockRecordService { + + @Override + public void modifyBefore(JSONObject requestParams, StockRecordEntity entity, ModifyEnum type) { + if (type == ModifyEnum.ADD) { + entity.setUserId(CoolSecurityUtil.getCurrentUserId()); + } + } + + @Override + public void archive(Long id, Long userId) { + StockRecordEntity entity = getById(id); + if (entity != null && entity.getUserId().equals(userId)) { + entity.setArchived(true); + entity.setArchivedTime(new Date()); + updateById(entity); + } + } + + @Override + public void restore(Long id, Long userId) { + StockRecordEntity entity = getById(id); + if (entity != null && entity.getUserId().equals(userId)) { + entity.setArchived(false); + entity.setArchivedTime(null); + updateById(entity); + } + } +}