chenxing
|
7c5391458c
|
[v2.1] B 审批代理补齐:增 ByBiz/RecordUrl/TaskPageUrl 端点,Approve 透传 edgeName;身份仍全取 CAS 会话前端不可传;补 Controller/Client 单测
build / build-push (push) Successful in 1m17s
|
2026-10-19 16:55:41 +08:00 |
|
chenxing
|
986a875279
|
[ysch-flow] S3.3~S3.5 notice 迁移试点:手写 Handler 换声明式 Adapter
build / build-push (push) Successful in 1m45s
事件→状态机推进改由 NoticeFlowBizAdapter 一次声明、starter 的 FlowBizCallbackBridge 执行;
纪律逐条等价搬运(行锁读单、未绑流程/单据不存在/脏 bizId 吞掉回 200、last_instance_version
乱序二道门、audit_status 终态不回退与重复终态不重跑副作用、抄送逐人留痕)。落库换成新增
窄列方法 updateAuditFromFlow/updateAuditResultFromFlow/markPublished,不再整实体 save
(apply 回填与并发回调互打的 E2E 教训);通过即发布 + 短信后置留在 onPassed 钩子,
未到定时点不发由 SmsCatchupJob 补发的口径不变。抄送按 F7 显式开镜像(本应用有自家列表)。
发起编排上交 FlowSubmitTemplate(AFTER_COMMIT/独立线程/串行/duplicated 按成功/失败静默
保持待提交/bizUrl 按 detail-route 自动拼/变量契约预检),出站仍走本应用 FlowClient 以保住
enabled=false 降级与 legacy base-url 回落;守卫在异步路径由 spec.preflight 于出站线程判定。
attempt 归属核对刻意未接(notice bizId 无 attempt 段,接上会丢首轮 submitted,保守处理)。
NoticeFlowCallbackHandler 只摘 @Service 保留代码作回退绳:恢复=加回 @Service + 删 yaml
的 yh.flow-biz 块(两者互斥,上下文已有手写 Handler 时桥不装配)。
mvn -o test 全绿:142 例(含新增 NoticeFlowBizAdapterTest 16 例等价性断言与原 21 例手写
Handler 用例);受影响 3 个测试的构造改用与生产同源的 FlowSubmitTemplates.forTests。
|
2026-10-17 23:44:35 +08:00 |
|
chenxing
|
d0af9d481c
|
[ysch-flow] S3.1~S3.2 接入 ysch-flow starter 并声明 yh.flow-biz 语义块
依赖不写版本(BOM 托管);存量 callback 件显式声明保留(回退绳类仍需其 SPI 类型)。
yaml 增 biz-type=notice、四态码 10/20/30/40(取 FlowAuditStatusEnum,0=待提交是本应用
特有暂态不入映射)、variables=[deptId,deptName]、detail-route=/list/detail?serid={bizId}
(与迁移前 JumpTarget 产物逐字节相同)。密钥段一字未动。
另修一处与本次无关的环境断点:appearance 件只由 feat/appearance-sdk 分支的 BOM 托管,
本分支 BOM 无该条目,notice/svc-hall/UserBase 均解析失败;给 notice 自己的依赖补显式
1.0.0-SNAPSHOT(jar 已在本地仓库),合流后应删本行回落 BOM。
|
2026-10-17 23:44:18 +08:00 |
|
chenxing
|
414dbfc2b2
|
外观SDK化任务E:本地 AppearanceProxyController 下沉平台 starter
build / build-push (push) Successful in 1m1s
删 Notice 本地哑管道(试点范本已完成使命),加 yh-appearance-spring-boot-starter
(BOM 管版本,YschOpenCall 走聚合包)。端点同 URL /api/appearance 同语义:三态
proxy/local/off,503 直写铁律内置(0721cf3 教训)。工作区他人 WIP(NoticeRead*
)未混入,择迹提交。
|
2026-10-12 09:39:10 +08:00 |
|
chenxing
|
d99ce81cc0
|
refactor(file): 附件根目录对齐平台标准 FILE_PATH——优先级 FILE_PATH(共享 application-platform.yml 一份)>FILE_UPLOAD_PATH(notice 过渡键)>file.upload-path(本地开发)
build / build-push (push) Successful in 2m31s
其他子应用(userhome/userbase/flow-center)代码即读 FILE_PATH,各子应用值相同
(/data/upload),收敛到共享 application-platform.yml 一份后子应用无需再各自维护;
notice 的 FILE_WEB_PATH/UPLOAD_WEB_PATH_HTTP 为 projman 模板键,代码无消费点。
|
2026-10-10 16:04:31 +08:00 |
|
chenxing
|
b96de59b6d
|
docs(file): FILE_UPLOAD_PATH 注释改为配置文件顶层键口径(与 flow-center 的 FILE_PATH 同玩法,环境变量亦可)
build / build-push (push) Successful in 2m38s
|
2026-10-10 15:54:07 +08:00 |
|
chenxing
|
a4e8702dc0
|
fix(file): 附件存储根目录优先读平台标准环境变量 FILE_UPLOAD_PATH——修复生产附件随容器重建丢失
build / build-push (push) Successful in 1m27s
生产容器 env 只有旧 dotnet 风格 FILE_PATH 顶层键(Spring 不识别),@Value(${file.upload-path})
回落到打包默认 D:/data/upload,Linux 下被锚定为 /app/D:/data/upload 写进容器可写层,
每次 projman 重新部署附件全部丢失(2026-10 事故,卷里仅剩 9/1 前的 3 个文件)。
新优先级:FILE_UPLOAD_PATH 环境变量(子应用平台新标准,projman 注入 /data/upload)
> file.upload-path(application.yml,仅本地 Windows 开发)> /data/upload 兜底。
deploy/notice.yaml 与 docker-compose.notice.yml 文档块同步更新。
|
2026-10-10 15:46:07 +08:00 |
|
chenxing
|
48cd8884d8
|
fix(notice): 已读明细空态 receivers 不可变列表修复 + SDK 暴露面测试补齐
build / build-push (push) Successful in 1m2s
- NoticeService.getReadDetailGrouped:receivers 空态(全员通知)返回不可变 emptyList,追加已读者前先拷贝为 ArrayList,避免 UnsupportedOperationException
- 新增 NoticeReadDetailGroupedAllTypeTest、NoticeSdkAdviceExposureTest
|
2026-10-10 15:17:08 +08:00 |
|
chenxing
|
b85f5e16fb
|
feat(notice): 移动端 API 接口面(/mobiapi)——路径常量闭集、访问拦截器与控制器
- Config:API_PATH 由通配 /{platform} 收敛为 /api(PC 管理端,CAS 会话),新增 MOBI_API_PATH=/mobiapi(移动端,平台 Bearer token)
- 新增 MobiAccessInterceptor:移动端访问拦截(token 校验)
- 新增 MobiWebMvcConfig:挂载 /mobiapi 前缀与拦截器
- 新增 BaseMobiController / NoticeMobiController:移动端通知接口
- 随附测试:MobiAccessInterceptorTest / MobiWebMvcConfigTest / NoticeMobiControllerTest
|
2026-10-10 15:17:06 +08:00 |
|
chenxing
|
81a988f96a
|
feat(notice): 流程快照增约定键 summaryFields(通知标题/来源部门/通知对象)
build / build-push (push) Successful in 1m4s
供 flow-center 嵌入页「业务信息」直出中文键名,零后端改动(bizSnapshot 透传)。
通知对象:全员 ⇒「全部」;指定 ⇒ 前 3 个姓名以「、」连接,多于 3 人再追「 等N人」。
原有键(title/summary/attachmentNames 等)照旧保留。
|
2026-10-10 14:56:10 +08:00 |
|
chenxing
|
5efe9c09fd
|
Merge remote-tracking branch 'origin/main' into feat/flow-embed
build / build-push (push) Successful in 2m19s
|
2026-10-09 20:56:28 +08:00 |
|
chenxing
|
e6e91157be
|
feat(notice): 新增 Flow/DiagramDef 端点——flowGuid 口径后端中转 PNG(SDK diagramUrl 双路径+token 复用),供绑定页/发通知页 Drawer 修复 404 坏链;守卫与绑定读取同口径(CAS 登录即可)
|
2026-10-09 20:04:28 +08:00 |
|
chenxing
|
09eb27c6cf
|
fix(appearance): 503 改 sendError 直写——绕过 GlobalExceptionHandler 兜成 200+code:6 信封(线上实测发现)
build / build-push (push) Failing after 1m3s
|
2026-10-09 00:40:13 +08:00 |
|
chenxing
|
0721cf3b7f
|
fix(appearance): 503 改 sendError 直写——绕过 GlobalExceptionHandler 兜成 200+code:6 信封(线上实测发现)
|
2026-10-09 00:39:47 +08:00 |
|
chenxing
|
0d05986f8c
|
feat(appearance): 外观偏好同源读代理端点 GET /api/appearance(oapi 代理轮)
build / build-push (push) Successful in 3m30s
- YschOpenCall(target=userhome) 经 open-gateway 签名直调 /oapi/appearance,JsonNode 整体透传(哑管道)
- 降级铁律:下游不可达 503(init 侧静默不动本地键),绝不伪装 200+全 null 清键
|
2026-10-08 23:59:25 +08:00 |
|
chenxing
|
867809fe37
|
feat(appearance): 外观偏好同源读代理端点 GET /api/appearance(oapi 代理轮)
- YschOpenCall(target=userhome) 经 open-gateway 签名直调 /oapi/appearance,JsonNode 整体透传(哑管道)
- 降级铁律:下游不可达 503(init 侧静默不动本地键),绝不伪装 200+全 null 清键
|
2026-10-08 23:27:33 +08:00 |
|
chenxing
|
a103d661fc
|
feat(notice): 接入流程进度嵌入页(守卫端点 + Drawer iframe)
|
2026-10-03 16:59:41 +08:00 |
|
chenxing
|
0216d0655c
|
feat(msg): JumpTarget 标准化接入——两处跳转换 SDK 结构化门面(app+jump 链式/setBizJump),jumpPath 与 bizUrl 输出逐字节零差异;随车自指地址 Phase2 镜像收口(front-base-url 与 callback-* 键删除、裸相对路径、jumpApp 归属声明,测试同步);application.yml 服务目录键 flowcenter→flow-center 归一(D1 P3 尾巴)
build / build-push (push) Successful in 2m15s
|
2026-09-29 11:00:05 +08:00 |
|
chenxing
|
082ef0af0a
|
fix(test): NoticeApprovalClientTest 漏改 FLOWCENTER→FLOW_CENTER(D1 补漏)——test/notice/flow 包不在首轮扫描路径,CI testCompile 拦获
build / build-push (push) Successful in 2m25s
|
2026-09-28 18:39:48 +08:00 |
|
chenxing
|
4ac3626b92
|
refactor(flow): 目录键归一 flowcenter→flow-center(D1)——PlatformService.FLOW_CENTER 机械跟随,FlowCenterClientTest 失败文案断言同步新键;NoticeFlowProperties 注释残留随移动门户线 WIP 后续处理
build / build-push (push) Failing after 7s
|
2026-09-28 17:26:30 +08:00 |
|
chenxing
|
a7e93cb22d
|
refactor(flow): 回调端点收敛为 starter 默认 /oapi/flow/callback + 开漂移自动核对
build / build-push (push) Successful in 1m5s
网关契约 /{target}/oapi/** 的首段已由 target 承担,应用内端点再加一段
<target> 是冗余(Notice 的 /oapi/notice/flow/callback 属历史遗留:其 oapi
Controller 统一建在 /oapi/notice/** 下)。
- application.yml: notice.flow.callback-path 与 yh.flow-callback.path
由 /oapi/notice/flow/callback 收敛为 /oapi/flow/callback
- application.yml: 摘除显式 callback-url,注册地址改由 starter 推导
(open-host ?: yh.open.base-host) + /{target ?: base-path} + path
⇒ 生产 = http://open-gateway-service:10013/notice/oapi/flow/callback
回滚绳:把全地址写回 callback-url 即可,无需回滚镜像
- application.yml: 开 reconcile-on-register=true —— 端点/ctx/base-path
变更后镜像行有效但登记 URL 不一致时自动重注册,替代"删镜像行→重新保存
绑定"的手工恢复路径(注意:重注册会轮换 secret)
- NoticeFlowProperties: callbackPath 默认值同步
- 测试 4 处同步冻结字面量/硬编码路径/断言
测试:mvn -o test → 114/114 通过(含 NoticeFlowApiIT 9 例、FlowCallbackTransientIT
1 例在真实过滤链上按新端点 200)
|
2026-09-24 11:57:01 +08:00 |
|
chenxing
|
58aadaa95a
|
feat(flow): 迁 yh-flow-callback starter + 对接抄送与条件路由判断端点
build / build-push (push) Successful in 1m8s
迁 starter(2026-09-20 方案):删手写 OapiFlowCallbackController/FlowCallbackService,改 NoticeFlowCallbackHandler 实现 SPI;验签/eventId 幂等/乱序门交 starter 管线,yml 切中央密钥链(trust-registry)
抄送(2026-09-24):flow.cc.sent 落 notice_cc 表 + GET /api/notice/cc/My 应用内「抄送给我的」;未发布通知可见守卫加第 4 条「被抄送人」
条件路由(2026-09-24):POST /oapi/notice/flow/route/dept-judge(纯读幂等;formData 优先免查库;未命中 outlets 抛错绝不默认放行);apply 的 formData 带发文部门(deptId/deptName)
IT 验签确定性:NoticeFlowApiIT/FlowCallbackTransientIT 属性覆盖回落白名单(trusted-apps.100019),不再依赖本地 Redis 密钥内容
生产 DDL:deploy/sql/20260924_add_notice_cc.sql;mvn test 114 全绿
|
2026-09-24 01:19:26 +08:00 |
|
chenxing
|
df9b9e0aa5
|
feat(approval): 待审核代理——Todo/Instances/Approve/Reject(operator=CAS 登录态)
build / build-push (push) Successful in 1m2s
- NoticeApprovalClient:YschOpenCall 泛化调 flow-center /oapi/flow/tasks|task/**
(SDK 四方法未发版,泛化调用零发版依赖,同 resolveTarget 解析链经网关)
- NoticeApprovalController:operatorId/Name 一律取 BoaUser 登录态,请求不收身份字段;
reject 空 opinion 前置业务码拒绝;未接入流程中心降级 FORBIDDEN
- 9 用例:URL/参数逐字断言+bizType 固定+未接入+异常透传(90 存量单测无回归)
|
2026-09-23 00:28:32 +08:00 |
|
chenxing
|
5db629cfdb
|
feat(msg): 接入消息中心——NoticeUserMsgNotifier(发布/转发/催办→UserMsg WS 实时推送,afterCommit 容错+分片+幂等)+ SDK 门面客户端 + 用户目录归一(09-19 二期验收 9/9)
build / build-push (push) Successful in 57s
|
2026-09-19 18:55:17 +08:00 |
|
chenxing
|
a5204680e6
|
ci: 重触发构建(上次 runner OOM exit137)
build / build-push (push) Successful in 1m7s
|
2026-09-17 01:16:32 +08:00 |
|
chenxing
|
08e9531b5f
|
feat(flow): 接入新流程体系——SDK withdraw/progress/diagramUrl:撤回后端中转+同源流程图端点+Trace 结构化 steps(治前端直调外溢)
build / build-push (push) Failing after 33s
|
2026-09-17 01:10:36 +08:00 |
|
chenxing
|
b3c5326163
|
fix(flow): 回调路径过期值修正 + 地址缺失 fail-fast + 服务目录显式化
build / build-push (push) Successful in 2m10s
- application.yml:notice.flow.callback-path 由过期的 /callback/flow 改回
/oapi/notice/flow/callback(/callback/* 已随 X-Flw-* 过滤器下线,旧值会让本地注册的
回调地址 404);新增 yh.open.services.flowcenter,删 notice.flow.base-url。
- NoticeFlowProperties.baseUrl 默认值去掉(localhost:8085 静默回落是隐患);
FlowCenterClient 在 enabled=true 且「目录与 legacy 键都缺」时构造期 fail-fast
(enabled=false 不校验——显式未接入本就不需要地址)。
- 测试:新增 NoticeFlowCallbackConfigContractTest(反射拼控制器映射,冻结
callback-path/callback-base-path 与控制器/Runtime ctx 的咬合);FlowCenterClientTest
补 fail-fast 与 disabled 两态。68 测试全绿。
|
2026-09-16 21:06:17 +08:00 |
|
chenxing
|
8852c7ab02
|
refactor(sdk)!: 适配 SDK 领域分包——流程/班级/用户中心门面切新包
build / build-push (push) Successful in 55s
- FlowModels / FlowCenterClient / FlowCenterClientTest:
openapi.dto.FlowDto → openapi.flow.model.*(按需引入 FlowApplyBody/Result、FlowCallbackRegBody/Result、
FlowInstance/FlowSummary);TargetSpec/YschCallProperties/YschOpenCall → openapi.core.*
- ClassService(+IClassService):切新班级域门面 YschClassOpenApi + clazz.model.SchTea,
替换原先用 openapi.client.YschBaseOpenApi 直连基址的写法
- ContactsService / NoticeService / UserCenterService:YschBaseOpenApi → openapi.base.*
- application.yml:随服务目录兜底去掉 open.enabled / user-center-url / userclass 三个 legacy 键
(userclass 已由 PlatformService 枚举兜底 = base-host + /userclass)
验证:clean test 全绿 64 个非 IT 用例(含本次改动的 FlowCenterClientTest 5/5)。
12 个 *IT 在本机因无 MySQL(jdbc:mysql://localhost:3306/bsch_notice_test)在
entityManagerFactory 阶段 Connection refused,属环境性失败,与本次迁移无关。
说明:这批改动是工作区在途内容(适配 SDK 领域分包所必需),不落库则 Notice 无法对
当前 nexus 上的 SDK 构建通过——即"消费方提交态编译不过"的根因。
|
2026-09-16 19:26:27 +08:00 |
|
chenxing
|
01ce87ed7a
|
feat(app-auth): Notice 入站验签由白名单改走中央密钥链(注册表模式)
- pom 显式引 spring-boot-starter-data-redis(yh-app-auth 的该依赖是 optional、不传递);
删掉原先"不引 redis"的注释
- application.yml:去掉 trusted-apps 白名单,改 trust-registry: true —— 共享 Redis
sign:app:* 单一真源,凡在 UserBase 注册过的 appKey 自动可验,新增调用方不必再改配置+重启;
并关掉 management.health.redis.enabled(防 Redis 抖动把 /actuator/health 拉成 DOWN 503)
- 配套(projman 配置,非本仓):notice 应用勾选 redis 中间件(注入 SPRING_REDIS_*)+
application-prod.yml 同步去白名单/开 trust-registry。缺任一环都会 fail-closed 到全 401
前置:UserBase 已部署 ①(密钥链落 db0,refreshAll synced=10),flow-center 生产身份 100009 已在
application_info 注册,故回调验签可从注册表解析。
|
2026-09-16 18:56:30 +08:00 |
|
chenxing
|
bfb50a205d
|
feat: 流程对接切 SDK 类型化门面 YschFlowOpenApi(服务目录 flowcenter 优先,legacy base-url 回落)
build / build-push (push) Failing after 26s
- FlowModels 全部改为 extends SDK FlowDto(字段单一事实源收敛到 SDK,消费方签名零改动)
- FlowCenterClient:目录显式配置 flowcenter(yh.call.targets/yh.open.services)走门面命名目标,
未配置回落 notice.flow.base-url ad-hoc(迁移期兼容)
- 含 2026-09-13/14 存量:重提清旧驳回意见(F4)/消息中心/文件上传改造
|
2026-09-16 01:21:23 +08:00 |
|
chenxing
|
138b226ab0
|
先审后发
build / build-push (push) Successful in 2m29s
|
2026-09-15 22:09:43 +08:00 |
|
chenxing
|
fffcf1c66d
|
refactor(base): GetUserMod 不再本地组树,改为映射用户中心下发的 children
build / build-push (push) Successful in 2m27s
用户中心已将模块层级经平台 BoaModule.children 下发,本仓原先按 parentId 重建父子
关系的 buildModuleTree 变成空转(且每个子应用各抄一份),现收敛为 toFrontendTree:
只做前端 layout 需要的字段改名(path→page、id→modId、补 usable/orderNumber)并递归
映射 children,层级与兄弟顺序一律以上游为准,本侧不重排。
前端契约不变(children 恒为数组),未触碰任何 .vue/.ts;收到旧版用户中心的扁平结果
(children=null)时退化为与今日一致的扁平菜单,不抛 NPE。
|
2026-09-15 16:20:28 +08:00 |
|
chenxing
|
69c2a41dd2
|
refactor: 删除 PropertyEnvConfigSource,env-config 数据源由平台默认挂载文件源兜底(yh-env-config starter B2 下沉)
build / build-push (push) Successful in 1m14s
|
2026-09-09 11:27:35 +08:00 |
|
chenxing
|
5384a08475
|
接入平台 env-config:新增 PropertyEnvConfigSource 激活免登录 GET /api/env-config?target=front(线上值经 YH_ENV_CONFIG_SOURCE_FRONT / Nacos 键注入,projman 维护);新增 EnvConfigApiIT 真实端口验证匿名旁路 CAS(surefire 追加 *IT,连本地 bsch_notice_test 自动建库)
build / build-push (push) Successful in 2m30s
|
2026-09-08 22:10:56 +08:00 |
|
chenxing
|
d5f25b8029
|
字典接口补注册 /dict/Sync(迁移自 base/GetSchModuleIsSms,修复发文页 404)
build / build-push (push) Successful in 2m8s
|
2026-09-08 14:51:40 +08:00 |
|
chenxing
|
7cf17528ef
|
班级管理地址修订
build / build-push (push) Successful in 54s
|
2026-09-08 14:18:27 +08:00 |
|
chenxing
|
2c8125a549
|
移除未使用的 redis/cache 依赖,修复 /actuator/health 整体 DOWN
build / build-push (push) Successful in 53s
|
2026-09-03 11:40:50 +08:00 |
|
chenxing
|
9351d6e9ab
|
健康检测
build / build-push (push) Successful in 1m16s
|
2026-09-03 10:06:58 +08:00 |
|
chenxing
|
5cc6730941
|
ci
build / build-push (push) Successful in 1m16s
|
2026-09-02 09:34:27 +08:00 |
|
chenxing
|
41849defc9
|
通知修订
|
2026-09-01 19:55:12 +08:00 |
|
chenxing
|
c387f8eb76
|
merge projman re-injected files (Dockerfile 10002 + build.yml network option)
build / build-push (push) Successful in 2m15s
|
2026-09-01 14:37:20 +08:00 |
|
chenxing
|
6375562c8d
|
通知修订
|
2026-09-01 14:09:24 +08:00 |
|
chenxing
|
83975ad93b
|
ci
|
2026-08-24 20:02:51 +08:00 |
|
chenxing
|
88456e4fc8
|
ci
|
2026-08-24 18:02:11 +08:00 |
|
chenxing
|
379d073df2
|
fix: Dockerfile COPY 路径 target/notice.jar -> target/app.jar 对齐 CI 产物名
|
2026-08-24 18:01:40 +08:00 |
|
chenxing
|
81f32026c3
|
ci
|
2026-08-24 17:57:39 +08:00 |
|
chenxing
|
bf973e5979
|
merge projman injected files
|
2026-08-24 17:40:23 +08:00 |
|
chenxing
|
40dd7fadea
|
init local code
|
2026-08-24 17:37:10 +08:00 |
|