# 市场栏位管理 — 技术方案 > 依据:同目录 `市场栏位管理功能需求.md`。市场栏位 **CRUD** + **逻辑删除** + **编号自动生成(2 位)**;列表栏位编号 **模糊**筛选;**无**全局配置表(与隔离圈位区分)。 --- ## 1. 技术架构 | 项 | 说明 | | --- | --- | | **后端** | RuoYi **v3.9.2**(**springboot2** 分支):JDK 8、Spring Boot 2.x、Spring MVC、MyBatis、Druid | | **数据库** | MySQL **5.7.39**,InnoDB,`utf8mb4` | | **前端** | 若依 Vue2;字段 **小驼峰**(本方案不展开页面) | **分层**:`Controller` → `Service`(`MarketStallValidation`、**编号生成**)→ `Mapper`/XML → `domain`。 **代码包(建议)**:`com.ruoyi.web.modules.trademarket` **业务摘要** | 场景 | 行为 | | --- | --- | | 新增 | 校验通过后 `StallCodeGenerator` 分配 `stall_code`(`01`~`99`);`del_flag=0` | | 修改 | **不可改** `stall_code`;仅更新 `remark` | | 列表/详情 | 仅 `del_flag=0`;排序 `stall_code ASC, id ASC` | | 列表筛选 | `stall_code` **模糊** `LIKE %keyword%` | | 删除 | `del_flag=2`;下游引用时 `ServiceException` | > **与隔离圈位**:`biz_market_stall` 与 `biz_isolation_pen` **独立表、独立编号序列**;`01`~`99` 在两模块内各自维护,互不影响。 --- ## 2. 数据库设计 ### 2.1 表 `biz_market_stall`(市场栏位) | 字段 | 类型 | 非空 | 默认值 | 说明 | | --- | --- | --- | --- | --- | | `id` | `bigint(20)` | Y | 自增 | 主键 | | `stall_code` | `char(2)` | Y | — | 栏位编号 `01`~`99`,**本表内全局唯一** | | `remark` | `varchar(50)` | N | NULL | 栏位备注(≤50 字) | | `del_flag` | `char(1)` | Y | `'0'` | `0` 存在 `2` 删除 | | `create_by` / `create_time` / `update_by` / `update_time` | 若依惯例 | — | — | 审计 | **索引**:`PRIMARY KEY (id)`;`UNIQUE KEY uk_stall_code (stall_code)`;`KEY idx_del_flag (del_flag)`。 ### 2.2 DDL(MySQL 5.7) ```sql CREATE TABLE `biz_market_stall` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', `stall_code` char(2) NOT NULL COMMENT '栏位编号01-99', `remark` varchar(50) DEFAULT NULL COMMENT '栏位备注', `del_flag` char(1) NOT NULL DEFAULT '0' COMMENT '0存在 2删除', `create_by` varchar(64) DEFAULT '' COMMENT '创建者', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_by` varchar(64) DEFAULT '' COMMENT '更新者', `update_time` datetime DEFAULT NULL COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_stall_code` (`stall_code`), KEY `idx_del_flag` (`del_flag`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='市场栏位'; ``` ### 2.3 枚举 **删除标记 `del_flag`** | 值 | 含义 | | --- | --- | | 0 | 正常 | | 2 | 已逻辑删除 | ### 2.4 编号生成(`StallCodeGenerator`) 在 `biz_market_stall` 且 `del_flag=0` 范围内取 `MAX(stall_code)` + 1,格式 `%02d`;上限 `99`;与插入**同一事务**,避免并发重复。 --- ## 3. 接口设计 **统一响应**:`AjaxResult` / `TableDataInfo`(`code`、`msg`、`data` / `rows`、`total`)。 **权限标识**:`tradeMarket:marketStall:list|query|add|edit|remove` **Base Path**:`/tradeMarket/marketStall` | # | 说明 | Method | URI | 权限 | | --- | --- | --- | --- | --- | | 3.1 | 分页列表 | GET | `/tradeMarket/marketStall/list` | `list` | | 3.2 | 详情 | GET | `/tradeMarket/marketStall/{id}` | `query` | | 3.3 | 新增 | POST | `/tradeMarket/marketStall` | `add` | | 3.4 | 修改 | PUT | `/tradeMarket/marketStall` | `edit` | | 3.5 | 删除 | DELETE | `/tradeMarket/marketStall/{ids}` | `remove` | #### 3.1.1 列表 Query | 参数 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `pageNum` / `pageSize` | int | N | 默认 `1` / `20` | | `stallCode` | string | N | 栏位编号**模糊**:`stall_code LIKE %value%` | **排序**:`stall_code ASC, id ASC`。 #### 3.2.1 详情 `data`(驼峰) `id`、`stallCode`、`remark`、审计字段。 #### 3.3.1 新增 / 修改 Body(驼峰) | 字段 | 新增 | 修改 | 说明 | | --- | --- | --- | --- | | `id` | — | Y | 主键 | | `stallCode` | — | — | **禁止传入**;仅响应带回 | | `remark` | N | N | ≤50 字,trim;空串存 `NULL` | #### 3.4 服务端校验(`MarketStallValidation`) | 项 | 规则 | | --- | --- | | 备注 | 有内容时 ≤50 字 | | 修改 | 禁止改 `stall_code`;记录存在且 `del_flag=0` | | 删除 | 未删;`MarketStallReferenceChecker.hasReference(id)` 为 false(本期可占位 `false`) | #### 3.5 删除 - 单条:`DELETE /tradeMarket/marketStall/{ids}`,传一个 id。 - `UPDATE … SET del_flag='2' WHERE id=? AND del_flag='0'`。 #### 3.6 Mapper 约定 - 条件均带 `del_flag='0'`。 - 模糊:`AND stall_code LIKE CONCAT('%', #{stallCode}, '%')`。 --- ## 4. 菜单与权限(示例) | 类型 | 名称 | 权限标识 | | --- | --- | --- | | 菜单 | 市场栏位管理 | `tradeMarket:marketStall:list` | | 按钮 | 查询 | `tradeMarket:marketStall:query` | | 按钮 | 新增 | `tradeMarket:marketStall:add` | | 按钮 | 修改 | `tradeMarket:marketStall:edit` | | 按钮 | 删除 | `tradeMarket:marketStall:remove` | 组件路径:`tradeMarket/marketStall/index`(「交易市场平台」目录下)。 --- ## 5. 与隔离圈位模块对照 | 项 | 隔离圈位 `biz_isolation_pen` | 市场栏位 `biz_market_stall` | | --- | --- | --- | | 编号字段 | `pen_code` | `stall_code` | | 扩展表 | `biz_isolation_setting` | **无** | | 配置接口 | `/isolationPen/setting` | **无** | | Base Path | `/tradeMarket/isolationPen` | `/tradeMarket/marketStall` | | 权限 | 含 `config` | 仅 list/query/add/edit/remove | --- ## 6. 交付清单 - [ ] `sql/biz_market_stall.sql`、菜单权限 SQL - [ ] `BizMarketStall`、Mapper/XML、Service、Controller - [ ] `StallCodeGenerator`、`MarketStallValidation` - [ ] 单元测试(编号、备注长度、模糊 SQL) - [ ] MockMvc(list 模糊、CRUD) --- ## 7. 修订记录 | 版本 | 说明 | | --- | --- | | 1.0 | 初稿:`biz_market_stall`;CRUD+逻辑删除;2 位 `stall_code`;`/tradeMarket/marketStall`;与隔离圈位分表分序列 |