Commit Graph
68 Commits
Author SHA1 Message Date
chenxing f7819b14e2 Carry actual flow state and freeze callback round identity
Local review candidate only. Explicitly selected inherited prerequisites and prior repair patches; unrelated WIP and independent MQ fixes are excluded. No push or deployment authorized.
2026-10-23 10:52:00 +08:00
chenxing 7eeaea55f8 Enforce exact published form version contracts
Local review candidate only. Explicitly selected inherited prerequisites and prior repair patches; unrelated WIP and independent MQ fixes are excluded. No push or deployment authorized.
2026-10-23 10:51:47 +08:00
chenxing a10f2e054c feat(openapi): FormCenterSchemaClient 走标准 appCode 网关 fallback,application.yml 出厂 base-host 默认内部网关
build / build-push (push) Successful in 1m18s
2026-10-22 17:14:06 +08:00
chenxing 4b4d63e3ba t1~t2+精修+TASK_4: 定义绑定表单UUID/版本成对核验、发起恢复守卫、schema兼容边界草案
build / build-push (push) Successful in 1m10s
含10-22精修: 保存/发布/启用按确切uuid+version远端核验、升版继承两列、取消关联清空版本、缺版本不回落最新。TASK_4=docs/schema-extension-compatibility-next-tasks.md(纯文档)。
2026-10-22 10:03:28 +08:00
ops 60ff464226 fix(ci): 构建容器名唯一化(避免并发构建互相 rm -f 致 exit 137) 2026-10-21 02:26:47 +00:00
ops 61b0ae7b8a ci: apk 源统一走 aliyun(规避 dl-cdn 时段性被拦卡 60s) 2026-10-21 01:36:58 +00:00
chenxing 2f54f37ab3 C1余量:类型桶查②+域查③红牌(启发式字面量形态匹配,保守边界不执行表达式)
build / build-push (push) Failing after 17m24s
2026-10-20 22:52:43 +08:00
chenxing 97dec39d45 C1第一刀:flw_def.form_uuid启用+发布期form-center schema快照嵌入formContract+表达式键查①红牌(audience按数组解析)
build / build-push (push) Failing after 2m6s
2026-10-20 22:50:58 +08:00
chenxing 93ecc79839 feat(p3.5): oapi 增 GET /tasks/done 与 /cc——已办/抄送按签名方应用过滤(P2-02 接缝)
build / build-push (push) Successful in 1m11s
- 两端点复用 FlowQueryService#pageDone/pageCc;过滤键=验签身份 appKey(请求属性
  yh.app.auth → d.appKey),不收调用方 bizType——天然覆盖消费方新旧 bizType 存量、
  防共享定义跨应用泄漏
- 契约测试 5 例(standalone 无 DB):appKey 接缝下传/bizType 不参与过滤/必参缺失 400 零查询
- 全量 262/262 绿(本地含 DB;Stage S5/P3.5)
2026-10-20 00:16:06 +08:00
chenxing 52c27d88bb [fix] 办理页业务信息走 summaryFields + biz_url 绝对化(BizUrlResolver)
build / build-push (push) Successful in 1m43s
- 详情出参新增 bizUrlAbs:biz_url 裸相对路径按 applyAppCode(by-code)→applyAppKey(by-key)
  查应用注册表 pc_url 拼 base#path(口径同 UserHome 消息中心 jumpUrl),查不到为 null
