# 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`, 不使用 PageHelper - **XML 规范**: 使用 `` + `` 片段复用方式 **📁 已生成文件** (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 使用 `` + `` 片段 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` (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> dictMaps)` - **性能要求**: 列表查询只查 1 次字典,批量填充 **📊 物料信息字典映射**: | VO 字段 | 字典类型 | 说明 | |--------|---------|------| | `itemTypeName` | `materialsType` | 物料类型名称 | | `propertiesName` | `itemProperties` | 物料属性名称 | | `pickingPropertyName` | `pickingProperty` | 领料属性名称 | | `statusName` | `StatusEnum` | 状态名称 (枚举) | ---