# PSI 进销存系统 - 技术分析报告 ## 执行摘要 本报告对 PSI 进销存系统进行全面技术分析,涵盖架构设计、代码质量、数据库设计、安全性等多个维度。分析时间:2026年6月5日。 --- ## 1. 技术栈深度分析 ### 1.1 核心技术选型评估 | 组件 | 技术方案 | 版本 | 优势 | 风险 | |------|---------|------|------|------| | Web 框架 | Gin | v1.11.0 | 高性能、成熟社区、中间件丰富 | 升级维护依赖 | | ORM | GORM | v1.31.1 | 自动迁移、预加载、钩子 | 复杂查询性能需优化 | | 数据库 | MySQL | - | 事务支持、索引优化 | 无主从配置 | | 认证 | JWT | v5 | 无状态、跨域友好 | Token 刷新机制 | | 日志 | Logrus + file-rotatelogs | - | 结构化日志、自动轮转 | 缺少日志聚合 | | Excel处理 | Excelize | v2 | 高性能读写 | 大文件内存占用 | ### 1.2 依赖包清单与用途 **核心依赖(go.mod)**: ``` github.com/gin-gonic/gin # Web框架 gorm.io/gorm # ORM gorm.io/driver/mysql # MySQL驱动 github.com/golang-jwt/jwt/v5 # JWT认证 github.com/sirupsen/logrus # 日志 github.com/xuri/excelize/v2 # Excel处理 github.com/boombuler/barcode # 条码生成 github.com/elastic/go-elasticsearch/v8 # ES搜索(已注释) ``` **间接依赖亮点**: - `github.com/bytedance/sonic` - 极快的JSON处理 - `github.com/goccy/go-yaml` - YAML配置解析 --- ## 2. 架构设计分析 ### 2.1 分层架构 ``` ┌─────────────────────────────────────────────────┐ │ Controller 层 (controllers/) │ │ - 请求参数校验 │ │ - 响应格式化 │ │ - 中间件处理 │ └────────────────┬────────────────────────────────┘ │ ┌────────────────┴────────────────────────────────┐ │ Service 层 (service/) │ │ - 业务逻辑实现 │ │ - 事务管理 │ │ - 外部API调用 │ └────────────────┬────────────────────────────────┘ │ ┌────────────────┴────────────────────────────────┐ │ Model 层 (models/) │ │ - 数据模型定义 │ │ - 数据库操作 │ │ - 请求/响应结构体 │ └────────────────┬────────────────────────────────┘ │ ┌────────────────┴────────────────────────────────┐ │ 基础设施层 │ │ - config/: 配置加载 │ │ - database/: 数据库连接 │ │ - middleware/: 中间件 │ │ - utils/: 工具函数 │ └─────────────────────────────────────────────────┘ ``` **架构优点**: ✅ 清晰的分层职责分离 ✅ 代码复用性好 ✅ 便于单元测试 **改进建议**: ⚠️ 缺少 Repository 层,Service 直接操作 Model ⚠️ 缺少 DTO 层,Model 和 API 耦合 ### 2.2 目录结构评估 ``` psi/ ├── 优点 │ ├── controllers/ - 按业务模块组织良好 │ ├── models/ - 清晰区分 request/response │ ├── middleware/ - 认证、CORS、签名职责明确 │ ├── service/ - 业务逻辑独立 │ └── utils/ - 工具函数集中管理 │ └── 可优化 ├── 缺少 docs/ - API文档存放 ├── 缺少 tests/ - 单元测试 ├── 缺少 scripts/ - 部署脚本 └── 缺少 internal/ - 内部包隔离 ``` --- ## 3. 数据库设计分析 ### 3.1 表设计概览 **表数量**:41张 **核心表**:15张 **辅助表**:26张 ### 3.2 核心表关系分析 #### 3.2.1 商品管理链路 ``` product_category (商品分类) ↓ product (商品) ← product_log (变更日志) ↓ product_serial (序列号) ↓ product_unit_conversion (单位换算) ``` **设计优点**: ✅ 商品变更有日志记录,支持审核 ✅ 支持序列号管理,适合图书行业 **改进建议**: ⚠️ `product.category_id` 缺少外键约束 ⚠️ 商品图片使用 JSON 存储,建议单独表 #### 3.2.2 库存管理链路 ``` warehouse (仓库) ← logistics (物流) ↓ location (库位) ↓ inventory (库存) ← inventory_detail (明细) ↓ inventory_log (流水) ``` **设计优点**: ✅ 库存支持批次管理(batch_no) ✅ 库存流水记录完整 ✅ 支持锁定库存(locked_quantity) **改进建议**: ⚠️ `inventory_log.location_id` 可以为空,建议明确业务规则 ⚠️ 缺少库存预警配置表 #### 3.2.3 采购流程链路 ``` supplier (供应商) ↓ purchase_order (采购单) ← purchase_order_item (明细) ↓ wave_header (波次) ← wave_task (任务) ← wave_task_detail (明细) ↓ receiving_order (入库单) ← receiving_order_item (明细) ↓ inventory (库存增加) + inventory_log (流水) ``` **设计优点**: ✅ 波次设计支持批量作业 ✅ 支持小车容量分配 ✅ 完整的单据链路 **改进建议**: ⚠️ `wave_header.related_order_id` 类型是采购单还是销售单不够明确 ⚠️ 建议增加 wave_type 枚举字段 #### 3.2.4 销售流程链路 ``` customer (客户) ↓ sales_order (销售单) ← sales_order_item (明细) ↓ wave_header (波次) ← wave_task (任务) ↓ outbound_order (出库单) ← outbound_order_item (明细) ↓ outbound_order_location_log (库位变更) ↓ inventory (库存减少) + inventory_log (流水) ↓ shipping_order (发货单) ← shipping_order_item (明细) ``` **设计优点**: ✅ 销售单关联店铺(shop) ✅ 支持分销模式(is_distribution) ✅ 库位变更有记录 **改进建议**: ⚠️ 发货单缺少物流单号字段 ⚠️ 建议增加发货状态流转记录 ### 3.3 索引设计评估 **已知索引**(从模型推断): - `product.barcode` - 条码查询 - `warehouse.code` - 仓库编码唯一 - `location.warehouse_id + code` - 库位唯一 - `purchase_order.po_no` - 采购单号 - `sales_order.so_no` - 销售单号 - `inventory_log.related_order_no` - 单据关联 - `inventory.warehouse_id + product_id + batch_no` - 库存唯一 **缺失索引建议**: - `inventory_log.created_at` - 时间范围查询 - `wave_header.warehouse_id + status + direction` - 波次查询 - `employee.role` - 权限查询 ### 3.4 分账模块新增表分析 **split_account_config(分账配置)**: - 支持 JSON 格式的规则配置 - 状态管理(启用/禁用) - 创建/更新人追踪 **split_account_deduction_log(分账扣钱日志)**: - 关联业务单号 - 记录扣款明细(JSON) - 记录扣款前后金额 **设计优点**: ✅ JSON 配置灵活 ✅ 日志完整可追溯 --- ## 4. 代码质量分析 ### 4.1 中间件设计分析 **middleware/auth.go - JWT认证**: ``` 功能: - Token 验证 - 员工状态检查 - 租户数据库连接 优点: ✅ 职责单一 ✅ 支持租户隔离 改进: ⚠️ Token 过期后缺少刷新机制 ⚠️ 建议增加 Token 黑名单 ``` **middleware/sign.go - API签名**: ``` 功能: - AppKey 验证 - 时间戳检查(容忍300秒) - MD5签名验证 优点: ✅ 防篡改 ✅ 防重放攻击 改进: ⚠️ MD5 安全性较低,建议升级到 HMAC-SHA256 ⚠️ 时间戳容忍度 5 分钟偏长 ``` **middleware/cors.go - 跨域处理**: ``` 功能: - 允许所有来源 - 允许所有方法 - 允许所有头 优点: ✅ 开发便利 改进: ⚠️ 生产环境建议限制 Origin 白名单 ⚠️ 建议增加预检请求缓存 ``` ### 4.2 模型设计模式 **统一模式**: ```go type Model struct { ID int64 // 主键 CreatedAt int64 // Unix时间戳 UpdatedAt int64 // Unix时间戳 IsDel int8 // 软删除标记 } ``` **优点**: ✅ 统一的时间戳格式(秒) ✅ 软删除支持 ✅ ID使用int64避免溢出 **改进建议**: ⚠️ 缺少 `DeletedAt` 字段(有则有值,无则为0) ⚠️ 建议使用 `gorm.Model` 扩展或自定义基类 ### 4.3 Service层模式 从文件结构看,Service层实现了完整的CRUD: - `CreateXxx()` - `UpdateXxx()` - `DeleteXxx()` - `GetXxx()` - `ListXxx()` **优点**: ✅ 接口统一 ✅ Controller层简洁 **改进建议**: ⚠️ 建议增加事务封装 ⚠️ 建议增加业务校验层 --- ## 5. 安全性分析 ### 5.1 认证安全 | 安全项 | 状态 | 说明 | |-------|------|------| | 密码加密 | ❓ | 未知,需检查代码 | | JWT签名 | ✅ | 使用密钥签名 | | Token过期 | ✅ | 24小时过期 | | Token刷新 | ❌ | 未实现 | | 账号过期 | ✅ | 支持设置 | | 员工状态 | ✅ | 登录时检查 | ### 5.2 API安全 | 安全项 | 状态 | 说明 | |-------|------|------| | API签名 | ✅ | MD5签名 | | 时间戳验证 | ✅ | 300秒容忍 | | 防重放 | ⚠️ | 无Nonce机制 | | 速率限制 | ❌ | 未实现 | | SQL注入 | ✅ | GORM参数化查询 | | XSS防护 | ❓ | 未知 | ### 5.3 数据安全 | 安全项 | 状态 | 说明 | |-------|------|------| | 敏感字段加密 | ✅ | config中有encrypt_key | | 软删除 | ✅ | 所有表支持 | | 操作日志 | ✅ | inventory_log等 | | 数据备份 | ❌ | 配置中未提及 | ### 5.4 安全建议优先级 **高优先级**: 1. API签名升级为 HMAC-SHA256 2. 实现速率限制 3. 增加 Token 刷新机制 4. 实现防重放的 Nonce 机制 **中优先级**: 5. 生产环境 CORS 限制 Origin 6. 敏感操作增加二次验证 7. 定期数据库备份 **低优先级**: 8. 操作审计日志完善 9. 数据脱敏 --- ## 6. 性能分析 ### 6.1 潜在性能瓶颈 | 场景 | 瓶颈点 | 建议 | |------|--------|------| | 库存查询 | 多表关联 | 增加 Redis 缓存 | | 波次生成 | 批量计算 | 异步处理 + 消息队列 | | Excel导出 | 大文件内存 | 流式处理 + 分页 | | 日志写入 | 同步阻塞 | 异步日志写入 | ### 6.2 数据库性能优化建议 1. **索引优化**: - 增加常用查询组合索引 - 定期分析索引使用情况 2. **查询优化**: - 避免 N+1 查询(使用 Preload) - 分页查询限制每页数量 - 大表考虑分库分表 3. **缓存策略**: - 商品基础信息缓存 - 仓库/库位信息缓存 - 库存汇总缓存(带过期时间) --- ## 7. 外部集成分析 ### 7.1 OCR服务集成 **状态**:代码已注释,可启用 **架构**: ``` Gin API → OCR服务 (独立进程) ↓ OCRService.exe ``` **优点**: ✅ 独立进程,不影响主服务 ✅ 本地处理,数据安全 **改进**: ⚠️ 建议增加 OCR 服务健康检查 ⚠️ 建议增加 OCR 结果缓存 ### 7.2 Elasticsearch集成 **状态**:代码已注释,可启用 **用途**: - 商品全文搜索 - 订单搜索 - 日志分析 **建议**: ⚠️ 增量同步机制 ⚠️ 索引别名管理 ### 7.3 外部系统API **配置**: ```yaml external_api: sync_product_url: ... # 商品同步 sync_task_url: ... # 任务创建 sync_task_body_url: ... # 任务内容 ``` **建议**: ⚠️ 增加重试机制 ⚠️ 增加熔断保护 ⚠️ 增加请求/响应日志 ⚠️ 超时时间可配置(当前30秒) --- ## 8. 业务流程深度分析 ### 8.1 采购入库流程(波次模式) ``` 阶段1: 创建采购单 ↓ POST /api/purchase-order/create-with-wave ↓ 创建 purchase_order + purchase_order_item ↓ 创建 wave_header (direction=入库) 阶段2: 释放波次 ↓ POST /api/wave/release ↓ 创建 wave_task + wave_task_detail ↓ 根据小车容量分配 阶段3: PDA收货 ↓ POST /api/receiving/bind-wave ↓ 创建 receiving_order ↓ PDA扫码逐个收货 阶段4: 提交入库 ↓ POST /api/receiving/submit ↓ 更新 inventory (quantity +=) ↓ 记录 inventory_log ``` **业务亮点**: ✅ 支持波次批量作业 ✅ 小车容量智能分配 ✅ 支持无来源入库 **流程改进**: ⚠️ 建议增加入库质检环节 ⚠️ 建议增加异常处理流程 ### 8.2 销售出库流程 ``` 阶段1: 创建销售单 ↓ POST /api/sales-order/create (公开接口) ↓ 创建 sales_order + sales_order_item 阶段2: 生成出库波次 ↓ POST /api/wave/outbound/create ↓ 创建 wave_header (direction=出库) 阶段3: 释放波次 ↓ POST /api/wave/outbound/release ↓ 创建 wave_task 阶段4: PDA拣货 ↓ POST /api/outbound/bind-wave ↓ 创建 outbound_order ↓ 记录库位变更 (outbound_order_location_log) 阶段5: 提交出库 ↓ POST /api/outbound/submit ↓ 更新 inventory (quantity -=) ↓ 记录 inventory_log 阶段6: 创建发货单 ↓ POST /api/shipping-order/create ↓ 创建 shipping_order + shipping_order_item ↓ 填写物流信息 ``` **业务亮点**: ✅ 支持多店铺类型(拼多多、孔夫子、闲鱼) ✅ 支持分销模式 ✅ 库位变更可追溯 --- ## 9. 项目成熟度评估 | 维度 | 评分 | 说明 | |------|------|------| | 代码组织 | ⭐⭐⭐⭐ | 分层清晰,模块化好 | | 数据库设计 | ⭐⭐⭐⭐ | 关系完整,考虑周全 | | 安全性 | ⭐⭐⭐ | 基础安全有,需加强 | | 性能优化 | ⭐⭐⭐ | 有优化空间,缺少缓存 | | 测试覆盖 | ⭐⭐ | 无测试目录 | | 文档完善 | ⭐⭐⭐⭐ | 有项目说明文档 | | 运维部署 | ⭐⭐⭐ | 有Linux部署包 | | 监控告警 | ⭐⭐ | 缺少监控 | **总体评分**:⭐⭐⭐ (3/5) - 生产可用,有优化空间 --- ## 10. 改进建议 roadmap ### 短期(1-2周) - [ ] 增加单元测试框架 - [ ] API签名升级 HMAC-SHA256 - [ ] 实现速率限制中间件 - [ ] 补充核心业务索引 ### 中期(1-2月) - [ ] 引入 Redis 缓存 - [ ] 实现 Token 刷新机制 - [ ] 增加操作审计日志 - [ ] 数据库分库分表调研 ### 长期(3-6月) - [ ] 引入消息队列(异步处理) - [ ] 实现微服务拆分 - [ ] 完善监控告警系统 - [ ] CI/CD 流程搭建 --- ## 11. 技术债务清单 | 项 | 严重程度 | 说明 | |----|---------|------| | ES代码注释 | 低 | 已注释,清理或启用 | | OCR代码注释 | 低 | 已注释,清理或启用 | | 缺少测试 | 高 | 无测试目录 | | 硬编码配置 | 中 | 部分配置硬编码 | | 错误处理 | 中 | 需统一错误码 | | 日志规范 | 中 | 日志格式需统一 | --- ## 12. 总结 PSI 进销存系统是一个架构清晰、功能完整的企业级应用。核心业务流程设计合理,支持波次管理、多店铺、分销等高级特性。数据库设计考虑周全,41张表覆盖了进销存全流程。 **主要优点**: ✅ 技术选型成熟稳定 ✅ 分层架构清晰 ✅ 业务流程完整 ✅ 支持波次管理、多店铺 ✅ 数据库设计规范 **主要改进方向**: ⚠️ 安全性需加强 ⚠️ 性能优化空间大 ⚠️ 测试覆盖不足 ⚠️ 监控告警缺失 ⚠️ 文档可更完善 --- **报告生成时间**:2026年6月5日 **分析工具**:Trae IDE + 人工代码审查 **报告版本**:v1.0