From ede01c06d263e58702917ad840b2209f582c1689 Mon Sep 17 00:00:00 2001 From: danaisuiyuan Date: Wed, 27 May 2026 13:00:32 +0800 Subject: [PATCH] docs: add ops and merchandise status repair guides --- docs/dashboard/mysql-remote-connections.md | 48 +++++ docs/ecs-ssh-restart-webman.md | 221 +++++++++++++++++++++ docs/wa_merchandise-status-repair-plan.md | 95 +++++++++ 3 files changed, 364 insertions(+) create mode 100644 docs/dashboard/mysql-remote-connections.md create mode 100644 docs/ecs-ssh-restart-webman.md create mode 100644 docs/wa_merchandise-status-repair-plan.md diff --git a/docs/dashboard/mysql-remote-connections.md b/docs/dashboard/mysql-remote-connections.md new file mode 100644 index 0000000..873dcaa --- /dev/null +++ b/docs/dashboard/mysql-remote-connections.md @@ -0,0 +1,48 @@ +# 积分商城front MySQL 远程连接汇总 + +整理范围:`backend/crmeb-front/src/main/resources/application*.yml` + +整理时间:2026-05-11 + +## 口径说明 + +- 仅汇总 MySQL URL 中 host 为远程地址的配置。 +- 所属公司优先按 `docs/company-info-*.md`、`docs/*data-imgration*.md` 中的公司名称和 host ip 匹配;没有明确公司名时,按部署文档、域名、profile 或数据库名推断并注明。 +- 密码按当前配置文件完整记录。 + +## 按 MySQL 主机聚合 + +| MySQL host:port | 关联 profile | 说明 | +| --- | --- | --- | +| `8.140.218.149:3306` | `byjyw149` | 宝应金雅文商贸 | +| `8.136.120.231:3306` | `czc231` | 宝应晨召春商贸 | +| `121.43.134.82:3306` | `czcf82` | 池州春芳商贸 | +| `101.37.101.6:3306` | `czrt6` | 池州瑞棠商贸 | +| `rm-bp1a178eq62lxba9xbo.mysql.rds.aliyuncs.com:3306` | `czleilei240` | 池州雷蕾商贸 | +| `114.55.232.191:3306` | `hapr191` | 淮安鹏然商贸 | +| `106.14.132.80:3306` | `sxsy80` | 太原树英商贸 | +| `39.106.63.33:3306` | `miao33` | 夏盛军商贸 | +| `123.56.214.80:3306` | `miao80` | 宝应博森元 | +| `101.37.253.50:3306` | `miao50` | 上海文锦惠商贸 | +| `101.132.245.153:3306` | `shjjy153` | 上海聚伽源商贸 | +| `182.92.78.159:3306` | `shccd159` | 上海慈初德商贸 | + +## 远程 MySQL 配置清单 + +| Profile | 配置文件 | 所属公司 / 项目 | MySQL host:port | 数据库名 | 用户名 | 密码 | 依据 / 备注 | +| --- | --- | --- | --- | --- | --- | --- | --- | +| `byjyw149` | `backend/crmeb-front/src/main/resources/application-byjyw149.yml` | 宝应金雅文商贸 | `8.140.218.149:3306` | `yangtangyoupin` | `yangtangyoupin` | `5Fn8eWrbYFtAhCZw` | `docs/company-info-byjyw149.md`、`docs/byjyw149-data-imgration.md` | +| `czc231` | `backend/crmeb-front/src/main/resources/application-czc231.yml` | 宝应晨召春商贸 | `8.136.120.231:3306` | `yangtangyoupin` | `yangtangyoupin` | `5Fn8eWrbYFtAhCZw` | `docs/company-czc231-data-imgration.md`、`docs/company-czc231-integral-imgration.md` | +| `czcf82` | `backend/crmeb-front/src/main/resources/application-czcf82.yml` | 池州春芳商贸 | `121.43.134.82:3306` | `yangtangyoupin` | `yangtangyoupin` | `5Fn8eWrbYFtAhCZw` | `docs/company-info-czcf82.md`、`docs/company-czcf82-data-imgration.md` | +| `czrt6` | `backend/crmeb-front/src/main/resources/application-czrt6.yml` | 池州瑞棠商贸 | `101.37.101.6:3306` | `yangtangyoupin` | `yangtangyoupin` | `5Fn8eWrbYFtAhCZw` | `docs/company-info-czrt6.md`、`docs/company-czrt6-data-imgration.md` | +| `czleilei240` | `backend/crmeb-front/src/main/resources/application-czleilei240.yml` | 池州雷蕾商贸 | `rm-bp1a178eq62lxba9xbo.mysql.rds.aliyuncs.com:3306` | `yangtangyoupin` | `yangtangyoupin` | `5Fn8eWrbYFtAhCZw` | `docs/com-czleilei240.md`、`docs/com-czleilei240-data-imgration.md` | +| `hapr191` | `backend/crmeb-front/src/main/resources/application-hapr191.yml` | 淮安鹏然商贸 | `114.55.232.191:3306` | `yangtangyoupin` | `yangtangyoupin` | `5Fn8eWrbYFtAhCZw` | `docs/company-info.md`、`docs/company-data-imgration.md` | +| `sxsy80` | `backend/crmeb-front/src/main/resources/application-sxsy80.yml` | 太原树英商贸 | `106.14.132.80:3306` | `yangtangyoupin` | `yangtangyoupin` | `5Fn8eWrbYFtAhCZw` | `docs/com-sxsy80.md`、`docs/com-sxsy80-data-imgration.md` | +| `miao33` | `backend/crmeb-front/src/main/resources/application-miao33.yml` | 夏盛军商贸 | `39.106.63.33:3306` | `yangtangyoupin` | `yangtangyoupin` | `5Fn8eWrbYFtAhCZw` | `docs/com-xsj33-data-imgration.md`;部署文档中也标注 `jfadmin.xiashengjun.com` | +| `miao80` | `backend/crmeb-front/src/main/resources/application-miao80.yml` | 宝应博森元 | `123.56.214.80:3306` | `yangtangyoupin` | `yangtangyoupin` | `5Fn8eWrbYFtAhCZw` | `backend-adminend/DEPLOY.md` 中 by80 示例域名为 `jfadmin.bosenyuan.com`;`.cursor/plans/bybsy80范围数据删除_1cf340f6.plan.md` 也指向该 host | +| `miao50` | `backend/crmeb-front/src/main/resources/application-miao50.yml` | 上海文锦惠商贸 | `101.37.253.50:3306` | `yangtangyoupin` | `yangtangyoupin` | `5Fn8eWrbYFtAhCZw` | `backend/DEPLOY.md`、OpenClaw 配置文档中标注为生产环境 | +| `shjjy153` | `backend/crmeb-front/src/main/resources/application-shjjy153.yml` | 上海聚伽源商贸 | `101.132.245.153:3306` | `yangtangyoupin` | `yangtangyoupin` | `5Fn8eWrbYFtAhCZw` | `docs/compare-shjjy153-shccd159.md` 标注域名 `jjy-jf.fwxgpt.com`、`jjy-jfadmin.fwxgpt.com` | +| `shccd159` | `backend/crmeb-front/src/main/resources/application-shccd159.yml` | 上海慈初德商贸 | `182.92.78.159:3306` | `yangtangyoupin` | `yangtangyoupin` | `5Fn8eWrbYFtAhCZw` | `docs/compare-shjjy153-shccd159.md` 标注域名 `ccd-jf.fwxgpt.com`、`ccd-jfadmin.fwxgpt.com` | + + + diff --git a/docs/ecs-ssh-restart-webman.md b/docs/ecs-ssh-restart-webman.md new file mode 100644 index 0000000..79b88e5 --- /dev/null +++ b/docs/ecs-ssh-restart-webman.md @@ -0,0 +1,221 @@ +# ECS 服务器 SSH 终端进入 Docker `integral-houtai` 重启 Webman + +适用项目:池州雷蕾商贸 `czleilei240` 寄卖商城 +适用容器:`integral-houtai` +适用域名:`https://leileiadmin.czchunfang.com` + +## 先说结论 + +这套项目当前不是标准 ThinkPHP / `php think` 启动方式。 + +我已经核对过当前代码目录,实际应用文件只有: + +```text +integral-resell/houtai/webman.bin +``` + +没有下面这些文件: + +- `think` +- `start.php` +- `composer.json` + +所以这套 `integral-houtai` 容器里,不能按 `php think` 命令去重启 Webman,正确方式是进入容器后执行: + +```bash +./webman.bin restart -d +``` + +## 一、SSH 登录 ECS + +在本地终端执行: + +```bash +ssh root@116.62.83.240 +``` + +如果 SSH 端口不是默认 `22`,则执行: + +```bash +ssh -p 22 root@116.62.83.240 +``` + +## 二、进入容器 +登录服务器后,直接执行: + +```bash +docker exec -it integral-houtai sh +``` + +进入容器后,提示符会切换到容器内部环境。 + + +## 五、在容器内重启 Webman + +进入容器后执行: + +```bash +./webman.bin restart -d +``` + +如果你不确定当前目录,也可以写成: + +```bash +cd /app +./webman.bin restart -d +``` + +## 六、退出容器 + +执行: + +```bash +exit +``` + +## 七、查看日志确认是否启动成功 + +回到服务器宿主机终端后执行: + +```bash +docker logs -f --tail 100 integral-houtai +``` + +看到类似下面的字样,说明 Webman 已成功拉起: + +```text +Webman start success +``` + +看完日志后按 `Ctrl + C` 退出。 + +## 八、验证接口是否恢复 + +可以在服务器上直接验证: + +```bash +curl -I http://127.0.0.1:18085 +``` + +或者验证线上域名: + +```bash +curl -I https://leileiadmin.czchunfang.com +``` + +如果要验证业务接口: + +```bash +curl -s "https://leileiadmin.czchunfang.com/api/order/goods?page=1&limit=1" +``` + +## 九、完整操作示例 + +如果只是日常手动进入容器重启,整套命令如下: + +```bash +ssh root@116.62.83.240 +docker exec -it integral-houtai sh +pwd +cd /app +ls +./webman.bin restart -d +exit +docker logs -f --tail 100 integral-houtai +``` + +## 十、为什么不是 `php think` + +因为当前这套项目不是通过 ThinkPHP 命令入口运行的。 + +我核对到的实际情况是: + +- 容器挂载的应用目录是 `/app` +- 对应宿主机目录是 `/www/wwwroot/leileiadmin.czchunfang.com` +- 应用启动文件是 `webman.bin` +- 当前项目目录里不存在 `think` / `start.php` + +所以如果你进入容器后执行类似: + +```bash +php think +php think start +php think restart +``` + +大概率会提示文件不存在或命令不可用。 + +## 十一、按实际操作整理的最短步骤 + +```bash +ssh root@116.62.83.240 +docker exec -it integral-houtai sh +cd /app +./webman.bin restart -d +exit +docker logs -f --tail 100 integral-houtai +``` + +## 十二、如果你一定要先验证容器里有没有 `think` + +进入容器后可以手动检查: + +```bash +cd /app +ls -la +find /app -maxdepth 2 -name think -o -name start.php +``` + +如果没有结果,就说明这套容器内确实不是 ThinkPHP 命令模式。 + +## 十三、进入 Redis 容器 + +Redis 容器名是: + +```bash +integral-redis +``` + +进入容器执行: + +```bash +docker exec -it integral-redis sh +``` + +如果想直接连 Redis,也可以不进容器,直接在宿主机执行: + +```bash +docker exec -it integral-redis redis-cli +``` + +## 十四、清空 Redis 数据 + +进入 Redis 容器后,先连上 redis: + +```bash +redis-cli +``` + +如果需要密码,执行: + +```bash +redis-cli -a '你的Redis密码' +``` + +清空当前数据库: + +```bash +FLUSHDB +``` + +清空所有数据库: + +```bash +FLUSHALL +``` + +如果要一条命令直接清空当前库,也可以在宿主机执行: + +```bash +docker exec -it integral-redis redis-cli -a '你的Redis密码' FLUSHDB +``` diff --git a/docs/wa_merchandise-status-repair-plan.md b/docs/wa_merchandise-status-repair-plan.md new file mode 100644 index 0000000..96443fa --- /dev/null +++ b/docs/wa_merchandise-status-repair-plan.md @@ -0,0 +1,95 @@ +# 寄卖商品状态修正方案 + +适用范围:池州雷蕾商贸 `czleilei240` + +## 问题说明 + +寄卖商品表 `wa_merchandise.status` 可能与真实售卖结果不一致。 + +当前接口 `/api/order/goods` 只按: + +- `wa_merchandise.status = 1` +- `wa_merchandise.is_show = 1` + +查询商品,见 [WaOrderServiceImpl.java](). + +但实际业务中,商品是否已售出应结合 `wa_order` 判断。 + +## 判定口径 + +建议以以下规则修正商品状态: + +- 订单存在且 `status = 2` +- 且 `is_cancel = 0` +- 则对应 `wa_merchandise.status` 应置为 `0`(已售) + +## 查询异常数据 + +查询“商品仍标记未售,但实际已有已完成订单”的数据: + +```sql +SELECT + m.id, + m.old_id, + m.user_id, + m.status AS merchandise_status, + m.is_show, + m.created_at, + m.updated_at, + o.id AS order_id, + o.status AS order_status, + o.is_cancel +FROM wa_merchandise m +JOIN wa_order o ON o.merchandise_id = m.id +WHERE m.status = 1 + AND m.is_show = 1 + AND o.status = 2 + AND o.is_cancel = 0 +ORDER BY m.id DESC; +``` + +查询当前仍可售商品: + +```sql +SELECT COUNT(*) AS remaining_unsold_visible +FROM wa_merchandise +WHERE status = 1 AND is_show = 1; +``` + +## 批量修正 + +将“已有已完成订单”的商品统一改为已售: + +```sql +UPDATE wa_merchandise m +JOIN wa_order o ON o.merchandise_id = m.id +SET m.status = 0, + m.updated_at = NOW() +WHERE m.status = 1 + AND m.is_show = 1 + AND o.status = 2 + AND o.is_cancel = 0; +``` + +## 处理步骤 + +1. 先查异常商品清单。 +2. 确认这些商品是否确实已有完成订单。 +3. 执行批量更新,把状态改为 `0`。 +4. 复核 `status = 1 AND is_show = 1` 是否已清空。 +5. 如发现重复出现,继续按同一规则修正。 + +## 复核方式 + +```sql +SELECT id, status, is_show, updated_at +FROM wa_merchandise +WHERE status = 1 AND is_show = 1 +ORDER BY id DESC; +``` + +如果结果为空,说明当前没有可售状态异常的寄卖商品。 + +## 备注 + +如果后续要从根源避免再次发生,建议把商品状态判定逻辑从“只看 `wa_merchandise.status`”改为“联动 `wa_order` 订单状态”。