- 缓存 5min/未命中 60s,不阻断详情接口;biz_url 原值保留给 bare 态父页面接管
2026-10-19 20:09:29 +08:00
chenxing 132919b029 [v2.1] A 应用内审批地基:oapi 增 GET /tasks/by-biz——按单据查当前人待办(0/1/N 均 200 空数组不泄露,校 schId/bizType/assignee 三 match,IT 11 例)
build / build-push (push) Successful in 2m2s
2026-10-19 16:44:35 +08:00
chenxing 8ceb2a4247 [audit] P6.3 F5-4 reroute 增 useLatestDef 僵尸逃生门:按当前已发布最高版本重跑+快照刷新+trace 留痕(默认 false 现行为逐字不变)
build / build-push (push) Successful in 11m48s
2026-10-18 08:18:26 +08:00
chenxing ad87005169 [audit] P6.2 F9 embed/url 支持 mode=task 直跳任务办理页(taskId 必填,无 token CAS 页;front-url fail-fast 纪律不变) 2026-10-18 08:11:28 +08:00
chenxing 448c8d36f4 [audit] P6.1 F11-4 台账路由挂起可观测:pageAdmin 增 hung 过滤 + 行级 routeHung 红标(口径=max attempt 路由行 outlet 仍 NULL,防误报) 2026-10-18 08:05:32 +08:00
chenxing f4121b2c1e [ysch-flow] S2.7 apply 可选回带期望定义版本(版本竞态人类可读报错,⭐)
preview 回带 defVersion,apply 支持可选 expectedDefVersion:两者不一致时直接业务码拒绝并说
「流程已更新,请刷新后重新选择审批人(期望 x,当前已发布 y)」,而不是让选好的 nodeId/候选
在新版本里对不上、报成「指派节点不存在」(《方案》§8.3 补强 2 / §18 决策 8)。
检查点放在 renderAssignJson 之前,引擎与指派校验都不被触发,不污染幂等键。
opt-in 设计:不传该字段的存量调用方(svc-hall / notice / work-leave)行为逐字不变——
已由「withoutExpectedVersion_behavesExactlyAsBefore」钉住。
OapiModels 两处为纯新增字段;新增 5 例单测(不传/传对/传旧/preview 回带/无指派节点),
mvn -o test -Dtest=!*IT 176 例全绿(原 171 + 新 5)。
2026-10-18 01:16:48 +08:00
chenxing 82ffe2f030 [ysch-flow] 环境修复:appearance 件补显式版本(本分支 BOM 未托管该件)
yh-appearance-spring-boot-starter 只由 BasePlatform 的 feat/appearance-sdk 分支及其 BOM 托管,
本次接入件工作基于 feat/flow-embed(BOM 无条目),不写版本则 mvn package 直接依赖解析失败、
本仓无法打包(notice/svc-hall/UserBase 三仓同状)。jar 本体已在本地仓库,补显式版本即恢复;
appearance 分支合流后应删本行回落 BOM 托管。不改任何业务代码与密钥段。
2026-10-18 01:08:07 +08:00
chenxing 008aee3c88 [ysch-flow] S2.3 抄送接收人只读可见(F7 前置必修补丁)
requireInstanceVisible 此前只放行提交人/办理人/本校管理员,抄送接收人点开工作台
"抄送我的"行或抄送消息回落链接一律 403——"抄送中心自留、子应用零存储"因此不闭环。
新增 flw_cc 行命中判定(existsByInstanceIdAndUserId,按 instanceId 维度不泛化到本校),
只授予可见、办理权仍在 FlowTaskService 按 assigneeId 复核;中心用户面四处调用点
(详情/进度/出图)自动同口径。embed/url 签发侧 javadoc 同步可见性口径(oapi 层仍只认
schId,用户级判定在子应用后端,跨校与陌生人断言未放宽)。
守卫五态单测:提交人/办理人/管理员/抄送人/陌生人 + 抄送命中范围。
2026-10-17 23:01:01 +08:00
chenxing 81d9a075e8 [ysch-flow] S2.2 结果/退回消息改走 bizUrl 优先策略(F8 缺口①)
notifyResult/notifyReturned 此前把 jumpPath 硬编码 /instance/{id}、jumpApp 硬编码 null,
消息归属因此落在流程中心,四类消息(待办/抄送/结果/退回)口径不一致。现与 task/cc
同策略并抽出 jumpPath/jumpApp 两个共用判定:bizUrl 非空→直达业务方详情页且归属申报
给 apply 调用方 applyAppCode;bizUrl 空(存量办件)→仍回落中心页且归属留空。
单测 8 例(新增 4 例:结果带/不带 bizUrl、退回、抄送)。
2026-10-17 23:00:59 +08:00
chenxing 775b2392fa feat(callback): 对接健康度体检接口(议题二 P2)
build / build-push (push) Successful in 2m38s
用 flw_callback_reg / flw_callback_log 两张已有表拼装「这个应用接得好不好」,零新增表:

