# flashwarehouse
**Repository Path**: exrock/flashwarehouse
## Basic Information
- **Project Name**: flashwarehouse
- **Description**: 闪仓开源仓库,由于维护问题使用了新的仓库地址
- **Primary Language**: Unknown
- **License**: MPL-2.0
- **Default Branch**: master
- **Homepage**: https://flashwarehouse.cn
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2026-08-29
- **Last Updated**: 2026-08-29
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
FlashWarehouse(闪仓)
免费、开源、支持 PC 与移动端协同的进销存 / 仓库管理系统
项目官网 ·
在线使用 ·
使用指南 ·
项目 Wiki ·
问题反馈
> **公开仓库说明**
>
> 本仓库是经过净化后发布的开源快照,包含 PC 管理端、移动端和 Java 后端,不包含原私有仓库的 Git 历史、生产数据库、用户数据、运行日志、部署口令、签名文件或第三方平台密钥。它适合学习、二次开发和自托管;用于正式生产前,请自行完成安全审计、容量评估、备份与灾难恢复方案。
## 目录
- [项目简介](#项目简介)
- [核心能力](#核心能力)
- [技术栈](#技术栈)
- [仓库结构](#仓库结构)
- [快速开始](#快速开始)
- [配置说明](#配置说明)
- [构建与测试](#构建与测试)
- [生产部署提示](#生产部署提示)
- [安全说明](#安全说明)
- [常见问题](#常见问题)
- [项目 Wiki](#项目-wiki)
- [更多文档](#更多文档)
- [参与贡献](#参与贡献)
- [支持项目](#支持项目)
- [开源许可](#开源许可)
## 项目简介
FlashWarehouse 面向门店、仓库、批发零售与中小团队,将商品、采购、销售、库存、合作伙伴、员工权限、报表和打印等日常业务集中到一套系统中。
三个客户端共享同一套后端数据:
```text
PC 管理端(Vue 3) ───────┐
├── Spring Boot API ── MySQL
移动端 / H5(uni-app) ───┘ │
└── 可选 AI / 支付 / 企业微信等集成
```
你可以直接访问 [项目官网](https://flashwarehouse.cn) 了解产品,也可以进入 [在线系统](https://jhsc.top) 体验公开服务。自行部署时,请使用自己的域名、数据库、RSA 密钥和第三方服务凭据。
## 核心能力
| 领域 | 主要能力 |
| --- | --- |
| 商品 | 商品档案、分类、单位、条码、自定义字段、图片与价格信息 |
| 采购 | 询价、采购订单、采购入库、退货、换货与采购统计 |
| 销售 | 报价、销售订单、销售出库、退货、换货与销售报表 |
| 库存 | 多仓库、实时库存、其他出入库、调拨、盘点与库存预警 |
| 往来与财务 | 客户 / 供应商、开票信息、财务科目和业务统计 |
| 员工与权限 | 员工管理、角色权限和业务范围控制 |
| 打印 | 单据打印、条码 / 二维码和自定义打印模板 |
| AI 助手 | 支持用户配置兼容接口、模型选择、业务问答与辅助操作 |
| 多端协同 | PC 管理端、移动 H5 与 app-plus 资源共享同一套业务数据 |
部分外部能力(AI、支付宝、企业微信、淘宝等)是可选集成,只有配置对应服务后才会启用。
## 技术栈
| 部分 | 技术 |
| --- | --- |
| PC 管理端 | Vue 3、Vue Router、TDesign Vue Next、Axios、ECharts、Vue CLI 5 |
| 移动端 | uni-app、Vue 3、Vite 5、uni-ui、uView、ECharts |
| 后端 | Java 8、Spring Boot 2.7.15、MyBatis-Plus、Maven |
| 数据库 | MySQL 8.0+ |
| 数据传输 | RSA 2048、AES-GCM 混合加密能力 |
| 接口文档 | OpenAPI / Swagger UI |
| 许可 | Mozilla Public License 2.0 |
## 仓库结构
```text
flashwarehouse/
├── frontend/ # PC 管理端
│ ├── src/ # Vue 页面、组件、路由和请求层
│ ├── public/ # 静态资源
│ ├── patches/ # patch-package 补丁
│ └── .env.example # 公开的前端配置模板
├── mobile/ # uni-app 移动端 / H5
│ ├── pages/ # 页面
│ ├── utils/ # API、权限、更新和打印工具
│ ├── scripts/ # Android 发布辅助脚本
│ ├── tests/ # 移动端 Node 测试
│ └── .env.example # 公开的移动端配置模板
├── backend/ # Spring Boot Maven 多模块后端
│ ├── sys/ # 应用启动模块
│ ├── common/ # 公共配置、加密、拦截器和工具
│ ├── warehouse_manager/ # 仓库、采购、销售和库存
│ ├── goods_manager/ # 商品管理
│ ├── finance/ # 财务与合作伙伴
│ ├── staff_manager/ # 员工管理
│ ├── user/ # 用户与权限
│ ├── ai/ # AI 助手
│ ├── taobao/ # 可选电商集成
│ ├── tests/ # API 集成测试
│ ├── create_db.sql # 全新本地数据库初始化脚本
│ └── .env.example # 后端环境变量清单
├── docs/assets/ # README 资源
└── LICENSE # MPL-2.0
```
## 快速开始
### 1. 环境要求
| 工具 | 建议版本 | 用途 |
| --- | --- | --- |
| JDK | 8 | 后端编译与运行 |
| Maven | 3.8+ | 后端依赖与构建 |
| MySQL | 8.0+ | 业务数据库 |
| Node.js | 20 LTS(最低 18) | PC 与移动端构建 |
| npm | 随 Node.js 安装 | 前端依赖管理 |
| OpenSSL | 1.1.1+ / 3.x | 生成独立 RSA 密钥 |
| HBuilderX / DCloud 离线环境 | 可选 | 生成 Android / iOS 原生安装包 |
### 2. 克隆仓库
```bash
git clone https://gitee.com/zsjfj/flashwarehouse.git
cd flashwarehouse
```
### 3. 初始化本地数据库
> **危险:** `backend/create_db.sql` 第一条操作是 `DROP DATABASE IF EXISTS wms`。它只适合全新的本地开发数据库,绝对不要对生产库或包含重要数据的实例执行。
```bash
mysql -u root -p < backend/create_db.sql
mysql -u root -p wms < backend/migration_ai_conversation.sql
```
初始化脚本创建的数据库名是 `wms`。后端启动时必须把 `WMS_DB_URL` 指向 `wms`,不要依赖示例文件中的默认库名。建议为应用创建权限受限的独立 MySQL 用户,而不是长期使用 `root`。
`backend/migration_ai_business.sql` 用于旧数据库升级;全新数据库已经包含对应字段和表,不需要重复执行。
### 4. 生成自己的 RSA 密钥
不要使用网上复制的密钥,也不要把私钥放进仓库。以下命令会在仓库外创建一套 2048 位密钥:
```bash
mkdir -p ../flashwarehouse-secrets
openssl genpkey -algorithm RSA \
-pkeyopt rsa_keygen_bits:2048 \
-out ../flashwarehouse-secrets/wms-private.pem
openssl pkey \
-in ../flashwarehouse-secrets/wms-private.pem \
-pubout \
-out ../flashwarehouse-secrets/wms-public.pem
```
- 私钥只提供给后端环境变量 `WMS_RSA_PRIVATE_KEY`。
- 公钥提供给 PC 构建变量 `VUE_APP_RSA_PUBLIC_KEY`。
- 仓库已忽略常见密钥文件扩展名,但仍应使用系统密钥管理服务保存生产私钥。
### 5. 启动后端
在仓库根目录设置本地环境变量,然后构建:
```bash
export WMS_DB_URL='jdbc:mysql://127.0.0.1:3306/wms?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai'
export WMS_DB_USERNAME='wms'
export WMS_DB_PASSWORD='replace-with-your-local-password'
export WMS_RSA_PRIVATE_KEY="$(cat ../flashwarehouse-secrets/wms-private.pem)"
cd backend
mvn clean package -DskipTests
java -jar sys/target/sys-0.0.1-SNAPSHOT.jar
```
默认 API 地址为 `http://localhost:10086`。启动后可以访问:
- Swagger UI:`http://localhost:10086/swagger-ui.html`
- OpenAPI JSON:`http://localhost:10086/v3/api-docs`
`backend/.env.example` 是变量清单,不会被 Spring Boot 自动加载。请通过终端、IDE Run Configuration、容器编排或密钥管理服务注入变量。
### 6. 启动 PC 管理端
新开一个终端:
```bash
cd flashwarehouse/frontend
cp .env.example .env.local
npm ci
npm run serve
```
编辑 `frontend/.env.local`,填入与后端私钥配套的公钥:
```dotenv
VUE_APP_RSA_PUBLIC_KEY=your-public-key
```
该变量支持原始 Base64 SPKI,或使用字面量 `\n` 表示换行的 PEM。不要在前端环境变量里放置任何私钥、AI API Key、数据库密码或访问令牌,因为 `VUE_APP_*` 会进入浏览器构建产物。
PC 开发服务默认运行在 `http://localhost:8081`,本地代理会把 `/flash_warehouse` 请求转发至 `http://localhost:10086`。
### 7. 启动移动端 H5
再开一个终端:
```bash
cd flashwarehouse/mobile
cp .env.example .env.local
npm ci
npm run dev:h5
```
移动 H5 默认运行在 `http://localhost:5173`。示例配置使用相对路径 `/flash_warehouse`,Vite 开发代理会转发至本地后端。
当前快照的 `mobile/vite.config.js` 尚未去除 `/flash_warehouse` 前缀;如果 H5 请求全部返回 404,本地可把 `VITE_WMS_API_BASE_URL` 改为 `http://127.0.0.1:10086` 并确认 CORS,或按 [移动端 Wiki](docs/wiki/mobile.md#h5-接口全部返回-404) 为代理增加 rewrite。生产环境仍应使用 HTTPS 网关地址。
`npm run build:app` 只生成 app-plus 资源,不会生成可安装、可签名的 APK / IPA。原生安装包仍需要 HBuilderX 或 DCloud 离线打包环境,以及你自己的应用标识、证书和签名配置。
## 配置说明
### 后端核心变量
完整清单见 [`backend/.env.example`](backend/.env.example)。
| 变量 | 是否必需 | 说明 |
| --- | --- | --- |
| `SERVER_PORT` | 否 | API 端口,默认 `10086` |
| `WMS_DB_URL` | 是 | MySQL JDBC 地址;全新初始化应指向 `wms` |
| `WMS_DB_USERNAME` | 是 | MySQL 用户名 |
| `WMS_DB_PASSWORD` | 是 | MySQL 密码 |
| `WMS_RSA_PRIVATE_KEY` | 是 | PKCS#8 私钥,支持 Base64 或 PEM |
| `WMS_CORS_ALLOWED_ORIGINS` | 生产必配 | 允许访问 API 的精确前端来源 |
| `WMS_CORS_ALLOWED_ORIGIN_PATTERNS` | 否 | 需要通配规则时使用,生产环境应尽量收紧 |
| `WMS_LOG_PATH` | 否 | 日志目录,默认 `./logs` |
| `WMS_GOODS_IMAGE_DIR` | 否 | 商品图片目录,默认 `./data/goods` |
| `WMS_AI_UPLOAD_DIR` | 否 | AI 上传文件目录,默认 `./data/ai_uploads` |
| `DASHSCOPE_*` | 否 | 默认 AI 提供商;用户也可在可信实例的 UI 中配置兼容接口 |
| `WECHAT_*` | 否 | 企业微信集成 |
| `ALIPAY_*` | 否 | 支付宝集成;未配置时不要启用相关功能 |
| `TAOBAO_APPLICATION_KEY` | 否 | 可选电商集成 |
### 客户端变量
| 文件 / 变量 | 说明 |
| --- | --- |
| `frontend/.env.local` / `VUE_APP_RSA_PUBLIC_KEY` | 后端私钥对应的公开 RSA 公钥 |
| `frontend/.env.local` / `VUE_APP_STORAGE_SEED` | 可选的客户端混淆种子;它不是秘密 |
| `mobile/.env.local` / `VITE_WMS_API_BASE_URL` | 移动端 API 公共地址或本地代理路径 |
| `mobile/.env.local` / `VITE_WMS_UPDATE_API_URL` | 客户端更新元数据的公共接口 |
所有 `VUE_APP_*` 和 `VITE_*` 变量都会被打入客户端包,只能存放公开信息。
## 构建与测试
### PC 管理端
```bash
cd frontend
npm run lint
npm run build
```
### 移动端
```bash
cd mobile
npm run test:update
npm run build:h5
npm run build:app
```
### 后端
```bash
cd backend
mvn clean package -DskipTests
```
后端 API 集成测试说明位于 [`backend/tests/README.md`](backend/tests/README.md)。这些测试会创建、更新和删除业务数据,但不会删除注册的测试用户;如果设置了 `AI_API_KEY`,Key 会保存到该测试用户,测试中断时 `/tmp/wms-test-state.json` 还可能保留临时账号信息。只能对可销毁的隔离数据库运行,使用专用短期 Key,并在测试后清库、删除状态文件和轮换 Key。在完全理解范围前,不要设置 `ALLOW_NONLOCAL_E2E=true`,更不要对生产环境运行。
## 生产部署提示
本仓库不包含一键上线到任意服务器的通用脚本。正式部署至少应完成:
1. 使用 HTTPS,并通过 Nginx、Caddy 或网关把 `/flash_warehouse` 转发到后端。
2. 只允许实际使用的前端域名通过 CORS,禁止无约束通配。
3. 通过平台 Secret、容器 Secret 或系统服务环境注入密码和私钥。
4. 为 MySQL 使用最小权限账号,启用定期备份并实际演练恢复。
5. 将 `data/`、上传目录和日志目录放到持久卷,设置容量与权限限制。
6. 使用自己的 RSA 密钥、域名、应用 ID、移动端签名和第三方平台配置。
7. 关闭或限制公网 Swagger,增加访问控制、限流、监控与告警。
8. 在切换生产流量前完成接口、权限、库存变更、支付回调与回滚测试。
## 安全说明
- 不要提交 `.env`、生产配置、数据库备份、私钥、Token、API Key、支付密钥、签名证书、运行日志或用户上传文件。
- AI API Key 不应写入 PC / 移动端构建变量。仅在你自己部署或明确可信的实例中通过设置界面配置。
- 已经公开过的凭据不能靠删除 Git 文件恢复安全,必须在对应平台轮换或吊销。
- 不要把真实密钥、个人信息或生产日志粘贴到公开 Issue。
- 仓库中的初始化 SQL 和集成测试具有数据修改能力,运行前务必确认目标数据库和 API 地址。
- 公开快照不代表已满足你的行业合规要求;生产使用者需要自行完成依赖、权限、数据保护和合规审计。
如发现安全问题,请优先通过 [官网意见反馈](https://flashwarehouse.cn/zh/contact) 联系维护者,不要先公开利用细节或真实数据。
## 常见问题
### 是否永久免费?
源代码按 MPL-2.0 开源,可依许可自行使用、修改和部署。服务器、域名、短信、AI 模型、支付通道及其他第三方服务产生的费用由部署者自行承担。
### 仓库里有默认账号或生产数据吗?
没有。公开快照不包含生产账号和用户数据,请在自己的实例中注册并初始化业务数据。
### 为什么前端启动后无法请求后端?
依次检查:后端是否监听 `10086`、数据库是否为 `wms`、RSA 公私钥是否配套、前端代理是否生效,以及 CORS 是否允许当前来源。
### 为什么没有可直接安装的 APK?
公开仓库提供移动端源码和 app-plus 构建资源,不提供维护者的生产签名。请使用自己的应用标识和签名生成安装包。
### 可以用于二次开发和商业项目吗?
可以,但必须遵守 MPL-2.0。分发修改过的 MPL 覆盖文件时,需要按许可证要求提供相应源代码和许可声明。
## 项目 Wiki
使用与部署过程中遇到问题时,请先查看 [Gitee 在线 Wiki](https://gitee.com/zsjfj/flashwarehouse/wikis/Home)。Wiki 的版本化源文件同时保存在 [`docs/wiki/`](docs/wiki/Home.md),按症状整理了数据库、RSA、API/CORS、AI API Key、移动端打包、打印上传、生产部署与安全等排查步骤。
- [故障排查总览](docs/wiki/troubleshooting.md)
- [数据库与升级](docs/wiki/database.md)
- [PC 前端与 API](docs/wiki/frontend-api.md)
- [AI 助手](docs/wiki/ai-assistant.md)
- [移动端与打包](docs/wiki/mobile.md)
- [打印与文件](docs/wiki/printing-files.md)
- [API 集成测试](docs/wiki/integration-tests.md)
- [生产部署与安全](docs/wiki/production-security.md)
## 更多文档
> 根 README 与 Wiki 是当前快照的准确信息源。部分子目录 README 保留了历史设计说明,其中的旧端口、部署脚本或配置项可能已经过时;执行前请以实际源码配置和本 Wiki 为准。
- [后端历史设计说明](backend/README.md)
- [PC 管理端历史设计说明](frontend/README.md)
- [移动端说明](mobile/readme.md)
- [Android CI/CD](mobile/docs/ANDROID_CI_CD.md)
- [移动端打印模板指南](mobile/PRINT_TEMPLATE_GUIDE.md)
- [移动端样式指南](mobile/STYLE_GUIDE.md)
- [后端 API 集成测试](backend/tests/README.md)
- [后端架构时序图](backend/docs/WMS_Backend_Sequence_Diagrams.drawio)
- [PC 架构图](frontend/docs/WMS_PC_Architecture.drawio)
- [移动端架构图](mobile/docs/WMS_Mobile_Architecture.drawio)
`.drawio` 文件可以使用 [diagrams.net](https://app.diagrams.net/) 或 VS Code 的 Draw.io 插件打开。
## 参与贡献
欢迎提交 Issue、文档修正和代码改进:
1. Fork 本仓库并从 `master` 创建功能分支。
2. 保持改动范围清晰,不提交生成目录、密钥或个人数据。
3. 根据改动范围运行对应的构建和测试。
4. 在提交说明中写清问题、解决方式、验证结果和兼容性影响。
5. 通过 Gitee Pull Request 提交,并关联相关 Issue。
适合优先贡献的方向包括:部署文档、自动化测试、无障碍体验、国际化、移动端适配、依赖升级和安全加固。
## 支持项目
如果 FlashWarehouse 对你有帮助,欢迎通过支付宝自愿打赏,支持项目继续维护。打赏完全自愿,不构成购买、投资或服务承诺。
也可以通过 Star、Issue、文档修正或代码贡献支持项目。
## 开源许可
本仓库采用 [Mozilla Public License 2.0](LICENSE)(MPL-2.0)。使用、修改或分发前,请阅读许可证全文并遵守相应义务。