Files
henan-backend/docs/修改记录.md
T

22 KiB
Raw Blame History

修改记录

只记大改动:一个需求 / 一个模块算一条;同一件事的多轮微调合并成一条,不逐轮记。 排序:最新在最上面。 展开细节看 docs/updata_sql.md(数据库改动,含完整可执行 SQL)与 .workbuddy/memory/YYYY-MM-DD.md(过程与踩坑)。 维护:完成一个大改动后,在顶部按日期加一条;同一天追加在该日期块末尾。


2026-09-22

  • docker 配置命名统一:changzhou → henan(全套 henan_ 前缀)

    起因:docker/ 下的编排文件里到处是 changzhou,是从同源项目拷贝模板时的命名残留。查实本机 docker volume ls / docker ps -a:从未跑过 changzhou 这套(只存在 hunan 项目的容器与卷 hunan_mysql_db / hunan_redis_cache / hunan_rabbitmq_server,3 个月前创建、均已 Exited)⇒ 改名无数据迁移包袱。统一为 henan 全套前缀,与实跑的 hunan 命名风格对齐。

    改动 7 个文件:

    1. docker/compose/docker-compose.yml —— MYSQL_DATABASE / MYSQL_USER → henan;三个 container_name → henan_mysql_db / henan_redis_cache / henan_rabbitmq_server;网络 → henan_app_network;external 卷 → henan_mysql_data
    2. docker/compose/deploy.sh —— 自动建卷的卷名
    3. docker/compose/migrate-mysql-volume.sh —— NEW_VOL 与旧卷候选列表;docker stop henan_mysql_db
    4. docker/WINDOWS_QUICKSTART.md —— 卷名 / 库名 / 容器名;顺带修正 3 处本身就是错的路径 d:\changzhou_app\changzhou_backend\... → D:\henan_background\henan-backend\docker\compose;第 4 节「和 chengdu 项目切换」→ hunan
    5. ruoyi-admin/src/main/resources/application-dev.yml —— jdbc url 库名 + username
    6. ruoyi-admin/src/main/resources/application-pro.yml —— 同上
    7. bin/logtool.js —— -uhenan、-D henan、容器名 henan_mysql_db

    验证:docker compose -f docker-compose.yml config 解析通过、零报错,name 段全部已生效(库 henan、三个 henan_* 容器名、网络 henan_app_network、external 卷 henan_mysql_data)。零 SQL 变更、零后端代码改动。

    刻意没改:① chengduhipay —— 第三方支付通道名不是地名,application-dev/pro.yml 与 updata_sql.md 里几十处,动了支付会挂;② docs/updata_sql.md 里历史条目的 USE changzhou; —— 台账回改会失真,需要留痕就新加一条;③ 各 target/ dist*/ .lst stats.html —— 里面是 D:/changzhou_app/... 的编译期绝对路径,属产物,重新构建自然消失;④ docs/DEPLOYMENT.md、docs/README.md、docs/麻将胡了设计方案.md(D:\changzhou-cocos\... 是客户端仓库路径)—— 旧项目文档。

    上线前必做两件事:① 卷是 external: true,必须先 docker volume create henan_mysql_data,否则报 external volume not found 直接起不来(deploy.sh up -d 会自动建,手敲 docker-compose up 不会);② 新卷首次初始化会建出空的 henan 库 —— MYSQL_DATABASE / MYSQL_USER / MYSQL_PASSWORD 只在数据卷首次初始化时生效,原有数据需另行导入,否则应用连上的是空库。

    遗留待定:网络没固定 name:,实际名会随执行目录变(在 docker/compose 下执行时是 compose_henan_app_network)。卷已用 external + 固定 name 规避「换目录丢数据」,网络是否同样钉死成 henan_app_network 待定。

  • 下架三个玩法:删除「奥林匹斯 / 荒野争锋 / 极速糖果」的后台菜单与页面

    起因:这三个玩法不再需要,要求从后台左侧菜单移除。

    关键前提:RuoYi 的左侧菜单是数据库驱动的(sys_menu → /getRouters → 前端 sidebarRouters),代码里没有菜单清单,所以必须"先删数据、再删页面文件",只删前端文件的话菜单依然在。

    改动清单(完整 SQL 见 docs/updata_sql.md):

    1. 数据库(库 henan,已执行):sys_menu 删 22 行(3 个顶级 M + 19 个子页面 C);sys_role_menu 删 22 行授权(全属 role_id=103)。无 'F' 按钮权限行。
      • 3130 奥林匹斯 olympus → 子菜单 3131~3137
      • 2105 荒野争锋 bullet → 子菜单 2106~2110、2112
      • 2125 极速糖果 sweet → 子菜单 2126~2131
    2. 前端文件(38 个,删前已确认全部被 git 跟踪):ruoyi-ui/src/views/game/{olympus,bullet,sweet}/(7+6+6)与 ruoyi-ui/src/api/game/{olympus,bullet,sweet}/(7+6+6)。
    3. 文档:本条 + docs/updata_sql.md 新条目。

    验证:

    • 删除后 sys_menu / sys_role_menu 命中行数均为 0(printf 实测);SELECT ... WHERE parent_id = 0 复查剩余 20 个一级菜单,三个玩法已消失。
    • 全量搜索 game/olympus|game/bullet|game/sweet|api/game/... 残留引用 = 0。
    • ruoyi-ui 生产构建 exitcode=0 / DONE Build complete(删掉页面后仍能编译,说明没有别处静态引用它们)。

    刻意没动:

    1. 后端 Java 代码。这些玩法名在后端出现在跨模块共享的文件里 —— TtAccountRecordSource(流水来源码 60=奥林匹斯)、TtboxRecordSource、RedisConstants、MessageCategoryEnum、PromoTurnover*、ApiUserPackSackServiceImpl、WebsiteSetupServiceImpl。删它们会波及其他玩法与推广/发货链路,不在「删页面」范围内。
    2. 数据库业务表:game_olympus_* / game_sweet_* 等原样保留,未 TRUNCATE、未 DROP。数据还在,随时可回。
    3. ruoyi-ui/src/views/game/sugar/(5 api + 5 页面)—— 没有任何菜单引用。菜单「极速糖果」指向的是 game/sweet/*,而 docs/cleanup_records.sql 又把 game_sugar_* 标注为「极速糖果」,两套并存;后端还存在 GameSugarWin/User/StepInfo/Spin 实体。疑似遗留或未接入的开发分支,未确认前不删。

    遗留待定:① 仪表盘「实时 RTP」卡片与「流水统计」折线里仍有 玫瑰女郎(=olympus) 一条 —— 已于下一轮处理;② game/sugar/* 是否清理待定。③ 是否需要把 game_olympus_* / game_sweet_* 业务表也清掉(现在只是入口没了,数据仍在库里占空间)——实查确认不存在 %olympus% 业务表,无需处理。

  • 彻底清理「玫瑰女郎」(olympus)的后端:枚举、返利统计链路与前端列

    起因:上一轮只下架了菜单与页面,后端仍保留整套 olympus 常量、统计列与返利计算。本轮要求「和后端相关的都删掉,包括返利的统计」。

    顺手修掉一个构建阻塞:skins-service/pom.xml 仍声明 <module>game-olympus-service</module>、ruoyi-admin/pom.xml 仍依赖该 artifact,而该模块目录早已不存在 ⇒ 这是当时 Maven 构建必挂的隐藏故障(本次删掉引用后构建才通过)。全仓已无任何文件名含 olympus。

    改动面:2 个 pom + 21 个后端文件 + 13 个前端文件

    层 文件 改动
    pom skins-service/pom.xml、ruoyi-admin/pom.xml 删 game-olympus-service 的 module / dependency
    常量 TtAccountRecordSource.java 删 OLYMPUS_SPIN(60) / OLYMPUS_REWARD(61) 枚举项,并从 6 处集合与判断中移除(推广福利流水、返利游戏类型、今日投注、今日赢奖、流水抽奖条件);删 isSpecialGameConsume / isNewGameConsumeForCommission,isGameConsumeForCommission 简化为只判经典
    常量 TtboxRecordSource.java 删 OLYMPUS_BOX(13)
    常量 MessageCategoryEnum.java 删 GAME_OLYMPUS
    常量 RedisConstants.java 删 3 个 OLYMPUS_* 缓存键
    配置 ParameterSettingBody.java、WebsiteSetupServiceImpl.java 删 olympusMaintenance 字段与读写(数据库侧见 updata_sql.md)
    仪表盘 TtRechargeRecordController.java 折线 chartData 整条 roseladyList 链删除;实时 RTP 的 gameConfig / gameNames 去掉第 8 项(保留索引 5 = Roll 房,if (i == 5) 依赖它)
    用户报表 TtUserBlendErcashMapper.xml、TtUserSourceReportMapper.xml、TtUserAmountRecordsController.java 删 olympusGame 列 ×2 + 排序分支;总流水 source 列表去 60
    开箱统计 TtBoxRecordsMapper.xml 返奖总额 source IN (...) 去 13
    返利 PromoTurnoverMapper.xml 删 todayOlympus / yesterdayOlympus / weekOlympus / totalOlympus 四列、todayNewGame / yesterdayNewGame、newGameConsume ×2,source 列表去 60
    返利 PromoTurnoverMapper.java 删 getSubNewGameConsumeByDate / getSpecialGameConsumeByUserId 两个专属查询
    返利 PromoTurnoverServiceImpl.java 看板 buildPeriod 去掉 olympus 周期项与 4 个调用点参数;下级佣金去掉新游戏分项
    返利 PromoTurnoverController.java 三处 olympusConsume 统计链删除;businessGameRate 统一取经典费率
    返利 PromoAdminManageController.java 删 specialGameTurnover 输出与 sumNewGameConsume
    返利 CommissionSettlementTask.java 周结佣金去掉新游戏分项
    其他 TtUserServiceImpl.java 实时返佣分支去掉「新游戏」,只判经典
    其他 ApiUserPackSackServiceImpl.java、ApiProfileRecordsServiceImpl.java、TaskUpdate.java、TtBoxServiceImpl.java 映射 / 筛选集合 / 发奖公式 / 注释
    前端 ruoyi-ui utils/accountSource.js、ttSetting/index.vue、ttuser/{userTurnover,userPack,creditsRecords,amountRecords,blendErcashArchive}.vue 删流水来源码 60/61 与 13 的字典与筛选项、删「玫瑰女郎维护」开关、删用户流水表的 olympusGame 列与排序标签
    前端 promo-ui2 Home、FlowRecord、BusinessManage、AnchorManage、subFlow/transaction、CommissionReport 删费率卡 / 周期列 / 玫瑰女郎列 ×3 / 特殊游戏流水列 ×2 / 日特殊游戏消费列 / 来源码字典

    验证(产物级断言,不是看代码):

    • 后端 mvn -B clean install -DskipTests → BUILD SUCCESS,Total time: 04:13 min,无 BUILD FAILURE / COMPILATION ERROR;ruoyi-admin.jar 正常产出(6 个模块全链打通)。
    • target/classes 里 5 个关键 class(TtAccountRecordSource / TtboxRecordSource / MessageCategoryEnum / RedisConstants / PromoTurnoverServiceImpl)搜 OLYMPUS 命中 = 0。
    • target 中 3 个 mapper XML 搜 olympus / newGame / source 60 命中全 0。
    • 数据库:sys_config 里 %olympus% 残留 = 0;一级菜单 20 个(与上轮一致)。
    • ruoyi-ui 生产构建通过;promo-ui2 因 node_modules 缺 esbuild 无法构建(环境问题,非本次改动),改做静态校验。

    刻意保留:

    1. 历史数据(tt_user_blend_ercash 47 行、tt_box_records 293 行、tt_user_source_report 14 行)—— 属账目,未删。副作用:流水来源码字典删了,这些历史流水在后台显示不出中文名。
    2. ruoyi-ui/src/views/index.vue 的 hidden 数组仍留「玫瑰女郎」、.rtp-theme-4 样式保留 —— 后端已不再返回,留作二层防护。
    3. newGameCommissionRate(新游戏返佣比例)字段保留 —— 它挂在 tt_user 表上,属用户配置字段而非统计,删除涉及 DDL 与用户管理页,且语义上不点名玫瑰女郎。现状:无任何消费来源指向它,相关分项恒为 0。
  • 新增「麻将胡了」玩法:以「新游戏」类型接入,复用原玫瑰女郎的整套统计口径

    起因:玫瑰女郎下架后,用户引入新游戏「麻将胡了」(后端 mahjong 玩法),要求「以新游戏的类型把相应的统计都加上」。 本轮是上一轮删除动作的完整镜像 —— 把上一轮删掉的 olympus 分支,按 mahjong 重新接回全部统计链路。

    口径映射(沿用原语义,未改结构):

    概念 olympus 旧值 mahjong 新值
    消费来源码 OLYMPUS_SPIN = 60 MAHJONG_SPIN = 68
    奖励来源码 OLYMPUS_REWARD = 61 MAHJONG_REWARD = 69
    开箱产出码 TtboxRecordSource 13 MAHJONG_BOX = 15
    新游戏返佣费率 tt_user.newGameCommissionRate 同名沿用(未动 DDL)
    返佣流水来源 GAME_CONSUME_COMMISSION(47)「特殊游戏返利」 同

    改动清单(后端 21 个文件 + 前端 7 个 + DB 3 张表):

    层 文件 改了什么
    枚举 TtAccountRecordSource / TtboxRecordSource / MessageCategoryEnum / RedisConstants 新增 68 / 69 / 15 及消息分类、缓存键
    仪表盘 TtRechargeRecordController chartData 加 mahjongList;realTimeRtp 加第 8 项「麻将胡了」(追加在末尾,不动 i == 5 的 Roll 房下标)
    开箱统计 TtBoxRecordsMapper.xml 3 处返奖口径 source IN 加 15
    用户报表 TtUserBlendErcashMapper.xml / TtUserSourceReportMapper.xml / TtUserAmountRecordsController 加 mahjongGame 列 ×2 + 排序分支 + AGG_SORT_FIELDS
    返利 PromoTurnoverMapper.xml getBatchedCommissionData / getGameCommissionData / getWeeklyCommissionDataWithSnapshot / getWeeklyDailyCommissionData / businessGameConsumeRows 全部加 68 与 newGame/mahjong 列
    返利 PromoTurnoverServiceImpl / PromoTurnoverController / PromoAdminManageController / CommissionSettlementTask 看板费率卡与周期项、三处 *Consume 统计链、businessGameRate 新游戏分支、specialGameTurnover、sumNewGameConsume、周结分项
    其他 TtUserServiceImpl(实时返佣新游戏分支)、ApiProfileRecordsServiceImpl(69 / 68)、ApiUserPackSackServiceImpl(15 → 69 映射)、TaskUpdate(特殊游戏消费 + 0.01 系数)、TtBoxServiceImpl(注释)
    配置 ParameterSettingBody + WebsiteSetupServiceImpl mahjongMaintenance 读写(键 mahjongMaintenance,兜底 "0")
    前端 ruoyi-ui views/index.vue(折线加「麻将胡了流水」)、utils/accountSource.js(68 / 69)、skins/ttSetting/index.vue(麻将胡了维护)、skins/ttuser/{amountRecords,creditsRecords,blendErcashArchive,userPack,userTurnover} 来源码字典与筛选 68 / 69、开箱码 15、mahjongGame 列与排序标签
    前端 promo-ui2 Home(费率卡 + 周期列)、FlowRecord(麻将胡了列 ×2)、BusinessManage / AnchorManage(特殊游戏流水列)、subFlow/transaction(日特殊游戏消费)、CommissionReport(68 → 麻将胡了)

    数据库:sys_menu +8(麻将胡了目录 3200 + 7 子页)、sys_role_menu +8(role 103)、 sys_config +1(mahjongMaintenance)。完整 SQL 见 docs/updata_sql.md。

    验证(产物级断言):

    • 后端 mvn -B clean install -DskipTests → BUILD SUCCESS,19 个模块全过,Total time: 03:55 min。
    • ruoyi-ui 生产构建 → DONE Build complete。
    • promo-ui2 生产构建 → 本轮把环境修好了,构建通过(修法见「踩坑」)。
    • 数据库实测:sys_menu 3200~3207 = 8 行、sys_role_menu = 8 行、sys_config.mahjongMaintenance = 1 行。

    踩坑(记一次,下次别重踩):promo-ui2/node_modules 是残缺的扁平布局 —— 绝大多数包只在 node_modules/.pnpm/node_modules/ 里有,顶层没有软链 ⇒ vite 一启动就 ERR_MODULE_NOT_FOUND (先 esbuild、再 @rollup/rollup-win32-x64-msvc、再 @babel/core…… 逐个补是打地鼠)。 一次性修法:把 .pnpm/node_modules 下所有包(含 @scope 子目录)在顶层批量建 junction (本次补了 800+ 个链接)后构建即通过。根因是当初 pnpm install 没跑完/被裁过,属环境问题、非代码问题。

    刻意未做:麻将胡了的 11 张 game_mahjong_* 游戏表尚未落库(DDL + 种子在 mahjong-py/schema.sql)。 这 7 个新菜单页面依赖它们,未建表前打开会报「表不存在」。属「游戏本体」前置依赖、且 generator 还没写完 (见 mahjong-py/README.md),待用户确认后再执行。

  • 后台管理端(ruoyi-ui)整站换肤:Cottagecore 田园核风 + 逐页 UI 细节收敛

    起因:管理后台长期沿用它默认的企业蓝(Element 默认色板 + vue-element-admin / AdminLTE 遗留色),与河南项目的 田园调性不符;用户要求按 Cottagecore 规范整站重做,并逐页检查小问题、把 UI 细节调到位。

    做法:不引 Tailwind,走「Element 变量 + 皮肤覆盖层」 (ruoyi-ui 是 Vue2 + Element UI 2.15 + vue-cli4/webpack4/postcss7,Tailwind 的 preflight 会打乱 Element 基础样式)。 新建 src/assets/styles/cottagecore.scss 作为全站唯一色源,其余文件一律引用变量、不写死十六进制; 再通过重编译 element-ui 的 theme-chalk 源码(element-variables.scss)换掉 Element 自己的底色。

    文件 角色
    assets/styles/cottagecore.scss 唯一色源:品牌色 + 组件槽位色 + 图标色相 + 对比度实测注释
    assets/styles/element-variables.scss 覆盖 $--color-* / 圆角 / 阴影 / $--color-white → 暖白 #fffdfa,再 @import theme-chalk 源码整包编译
    assets/styles/skin.scss 皮肤覆盖层(按钮 / 表单 / 表格 / 分页 / 弹层 / Element 写死的冷色)
    assets/styles/index.scss 总入口,最后一行 @import './skin.scss'(整体回滚 = 注释这一行)
    assets/styles/sidebar.scss / variables.scss 侧栏(4 色图标轮换)/ 菜单深浅两套色 + :export 给 js

    六轮递进,要点:

    1. 建色源 + 换 Element 底色:primary 定陶土 #9a5c35(不用草绿,否则「新增 / 修改」同色系分不清; 想切回只改色源一处),success 草绿 #457450,warning 深雏菊金 #8f6418,danger 莓红 #a4485a,info 暖褐 #6b6152。 正文 #5f4f3d(#8b7355 只有 4.17:1,禁止做正文);草绿 #5a8f5a 白字仅 3.81:1 ⇒ 只做装饰与大色块, 绿色文字一律 #3f6b45。
    2. 摘掉隐藏的 ThemePicker:App.vue 曾无条件挂 <theme-picker>(只用 CSS display:none 藏,组件照样 mount), 它在 created() 里会去 unpkg.com 拉整包 Element 默认主题并注入 <style> 把配色改回企业蓝。已移除,别再挂回去。
    3. 全局色板机械清扫(45 个文件):把散在业务页里的旧 Element 色(#409eff / #67c23a / #e6a23c / #f56c6c / #909399 …) 按语义映射到色源;同时改掉 Logo.vue / Navbar.vue 的白色毛玻璃 + 蓝阴影、全局滚动条的冷蓝。
    4. 顶栏与标签页合并成一条,去掉重复显示的面包屑。
    5. Element 内部写死的冷色(hex 搜索抓不到、只能用更高权重规则盖):白遮罩、蓝色 info toast、 冷绿上传成功勾 #13ce66(它的选择器是带父级的三段式 0,2,0,单类选择器会被压住)、冷灰滚动条 / 标签 / 日期面板。 根因是 $--color-white → 把暖白 #fffdfa 提为「白」,一次性统一所有白色面。
    6. 操作列按钮折行(用户截图里那类问题)——根因不是列宽不够,而是 element-ui.scss 里一条全局规则 .fixed-width .el-button--mini { width: 60px } 把按钮钉死 60px,图标 + 2~4 个中文 直接被截断换行。 删掉该规则 + 给 19 个操作列补显式宽度(≥3 个按钮的收进「更多」下拉)+ 补下拉与前钮间距。

    验证(三层,脚本留在 .workbuddy/,可重跑):

    • node .workbuddy/audit-palette.cjs —— 源码级色板审计(.vue + .scss + .css,先剥注释再扫): 当前 0 / 184 文件离版。色板白名单里另有一类刻意保留的域内语义色: CS2 稀有度、麻将/饰品品质色谱(金/红/紫)、仪表盘折线色 —— 不是主题色,不许改。
    • node .workbuddy/verify-dist.cjs —— 构建产物断言,34 项 ALL_OK:① 本项目源码的冷色必须为 0; ② 新增规则必须存在;③ 中性色(rgba(0,0,0,*))设「冻结基线」上限防复发。 扫描范围是 app.css + 全部 chunk-*.css(views/* 是懒加载,只看 app.css 会整片漏掉)。
    • node .workbuddy/verify-computed.cjs —— 真机 Chrome 计算样式断言,20 项 ALL_OK。 专治 element-ui 内部字面量色:这些色值在样式表文本里去不掉,grep = 0 不成立,必须看计算值。
    • 构建:DONE Build complete,零 Sass 错误;仅剩既有的 delLevel 缺失导出 + 体积警告,与本改动无关。

    踩坑:并行对同一文件发多个 Edit 会撞 EBUSY;更阴的是偶发不报错、但两次写入只剩一次(本次 sidebar.scss 丢过两个替换) ⇒ 机械替换一律串行,改完用 grep 逐条复验,别信 Edit 的 success 回执。

    刻意未做:① variables.scss 里 sideTheme: theme-dark 的深色侧栏回退色(冷蓝灰)保留 —— 设置抽屉里的「深色」按钮现在点下去视觉上是空操作(皮肤层已把侧栏壳设成透明 + 文字 !important), 没有删按钮也没改回退色,要不要彻底下掉这个开关待定;② btn.scss 的 .blue-btn 等 7 个类全项目 0 引用, 但其颜色已随 variables.scss 指向新色板,不构成视觉问题,未清理。