- FlwCallbackLogRepository 增 3 个只读聚合:countByStatusSinceForRegs / countByStatusForRegs / countHungForRegs(按注册集合过滤,挂起口径与管理端「挂起」列表一致:status=0 且 retryCount >= hangAlertRetries)
- 新增 AppHealthVo(model 包):appKey/appName/score/level/summary/checks(List<CheckItem>),检查项用 List 承载便于未来增删
- FlowCallbackAdminService.health(schId, appNames) 按 appKey 归组(同一应用多个 flowGuid 注册合并体检),六项检查加权算分:登记地址为私网/开发机 -40、base_path 缺失 -10、近 7 日成功率 <99% 或 =0% -15/-30、死信 -20、挂起 -12、注册停用 -8、无推送记录 -5;level 取最差项,问题应用 bad>warn>ok 置顶、同级按分升序
- FlowAdminController 增 GET /api/flow/admin/callback/health;应用名从 appAdminService.list(schId) 补齐,缺失回落 appKey

健康度面板与管理端三个列表(注册/日志/挂起死信)共用同一口径,避免两处数字打架。mvn -o package 通过。
2026-10-15 14:51:19 +08:00
chenxing a9aeca744d chore: 实施前基线快照(条件路由/接入改造前)
FlwDef 表单关联列 form_id(Long) -> form_uuid(String,32):对齐表单中心对外身份;M1 仍恒 null、二期对接启用。
2026-10-14 18:12:31 +08:00
chenxing fd4e207ce0 feat: 发起时指派——assignPolicy 配置/assign_json 快照/引擎收窄/preview+apply 契约
build / build-push (push) Successful in 2m8s
2026-10-13 12:05:11 +08:00
chenxing c02bdc5eca fix(trace): 科室视图抄送行补遮蔽——ccTraceRow 补 fillCcScope 取 node.receivers 落 assigneeType/deptKey/deptName(NOTIFY 用 receivers 而非 assignee,直接复用 fillAssigneeScope 会空填),applyAssigneeScope 抽公共落值段;FlowEngineIT 增 ccTraceRows_carryDeptScope_forDeptView + 原 notify 用例补 USERS 断言;FlowTestSupport 增 notifyDeptDef。mvn test 209 全绿
build / build-push (push) Successful in 49s
2026-10-12 20:45:29 +08:00
chenxing 62aff51fed feat(condition): SERVICE 判断收口——flw_router 增 direct_host/reg_app_key 两列(登记即持有,跨应用覆盖拒绝);新端点 POST /oapi/flow/router/reg(应用签名即归属);RouteJudgeClient 对 direct_host 行跳过服务目录解析直连(TargetSpec.fromUrl),存量手工行走目录解析零变化;契约测试与 SQL 留档 2026-10-12 17:28:13 +08:00
chenxing 4eefe078e3 fix(test): FlowDefAdminService 两个测试跟随 de332d1 的 save 8 参签名与 FlwInstanceRepository 注入(B1 漏提交,HEAD 测试编译红修复)
build / build-push (push) Successful in 56s
2026-10-12 17:22:53 +08:00
chenxing de332d1c66 B1 后端基础:flw_def.change_log + 在途统计接口 + 路由 trace 透出 rawResponse
- change_log(议题二③):FlwDef 附加列 + save 加 changeLog 入参,只在三个新建行分支写入
  (def.getId()==null 判据),草稿直改不写也不清空;>500 service 侧截断不抛错;补生产备案 SQL
- GET /admin/def/inflight(议题二④):flowGuid→审批中(10)办件数,口径=def_id ∈ 该线全部版本;
  请求的每个 guid 都建 0 键;逗号分隔去重限 100;FlowDefAdminService 注入 FlwInstanceRepository
- routeTraceRow(议题三②):kind=ROUTE 行增 rawResponse(null→"",>500 截断加 …)

验证:mvn.cmd 单模块编译通过;spring-boot:run 启动成功无循环依赖;ddl-auto 已自动建 change_log 列;
SQL 口径核对在途 37 件/8 条线,flw_route_log 24 行均有 raw_response
2026-10-12 15:59:47 +08:00
chenxing c896fbb90b feat(flow): 用户面四查询(todo/done/cc/my)支持 appKey 按应用筛选
build / build-push (push) Successful in 48s
工作台四页签加「按应用筛选」:controller 收可选 appKey,经 FlowQueryService
透传到分页查询;口径=办件定义归属 flw_def.app_key(join flw_instance→flw_def,
均多对一,不影响已办「一个办件一行」的去重与分页)。appKey 空串按不过滤处理
(emptyToNull),避免清筛选后误成空列表。FlwCcRepository 抄送派生查询相应改
@Query 以支持 join 过滤;FlowEngineIT 两处调用补 null 实参。

