← 返回 浏览器全选正文可复制到微信公众号;图片为公网链接。

Groovy Action 迁移服务方案

李福春 · 2026-07-19
图片 3 · Mermaid 0 · _shared/719-action-tran

把 MySQL Action(DB/CUS)按 pgjr.md 的 73 条规则改写成 PostgreSQL 友好写法,落库到 qvsu_action_tran,便于拖页面核对。

项 路径
需求 20260719/pgt.md
规则手册 20260719/pgjr.md(73 条全覆盖)
OpenSpec openspec/changes/groovy-action-tran/
代码 20260719/gr/

1. 要解决什么

读本地 MySQL qvsu_meta_action(测试环境 COC 应用已复制过来)→ 规则匹配/改写 → 可选 PG EXPLAIN → upsert qvsu_action_tran。

成功标准(一句话):mvn test 过、三接口无入参可一键跑、COC 全量 webapp-testing 绿、结果表带平台系统字段可拖页面。


2. 技术定稿

项 选定 说明
Groovy 3.0.25(groovy-all type=pom) 与 core-server 同坐标族;引擎现行为 3.0.7
JDK / Boot 8 / 2.7.18 内网 Java 8;不用 Boot 3
构建 Maven + gmavenplus 不用 Gradle
JDBC Hikari + groovy.sql.Sql 双库 Bean;无 ORM
结构 一接口一类 仅 Application + 三个 *Api

3. 源码结构

20260719/gr/
  README.md
  pom.xml
  scripts/copy_coc_meta.py      # 测环境 COC → 本地
  scripts/webapp_test.py        # Playwright
  src/main/resources/rules/auto-rules.json
  src/main/groovy/com/qvsu/actiontran/
    ActionTranApplication.groovy
    HealthApi.groovy
    ActionTranRunApi.groovy
    ActionTranResultsApi.groovy

4. 接口约定(无 HTTP 入参)

业务参数写在 handler 方法内局部变量(不是类字段、不是 yml):

接口 方法内写死
GET /health version=1.0.0,groovyVersion=3.0.25
POST /api/v1/action-tran/run appNameEn=COC,pluginTypes=[DB,CUS],limit=0(全量),skipPgCheck=true
GET /api/v1/action-tran/results appNameEn=COC,limit=50,且 s_is_del=1

端口:3025。响应壳:{code,message,data}。

流水线:建表(含系统字段)→ 扫 meta → CUS 抽 SQL(围栏/""",抽不出不整段当 SQL)→ 73 规则 → upsert。

match_rule:仅 title / category / notes。


5. 落库表 qvsu_action_tran

业务列:app_name_en、plugin_type、action_name_en、from_action_body、to_action_body(MEDIUMTEXT)、need_update、match_rule。

系统列(拖页面):

列 说明
s_id PK AUTO_INCREMENT
s_create_by / s_update_by 创建/修改人
s_created_dept / s_owner_dept 部门
s_is_del 默认 1(有效)
s_org_code 组织
s_created_time / s_updated_time 创建 / 更新

6. 规则覆盖

auto-rules.json:73/73,全部 auto=true;难自动改写的用 annotate/template,命中仍进 match_rule。

门禁:RuleCatalogCoverageTest(条数、id、auto)+ catalog 评审文档。


7. 本地怎么跑

cd 20260719/gr
python scripts/copy_coc_meta.py    # 测环境 COC → 本地,清空样例
mvn test
mvn spring-boot:run                # :3025
python scripts/webapp_test.py      # Playwright

自检:

curl http://127.0.0.1:3025/health
curl -X POST http://127.0.0.1:3025/api/v1/action-tran/run
curl http://127.0.0.1:3025/api/v1/action-tran/results

8. 测试结果(含截图)

8.1 汇总

项 结果
数据 COC meta 2410(DB 2272 / CUS 138)
mvn test 通过(覆盖 + RunApi / CUS 保壳)
Playwright PASS
run scanned=2410,upserted=2299,hitRules=1363,failed=111
failed 主因 无围栏 CUS / 抽不出 SQL(故意不整段改写)
留证 JSON 20260719/gr/_preview/webapp_test_result.json

8.2 Health

health

8.3 Run 汇总

run-summary

8.4 Results(含系统字段)

results


9. 设计自检

检查项 结果
Groovy 3.0.25 + JDK8 + Boot 2.7 是
一接口一类、无 ORM 是
规则 73 全覆盖 是
无 HTTP 入参,参数在方法内 是
系统字段可拖页面 是
webapp-testing 绿 是

10. 已知简化

复制提示:选中上方正文(含表格与图片)→ 复制 → 粘贴到微信公众号编辑器。 图片为公网链接,部署到 public.joysky.cloud 后可正常显示。