Files
openclaw-config/workspace-planner/MEMORY.md
T

137 lines
5.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# MEMORY.md —— 长期记忆
## 🌐 语言要求
- **所有交互一律使用中文**
- 技术术语可保留原文(API、JSON 等),但解释、对话、回复用中文
## 身份
需求分析助手,负责将产品需求转化为前后端可执行的技术规范文档。
## 工作规范
- 输出物:技术方案文档,离线性优先
- 按需求分析技能指导流程执行
- 文档结构:背景 → 需求拆解 → 技术方案 → 接口定义 → 数据结构 → 前后端分工
## 输出格式约定
- 接口定义使用「请求方法 /路径」格式
- 数据表结构标注主键、索引、外键
- 前后端分工明确标注各端职责
## 📁 项目目录
### wit 项目
- **项目根目录:** `/root/projects/wit`
- **前端项目:** `mica-web`
- **后端项目:** `mica-server`
- **项目文档:** `mica-doc`
---
## 🏗️ mica 项目开发规范
### SMDM 物料管理模块 - 开发限制 (2026-08-04)
**🔴 强制性红线** (违反即停止,详细规范见 `memory/2026-08-04.md`)
| # | 红线 | 违规示例 | 正确做法 |
|---|------|---------|----------|
| 1 | **表前缀必须过滤** | `DmpMdItemInfo` | `ItemInfo` |
| 2 | **API 必须放在 apis.smdm 包** | `smd.api.ItemApi` | `apis.smdm.ItemApi` |
| 3 | **查询只能用 Mapper** | 使用 MyBatis-Plus | 原生 MyBatis XML |
| 4 | **改删必须 Feign 远程调用** | 本地直接 UPDATE/DELETE | 调用 SMDM 服务 API |
| 5 | **实体必须继承 BaseDomain** | 独立定义审计字段 | `extends BaseDomain` |
| 6 | **只使用指定 13 个业务字段** | 添加表中其他字段 | 仅用规范内字段 |
| 7 | **代码必须生成到 smd 目录** | `com.witsoft.mica.item.*` | `com.witsoft.mica.smd.*` |
**📋 核心规范摘要**:
- **包路径**: `com.witsoft.mica.smd.*` (本地业务), `com.witsoft.mica.apis.smdm.*` (Feign 接口)
- **表前缀过滤**: `dmp_md_` 全部过滤 (如 `dmp_md_item_info``ItemInfo`)
- **实体字段**: 13 个业务字段 + `BaseDomain` 审计字段
- **查询方式**: 原生 MyBatis XML (分页) + MyBatis-Plus (详情)
- **改删操作**: Feign 远程调用 SMDM 服务
- **注释规范**: `@Author: yangxuan`, `@Date: 精确到日`
- **日志规范**: SLF4J + Lombok `@Slf4j`, Feign 调用添加 debug 日志
- **ecid 处理**: Controller 层调用 `GlobalUtils.getEcid()` 并传递给 Service
- **分页方式**: 使用项目 `PageDomain<T>`, 不使用 PageHelper
- **XML 规范**: 使用 `<sql>` + `<include>` 片段复用方式
**📁 已生成文件** (10 个):
- `apis/smdm/ItemApi.java` - Feign 接口
- `smd/entity/ItemInfo.java` - 实体类
- `smd/mapper/ItemMapper.java` + `ItemMapper.xml` - MyBatis 映射
- `smd/service/ItemService.java` + `impl/ItemServiceImpl.java` - 服务层
- `smd/controller/ItemController.java` - 控制器
- `smd/dto/ItemQueryDTO.java` + `ItemFormDTO.java` - DTO
- `smd/vo/ItemVO.java` - VO
**🐛 已修正问题** (12 个):
1. ResponseModel 静态引用 → `ResponseModel.succeed(data)`
2. 分页 XML / 详情 MP 混合使用
3. 移除编码查询条件
4. Feign 调用添加 debug 日志
5. Controller 层 ecid 处理
6. 恢复分页 XML 查询
7. 使用 PageDomain (非 PageHelper)
8. 删除 queryByCode 方法
9. ResponseModel 泛型参数化
10. Map 类型转换警告
11. XML 使用 `<sql>` + `<include>` 片段
12. ItemApi ResponseModel 泛型
---
### 数据字典模块 - 开发规范 (2026-08-04)
**📋 定位**: 配置项/工具类,不是业务实体
**🔴 强制性红线**:
| # | 红线 | 正确做法 |
|---|------|---------|
| 1 | **不需要 Controller** | 纯内部工具服务 |
| 2 | **不需要 Feign API** | 不暴露外部接口 |
| 3 | **不需要缓存实现** | 后续可调用 Feign 接口缓存 |
| 4 | **不需要继承 BaseDomain** | 配置项不是业务实体 |
**📋 核心规范**:
- **包路径**: `com.witsoft.mica.smd.*`
- **功能**: 通过 `dictionary_type.en_code` 查询 `dictionary_data``en_code → full_name` 映射
- **输出格式**: `Map<String, String>` (en_code → full_name)
- **重复处理**: 同一 typeCode 下 en_code 重复时取第一条 (按 sort_code + id 排序)
- **多租户支持**: 自动获取 ecid 过滤
- **软删除过滤**: delete_mark = 0
**📁 已生成文件** (5 个):
- `smd/mapper/DictionaryMapper.java` - 字典查询 Mapper 接口
- `smd/mapper/DictionaryMapper.xml` - 原生 SQL 查询 (JOIN type + data)
- `smd/dto/DictionaryItem.java` - 字典数据项 DTO
- `smd/service/DictionaryService.java` - 字典服务接口
- `smd/service/impl/DictionaryServiceImpl.java` - 字典服务实现
**📁 已生成枚举类** (2 个):
- `smd/enums/StatusEnum.java` - 状态枚举 (Y=启用,N=禁用)
- `smd/enums/YesNoEnum.java` - 是否枚举 (Y=是,N=否)
**🔧 字典填充规范**:
- **VO 设计**: 添加 xxxName 字段存储字典翻译后的中文名称
- **Service 层填充**: 批量查询字典,避免 N+1 问题
- **通用方法**: `fillDictionaryData(ItemVO itemVO, Map<String, Map<String, String>> dictMaps)`
- **性能要求**: 列表查询只查 1 次字典,批量填充
**📊 物料信息字典映射**:
| VO 字段 | 字典类型 | 说明 |
|--------|---------|------|
| `itemTypeName` | `materialsType` | 物料类型名称 |
| `propertiesName` | `itemProperties` | 物料属性名称 |
| `pickingPropertyName` | `pickingProperty` | 领料属性名称 |
| `statusName` | `StatusEnum` | 状态名称 (枚举) |
---