门禁:mvn compile/test-compile ✓ + 非 DB 单测 44 例 ✓;本机无 MySQL(3306
未监听),新 JPQL 未在真实库执行,FlowEngineIT/OapiFlowContractIT 待有库环境补跑
2026-10-12 11:26:11 +08:00
chenxing b4856a480d fix(msg): 消息 jump_app 换源 apply 调用方 app_code 快照,替代 bizType 冒充
build / build-push (push) Successful in 49s
P1/P2 联合修复(消息归属 + jump_app 值域污染):
- FlwInstance 新增 apply_app_key/apply_app_code 双列快照(自动 DDL)
- apply 从验签上下文(yh.app.auth)取调用方身份,by-key 一次换得 app_code
  (域间边界只在 apply 转换一次;查无/不可达降级 null,不阻断 apply)
- UserMsgNotifier 两处 jumpApp 改源 applyAppCode——bizType 是消息分类
  不是路由键;降级空时接收方按发送方回落(现状行为)
- FlowDefAdminService.save appKey 必填化(2026-10-12 拍板):新建必须
  显式传;升版本/直改可继承源行,源行为空必须补填(存量 19 条 NULL 随编辑收敛)
- 单测:SaveTest 新增必填拦截 3 用例、BizUrlTest 换源断言+降级用例(19 绿)
- E2E(8085+UserBase):100617->apply_app_code=notice 正向落库、
  100018(app_code NULL)->降级成功、错签名 401,三断言全过
2026-10-12 10:44:07 +08:00
chenxing d687ba7d56 fix(flow): 待办/已办列表补充 submitterName 字段
build / build-push (push) Successful in 51s
- FlowModels.TaskItem 新增 submitterName(办件发起人姓名快照)
- FlowQueryService.fillInstanceInfo 复用已加载的 FlwInstance 补 set,零额外查询
- 修复前端「我的待办」列头「提交人」因字段缺失而回落显示当前办理人的问题
2026-10-12 10:28:24 +08:00
chenxing 0ecbf1740b 外观SDK化任务E:本地 AppearanceProxyController 下沉平台 starter
build / build-push (push) Successful in 58s
删本地哑管道(与 Notice/svc-hall 三副本之一),加 yh-appearance-spring-boot-starter
(BOM 管版本,YschOpenCall 走聚合包)。端点同 URL /api/appearance 同语义:三态
proxy/local/off,503 直写铁律内置。聚合包不收 starter(三端本地类未收敛时会
Ambiguous mapping,本轮三端同批收敛后解除)。
2026-10-12 09:39:05 +08:00
chenxing 6f68e1ebe7 fix(diagram): CONDITION 多出口分支分列——不等长/空分支不再被拓扑分层压成单列直穿(用户实测 def-32 或签流程报错)。spreadConditionBranches 后处理:各出口分支按列对称展开(链形分支逐节点对列中心,内嵌并行回退整块平移),隐式汇合点(各分支可达集交集 BFS 最早节点)吸附回条件节点中线;等长同层分支为恒等变换不回归(golden 8/8)
build / build-push (push) Successful in 52s
2026-10-12 08:59:05 +08:00
chenxing 6cd33abc67 fix(test): FlowAppAdminServiceTest 构造器补 FlwCallbackRegRepository mock——跟随 probe/stats 新依赖(CI testCompile 失败修复)
build / build-push (push) Successful in 49s
2026-10-11 22:55:23 +08:00
chenxing f07ac6da93 feat(callback/app): 回调探测端点 /admin/callback/probe/{id}——签 flow.ping 未知事件码走真实管道同步一发(信封同构 CallbackDispatcher,结果落 flw_callback_log 一次性行+resp_body 响应摘要列);应用辅助统计 /admin/app/stats(appKey→本校回调注册数,应用设置页对接深度列)
build / build-push (push) Failing after 14s
2026-10-11 22:40:44 +08:00
chenxing cd046782d9 fix(flow): 科室/成员端点补 requireId 边界防护——缺 id 回业务错而非 findById(null) 笼统 500(用户验收反馈 R2)
build / build-push (push) Successful in 2m54s
2026-10-10 22:43:01 +08:00
chenxing a06b610d9d feat(dept): 科室管理——flw_dept/flw_dept_member 组+成员模型取代单用户映射行(议题3,拍板D1选B)
build / build-push (push) Successful in 54s
- deptKey=本地自增 id;source_group_id 幂等(一键拉取=初始化/刷新语义,不重复建组);不做存量迁移
- 四处读源全部切新表:AssigneeResolver(宽容口径:deptKey 不存在/停用返回空,图示/轨迹不炸)、
  enabledDeptKeys 发布校验白名单、DeptLabelSupport 唯一出口(图示科室视图+轨迹富化)、编辑器 deptList 聚合
