name: kdshrpmsg description: >- Design and implement Kingdee EAS/SHR workflow todo and to-be-read message push to external portals or Weaver/Fanwei via MessageWebServiceDao. Use for 待办, 待阅, PORTAL-002/003/006/007/011/012/013, OAMessageWebServiceDao, WeaverMessageWebServiceDao, BMCMessage, assignReadRecord, receiveOAConfig, BaoYPro, Weaver, ReceiveTodoRequestByJson, weaverTodoConfig, pcurl entryPath, or ESB portal message integration on Kingdee SHR. BEFORE coding: ask intake questions in this skill (channel, API, identity, deep link, config file).
Reusable pattern from YHPro (玉湖,已测通) and BaoYPro (报业 / 泛微统一待办). Do not copy secrets; adapt per customer.
Related SSO deep-link entry: skill kdshrsso (BaoYPro: Option B-qy /qy/auth/weaver/app.do).
When implementing 待办 / 待阅 for a new project or new channel, do not start coding until goals are confirmed. Ask in one batch. If SSO is in the same delivery, run kdshrsso intake first (or together).
syscode+flowid+workflow+receiver;YH:taskId)?flowid 是否用 procInstId?/qy/auth/weaver/app.do)?审批页 path?*MessageWebServiceDao,还是 Router fan-out 多渠道?默认 独立 Dao + enabled 开关,少动已上线渠道。weaverTodoConfig.properties;钉钉/飞书用 dingtalkTodoConfig / feishuTodoConfig,不要改名合并成一个大文件。isremark 等)——无文档则先按 weaver-baoy-plan 草案请用户改。wf.delayMs)经验值。给出 目标确认表:渠道、配置文件名、SPI 策略、深链模板、人员字段、状态映射来源。用户确认后再改代码。用户说「按报业/按 BaoYPro」时可复述默认假设请一次确认。
When user says 上线 / 切生产, coordinate with kdshrsso Go-live. For Weaver todo channel, update server file:
{EAS_HOME}/server/properties/baoye/weaverTodoConfig.properties
| Key | Set to production |
|---|---|
weaver.openapi.host |
生产 OpenAPI/ecology |
weaver.corpid / app_key / app_secret |
生产开放平台 |
weaver.syscode |
生产已注册标识 |
weaver.shrServerName |
生产 SHR(redirect) |
weaver.sso.appId |
与 integration-config-prod.json 中 appId 一致 |
weaver.sso.entryPath |
通常仍 /qy/auth/weaver/app.do |
Also: 泛微异构系统/IP 白名单;验收待办点击走生产 SSO。
Full list: project docs/integration/go-live-prod.html.
| Scenario | Fit |
|---|---|
| Push workflow 待办 to enterprise portal / OA | Yes |
| Push BMC 通知/待阅 to portal | Yes |
| Portal APIs match YH PORTAL-* REST + HTTP Basic + ESB envelope | Yes |
| Weaver/Fanwei/统一待办中心 (BaoYPro) via ReceiveTodo API | Yes — see weaver-baoy-plan.md |
| Only DingTalk/Feishu, no portal | Partial — separate channel + config file; skip PORTAL-* / Weaver receive |
| Replace product message center entirely | No |
Need portal sync for SHR workflow/messages?
│
├─ Implement MessageWebServiceDao (platform SPI) — NEVER invent a parallel push framework
│ ├─ Todo: addMessage / addCompletedMessage / removeMessage
│ └─ ToBeRead: updateMessages(id, MsgStatus, ctx)
│
├─ Downstream?
│ ├─ YH-style ESB PORTAL-* → TodoMessageServer + receiveOAConfig
│ └─ Weaver E10 receiveRequestInfo → weaverTodo + weaverTodoConfig
│
├─ Deep link back to SHR?
│ ├─ Weaver: relative /qy/auth/weaver/app.do?appId&redirect=approveAbs (kdshrsso B-qy)
│ ├─ Future DingTalk/Feishu: that platform SSO entry + same approveAbs
│ └─ Never rely on Unified /auth/app + UA for PC Weaver todos
│
└─ Config naming
├─ Keep weaverTodoConfig.properties for Weaver only (do not mega-rename for BY)
└─ Later: dingtalkTodoConfig.properties / feishuTodoConfig.properties
| Project | Downstream | API style |
|---|---|---|
| YHPro | Enterprise portal ESB | Multiple PORTAL-* URLs |
| BaoYPro | Weaver / Fanwei / eteams | One receiveRequestInfo (+ OpenAPI oauth) |
Reuse YHPro SPI/hooks idea; replace HTTP payload and status fields. Detail: weaver-baoy-plan.md
platform workflow / BMC
→ XxxMessageWebServiceDao
→ Todo / ToBeRead servers → PORTAL-*
→ MessageCommonUtil (Basic + JSON)
platform workflow / BMC
→ WeaverMessageWebServiceDao
→ WeaverTodoMessageServer
→ WeaverReceiveTodoClient (OpenAPI token + receiveRequestInfo)
→ pcurl from WeaverTodoSupport (entryPath + appId + redirect)
Config: {EAS_HOME}/server/properties/baoye/weaverTodoConfig.properties
Key: weaver.sso.entryPath (default /qy/auth/weaver/app.do) + weaver.sso.appId.
| Method | YH PORTAL | Weaver isremark |
|---|---|---|
addMessage |
002 | 0 |
addCompletedMessage |
006 then 003 | 2; flow end → 4 |
removeMessage |
007 | -1 |
updateMessages |
011 / 012 | 8 (+ viewtype) |
- [ ] 1. Downstream API doc + env + auth
- [ ] 2. Person mapping field (工号 / cfidmusercode / …)
- [ ] 3. MessageWebServiceDao facade + servers
- [ ] 4. Per-channel properties (weaverTodoConfig / receiveOAConfig / …)
- [ ] 5. assignReadRecord / CallLog
- [ ] 6. Register SPI in product
- [ ] 7. BMC hook if 待阅 needed
- [ ] 8. PC URL: SSO wrap (kdshrsso) + approve page
- [ ] 9. Mobile URL if required
- [ ] 10. E2E create → approve → complete/delete
MessageWebServiceDao.sso.entryPath.| Avoid | Why |
|---|---|
| Bypass MessageWebServiceDao | Missed callbacks |
| Absolute pcurl to Weaver | API rejects / 外链规则不符 |
Unified /auth/app for Weaver PC todo |
UA → unsupported_client |
| Rename weaverTodoConfig to “todoConfig” mid-project | Risk / little gain |
| One config file for Weaver OpenAPI + DingTalk push | Secrets and APIs differ |
| Soft-fail empty person mapping | Wrong assignee |
MessageWebServiceDao WeaverMessageWebServiceDao
WeaverTodoMessageServer WeaverTodoSupport WeaverTodoConfig
weaver.sso.entryPath receiveRequestInfo syscode s-HRCloud
assignReadRecord OAMsgCallLog receiveOAConfig PORTAL-002
| Doc | Content |
|---|---|
| yhpro-reference.md | YHPro package + field mapping |
| portal-api-map.md | PORTAL field quick map |
| weaver-baoy-plan.md | BaoYPro Weaver todo (implemented notes) |
| weaver-receive-todo-api.md | Weaver E10 field extract |
| kdshrsso Option B-qy | SSO entry / logout / AttackFilter |