chore(M00-A): 建立单仓库基线和参考清单

This commit is contained in:
Codex
2026-06-15 15:34:50 +08:00
commit 28613b2093
62 changed files with 5830 additions and 0 deletions
+16
View File
@@ -0,0 +1,16 @@
* text=auto
*.sh text eol=lf
setup.sh text eol=lf
*.ps1 text eol=crlf
*.md text eol=lf
*.json text eol=lf
*.ts text eol=lf
*.js text eol=lf
*.vue text eol=lf
*.wxml text eol=lf
*.wxss text eol=lf
*.sql text eol=lf
*.zip binary
*.xjar binary
xjar binary
+36
View File
@@ -0,0 +1,36 @@
.env
.env.*
!.env.example
*.pem
*.key
*.p12
*.crt
*.csr
node_modules/
dist/
build/
coverage/
.cache/
.vite/
logs/
*.log
uploads/
backup/
backups/
*.bak
*.dump
*.sql.gz
*.zip.tmp
*.tmp
.DS_Store
Thumbs.db
# Recorded in docs/reference-inventory.md as a large-file blocked reference.
参考/mazongjian-server.xjar
# Raw reference archives or SQL with secrets, dependencies, or production data.
# Keep local copies only; commit sanitized extracts or metadata instead.
参考/easy-joy-life-main.zip
参考/24h_qipaishi-master(1).zip
参考/小程序源代码.zip
参考/db_20260427.sql
+24
View File
@@ -0,0 +1,24 @@
# 自助棋牌室系统
本仓库是 `panda/qipai.git` 的单一 Monorepo 工作区,固定 Windows 开发路径为 `D:\qipai`
## 固定约束
- 当前权威总纲:`V4.8.md`
- 固定远端:`ssh://git@git.txyundm.cn:2222/panda/qipai.git`
- 默认分支:`main`
- 生产域名:`https://api.txyundm.cn`
- 生产系统:Ubuntu Server 24.04 x86-64/amd64
- 部署方式:无 Docker,使用根目录 `setup.sh` 菜单式部署
## 目录
- `backend/`Fastify + TypeScript 后端 API
- `admin/`Vue3 后台管理端
- `miniapp/`:微信原生小程序
- `database/`:迁移、种子和兼容 SQL
- `deploy/`:部署说明、版本和生产配置模板
- `scripts/`Windows、WSL 和 Ubuntu 辅助脚本
- `docs/`:模块状态、开发日志、变更记录和验收文档
- `参考/`:只读参考资料,正式开发不得直接在其中二开
+4626
View File
File diff suppressed because it is too large Load Diff
+1
View File
@@ -0,0 +1 @@
+1
View File
@@ -0,0 +1 @@
+1
View File
@@ -0,0 +1 @@
+1
View File
@@ -0,0 +1 @@
+33
View File
@@ -0,0 +1,33 @@
# 部署说明
本项目生产环境固定为 Ubuntu Server 24.04 x86-64/amd64,无桌面环境,禁止 Docker。生产入口固定为 `/opt/apps/setup.sh`,本仓库根目录 `setup.sh` 是同源菜单脚本。
## 环境边界
- Windows`D:\qipai`,唯一正式开发、测试、提交和推送工作区。
- WSL`/mnt/d/qipai`,仅做轻量检查;完整 Linux 构建必须复制到 WSL 原生临时目录。
- Ubuntu`/opt/apps`,由管理员通过菜单执行安装、更新、备份、恢复、回滚和诊断。
## 固定地址
- Gitea SSH`ssh://git@git.txyundm.cn:2222/panda/qipai.git`
- 生产只读 SSH`ssh://git@127.0.0.1:2222/panda/qipai.git`
- API`https://api.txyundm.cn`
- App API`https://api.txyundm.cn/app-api`
- Admin API`https://api.txyundm.cn/admin-api`
## 菜单
1. 首次安装
2. 更新业务服务
3. 安装或检查 EMQX
4. 配置域名与 HTTPS
5. 查看状态
6. 备份
7. 恢复
8. 回滚
9. 诊断
0. 退出
当前版本仅提供 M00 菜单骨架和安全提示,生产安装动作将在后续 M00-D/M00-E 完善。
+2
View File
@@ -0,0 +1,2 @@
0.0.1-m00-baseline
+1
View File
@@ -0,0 +1 @@
+21
View File
@@ -0,0 +1,21 @@
# API 域名测试报告
| 环境 | 检查项 | 命令/步骤 | 期望 | 实际 | 结果 | 时间 |
|---|---|---|---|---|---|---|
| Windows | DNS/HTTPS | `check-api-domain.ps1` | PASS | 未执行 | - | - |
| WSL | TLS/健康接口 | `check-api-domain.sh` | PASS | 未执行 | - | - |
| Ubuntu | Nginx/证书/公开 API | `setup.sh` 环境检测 | PASS | 未执行 | - | - |
| 微信开发者工具 | request/upload/download | 关闭忽略合法域名 | 成功 | 未执行 | - | - |
| 微信真机 | 登录/上传/下载/下单/开门 | 体验版 | 成功 | 未执行 | - | - |
## 生产产物扫描
- 后端:未生成
- 后台 dist:未生成
- 小程序:未导入
- 是否发现旧域名/HTTP/IP/localhost:待扫描
## 问题与修复
- 当前仅建立报告模板。
+1
View File
@@ -0,0 +1 @@
+37
View File
@@ -0,0 +1,37 @@
# 旧数据库结构清单
> 来源:`参考/db_20260427.sql` 与 `easy-joy-life-main.zip` 中 SQL 的隔离初审。原 SQL 含 `INSERT` 数据、文件 URL、日志和业务配置,已从 Git 跟踪中移出。本清单仅记录表结构线索和后续迁移参考方向。
## `db_20260427.sql` 表分组
| 分组 | 表名 | 可参考点 |
|---|---|---|
| 平台基础/系统 | `system_tenant`, `system_tenant_package`, `system_users`, `system_role`, `system_menu`, `system_role_menu`, `system_dept`, `system_post`, `system_user_role`, `system_user_post` | 多租户、角色、菜单、部门和平台后台权限模型。 |
| 字典/通知/日志 | `system_dict_type`, `system_dict_data`, `system_notice`, `system_notify_template`, `system_notify_message`, `system_operate_log`, `system_login_log`, `system_error_code`, `system_sensitive_word` | 字典、通知模板、站内通知、操作日志和错误码。 |
| 短信/邮件/OAuth | `system_sms_channel`, `system_sms_template`, `system_sms_code`, `system_sms_log`, `system_mail_account`, `system_mail_template`, `system_mail_log`, `system_oauth2_access_token`, `system_oauth2_refresh_token`, `system_oauth2_client`, `system_oauth2_code`, `system_oauth2_approve`, `system_social_user`, `system_social_user_bind` | 第三方登录、短信、邮件和 OAuth 体系,仅作抽象参考。 |
| 基础设施 | `infra_config`, `infra_file`, `infra_file_config`, `infra_file_content`, `infra_job`, `infra_job_log`, `infra_api_access_log`, `infra_api_error_log`, `infra_codegen_table`, `infra_codegen_column`, `infra_data_source_config`, `infra_test_demo` | 配置、文件、定时任务、API 日志和代码生成。 |
| 门店/房间 | `member_store_info`, `member_room_info`, `member_store_user`, `member_store_template`, `member_store_sound_info` | 门店、房间、门店员工、装修模板和语音配置。 |
| 设备/门禁 | `member_device_info`, `member_device_use_info`, `member_face_record`, `member_face_blacklist` | 设备绑定、设备使用记录、人脸记录和黑名单。 |
| 订单/支付 | `member_order_info`, `member_pay_order`, `member_product_order`, `member_group_pay_info`, `member_store_pay_config`, `member_store_wxpay_config`, `member_store_pay_split`, `member_merchant_account` | 订单、支付订单、商品订单、团购支付、门店支付配置、微信支付配置和分账。 |
| 会员/资金 | `member_user`, `member_user_money_bill`, `member_user_withdrawal`, `member_store_vip_config`, `member_pkg_info`, `member_pkg_user_info` | 会员、余额流水、提现、会员配置、套餐和用户套餐。 |
| 优惠/营销 | `member_coupon_info`, `member_coupon_active`, `member_discount_rules`, `member_lottery_info`, `member_lottery_detail`, `member_banner_info`, `member_holiday` | 优惠券、活动、折扣、抽奖、广告和节假日。 |
| 保洁/加盟/美团 | `member_clear_info`, `member_clear_bill`, `member_franchise_info`, `member_store_meituan_info` | 保洁任务/账单、加盟信息和美团门店配置。 |
| 库存/商品 | `member_inventory_info`, `member_inventory_detail`, `member_inventory_goods`, `member_inventory_record`, `member_game_info`, `yshop_store_product`, `yshop_store_product_attr`, `yshop_store_product_attr_value`, `yshop_store_product_attr_result`, `yshop_store_product_brand`, `yshop_store_product_category`, `yshop_store_product_relation`, `yshop_store_product_reply`, `yshop_store_product_rule` | 库存、商品、游戏/娱乐项目和商品规格。 |
| 调度 | `qrtz_job_details`, `qrtz_triggers`, `qrtz_cron_triggers`, `qrtz_simple_triggers`, `qrtz_blob_triggers`, `qrtz_simprop_triggers`, `qrtz_fired_triggers`, `qrtz_calendars`, `qrtz_locks`, `qrtz_paused_trigger_grps`, `qrtz_scheduler_state` | Quartz 调度表;新系统首期按 V4.8 使用 MySQL outbox + PM2 worker,不照搬 Quartz。 |
## `easy-joy-life-main.zip` SQL 表线索
| 文件 | 表名 | 可参考点 |
|---|---|---|
| `schema.sql` | `users`, `stores`, `rooms`, `orders`, `order_cancel_records`, `payments`, `devices`, `admins`, `system_config`, `admin_users`, `admin_roles`, `admin_permissions`, `admin_user_roles`, `admin_role_permissions`, `admin_operation_logs`, `openapi_call_logs` | 轻量 MVP 表结构,适合参考第一阶段核心闭环。 |
| `mysql-init.sql` | `stores`, `rooms`, `users`, `payment_orders`, `order_cancel_records`, `user_wallets`, `wallet_transactions`, `admin_users`, `admin_roles`, `admin_permissions`, `admin_user_roles`, `admin_role_permissions`, `admin_operation_logs`, `openapi_call_logs`, `system_config` | 门店、房间、用户、支付订单、钱包和后台权限初始化。 |
| `db-init-bank-card-paypassword.sql` | `user_bank_cards`, `user_pay_passwords` | 银行卡和支付密码能力,后续资金功能参考。 |
| `data.sql` | `stores`, `rooms` | 示例种子数据;不导入真实项目。 |
## 迁移原则
- 只从旧 SQL 提取表意、字段类别、状态枚举和业务关系。
- 不提交原始 `INSERT` 数据,不导入旧文件 URL、日志、用户数据或生产配置。
- 正式迁移文件必须重新设计 `tenant_id` 隔离、索引、审计字段和回滚 SQL。
- 首期后端按 V4.8 固定为 Fastify + Kysely + MySQL,不复用 Java/Spring 表生成方式。
+13
View File
@@ -0,0 +1,13 @@
# 部署变更记录
## 2026-06-15 / 0.0.1-m00-baseline
- 关联模块:M00
- 关联 commit:本地 HEADpush 待完成)
- 变化内容:建立根目录 `setup.sh`、部署目录和状态文档。
- 配置变化:固定 `api.txyundm.cn``/opt/apps`、Ubuntu 24.04 amd64。
- 数据库变化:无。
- 兼容性:当前仅菜单骨架,不执行生产改动。
- 已执行验证:待运行脚本。
- 回滚方式:尚未生产部署,无生产回滚。
- 生产环境人工步骤:后续由管理员在 Ubuntu `/opt/apps/setup.sh` 执行。
+42
View File
@@ -0,0 +1,42 @@
# 部署状态
| 项目 | 当前值 |
|---|---|
| 菜单脚本版本 | 0.0.1-m00-baseline |
| Gitea 仓库 Web | https://git.txyundm.cn/panda/qipai.git |
| API 固定域名 | https://api.txyundm.cn |
| 小程序 API | https://api.txyundm.cn/app-api |
| 后台 API | https://api.txyundm.cn/admin-api |
| 上传文件基址 | https://api.txyundm.cn/uploads/ |
| HTTPS 证书到期时间 | 未验证 |
| 证书续期 dry-run | 未验证 |
| 微信合法域名 | 未验证 |
| Gitea 仓库 SSH | ssh://git@git.txyundm.cn:2222/panda/qipai.git |
| 生产拉取仓库 | ssh://git@127.0.0.1:2222/panda/qipai.git |
| 默认分支 | main |
| 最近模块 push commit | 本地 HEADpush 待完成) |
| 最近 push 远端校验 | 未通过:`git.txyundm.cn:2222` 主机指纹未确认/SSH 连接不稳定 |
| 目标系统 | Ubuntu 24.04 |
| 内核架构 | x86_64 |
| DPKG 架构 | amd64 |
| 用户空间位数 | 64 |
| EMQX 版本/架构 | 未安装/未验证 |
| 服务器 MQTTX | 不安装 |
| 命令行 MQTT 工具 | mosquitto-clients:未安装/未验证 |
| Windows MQTTX 验证 | 未验证 |
| WSL 环境验证 | 未验证 |
| 最近环境快检 | 2026-06-15 本地骨架检查 |
| 最近部署后复检 | 未执行 |
| 最近验证 commit | 本地 HEAD(本地);M00-C 推送脚本语法检查通过 |
| 最近验证日期 | - |
| 已验证系统 | Ubuntu 24.04 / 未验证 |
| 菜单 1 首次安装 | 未验证 |
| 菜单 2 更新业务 | 未验证 |
| 菜单 3 MQTT | 未验证 |
| 菜单 4 域名与 HTTPS | 未验证 |
| 菜单 5 状态 | 未验证 |
| 菜单 6 备份 | 未验证 |
| 菜单 7 恢复 | 未验证 |
| 菜单 8 回滚 | 未验证 |
| 菜单 9 诊断 | 未验证 |
| 已知限制 | 当前仅为 M00 基线骨架,未执行生产部署。 |
+1
View File
@@ -0,0 +1 @@
@@ -0,0 +1,60 @@
# 开发日志:2026-06-15 M00-A/M00-B 单仓库基线
## 范围
- 建立 `D:\qipai` 单一 Git 根和固定 origin。
- 创建进度文档、仓库地图、部署状态、参考清单和脱敏日志。
-`参考/` 首批文件生成外层 SHA-256。
- 脱敏旧 `参考/env` 中的密码类字段。
- 创建根目录菜单脚本和 Windows/WSL 检查脚本骨架。
- 对 4 个参考压缩包执行隔离解包初审,识别技术栈、依赖目录和敏感配置风险。
- 将含密钥/依赖/真实数据风险的原始参考包和 SQL 从 Git 跟踪中移出,仅保留哈希和审计结论。
- 生成 `docs/reference-page-map.md``docs/db-schema-inventory.md``docs/reference-api-inventory.md` 作为可提交脱敏摘要。
- 生成 `scripts/dev/windows/push-module.ps1``check-gitea-ssh.ps1`,串联模块检查、提交、推送和远端校验。
## 起始状态
- `D:\qipai` 初始不是 Git 仓库。
- 根目录仅有 `V4.8.md``参考/`
- `参考/` 包含多个压缩包、SQL、旧运行包和旧启动脚本。
## 复用/改写/弃用判断
- 旧小程序、后台和同类项目压缩包:仅作参考,待隔离解包审计后再迁入正式目录。
- 旧 SQL:仅参考表结构,不直接导入真实数据。
-`.env`:只保留变量类别,真实值已脱敏。
- `mazongjian-server.xjar`:仅观察旧接口行为,不反编译、不作为新系统运行依赖。
- `easy-joy-life-main.zip`:含 Spring Boot 后端、小程序、SQL、PEM 和支付配置;只抽象参考订单/设备/钱包/权限设计,原包不提交。
- `24h_qipaishi-master(1).zip``小程序源代码.zip`:含微信原生小程序页面、依赖目录、旧 AppID 和旧 API 域名;只记录页面和业务流程,原包不提交。
- `db_20260427.sql`:含旧业务数据、文件 URL 和任务日志;原 SQL 不提交,后续生成脱敏 schema-only。
## 部署影响
有。新增 `setup.sh` 菜单骨架和部署状态文档,但未执行生产部署。
## 测试记录
- Windows 检查:已执行 `scripts/dev/windows/test-all.ps1`,工作区、参考目录、行尾检查通过;发现 `参考/mazongjian-server.xjar` 超过 100MB,已按大文件阻断项记录并忽略。
- 敏感信息检查:已执行 `scripts/dev/windows/check-secrets.ps1`,未发现明文敏感信息模式。
- 参考解包审计:`check-reference.ps1` 已输出 ZIP-AUDIT 摘要;`easy-joy-life-main.zip` 发现 5 个敏感配置/证书类文件;两个小程序包各发现依赖目录。
- 脱敏摘要:已生成页面地图、数据库结构清单和接口线索文档。
- Windows 推送脚本:已新增,遇到 SSH 主机指纹问题时停止,不自动覆盖 `known_hosts`
- PowerShell 语法检查:`push-module.ps1``check-gitea-ssh.ps1` 均已通过 Parser 检查。
- WSL 检查:未执行,本轮仅完成 Windows 基线脚本。
- Git fetch/push`git fetch --prune origin` 连接 `git.txyundm.cn:2222` 曾超时;最新 `git push origin main` 返回 `Host key verification failed`,随后 `ssh -vvv -T -p 2222 git@git.txyundm.cn` 超时。当前无法安全确认远端主机指纹。
## 风险
- 参考压缩包尚未完成逐文件解包审计。
- `mazongjian-server.xjar` 体积约 194MB,暂不纳入普通 Git 提交;待确认 Git LFS 或等价归档策略。
- 原始小程序包、`easy-joy-life-main.zip` 和旧 SQL 已确认不适合直接提交;后续必须生成脱敏摘录或结构化迁移草案。
- 当前无法完成 Gitea SSH 主机指纹确认和 push,模块不能标记 DONE。
## Git 与 Gitea
- 远端:`ssh://git@git.txyundm.cn:2222/panda/qipai.git`
- 分支:`main`
- commit:本地 HEAD(最终哈希见 `git log -1 --oneline`
- push 结果:失败,最新为 `Host key verification failed`;详细 SSH 连接测试超时
- HEAD 与 origin/main:待校验
- 重试命令:先人工确认 `git.txyundm.cn:2222` 主机指纹,再执行 `git fetch --prune origin && git push origin main && git fetch origin main`
+44
View File
@@ -0,0 +1,44 @@
# API 域名与 HTTPS
## 固定地址
- Origin: https://api.txyundm.cn
- App API: https://api.txyundm.cn/app-api
- Admin API: https://api.txyundm.cn/admin-api
- Uploads: https://api.txyundm.cn/uploads/
- Admin Web: https://api.txyundm.cn/admin/
## DNS
- A/AAAA 记录:未验证
- 当前服务器公网 IP:未验证
- 最近验证时间:未验证
## Nginx
- 配置文件:待生成
- 配置备份:待生成
- `nginx -t`:未执行
- 路由检查:未执行
## 证书
- 签发机构:未验证
- SAN:未验证
- 生效/到期:未验证
- 剩余天数:未验证
- 自动续期:未验证
- 最近 dry-run:未执行
## 微信合法域名
- request:未验证
- uploadFile:未验证
- downloadFile:未验证
- 真机验证:未执行
## 回滚
- 上一个配置:无
- 恢复命令:待生成
+9
View File
@@ -0,0 +1,9 @@
# 外部依赖
| 编号 | 类型 | 功能 ID | 所需资料 | 当前状态 | Mock 是否完成 | 负责人/来源 | 下一步 |
|---|---|---|---|---|---|---|---|
| EXTDEP-001 | Gitea | SCM-001/OPS-002 | `ssh://git@git.txyundm.cn:2222/panda/qipai.git` 访问权限 | 待首次 push 验证 | 不适用 | 用户/Gitea | 首次提交后执行 push 与 `HEAD == origin/main` 校验。 |
| EXTDEP-002 | Ubuntu 服务器 | OPS-001/OPS-004/TLS-001 | Ubuntu 24.04 x86-64、域名、Nginx、证书权限 | 待生产人工执行 | 否 | 用户/服务器 | Codex 仅维护菜单脚本,不自动生产部署。 |
| EXTDEP-003 | 硬件 | IOT-001 | EMQX 主机、控制箱、门锁、插座和厂商协议 | 待实机联调 | 否 | 用户/厂商 | 后续 M06 完成适配器和 Mock。 |
| EXTDEP-004 | 微信平台 | WXNET-001 | 小程序 AppID、合法域名、真机体验权限 | 待提供/验证 | 否 | 用户/微信公众平台 | M08/M10 验证真机链路。 |
+19
View File
@@ -0,0 +1,19 @@
# 功能状态
> 只能使用 TODO / DOING / PARTIAL / BLOCKED_INTERNAL / BLOCKED_EXTERNAL / DONE。
| ID | 功能 | 模块子阶段 | 状态 | 最近提交 | 测试/验收证据 | 阻塞原因 | 下一步 |
|---|---|---|---|---|---|---|---|
| ENV-001 | 固定 Windows 工作区 | M00-A/M00-B | PARTIAL | 本地 HEAD | 已确认 `D:\qipai`,已初始化 Git 根并完成本地提交;待 push 校验。 | Gitea SSH 超时。 | 恢复网络后推送并校验 `HEAD == origin/main`。 |
| REF-001 | 参考资料完整纳管 | M00-A | PARTIAL | 本地 HEAD | 已生成哈希清单、脱敏日志、页面地图、接口线索和旧数据库结构清单;含秘密/依赖/真实数据风险的原始包和 SQL 已移出 Git 跟踪。 | 后续仍需按模块生成正式源码/迁移,旧 xjar 需大文件策略。 | 进入 M00-B/M00-C 前继续保持原包忽略和摘要可追溯。 |
| SCM-001 | 模块完成即完整推送 | M00-B/M00-C | BLOCKED_INTERNAL | 本地 HEAD | 已配置固定 origin 并完成本地提交;push 未完成。 | `git.txyundm.cn:2222` 主机指纹未确认/SSH 连接不稳定。 | 人工确认主机指纹后重试 fetch/push 并校验远端。 |
| WSL-001 | WSL 隔离辅助验证 | M00-C | PARTIAL | 本地 HEAD | 已生成 WSL 轻量检查、临时副本、Linux 语法验证、MQTT 冒烟和清理脚本;尚未在 WSL 环境执行。 | WSL 实际执行未验证。 | 在可用 WSL 中运行 `scripts/dev/wsl/verify-linux.sh`。 |
| API-001 | 固定 HTTPS API 域名 | M00-E/M01/M08/M10 | TODO | - | - | DNS/HTTPS 生产验证未执行。 | 在部署脚本和代码中统一 `api.txyundm.cn`。 |
| TLS-001 | Nginx 与证书自动化 | M00-E/M10 | TODO | - | - | DNS/80/443 生产验证未执行。 | 补菜单脚本和证书检查。 |
| WXNET-001 | 微信合法域名与真机验证 | M00-E/M08/M10 | TODO | - | - | 微信后台/真机未验证。 | 先完成检查报告模板。 |
| OPS-001 | 固定 `/opt/apps` 目录 | M00-D/M10 | TODO | - | - | Ubuntu 生产操作未执行。 | 生成部署菜单和目录检查。 |
| OPS-002 | 单仓库 Gitea 推送与拉取部署 | M00-B/M10 | BLOCKED_INTERNAL | 本地 HEAD | origin 已设置,本地提交完成;远端 push 未完成。 | `git.txyundm.cn:2222` 主机指纹未确认/SSH 连接不稳定。 | 人工确认主机指纹后重试首次提交推送。 |
| OPS-003 | 整仓发布清单 | M00-E/M10 | TODO | - | - | - | 生成 release manifest 模板。 |
| OPS-004 | 菜单式更新与环境监测 | M00-E/M10 | TODO | - | - | - | 生成 `setup.sh``scripts/setup`。 |
| IOT-001 | MQTT Broker 生产部署 | M00/M06 | TODO | - | - | 缺生产 EMQX 实机验证。 | 先完成部署文档和 MQTT 状态模板。 |
| SYS-001 | 微信原生小程序 | M00-C/M08 | TODO | - | - | 参考小程序压缩包尚未深度整理。 | 后续导入正式 `miniapp/`。 |
+43
View File
@@ -0,0 +1,43 @@
# Git 与部署流
## 固定仓库
- Windows/WSL SSH`ssh://git@git.txyundm.cn:2222/panda/qipai.git`
- 生产同机只读 SSH`ssh://git@127.0.0.1:2222/panda/qipai.git`
- 默认分支:`main`
## 本地推送
1.`D:\qipai` 完成一个模块子阶段。
2. 运行 Windows 检查脚本。
3. 提交本模块相关文件。
4. 执行 `git push origin main`
5. 执行 `git fetch origin main` 并校验 `HEAD == origin/main`
推荐使用:
```powershell
powershell -ExecutionPolicy Bypass -File scripts/dev/windows/push-module.ps1 `
-Message "chore(M00-C): 完善模块推送脚本" `
-Paths @("scripts/dev/windows/push-module.ps1", "docs/git-deployment.md")
```
如出现 `Host key verification failed`,先通过可信渠道确认 `git.txyundm.cn:2222` 的 SSH 主机指纹,再更新 `known_hosts`。Codex 不自动覆盖主机信任记录。
## SSH 检查
```powershell
powershell -ExecutionPolicy Bypass -File scripts/dev/windows/check-gitea-ssh.ps1
```
该脚本只检查已有 known_hosts 与 SSH 握手,不自动写入新主机指纹。
## 当前已知阻塞
- 本地 `known_hosts` 只有 `[localhost]:2222` 记录,未安全确认 `[git.txyundm.cn]:2222`
- 最新 push 返回 `Host key verification failed`
- 在可信渠道确认主机指纹前,不应自动追加或覆盖 known_hosts。
## 生产发布
生产服务器不得因 Gitea push 自动发布。管理员必须在 Ubuntu 上通过 `/opt/apps/setup.sh` 菜单拉取、构建、迁移和复检。
+6
View File
@@ -0,0 +1,6 @@
# 硬件联调报告
| 时间 | 设备 | 场景 | 环境 | 结果 | 证据 | 问题 |
|---|---|---|---|---|---|---|
| 2026-06-15 | - | 尚未联调 | 本地文档骨架 | 未执行 | - | 缺实机联调。 |
+9
View File
@@ -0,0 +1,9 @@
# 硬件厂商与设备
| 设备 | 当前资料 | 状态 | 下一步 |
|---|---|---|---|
| 4G 智能门禁控电箱 | 待在参考资料中定位正式协议 | TODO | M06 前完成协议录入。 |
| Sub-1G 智能门锁 | 待在参考资料中定位正式协议 | TODO | M06 前完成绑定和控制模型。 |
| 4G 智慧插座 | 待在参考资料中定位正式协议 | TODO | M06 前完成型号能力识别。 |
| EMQX Broker | 固定主机 `101.42.38.246` | TODO | M00/M10 生成部署与巡检。 |
+15
View File
@@ -0,0 +1,15 @@
# 模块状态
| 模块 | 状态 | 最近提交 | 最近开发日志 | 备注 |
|---|---|---|---|---|
| M00 单仓库与服务器基础骨架 | PARTIAL | 本地 HEAD | docs/devlogs/2026-06-15-M00-A-单仓库基线.md | 本地提交完成;Gitea SSH 超时,push 成功前不得标记 DONE。 |
| M01 后端 API 基础工程 | TODO | - | - | 等 M00 基线完成后开始。 |
| M02 登录、租户、权限 | TODO | - | - | - |
| M03 门店、房间、价格、营业时间 | TODO | - | - | - |
| M04 订单、时段锁定、支付闭环 | TODO | - | - | - |
| M05 会员、余额、套餐、优惠券 | TODO | - | - | - |
| M06 设备、MQTT 与真实硬件联动 | TODO | - | - | - |
| M07 保洁、通知、任务和语音播报 | TODO | - | - | - |
| M08 微信原生小程序完整业务 | TODO | - | - | - |
| M09 后台管理端完整业务 | TODO | - | - | - |
| M10 部署、域名、验收和运维闭环 | TODO | - | - | - |
+16
View File
@@ -0,0 +1,16 @@
# MQTT 部署记录
| 项目 | 当前值 |
|---|---|
| Broker 主机 | 101.42.38.246 |
| Broker 软件 | EMQX 5.x,待安装/验证 |
| 安装方式 | Ubuntu Apt 原生安装,禁止 Docker |
| MQTTX | 服务器不安装,Windows 可使用 |
| 命令行工具 | mosquitto-clients 可选 |
| 匿名连接 | 待验证关闭 |
| ACL | 待配置 |
| 1883 | 待验证 |
| 18083 | 待验证不对公网任意开放 |
| 备份 | 待生成 |
| 恢复 | 待生成 |
+10
View File
@@ -0,0 +1,10 @@
# MQTT 协议映射
当前尚未完成厂商协议深度录入。后续 M06 必须以正式协议文档为准,记录 Topic、命令、字段、回包、超时、重试和审计要求。
| 设备 | Topic/命令 | 方向 | 字段 | 状态 |
|---|---|---|---|---|
| 4G 智能门禁控电箱 | 待补充 | 双向 | 待补充 | TODO |
| Sub-1G 智能门锁 | 待补充 | 双向 | 待补充 | TODO |
| 4G 智慧插座 | 待补充 | 双向 | 待补充 | TODO |
+41
View File
@@ -0,0 +1,41 @@
# 参考接口线索
> 本文档只记录接口路径类别和迁移方向,不记录旧域名、AppID、Token、密钥或真实请求参数。
## 小程序旧接口模式
旧小程序通过 `app.globalData.baseUrl + path` 拼接接口。旧 `baseUrl` 已确认不是正式域名,正式迁移必须统一为:
```text
https://api.txyundm.cn/app-api
```
| 类别 | 旧路径线索 | 新系统迁移方向 |
|---|---|---|
| 用户/登录 | 登录、手机号、用户资料、token 存储 | M02/M08 统一微信登录、手机号授权、角色识别和 token 刷新。 |
| 门店/房间 | 门店列表、房间列表、房间详情、地图定位 | M03/M08 提供租户隔离的门店、房间、营业时间和价格查询。 |
| 订单 | 创建订单、订单列表、订单详情、取消、换房、续费 | M04/M08 实现时间段锁定、订单状态机、续费/取消/换房。 |
| 支付/资金 | 支付、余额、充值、套餐、支付订单 | M04/M05 接入微信支付、余额、套餐和资金流水;缺商户资料时做 Mock。 |
| 团购/优惠 | 团购、优惠券、抽奖、活动 | M05/M10 建模优惠券、团购验券和活动配置。 |
| 保洁 | 保洁任务、任务详情、任务统计、任务结算 | M07/M08 实现保洁角色、抢单/完成/驳回和结算。 |
| 设备/开门 | 门锁、网关、设备列表、开门提交、Wi-Fi 配置 | M06/M08 接入 MQTT 设备适配器,开门权限必须绑定有效订单。 |
| 后台管理小程序入口 | 管理员、门店管理、房间管理、模板、推送规则 | M08/M09 明确小程序管理端与 Web 后台的权限边界。 |
| 库存/商品 | 库存商品、出入库、商品分类、商品订单 | 后续运营功能,不进入第一阶段核心闭环。 |
| 外部平台 | 美团预订、易达取消、第三方支付桥 | 外部授权缺失时标记 `BLOCKED_EXTERNAL`,保留适配器和 Mock。 |
## 后台静态包接口线索
`参考/后台管理系统_20260427.zip` 为构建产物,静态 JS 中可见后台 API、字典和权限命名痕迹,但不得作为正式源码。后续 M09 只参考:
- 菜单结构和页面覆盖范围。
- 字典枚举名称。
- 管理端列表/表单字段。
- API 前缀迁移到 `https://api.txyundm.cn/admin-api`
## 禁止事项
- 禁止把旧 `baseUrl`、localhost、IP、旧域名写入正式代码。
- 禁止复用旧 AppID、AppSecret、支付密钥、证书路径和真实商户号。
- 禁止直接复制构建产物作为 Vue3 后台源码。
- 禁止让小程序绕过微信合法域名验证。
+22
View File
@@ -0,0 +1,22 @@
# 参考资料清单
| 路径 | 类型 | 大小 | SHA-256 | 来源 | 用途 | 是否解压审计 | 敏感性 | Git 状态 |
|---|---|---:|---|---|---|---|---|---|
| `参考/24h_qipaishi-master(1).zip` | zip | 11649307 | `013ABA400BA44002DED6FF63D4E2480A080A9F1CB40E350916030DEBD7CE3D9A` | 用户提供 | 参考同类棋牌室源码结构 | 已隔离解包初审 | 含 `node_modules`/`miniprogram_npm` 和旧 AppID/旧域名,需清理后纳管 | 阻断,原包暂不提交 |
| `参考/db_20260427.sql` | SQL | 5221326 | `B6D67B37FDA6B2C277A80A5D5FA7A7B54B3DE1049F0E3C16EBB1331CD6D8B8C7` | 用户提供 | 参考旧数据库表和字段 | 已初扫 | 含 INSERT 数据、文件 URL、日志和业务配置,需生成脱敏结构版 | 阻断,原 SQL 暂不提交 |
| `参考/easy-joy-life-main.zip` | zip | 13660811 | `FC2B53CC0301B636B5BEC1E8A13223ED00B0D2DF5F101DAE67AC64722B5052FD` | 用户提供 | 参考无人棋牌室业务闭环 | 已隔离解包初审 | 含 PEM、支付密钥、AppSecret、数据库密码和生产/测试域名 | 阻断,原包暂不提交 |
| `参考/env` | env 样例 | 1195 | `D8557B6314E39BF0E010087D39D253461CDD6185215488B400B13389C4476391` | 用户提供 | 参考旧运行包变量类别 | 不适用 | 已发现并脱敏 | 待提交 |
| `参考/mazongjian-server.xjar` | 旧后端运行包 | 194259651 | `E2403E24670CA9366BBB4CC2844E1979F3060C9ABEB0D76506BA0893677C17F0` | 用户提供 | 仅观察旧接口行为,不作为新系统依赖 | 不反编译 | 大文件,许可/体积风险 | 大文件阻断,暂不提交;已记录哈希 |
| `参考/start.sh` | shell | 1265 | `31C39BD7AE3994BB9B6F63AAB2CFF77ED9D7800ABF37D276556A28B8D9E2FCD8` | 用户提供 | 参考旧服务启动方式 | 不适用 | 需确认无秘密 | 待提交 |
| `参考/stop.sh` | shell | 771 | `5E218E887C43B5439C9BFCC216F34E15C03F3A0F6A16596BDEDD4D477D55BF94` | 用户提供 | 参考旧服务停止方式 | 不适用 | 需确认无秘密 | 待提交 |
| `参考/xjar` | 二进制工具 | 2150870 | `AC02279C343A008D6CC9FC4CC7983DEC1984775B4182F48AC628A20124784F66` | 用户提供 | 旧运行包相关工具,正式系统不依赖 | 不适用 | 二进制许可风险 | 待提交 |
| `参考/后台管理系统_20260427.zip` | zip | 9297096 | `9E5F09AFC38ADEB4FFAD724406F95D7F4E6494A8C3572486ED81C5C1E1FAF0F2` | 用户提供 | 参考旧后台静态/源码 | 待完成 | 未知,需解包扫描 | 待提交 |
| `参考/小程序源代码.zip` | zip | 11579802 | `6EC18BE0C5E0602C75E114A12772F13E96BBAFCE6817ECE3FE0BF84D93B33A25` | 用户提供 | 参考旧微信小程序页面和接口 | 已隔离解包初审 | 含 `node_modules`/`miniprogram_npm`、旧 AppID、旧域名和 localhost 示例 | 阻断,原包暂不提交 |
## 当前结论
- 未发现生效的嵌套 `.git` 目录。
- `参考/env` 已脱敏,真实值不进入仓库,当前哈希为脱敏后的文件哈希。
- `24h_qipaishi-master(1).zip``小程序源代码.zip``easy-joy-life-main.zip``db_20260427.sql` 已完成隔离初审;原始文件暂不提交,后续只提交脱敏后的结构、源码或摘要。
- 压缩包和 SQL 已完成首轮隔离审计并发现阻断项;已生成 `reference-page-map``db-schema-inventory``reference-api-inventory` 三份脱敏摘要。M00-A 仍需后续生成可迁移源码/SQL 后才能完全 DONE。
- 大文件 `参考/mazongjian-server.xjar` 已记录哈希并加入忽略,待确认 Git LFS 或等价归档策略后再处理。
+53
View File
@@ -0,0 +1,53 @@
# 参考小程序页面地图
> 来源为隔离临时目录解包初审结果。本文档只记录页面路径和业务用途,不记录旧 AppID、旧域名、密钥或真实数据。
## `小程序源代码.zip` / `24h_qipaishi-master(1).zip`
两包页面结构高度一致,均为微信原生小程序,使用 Vant Weapp,并包含主包、`packageA` 管理分包和 `inventory` 库存分包。原包含 `node_modules` / `miniprogram_npm`、旧 AppID、旧 API 域名和 localhost 示例,已作为本地阻断项,不直接提交。
### 主包页面
| 分类 | 页面路径 | 可参考点 |
|---|---|---|
| 首页/门店 | `pages/index/index`, `pages/shop/shop`, `pages/location/location`, `pages/map/map`, `pages/tencentMap/tencentMap` | 门店展示、定位、地图选点和门店列表入口。 |
| 房间/门店选择 | `pages/doorList/doorList`, `pages/door/door`, `pages/doorSelect/doorSelect`, `pages/doorDetail/doorDetail` | 房间列表、房间详情、选择房间和门店房间联动。 |
| 下单/订单 | `pages/placeOrder/placeOrder`, `pages/orderSubmit/orderSubmit`, `pages/orderList/orderList`, `pages/orderDetail/orderDetail`, `pages/searchOrder/index` | 创建订单、订单列表、订单详情、订单搜索。 |
| 支付/续费/余额 | `pages/pay/pay`, `pages/roomRenew/roomRenew`, `pages/recharge/recharge`, `pages/myBalance/myBalance`, `pages/getBalance/getBalance`, `pages/yeepay/index`, `pages/yeepay/agreement` | 支付、续费、充值、余额和第三方支付入口。 |
| 团购/优惠 | `pages/tuangou/tuangou`, `pages/coupon/coupon`, `pages/couponActive/index`, `pages/coupon/lottery` | 团购券、优惠券、活动和抽奖入口。 |
| 用户/登录 | `pages/login/login`, `pages/user/user`, `pages/setUserInfo/setUserInfo`, `pages/setUserName/setUserName`, `pages/setUserPhone/setUserPhone`, `pages/join/join` | 登录、用户资料、手机号和加盟入口。 |
| 其他业务 | `pages/productOrder/productOrder`, `pages/productOrderInfo/productOrderInfo`, `pages/inventory/index`, `pages/ktv/index`, `pages/help/help`, `pages/booking/booking`, `pages/changeDoor/changeDoor`, `pages/doorSubmit/doorSubmit` | 商品订单、库存入口、KTV、帮助、预约、换房和开门提交。 |
### `packageA` 管理分包
| 分类 | 页面路径 | 可参考点 |
|---|---|---|
| 管理首页 | `pages/admin/admin`, `pages/statics/statics`, `pages/guide/guide` | 管理员首页、统计和引导页。 |
| 门店/房间 | `pages/doorManage/doorManage`, `pages/doorPosition/doorPosition`, `pages/setStore/setStore`, `pages/setStoreInfo/setStoreInfo`, `pages/setDoorInfo/setDoorInfo`, `pages/setDoorList/setDoorList`, `pages/roomList/roomList` | 门店、房间、定位和房间列表管理。 |
| 订单/支付 | `pages/SetOrder/SetOrder`, `pages/payOrder/index`, `pages/configPrePay/configPrePay`, `pages/ydCancel/index` | 管理端订单、支付订单、预付配置和易达取消。 |
| 设备/门锁 | `pages/deviceList/deviceList`, `pages/addLock/addLock`, `pages/bleList/bleList`, `pages/configGateWay/index`, `pages/configLockWifi/index` | 设备列表、门锁绑定、蓝牙/网关/Wi-Fi 配置。 |
| 保洁任务 | `pages/cleaner/cleaner`, `pages/task/task`, `pages/taskDetail/taskDetail`, `pages/taskManager/taskManager`, `pages/taskSettle/taskSettle`, `pages/taskStatics/taskStatics` | 保洁角色、任务详情、任务管理、结算和统计。 |
| 会员/营销 | `pages/setVip/setVip`, `pages/vipDetail/vipDetail`, `pages/vipConfig/vipConfig`, `pages/vipList/vipList`, `pages/vipBlacklist/vipBlacklist`, `pages/setCoupon/setCoupon`, `pages/setCouponInfo/setCouponInfo`, `pages/setDiscount/setDiscount`, `pages/packageManagement/packageManagement`, `pages/lottery/index` | 会员、黑名单、优惠券、折扣、套餐和抽奖。 |
| 商品/库存 | `pages/productManage/productManage`, `pages/addProduct/addProduct`, `pages/goodsKindManage/goodsKindManage` | 商品和分类管理。 |
| 外部平台/消息 | `pages/meituanreserve/meituanreserve`, `pages/pushrule/pushrule`, `pages/noticeManage/noticeManage`, `pages/setTemplate/index`, `pages/setStoreSound/setStoreSound` | 美团预订、推送规则、通知、模板和门店声音配置。 |
| 其他 | `pages/editPages/editPages`, `pages/faceRecord/faceRecord`, `pages/faceBlacklist/faceBlacklist`, `pages/scanQr/scanQr` | 装修、门禁人脸、扫码和黑名单。 |
### `inventory` 库存分包
| 页面路径 | 可参考点 |
|---|---|
| `pages/goods/index` | 库存商品类型维护。 |
| `pages/detail/index` | 门店库存详情、入库、出库和盘点。 |
## `easy-joy-life-main.zip` 小程序
微信原生小程序,页面更偏 MVP 预约闭环,可参考但不直接复用配置。
| 分类 | 页面路径 | 可参考点 |
|---|---|---|
| 门店/房间 | `pages/index/index`, `pages/nearby-stores/nearby-stores`, `pages/store-detail/store-detail`, `pages/select-room/select-room`, `pages/room-schedule/room-schedule`, `pages/room-detail/room-detail` | 附近门店、门店详情、房间选择、房态时间表。 |
| 预约/订单/开门 | `pages/booking/booking`, `pages/orders/orders`, `pages/order-detail/order-detail`, `pages/unlock/unlock` | 预约下单、订单列表、订单详情和开门入口。 |
| 用户/钱包 | `pages/profile/profile`, `pages/login/login`, `pages/user-profile/user-profile`, `pages/wallet/wallet`, `pages/recharge/recharge`, `pages/transaction-records/transaction-records` | 用户资料、钱包、充值和交易明细。 |
| 支付扩展 | `pages/bank-card/bank-card`, `pages/add-bank-card/add-bank-card`, `pages/pay-password/pay-password`, `pages/payment-webview/payment-webview`, `pages/cashier-pay-bridge/index` | 银行卡、支付密码、WebView 支付桥。 |
| 支持/消息 | `pages/messages/messages`, `pages/message-detail/message-detail`, `pages/help-center/help-center`, `pages/help-detail/help-detail`, `pages/customer-service/customer-service`, `pages/about/about`, `pages/settings/settings`, `pages/favorites/favorites` | 消息、帮助、客服、关于和收藏。 |
+8
View File
@@ -0,0 +1,8 @@
# 参考资料脱敏记录
| 时间 | 文件 | 字段类别 | 处理方式 | 备注 |
|---|---|---|---|---|
| 2026-06-15 | `参考/env` | MySQL 密码、Redis 密码、微信支付商户密钥/证书路径类别 | 替换为占位符;不保留真实值 | 旧运行包环境样例仅保留变量名和用途。 |
| 2026-06-15 | `参考/easy-joy-life-main.zip` | PEM 证书、微信支付密钥、AppSecret、数据库密码、支付宝私钥、第三方平台密钥 | 原包从 Git 跟踪中移出并加入忽略;仅保留哈希和字段类别 | 不在文档记录真实值;后续如需复用,必须重新生成脱敏摘录。 |
| 2026-06-15 | `参考/db_20260427.sql` | 旧业务数据、文件 URL、任务日志、配置数据 | 原 SQL 从 Git 跟踪中移出并加入忽略;仅保留哈希和用途 | 后续生成 schema-only 或脱敏迁移草案。 |
| 2026-06-15 | `参考/24h_qipaishi-master(1).zip``参考/小程序源代码.zip` | 旧 AppID、旧 API 域名、依赖目录 | 原包从 Git 跟踪中移出并加入忽略;仅保留哈希和页面/接口摘要 | 后续迁入正式小程序时重建依赖和配置。 |
+12
View File
@@ -0,0 +1,12 @@
# 发布清单
| 项目 | 当前值 |
|---|---|
| 最近发布 commit | 未发布;本地 M00 基线提交为本地 HEAD |
| 发布分支 | main |
| 后端构建 | 未执行 |
| 后台构建 | 未执行 |
| 小程序检查 | 未执行 |
| 数据库迁移 | 未执行 |
| 部署结果 | 未部署 |
| 回滚点 | - |
+13
View File
@@ -0,0 +1,13 @@
# 仓库完整性
| 检查项 | 当前结果 | 证据/备注 |
|---|---|---|
| Git 根目录 | PASS | 已在 `D:\qipai` 初始化。 |
| 固定远端 | PASS | `origin=ssh://git@git.txyundm.cn:2222/panda/qipai.git`。 |
| 当前分支 | PASS | `main`。 |
| 总纲文件 | PASS | 根目录存在 `V4.8.md`。 |
| 参考资料清单 | PARTIAL | 已记录外层文件、哈希和风险;4 个压缩包已隔离解包初审,仍需生成脱敏可提交摘录。 |
| 敏感信息 | PASS/PARTIAL | 明文敏感模式扫描已通过;`参考/env` 已脱敏;含秘密/真实数据风险的原始包和 SQL 已移出 Git 跟踪。 |
| 大文件 | WARN | `参考/mazongjian-server.xjar` 约 194MB,已记录哈希并作为大文件阻断项忽略。 |
| 行尾/空白 | PASS | `scripts/dev/windows/test-all.ps1` 已运行,`git diff --check` 通过。 |
| 远端一致性 | BLOCKED_INTERNAL | `git.txyundm.cn:2222` 主机指纹未确认且连接不稳定;待人工确认主机指纹并成功 push 后校验。 |
+23
View File
@@ -0,0 +1,23 @@
# 仓库地图
| 路径 | 用途 | 提交策略 |
|---|---|---|
| `V4.8.md` | 当前开发总纲 | 必须提交 |
| `backend/` | 后端 API | 必须提交源码、测试和配置样例 |
| `admin/` | 后台管理端 | 必须提交源码,不提交构建产物 |
| `miniapp/` | 微信原生小程序 | 必须提交源码,不提交本地缓存 |
| `database/` | 数据库迁移和种子 | 必须提交脱敏 SQL |
| `deploy/` | 部署版本和说明 | 必须提交 |
| `scripts/` | 检查、部署和运维脚本 | 必须提交 |
| `docs/` | 状态、日志、变更和验收记录 | 必须提交 |
| `docs/reference-page-map.md` | 旧小程序页面脱敏地图 | 必须提交 |
| `docs/db-schema-inventory.md` | 旧 SQL 表结构脱敏清单 | 必须提交 |
| `docs/reference-api-inventory.md` | 旧接口路径类别和迁移方向 | 必须提交 |
| `参考/` | 只读参考资料 | 经脱敏审计后提交;大文件按清单处理 |
## 边界
- 单一 Git 根:`D:\qipai`
- 固定远端:`ssh://git@git.txyundm.cn:2222/panda/qipai.git`
- 生产目录:`/opt/apps`
- 默认分支:`main`
+19
View File
@@ -0,0 +1,19 @@
# 源码参考盘点
| 参考项 | 技术栈/形态 | 页面/接口/表线索 | 可复用点 | 不可复用点 | 风险 | 当前处理 |
|---|---|---|---|---|---|---|
| `参考/小程序源代码.zip` | 微信原生小程序压缩包,Vant Weapp + 分包 | 约 40 个主包页面、2 个分包;覆盖首页、门店、房间、下单、支付、续费、团购、保洁、设备、库存、后台管理入口 | 页面路径、请求封装、订单/续费/保洁/设备页面流程 | 原包含 `node_modules`、旧 AppID、旧域名、localhost 示例,不直接提交/照搬 | 依赖包和旧配置风险 | 原包阻断;后续迁入需重建依赖并改为 `https://api.txyundm.cn/app-api` |
| `参考/后台管理系统_20260427.zip` | Vue/Element 类后台静态构建产物 | `index.html``static/js``static/css`、字体和 gzip 资源 | 菜单、字典、接口命名、后台字段参考 | 构建产物不能作为正式后台源码;旧 API 前缀需重建 | 旧域名/静态配置风险 | 可作 UI/接口字段参考,正式后台仍用 Vue3 源码重建 |
| `参考/db_20260427.sql` | MySQL SQL 导出 | 含配置、文件、任务、会员、门店、折扣、订单等表和大量 `INSERT` | 表结构、枚举、业务字段和历史状态机参考 | 原始数据、URL、日志、业务记录不得直接提交或导入 | 真实数据/旧域名/日志风险 | 原 SQL 阻断;后续生成脱敏 schema-only 或迁移草案 |
| `参考/24h_qipaishi-master(1).zip` | 微信原生小程序压缩包,Vant Weapp + 分包 | 与 `小程序源代码.zip` 高度相似,含门店、房间、订单、充值、团购、KTV、保洁、设备等页面 | 小程序业务页面和交互流程 | 原包含依赖目录、旧 AppID、旧域名,不能直接纳管 | 依赖包和旧配置风险 | 原包阻断;只作为页面清单参考 |
| `参考/easy-joy-life-main.zip` | Spring Boot 2.7 Java 后端 + 微信小程序 + SQL + 部署文档 | 后端约 140 个 Java 文件;含 stores、rooms、orders、payments、devices、admin、wallet 等 SQL 表 | 订单、钱包、设备、后台权限、支付和短信模块设计参考 | 技术路线不符合 V4.8;含 PEM、支付密钥、AppSecret、DB 密码等,不能提交原包 | 真实秘密和证书风险 | 原包阻断;只记录抽象设计,不复用密钥/证书/配置 |
| `参考/mazongjian-server.xjar` | 旧 Java 运行包 | 不反编译 | 仅用于观察旧接口行为 | 不作为运行依赖,不作为新系统源码 | 大文件和受保护代码风险 | 记录哈希,必要时只保留外部归档说明 |
| `参考/start.sh` / `参考/stop.sh` | 旧 shell 脚本 | 启停旧服务 | 了解旧进程和端口 | 不用于生产部署 | 旧路径/旧密钥风险 | 后续抽取安全变量类别 |
## 已生成的脱敏摘要
| 文档 | 内容 | 后续使用 |
|---|---|---|
| `docs/reference-page-map.md` | 旧小程序页面、分包和业务分类 | M08 小程序迁移和页面验收清单。 |
| `docs/db-schema-inventory.md` | 旧 SQL 表分组、MVP 表线索和迁移原则 | M01/M03/M04/M05 数据库建模。 |
| `docs/reference-api-inventory.md` | 旧接口路径类别、正式 API 迁移方向和禁止事项 | M01 API 设计、M08 小程序请求迁移、M09 后台 API 对齐。 |
+8
View File
@@ -0,0 +1,8 @@
# 未解决问题
| ID | 发现时间 | 模块/功能 | 问题 | 影响 | 临时处理 | 根因 | 下一步 | 状态 |
|---|---|---|---|---|---|---|---|---|
| ISSUE-001 | 2026-06-15 | M00/REF-001 | `参考/mazongjian-server.xjar` 约 194MB,可能超过普通 Git/Gitea 单文件建议限制。 | 中 | 记录哈希与用途;首次提交前确认远端是否接受,必要时改用等价脱敏说明或 LFS 策略。 | 旧运行包体积较大。 | 推送失败时保留提交并记录处理方案。 | OPEN |
| ISSUE-002 | 2026-06-15 | M00/REF-001 | 参考压缩包已完成隔离初审,但尚未生成可迁移源码摘录。 | 中 | 已生成页面、接口和表结构脱敏摘要。 | 原包含依赖目录、旧域名或敏感配置。 | 后续按模块生成正式小程序/后端/后台代码,不直接复用原包。 | OPEN |
| ISSUE-003 | 2026-06-15 | M00/SCM-001 | `git.txyundm.cn:2222` SSH 无法完成主机指纹确认和 push。 | 高 | 保留本地提交并记录重试命令;不自动覆盖 known_hosts。 | 当前远端主机指纹未能安全确认,连接测试仍不稳定。 | 人工确认 Gitea SSH 主机指纹后,重试 `git fetch --prune origin && git push origin main && git fetch origin main`。 | OPEN |
| ISSUE-004 | 2026-06-15 | M00/REF-001 | 多个原始参考包或 SQL 含秘密、依赖目录或旧业务数据,不能直接提交。 | 高 | 原包/原 SQL 移出 Git 跟踪并加入忽略;已生成脱敏页面、接口和表结构摘要。 | 参考资料未预先脱敏。 | 后续仅提交重新实现的正式源码、schema-only 迁移或脱敏摘录。 | OPEN |
+12
View File
@@ -0,0 +1,12 @@
# 工作区状态
| 项目 | 当前值 |
|---|---|
| Windows 工作区 | `D:\qipai` |
| WSL 映射 | `/mnt/d/qipai` |
| 当前总纲 | `V4.8.md` |
| Git 根 | `D:\qipai`(本轮初始化) |
| 固定远端 | `ssh://git@git.txyundm.cn:2222/panda/qipai.git` |
| 默认分支 | `main` |
| 最近检查时间 | 2026-06-15 |
| 当前阻塞 | `git.txyundm.cn:2222` 主机指纹未确认/SSH 连接不稳定;首次 push 待完成 |
+1
View File
@@ -0,0 +1 @@
+18
View File
@@ -0,0 +1,18 @@
$ErrorActionPreference = "Stop"
$hostName = "git.txyundm.cn"
$port = "2222"
$knownHosts = Join-Path $env:USERPROFILE ".ssh\known_hosts"
Write-Host "Checking known_hosts entries for $hostName port $port"
& ssh-keygen -F "[$hostName]:$port"
if ($LASTEXITCODE -ne 0) {
Write-Host "WARN: no known_hosts entry for [$hostName]:$port"
}
Write-Host "Attempting read-only SSH handshake."
& ssh -T -p $port "git@$hostName"
if ($LASTEXITCODE -ne 0) {
throw "Gitea SSH handshake failed. Confirm host fingerprint before editing $knownHosts."
}
+16
View File
@@ -0,0 +1,16 @@
$ErrorActionPreference = "Stop"
$limitBytes = 100MB
$large = Get-ChildItem -Recurse -File | Where-Object {
$_.FullName -notmatch "\\.git\\" -and $_.Length -gt $limitBytes
}
if ($large) {
$large | ForEach-Object {
Write-Host ("LARGE-FILE: {0} {1:N0} bytes" -f $_.FullName, $_.Length)
}
Write-Host "WARN: files over 100MB found; document the handling strategy."
}
else {
Write-Host "PASS: no files over 100MB found."
}
@@ -0,0 +1,8 @@
$ErrorActionPreference = "Stop"
& git diff --check
if ($LASTEXITCODE -ne 0) {
throw "git diff --check failed."
}
Write-Host "PASS: whitespace and line ending check passed."
+58
View File
@@ -0,0 +1,58 @@
$ErrorActionPreference = "Stop"
$referenceDirName = ([char]0x53C2).ToString() + ([char]0x8003).ToString()
$referenceRoot = Join-Path (Resolve-Path ".").Path $referenceDirName
if (-not (Test-Path $referenceRoot)) {
throw "Missing reference directory: $referenceRoot"
}
$nestedGit = Get-ChildItem $referenceRoot -Recurse -Force -Directory -Filter ".git" -ErrorAction SilentlyContinue
if ($nestedGit) {
$nestedGit | ForEach-Object { Write-Host "NESTED-GIT: $($_.FullName)" }
throw "Nested .git found under reference directory."
}
$blockedRawReferences = @(
"$referenceDirName/mazongjian-server.xjar",
"$referenceDirName/easy-joy-life-main.zip",
"$referenceDirName/24h_qipaishi-master(1).zip",
"$referenceDirName/$(([char]0x5C0F).ToString() + ([char]0x7A0B).ToString() + ([char]0x5E8F).ToString() + ([char]0x6E90).ToString() + ([char]0x4EE3).ToString() + ([char]0x7801).ToString()).zip",
"$referenceDirName/db_20260427.sql"
)
$tracked = @(& git -c core.quotePath=false ls-files)
foreach ($blocked in $blockedRawReferences) {
if ($tracked -contains $blocked) {
throw "Blocked raw reference is tracked: $blocked"
}
}
Get-ChildItem $referenceRoot -Recurse -File | ForEach-Object {
$hash = Get-FileHash -Algorithm SHA256 $_.FullName
"{0} {1} {2}" -f $hash.Hash, $_.Length, $_.FullName
}
$zipFiles = Get-ChildItem $referenceRoot -File -Filter "*.zip" -ErrorAction SilentlyContinue
foreach ($zip in $zipFiles) {
$safeName = [IO.Path]::GetFileNameWithoutExtension($zip.Name)
$extractRoot = Join-Path $env:TEMP "qipai-reference-check"
$extractDir = Join-Path $extractRoot $safeName
if (Test-Path $extractDir) {
Remove-Item -LiteralPath $extractDir -Recurse -Force
}
New-Item -ItemType Directory -Force $extractDir | Out-Null
try {
Expand-Archive -LiteralPath $zip.FullName -DestinationPath $extractDir -Force
$fileCount = (Get-ChildItem $extractDir -Recurse -File | Measure-Object).Count
$dependencyDirs = Get-ChildItem $extractDir -Recurse -Force -Directory -Include "node_modules","miniprogram_npm" -ErrorAction SilentlyContinue
$secretFiles = Get-ChildItem $extractDir -Recurse -File -Include "*.pem","*.key","*.p12","*.crt","application*.yml","application*.properties" -ErrorAction SilentlyContinue
Write-Host "ZIP-AUDIT: $($zip.Name) files=$fileCount dependencyDirs=$($dependencyDirs.Count) sensitiveConfigFiles=$($secretFiles.Count)"
}
finally {
if (Test-Path $extractDir) {
Remove-Item -LiteralPath $extractDir -Recurse -Force
}
}
}
Write-Host "PASS: reference directory basic scan completed."
@@ -0,0 +1,16 @@
$ErrorActionPreference = "Stop"
& powershell -ExecutionPolicy Bypass -File scripts/dev/windows/check-workspace.ps1
& powershell -ExecutionPolicy Bypass -File scripts/dev/windows/check-line-endings.ps1
& powershell -ExecutionPolicy Bypass -File scripts/dev/windows/check-large-files.ps1
$status = & git status --short --untracked-files=all
if ($status) {
Write-Host "Current git status:"
$status | ForEach-Object { Write-Host $_ }
}
else {
Write-Host "PASS: worktree has no pending changes."
}
Write-Host "PASS: repository completeness baseline check finished; review pending changes before commit."
+48
View File
@@ -0,0 +1,48 @@
$ErrorActionPreference = "Stop"
$patterns = @(
"DB_PASSWORD\s*=\s*(?!<)",
"JWT_SECRET\s*=\s*(?!<)",
"WECHAT_SECRET\s*=\s*(?!<)",
"PRIVATE_KEY",
"api_key\s*[:=]\s*(?!<)",
"password\s*[:=]\s*(?!<)"
)
$excluded = @("\.git\", "node_modules", "dist", "build")
$excludedFiles = @(
"V4.8.md",
"scripts\dev\windows\check-secrets.ps1"
)
$hits = @()
$candidateFiles = @()
(& git -c core.quotePath=false ls-files --cached --others --exclude-standard) | ForEach-Object {
if ($_ -and (Test-Path $_ -PathType Leaf)) {
$candidateFiles += (Resolve-Path $_).Path
}
}
$candidateFiles | ForEach-Object {
$path = $_
foreach ($skip in $excluded) {
if ($path -match [regex]::Escape($skip)) { return }
}
$relativePath = Resolve-Path -Relative $path
$relativePath = $relativePath.TrimStart('.', '\', '/')
if ($excludedFiles -contains $relativePath) { return }
$text = Get-Content -Raw -ErrorAction SilentlyContinue $path
foreach ($pattern in $patterns) {
if ($text -match $pattern) {
$hits += $path
break
}
}
}
if ($hits.Count -gt 0) {
$hits | Sort-Object -Unique | ForEach-Object { Write-Host "SECRET-CHECK-HIT: $_" }
throw "Potential secrets found. Please review and redact."
}
Write-Host "PASS: no plaintext secret pattern found."
+24
View File
@@ -0,0 +1,24 @@
$ErrorActionPreference = "Stop"
$expectedRoot = "D:\qipai"
$current = (Resolve-Path ".").Path
if ($current -ne $expectedRoot) {
throw "Workspace must be $expectedRoot, actual: $current"
}
$gitRoot = (& git rev-parse --show-toplevel) -replace '/', '\'
if ($gitRoot -ne $expectedRoot) {
throw "Git root must be $expectedRoot, actual: $gitRoot"
}
$branch = & git branch --show-current
if ($branch -ne "main") {
throw "Branch must be main, actual: $branch"
}
$origin = & git remote get-url origin
if ($origin -ne "ssh://git@git.txyundm.cn:2222/panda/qipai.git") {
throw "Invalid origin: $origin"
}
Write-Host "PASS: workspace, git root, branch and origin are valid."
+85
View File
@@ -0,0 +1,85 @@
param(
[Parameter(Mandatory = $true)]
[string]$Message,
[string[]]$Paths = @(),
[switch]$Amend
)
$ErrorActionPreference = "Stop"
function Run-Step {
param(
[string]$Name,
[scriptblock]$Block
)
Write-Host "== $Name =="
& $Block
}
Run-Step "workspace check" {
powershell -ExecutionPolicy Bypass -File scripts/dev/windows/check-workspace.ps1
}
Run-Step "local tests" {
powershell -ExecutionPolicy Bypass -File scripts/dev/windows/test-all.ps1
powershell -ExecutionPolicy Bypass -File scripts/dev/windows/check-secrets.ps1
}
Run-Step "git preflight" {
$branch = & git branch --show-current
if ($branch -ne "main") {
throw "Branch must be main, actual: $branch"
}
$origin = & git remote get-url origin
if ($origin -ne "ssh://git@git.txyundm.cn:2222/panda/qipai.git") {
throw "Invalid origin: $origin"
}
& git status --short --branch --untracked-files=all
}
Run-Step "stage files" {
if ($Paths.Count -gt 0) {
foreach ($path in $Paths) {
& git add -- $path
}
}
else {
Write-Host "No paths supplied. Review status and stage files manually, then rerun with -Paths."
throw "No paths supplied."
}
& git diff --cached --stat
if (-not (& git diff --cached --name-only)) {
throw "No staged changes."
}
}
Run-Step "commit" {
if ($Amend) {
& git commit --amend --no-edit
}
else {
& git commit -m $Message
}
}
Run-Step "push" {
& git push origin main
}
Run-Step "remote verify" {
& git fetch origin main
$head = & git rev-parse HEAD
$remote = & git rev-parse origin/main
if ($head -ne $remote) {
throw "Remote verification failed: HEAD=$head origin/main=$remote"
}
& git log -1 --oneline origin/main
}
Write-Host "PASS: module pushed and verified."
+14
View File
@@ -0,0 +1,14 @@
$ErrorActionPreference = "Stop"
& powershell -ExecutionPolicy Bypass -File scripts/dev/windows/check-workspace.ps1
& powershell -ExecutionPolicy Bypass -File scripts/dev/windows/check-reference.ps1
& powershell -ExecutionPolicy Bypass -File scripts/dev/windows/check-line-endings.ps1
& powershell -ExecutionPolicy Bypass -File scripts/dev/windows/check-large-files.ps1
if (Test-Path "package.json") {
npm run lint --if-present
npm test --if-present
npm run build --if-present
}
Write-Host "PASS: M00 local checks completed."
+5
View File
@@ -0,0 +1,5 @@
#!/usr/bin/env bash
set -euo pipefail
curl -fsS --max-time 10 https://api.txyundm.cn/app-api/health
+8
View File
@@ -0,0 +1,8 @@
#!/usr/bin/env bash
set -euo pipefail
echo "WSL env:"
uname -a
command -v bash >/dev/null
command -v git >/dev/null
+5
View File
@@ -0,0 +1,5 @@
#!/usr/bin/env bash
set -euo pipefail
ssh -T -p 2222 git@git.txyundm.cn
+8
View File
@@ -0,0 +1,8 @@
#!/usr/bin/env bash
set -euo pipefail
cd /mnt/d/qipai
test "$(git rev-parse --show-toplevel)" = "/mnt/d/qipai"
test "$(git branch --show-current)" = "main"
git status --short --branch --untracked-files=all
+6
View File
@@ -0,0 +1,6 @@
#!/usr/bin/env bash
set -euo pipefail
rm -rf "${HOME}/qipai-wsl-test"
echo "Cleaned ${HOME}/qipai-wsl-test"
+5
View File
@@ -0,0 +1,5 @@
#!/usr/bin/env bash
set -euo pipefail
echo "MQTT smoke test placeholder. Configure host/user/password outside Git before use."
+10
View File
@@ -0,0 +1,10 @@
#!/usr/bin/env bash
set -euo pipefail
src="/mnt/d/qipai"
dst="${HOME}/qipai-wsl-test"
rm -rf "${dst}"
mkdir -p "${dst}"
rsync -a --exclude .git --exclude node_modules --exclude dist --exclude build "${src}/" "${dst}/"
echo "Prepared ${dst}"
+10
View File
@@ -0,0 +1,10 @@
#!/usr/bin/env bash
set -euo pipefail
cd /mnt/d/qipai
bash -n setup.sh
for file in scripts/dev/wsl/*.sh; do
bash -n "$file"
done
echo "PASS: Linux shell syntax checks passed."
+4
View File
@@ -0,0 +1,4 @@
# Ubuntu 菜单脚本目录
后续 M00-D/M00-E 将在此目录补充 `/opt/apps` 初始化、Gitea 拉取、业务部署、EMQX、Nginx、证书、备份、恢复、回滚和诊断脚本。
+69
View File
@@ -0,0 +1,69 @@
#!/usr/bin/env bash
set -euo pipefail
VERSION="0.0.1-m00-baseline"
APP_ROOT="/opt/apps"
REPO_SSH="ssh://git@127.0.0.1:2222/panda/qipai.git"
PUBLIC_API="https://api.txyundm.cn"
print_header() {
echo "自助棋牌室系统部署菜单 ${VERSION}"
echo "生产目录: ${APP_ROOT}"
echo "固定 API: ${PUBLIC_API}"
echo
}
check_arch() {
local kernel_arch dpkg_arch bits
kernel_arch="$(uname -m 2>/dev/null || echo unknown)"
dpkg_arch="$(dpkg --print-architecture 2>/dev/null || echo unknown)"
bits="$(getconf LONG_BIT 2>/dev/null || echo unknown)"
echo "内核架构: ${kernel_arch}"
echo "DPKG 架构: ${dpkg_arch}"
echo "用户空间位数: ${bits}"
if [ "${kernel_arch}" != "x86_64" ] || [ "${dpkg_arch}" != "amd64" ] || [ "${bits}" != "64" ]; then
echo "FAIL: 仅支持 Ubuntu 24.04 x86-64/amd64。"
exit 1
fi
}
quick_check() {
echo "== 启动快检 =="
check_arch
command -v git >/dev/null 2>&1 && echo "Git: PASS" || echo "Git: WARN 未安装"
command -v nginx >/dev/null 2>&1 && echo "Nginx: PASS" || echo "Nginx: WARN 未安装"
command -v node >/dev/null 2>&1 && echo "Node.js: PASS" || echo "Node.js: WARN 未安装"
echo "仓库: ${REPO_SSH}"
}
not_implemented() {
echo "当前 M00 基线仅提供菜单骨架;该选项将在后续子阶段完善。"
}
main_menu() {
while true; do
print_header
echo "1. 首次安装"
echo "2. 更新业务服务"
echo "3. 安装或检查 EMQX"
echo "4. 配置域名与 HTTPS"
echo "5. 查看状态"
echo "6. 备份"
echo "7. 恢复"
echo "8. 回滚"
echo "9. 诊断"
echo "0. 退出"
printf "请选择: "
read -r choice
case "${choice}" in
1|2|3|4|6|7|8) not_implemented ;;
5|9) quick_check ;;
0) exit 0 ;;
*) echo "无效选项" ;;
esac
echo
done
}
main_menu "$@"
+40
View File
@@ -0,0 +1,40 @@
######### Mysql数据库的配置 #########
# 数据库的IP地址
M_MYSQL_HOST=127.0.0.1
# 数据库的端口 Mysql默认是3306
M_MYSQL_PORT=3306
# 数据库的名称
M_MYSQL_DATABASE=malaoban
# 数据库的用户名
M_MYSQL_USERNAME=malaoban
# 数据库的密码
M_MYSQL_PASSWORD=<REDACTED_MYSQL_PASSWORD>
######### Redis数据库的配置 #########
# 数据库的IP地址
M_REDIS_HOST=127.0.0.1
# 数据库的端口 Redis默认是6379
M_REDIS_PORT=6379
# 数据库的索引 写0~16范围内的数字 默认是0
M_REDIS_INDEX=0
# 数据库的密码
M_REDIS_PASSWORD=<REDACTED_REDIS_PASSWORD>
#### 是否开启接口文档 #### 开启true 关闭flase
M_OPEN_API_DOC=false
######### 微信支付服务商的配置 #########
######### 注意:通常情况无需修改 #########
#微信支付服务商的小程序APPID
M_WX_PAY_APPID=
#微信支付服务商的商户号
M_WX_PAY_MCHID=
#微信支付服务商的v2密钥
M_WX_PAY_MCHKEY=<REDACTED_WHEN_CONFIGURED>
#支付证书p12文件的路径
M_WX_PAY_KEYPATH=<REDACTED_WHEN_CONFIGURED>
#接收分账的商户号
M_WX_PAY_SPLITMCHID=
#接收分账的商户营业执照全称
M_WX_PAY_SPLITMCHNAME=
#######################################
+44
View File
@@ -0,0 +1,44 @@
#!/bin/bash
# 第一步:检查进程是否存在
check_process() {
local process_names=("xjar" "mazongjian-server.xjar" "mazongjian-server.jar")
for name in "${process_names[@]}"; do
if pgrep -f "$name" > /dev/null; then
echo "系统已在运行中,无法启动。请先执行 sh stop.sh"
exit 1
fi
done
}
# 第二步:加载 .env 文件(如果存在)
load_env() {
if [ -f ".env" ]; then
echo "加载环境变量文件: .env"
export $(grep -v '^#' .env | xargs)
else
echo "未找到 .env 文件,跳过环境变量加载"
fi
}
# 第三步:启动服务
start_service() {
if [ -f "mazongjian-server.xjar" ] && [ -f "xjar" ]; then
echo "检测到 xjar 和 mazongjian-server.xjar,使用 xjar 启动..."
nohup ./xjar java -jar mazongjian-server.xjar &
elif [ -f "mazongjian-server.jar" ]; then
echo "检测到 mazongjian-server.jar,直接启动..."
nohup java -jar mazongjian-server.jar &
else
echo "系统无法启动,文件不存在"
exit 1
fi
}
# 主流程
check_process
load_env
start_service
# 第四步:提示查看日志
echo "请使用命令查看启动日志:tail -1000f nohup.out"
+29
View File
@@ -0,0 +1,29 @@
#!/bin/bash
# 安全停止函数(精确匹配进程名)
safe_kill() {
local process_names=("xjar" "mazongjian-server.xjar" "mazongjian-server.jar")
local found=0
for name in "${process_names[@]}"; do
# 使用数组来存储所有匹配的PID
pids=($(pgrep -f "$name"))
if [ ${#pids[@]} -gt 0 ]; then
found=1
echo "停止进程: $name (PIDs: ${pids[@]})"
# 逐个杀死进程
for pid in "${pids[@]}"; do
kill -9 "$pid"
done
fi
done
if [ "$found" -eq 0 ]; then
echo "未找到运行中的服务进程,无需停止"
else
echo "所有服务进程已停止"
fi
}
# 主流程
safe_kill
BIN
View File
Binary file not shown.
Binary file not shown.