Files
openclaw-config/workspace-backend/memory/2026-05-25.md
T
2026-07-14 16:36:24 +08:00

18 KiB
Raw Blame History

2026-05-25 会话记录

系统模块开发(2026-05-25 13:28

完成的工作

  1. 操作日志功能

    • 实体类:OperLog.java
    • MapperOperLogMapper.java
    • ServiceOperLogService.java + OperLogServiceImpl.java
    • ControllerOperLogController.java
    • 切面:LogAspect.java(自动记录带@Log 注解的方法)
    • 注解:@Logmodule、businessType、isSaveRequestData、isSaveResponseData
  2. 数据字典增强

    • 新增方法:listDataBatch() - 批量获取字典数据
    • 新增方法:listOptions() - 前端下拉框格式 [{label, value}]
    • 新增方法:listOptionsBatch() - 批量获取下拉框选项
    • 新增接口:GET /system/dict/data/options/batch?dictTypes=xxx,yyy
  3. 文档

    • 04-系统模块开发指南.md - 包含使用示例、API 文档、前端集成示例

业务类型枚举

含义
0 其它
1 新增
2 修改
3 删除
4 导出
5 导入
6 审核

已初始化字典

  • inbound_type - 入库类型(采购入库、退货入库、其他入库)
  • outbound_type - 出库类型(销售出库、领料出库、其他出库)
  • stocktake_diff_result - 盘点结果(相符、盘盈、盘亏)
  • payment_method - 收付款方式(现金、银行转账、承兑汇票)

下一步

  • 主数据模块开发(供应商、客户) ✓
  • 库存模块开发(入库单、出库单) ✓
  • 财务模块开发(应收、应付、收款、付款)
  • 首页模块开发 ✓

首页模块开发(2026-05-25 15:15

完成的工作

  1. 欢迎信息接口

    • GET /home/welcome - 返回欢迎语、用户名、企业名、日期、问候语
    • 根据时间段自动切换问候语(早上好/中午好/下午好/晚上好/夜深了)
    • DTOHomeWelcomeResDTO.java
  2. 最新动态接口

    • GET /home/news - 返回最近 20 条业务动态
    • 动态类型:入库完成、出库完成、盘点完成、新增供应商、新增客户
    • 按时间倒序排列
    • DTOHomeNewsItemDTO.java
  3. 文件清单

    • HomeController.java - 首页控制器
    • HomeService.java / HomeServiceImpl.java - 首页服务
    • HomeWelcomeResDTO.java - 欢迎信息响应
    • HomeNewsItemDTO.java - 动态项 DTO

API 示例

GET /home/welcome
→ { welcome: "欢迎", userName: "张三", companyName: "某某公司", greeting: "下午好" }

GET /home/news
→ [ { type: "inbound", title: "入库完成", content: "RK202605250001 - 成品仓", operator: "张三", operateTime: "..." } ]

TODO

  • 从用户会话/配置中获取真实用户名和企业名(当前为默认值)

库存模块增强(2026-05-25 14:26

完成的工作

  1. 入库单管理 CRUD

    • 实体:Inbound.java + InboundItem.java
    • DTOInboundSaveReqDTO.java + InboundItemSaveReqDTO.java
    • MapperInboundMapper.java + InboundItemMapper.java
    • ServiceInboundService.java + InboundServiceImpl.java
    • ControllerInboundController.java
    • API:分页查询、详情、明细、新增、修改、审核、作废、删除
    • 审核逻辑:检查状态 → 更新状态 → 增加库存
    • 作废逻辑:检查状态 → 更新状态 → 扣减库存
  2. 出库单管理 CRUD

    • 实体:Outbound.java + OutboundItem.java
    • DTOOutboundSaveReqDTO.java + OutboundItemSaveReqDTO.java
    • MapperOutboundMapper.java + OutboundItemMapper.java
    • ServiceOutboundService.java + OutboundServiceImpl.java
    • ControllerOutboundController.java
    • API:分页查询、详情、明细、新增、修改、审核、作废、删除
    • 审核逻辑:检查状态 → 检查库存充足 → 更新状态 → 扣减库存
    • 作废逻辑:检查状态 → 更新状态 → 恢复库存
  3. 盘点单管理 CRUD

    • 实体:Stocktake.java + StocktakeItem.java
    • DTOStocktakeSaveReqDTO.java + StocktakeItemSaveReqDTO.java
    • MapperStocktakeMapper.java + StocktakeItemMapper.java
    • ServiceStocktakeService.java + StocktakeServiceImpl.java
    • ControllerStocktakeController.java
    • API:分页查询、详情、明细、新增、修改、审核、作废、删除
    • 审核逻辑:计算差异 → 设置盘点结果 → 调整库存(盘盈 +,盘亏 -
    • 作废逻辑:反向调整库存
  4. 库存服务增强

    • 新增方法:addStock() - 入库单调用(包含物料信息)
    • 新增方法:reduceStock() - 出库单调用
    • 新增方法:checkStock() - 检查库存是否充足
  5. 文档

    • 06-库存模块开发指南.md - 完整 API 文档、业务流程、测试示例

业务类型字典

类型 标签
inbound_type 10 采购入库
inbound_type 20 退货入库
inbound_type 30 其他入库
outbound_type 10 销售出库
outbound_type 20 领料出库
outbound_type 30 其他出库
stocktake_diff_result 0 相符
stocktake_diff_result 1 盘盈
stocktake_diff_result 2 盘亏

状态流转

草稿 (0) → 已审核 (1) → 已作废 (2)

编译状态

✅ mvn compile 成功

主数据模块开发(2026-05-25 13:46

完成的工作

  1. 供应商管理 CRUD

    • 实体:Supplier.javaname、contact、mobile 等简洁字段)
    • DTOSupplierSaveReqDTO.java
    • MapperSupplierMapper.java
    • ServiceSupplierService.java + SupplierServiceImpl.java
    • ControllerSupplierController.java
    • API:分页查询、列表、详情、新增、修改、删除
    • 操作日志:@Log 注解自动记录
  2. 客户管理 CRUD

    • 实体:Customer.java(增加 level 客户级别字段)
    • DTOCustomerSaveReqDTODTO.java
    • MapperCustomerMapper.java
    • ServiceCustomerService.java + CustomerServiceImpl.java
    • ControllerCustomerController.java
    • API:分页查询、列表、详情、新增、修改、删除
    • 操作日志:@Log 注解自动记录
  3. 文档

    • 05-主数据模块开发指南.md - 包含 API 文档、前端集成示例

设计特点

  • 字段命名参考 ruoyi-pronamecontactmobile(简洁风格)
  • 必填字段仅 name,支持快捷新增
  • 客户级别:10-普通、20-重要、30-VIP(字典数据管理)
  • 所有操作自动记录日志

编译状态

✅ mvn compile 成功

Tiny-ERP 表架构设计与实现

完成的工作

  1. 表架构设计文档

    • 位置:/home/yangxuan/Projects/IdeaProjects/tiny-erp/yangxuan/设计/表架构设计.md
    • 参考项目:ruoyi-vue-pro(别名 ruoyi-pro
    • 设计原则:务实、简洁、不过度设计
  2. SQL 脚本生成与执行

    • 20-master-data.sql - 主数据模块(供应商、客户表参考 ruoyi-pro 风格)
    • 50-inventory.sql - 库存模块(入库/出库/盘点单及明细)
    • 60-finance.sql - 财务模块(应收/应付/收款/付款及核销明细)
    • 99-data.sql - 初始化数据(修复为幂等脚本)
  3. 数据库表统计

    • 系统模块:5 表(含操作日志)
    • 主数据:6 表(供应商、客户)
    • 销售:4 表
    • 采购:2 表
    • 库存:8 表(入库/出库/盘点)
    • 财务:8 表(应收/应付/收款/付款 + 核销明细)
    • 总计:27 表
  4. 关键设计决策

    • 供应商/客户字段命名参考 ruoyi-pro:namecontactmobile(去掉冗余前缀)
    • 应收应付按物料明细记录(fi_receivable_item / fi_payable_item
    • 数量:NUMERIC(12,3),金额/单价:NUMERIC(18,2)
    • 所有业务表包含 ecid 字段实现多租户隔离
    • 99-data.sql 使用 INSERT ... SELECT ... WHERE NOT EXISTS 实现幂等

待确认事项(已确认)

序号 事项 结论
1 多仓库管理 不需要
2 批次/序列号 不需要
3 应收应付物料明细 需要 ✓
4 多计量单位换算 不需要

数据库状态

  • 数据库名:tinyerp
  • 连接方式:Unix socket (/var/run/postgresql)
  • 所有脚本执行成功,无 ERROR
  • 初始化数据:1 租户、1 用户 (admin)、6 字典类型、16 字典数据

下一步

  • 开始 Java 后端开发
  • 实体类设计参考 ruoyi-pro 的 DO 结构

入库出库优化(2026-05-25 16:44

完成的工作

  1. 生产入库 & 采购入库

    • DTOProductionInboundSaveReqDTO.javaProductionInboundItemReqDTO.java
    • DTOPurchaseInboundSaveReqDTO.javaPurchaseInboundItemReqDTO.java
    • 接口:POST /im/inbound/productionPOST /im/inbound/purchase
    • 特点:生产入库无需单价,采购入库含单价
  2. 领料出库 & 销售出库

    • DTOMaterialOutboundSaveReqDTO.javaMaterialOutboundItemReqDTO.java
    • DTOSalesOutboundSaveReqDTO.javaSalesOutboundItemReqDTO.java
    • 接口:POST /im/outbound/materialPOST /im/outbound/sales
    • 特点:领料出库无需单价,销售出库含单价
  3. 入库/出库历史查询

    • DTOInboundHistoryQueryReqDTO.javaInboundHistoryDTO.java
    • DTOOutboundHistoryQueryReqDTO.javaOutboundHistoryDTO.java
    • 接口:POST /im/inbound/history-listPOST /im/outbound/history-list
    • 功能:查询已审核的单据,返回汇总信息
  4. 物料信息填充

    • 保存时自动填充物料编码、名称、规格、单位
    • 避免后续关联查询,提高查询性能
  5. 文档

    • 04-入库出库优化 - 实现总结.md - 完整 API 文档、测试示例

编译状态

✅ mvn compile 成功

实时库存 & 库存盘点(2026-05-25 17:16

完成的工作

  1. 实时库存分页查询

    • DTOStockPageQueryReqDTO.javaStockPageDTO.java
    • 接口:POST /im/stock/page
    • 功能:带安全库存校验,返回 isLowStock 标识
    • 校验规则:最小安全库存 > 0 且 库存 < 最小安全库存 → 库存过低
  2. 最小安全库存管理

    • 接口:PUT /md/material/{id}/safe-qty - 更新最小安全库存
    • 接口:PUT /md/material/{id}/safe-qty/clear - 清除(设置为 0
    • 使用 MyBatis XML 实现(支持设置为 0)
    • 字段:md_material.min_safe_qty NUMERIC(12,3)
  3. 快速盘点

    • DTOStocktakeQuickSaveReqDTO.javaStocktakeQuickItemReqDTO.java
    • 接口:POST /im/stocktake/quick-save
    • 功能:批量保存盘点单(草稿),自动获取当前库存作为账面数量
  4. 盘点历史列表

    • DTOStocktakeHistoryQueryReqDTO.javaStocktakeHistoryDTO.java
    • 接口:POST /im/stocktake/history-list
    • 日期范围:today(当日)、week(近 7 日)、month(近 30 日)
  5. MyBatis XML 按模块分类

    • mapper/md/material/MaterialMapper.xml - 物料模块
    • mapper/im/stock/StockMapper.xml - 库存模块

数字格式规范

字段类型 数据库类型 小数位 展示规则
数量 NUMERIC(12,3) 3 小数全为 0 时不展示
单价/金额 NUMERIC(11,2) 2 小数全为 0 时不展示

编译状态

✅ mvn compile 成功

库存积压分析(2026-05-25 17:23

完成的工作

  1. 积压统计(按分类分组)

    • DTOStockOverstockDTO.javaStockOverstockQueryReqDTO.java
    • 接口:POST /im/stock/overstock/summary
    • 返回:分类、物料数量、积压金额、平均积压天数
    • 默认积压阈值:90 天
  2. 积压明细(下钻页面)

    • DTOStockOverstockDetailDTO.java
    • 接口:POST /im/stock/overstock/detail
    • 参数:category(分类筛选)、sortByamount/qty 排序)
    • 返回:物料编码、名称、规格、库存数量、单价、积压天数、积压金额
  3. SQL 实现

    • 积压判定:最后入库日期 < 当前日期 - 阈值
    • 单价计算:平均入库单价
    • 积压金额 = 库存数量 × 平均单价

新增文件

  • StockMapper.xml - 积压统计和明细 SQL
  • 06-库存积压分析 - 实现总结.md - 完整文档

编译状态

✅ mvn compile 成功

项目规范建立(2026-05-25 17:17-18:32

Git 操作规范

  • 禁止自动 push - 所有 commit 后必须人工审查
  • 流程:编译验证 → 提交代码 → 停止等待 → 人工确认后手动 push

Java 语法规范

  • 只能使用 Java 8 语法
  • 禁止:varMap.of()List.of()、switch 表达式、文本块、record
  • 推荐:Lambda、Stream API、Optional、方法引用

状态字段规范

含义
0 有效(默认)
1 无效

架构规范

  • Service 层处理业务逻辑(查询、填充、组装)
  • Controller 层保持简洁(调用 Service、返回结果)
  • 接口支持可选字段参数(withStockwithCategoryName)提高复用性

本地开发规范

  • 支持免登录(请求头 X-User-Id 或默认用户)
  • ⚠️ 仅 local 环境启用,生产环境严禁开启

物料分页查询重构(2026-05-25 18:15-18:37

完成的工作

  1. Java 填充方案(替代 XML JOIN

    • 删除:MaterialMapper.xml 中的复杂 JOIN 查询
    • 删除:MaterialListWithStockReqDTO.javaMaterialWithStockDTO.java
    • 新增:MaterialPageDTO.javaMaterialPageQueryReqDTO.java
    • 逻辑:Service 层批量查询库存和分类,内存填充
  2. 可选字段参数

    • withStock(默认 true- 是否返回库存数量
    • withCategoryName(默认 true- 是否返回分类名称
    • 性能优化:不查关联时只需 1 次 SQL
  3. 本地开发免登录

    • 配置:development.mock-auth.enabled
    • 请求头:X-User-IdX-User-NameX-Nickname
    • 过滤器:UserContextFilter 支持免登录模式
  4. 代码整理

    • 简化 MaterialController.java - 移除 XML 查询接口
    • 精简 MaterialMapper.java - 只保留安全库存更新方法
    • 重构 MaterialServiceImpl.java - 添加 pageWithStock() 方法

性能对比

场景 withStock withCategoryName SQL 次数
下拉选择器 1
简单列表 1
库存管理 2
完整展示 3

编译状态

✅ mvn compile 成功

今日提交统计(未 push

feat: 实现入库出库优化功能
feat: 实现实时库存和盘点功能
feat: 实现库存积压分析功能
refactor: 按模块分类 MyBatis XML 文件
fix: 修复物料查询 XML 中的字段错误
docs: 更新物料状态注释
feat: 物料分页查询改为 Java 填充关联数据
refactor: 物料分页查询逻辑移至 Service 层
feat: 物料分页查询支持可选字段
refactor: 删除物料 XML 查询,统一使用 Service 层 Java 填充
feat: 本地开发支持免登录

总计: 约 15 个 commit4300+ 行新增,200+ 行删除


待办事项

  1. 数据库迁移 - 添加 md_material.min_safe_qty 字段
  2. 前端开发 - 实时库存、盘点、积压分析页面
  3. 测试验证 - 使用 HTTP 测试文件验证所有接口
  4. 代码审查 - 人工审查后执行 git push

下午-晚间增量(2026-05-25 18:37~20:18

实体-DDL 字段对齐

文件 字段 操作
Stock.java category, safeQty 彻底删除(非表字段)
Outbound.java warehouseName, totalQuantity 彻底删除(非表字段)
Stocktake.java warehouseName 彻底删除(非表字段)
StockServiceImpl.java safeQty 操作 改为读写 md_material.min_safe_qty

模糊查询支持特殊字符

  • 创建 LikeEscapeUtil.java — 转义 \%_
  • 物料/客户/供应商分页查询全部接入转义
  • 客户/供应商 /list 接口新增 keyword 参数支持名称+编码联合模糊
  • 踩坑ESCAPE '\\' 被 MyBatis-Plus COUNT 包装解析失败 → 移除 ESCAPE 子句,利用 PostgreSQL 默认 \ 为转义字符

最小安全库存

  • DDL 20-master-data.sql 新增 min_safe_qty NUMERIC(12,3) DEFAULT 0
  • 升级脚本 upgrade/v1.0.1-alter-material-add-min-safe-qty.sql
  • 库存分页返回 isLowStock 标识(库存 < min_safe_qty → 过低)
  • 接口:PUT /md/material/{id}/safe-qty / PUT /md/material/{id}/safe-qty/clear

主数据初始化脚本修正

改动 说明
safety_stock 列和值 从 INSERT 语句中删除
supplier_code / customer_code 补全编码值
物料名称规格空格 对齐文档(如"宝塔3斜纹"

DDL 补充字段

新增字段
md_supplier supplier_code VARCHAR(50), phone VARCHAR(20), address VARCHAR(200)
md_customer customer_code VARCHAR(50), phone VARCHAR(20), address VARCHAR(200), level INTEGER DEFAULT 0

今日提交统计(全部未 push

418cd10 fix: 修复库存积压报表仅入库物料积压天数基准错误
e8d7bb4 docs: 重构文档目录结构,按模块分类组织
8a38d33 feat: 入库单/出库单 inboundDate/outboundDate 为空时默认当天
373a292 feat: 供应商/客户DDL补充编码、联系电话、地址、客户级别字段
6c338d1 feat: 根据文档补充default租户主数据初始化脚本的编码字段和物料名称修正
d17b970 feat: 物料/客户/供应商模糊查询支持特殊字符转义及客户供应商列表接口
f02f048 feat: DDL增加md_material.min_safe_qty字段及升级脚本
5de00d3 feat: 清理非表字段,最小安全库存统一走md_material.min_safe_qty
(plus safety_stock removal commit)

原则: 代码改动与文档改动分 commit,禁止自动 push,人工审查后手动操作。

环境配置

  • MySQL 运行时 tiny_erp 数据库已配置 min_safe_qty
  • 开发免登录配置:development.mock-auth.enabled