- /admin/dept/* 全套端点(CRUD/成员/拉取预览导入);旧 /map/* 映射 CRUD 端点删除
  (保留 /map/lookupUser 选人检索与 /user/teacherTree);flw_assignee_map 实体/表保留不删
- IT 种子切源(FlowTestSupport tag→deptKey 注册表,用例主体零改动);全量 191 绿;E2E 22/22
  (local-debug/four-topics-e-e2e.py,含切源后果验证与生产盘点 SQL)
2026-10-10 19:47:58 +08:00
chenxing 4293c9628a feat(def): updateMeta 元数据原地编辑——已发布可改 name/appKey 不升版本(议题2)
- 独立于 save 的升版本路径:不碰 code/flow_guid/version/status/contentJson 结构
- contentJson 顶层 name 同步(ObjectNode 保序;消除行 name 与 JSON name 脏窗口,拍板 D4)
- appKey 校验同 save 口径(显式传入须 flw_app 启用集合;可置空)
- 单测 5 例(三不变断言/白名单/补写/跨校)+ E2E 14/14(含升版本路径回归与 oapi 摘要)
2026-10-10 19:23:44 +08:00
chenxing d6b7a68ec3 feat(app): 应用设置·应用管理——flw_app 白名单 + 学校池同步 + defSave 归属应用校验
- flw_app(sch,app_key uk):学校池(UserBase list-by-school,学校组单点已开通、clientType=null 不过滤端)
  diff 同步——新增即 enabled=1、改名静默刷新、池外保留;UserBase 不可达降级本地行
- /admin/app/list(触发同步)/ /admin/app/enable;defSave 显式 appKey 须 ∈ 启用集合(不传不拦,升版本继承不受影响)
- SQL 备案:flw_app 建表 + UserBase 菜单 107 新增/104 下线(人工执行)
- 单测 +8;E2E 13/13(local-debug/four-topics-c-e2e.py)
- 关联 SDK 修复:BoaApp.createTime @JsonFormat 对齐 UserBase 时间契约(BasePlatform 单独 commit,Nexus -73)
2026-10-10 19:17:38 +08:00
chenxing 92619508f0 feat(condition): CONDITION 判断方式二选一——EXPRESSION 内置 Aviator 表达式(沙箱)+ SERVICE 原口径;JudgeBody 补 submitterId
- ExpressionEvaluator:Aviator 5.4.3 沙箱(FEATURE_SET 只留 If、ALLOWED_CLASS_SET 空=禁类访问/反射)、编译缓存、
  顶层变量缺失抛错挂起(Aviator 缺失变量按 nil 且 nil 视作最小值,<= 兜底出口会静默放行——宁挂起不误放行)
- ConditionRouteService.decide 分流:EXPRESSION 按出边顺序取首个 true(逐边结果摘要落 raw_response),
  全 false/异常挂起沿用 SERVICE 纪律(route_log outlet=NULL + EXPRESSION 常量 + 告警 + 管理端重跑)
- DefValidator 发布期分层校验:EXPRESSION 出口缺条件/语法错/违禁表达式硬拦;表单变量放行(运行时核对);
  内置变量疑似拼错 warn;judgeMode 非法值拦
- /admin/router/eval 调试端点(同一求值核心,不落库不走流程)
- 单测 22 新增 + 全量 170 绿;E2E 18/18(发布/分支选路/挂起留痕/重跑/调试)见 local-debug/four-topics-a-e2e.py
2026-10-10 18:52:40 +08:00
chenxing a1f99fd7e0 feat(def): 流程定义唯一键改按流程线管 + 归属应用筛选
build / build-push (push) Successful in 8m31s
- flw_def 唯一键 (sch,code,ver)→(sch,flow_guid,ver)(uk_flw_def_guid_ver,生产/本地已手工切索引):升版本 maxByGuid+1 与唯一键同口径,同编码多条流程线(work-leave 三条线实锤追尾)不再死锁
- 新建永远新开流程线 v1,删除同编码草稿复用;撞唯一键转"保存冲突"友好提示
- 新增 flw_def.app_key 归属应用列:save 全链路透传(升版本缺省继承源线、传非空覆盖);/admin/def/list 支持 appKey 过滤;新增 /admin/def/appkeys 应用清单(flw_def 已标注 ∪ 已注册回调)
- FlowDefAdminServiceSaveTest 10 用例锁 save 分派语义
2026-10-10 14:34:25 +08:00
chenxing 7c92e953ec feat(diagram): 流程图竖排改造(横→竖)——布局单源坐标转置+名单2行换行+边几何/箭头/标签翻转,golden 用例改写并新增 6 出口用例
build / build-push (push) Successful in 2m44s
2026-10-09 19:42:50 +08:00
chenxing 56a71f813f fix(test): 平台 SDK 快照(101009 b66)移除 OpenApiUserClient 通道绑定 API——测试桩同步删除死 override 对齐编译基线 2026-10-09 19:42:38 +08:00
chenxing 9bb7250c5e fix(appearance): 503 改 sendError 直写——绕过 GlobalExceptionHandler 兜底(线上实测发现)
build / build-push (push) Failing after 1m14s
2026-10-09 00:39:57 +08:00
chenxing 1efe4feb50 feat(appearance): 外观偏好同源读代理端点 GET /api/appearance(oapi 代理轮)
build / build-push (push) Successful in 2m6s
- YschOpenCall(target=userhome) 经 open-gateway 签名直调,JsonNode 整体透传;下游不可达 503 静默降级
2026-10-08 23:27:50 +08:00
chenxing d28b5d1161 feat(embed): 新增办件进度嵌入页签发端点与免签数据端点
build / build-push (push) Successful in 10m1s
2026-10-03 16:42:21 +08:00
chenxing 1d2f4a0cb2 refactor(diagram): 停透传废弃的 layout 字段(positions 单源生效) 2026-10-03 15:13:39 +08:00
chenxing d6898ea674 test(diagram): DiagramLayoutService golden 用例 2026-10-03 13:55:24 +08:00
chenxing 09c3c0c38c feat(diagram): DiagramVo 增 positions 布局单源字段 2026-10-03 13:51:45 +08:00
chenxing cacdd4ee14 refactor(diagram): 布局计算抽 DiagramLayoutService,PNG 出图不变 2026-10-03 13:46:57 +08:00
chenxing 2384da7822 fix(test): 基线修复——stub 补平台 SDK 新增的通道绑定方法 + 自带 spring-boot-starter-data-redis(0928 快照 WeChatAuthAutoConfiguration 签名引用 StringRedisTemplate,接入前提为应用自带 data-redis) 2026-10-03 13:36:58 +08:00
chenxing 2f8daa12a5 feat(notify): 待办/抄送消息补 jumpApp 页面归属(B0 直批配套补提交)——bizUrl 落地页场景 jumpApp=instance.bizType(接收方按它查基址),未传 bizUrl 回落办理页留空按 bizType;UserMsgClient.sendUserMsg 增 jumpApp 形参;CallbackPushService/ConditionRouteService 跟随 B 系列回调前缀改造;测试补 jumpApp 断言
build / build-push (push) Successful in 49s
2026-09-28 19:23:29 +08:00
chenxing 31476ef707 chore(ci): 发版窗口重建触发(D3)——拉取 SDK SNAPSHOT -20260928(FLOW_CENTER 目录键归一 + getAppByCode),无代码变更
build / build-push (push) Successful in 1m13s
2026-09-28 18:27:32 +08:00