# YHPro Reference - Portal Message Push Concrete layout from 玉湖 YHPro (tested). Adapt package names and URLs for other projects. ## Source layout ``` src/com/kingdee/eas/custom/messageWebService/ |- OAMessageWebServiceDao.java |- config/MessageConfig.java |- server/TodoMessageServer.java |- server/ToBeReadMessageServer.java |- util/MessageCommonUtil.java, DingMessageUtil.java, DingTokenManager.java src/com/kingdee/eas/base/message/app/ |- BMCMessageControllerBeanEx.java src/com/kingdee/eas/custom/synctask/ |- MsgSyncIDMFacadeControllerBean.java ``` Config: `{EAS_HOME}/server/properties/yuhu/receiveOAConfig.properties` ## Full flow + failure triage (read this) **[yhpro-todo-toread-flow.md](yhpro-todo-toread-flow.md)** — 待办/待阅支线、日志关键字、空参与竞态排查。 ## Todo flow (short) addMessage: sleep 8s -> assignId -> addFlow(op=1) -> assignReadRecord addCompletedMessage: sleep 8s -> if task terminal updateAgency(op=4) -> if flow terminal updateFlow(op=2) removeMessage: sleep 9s -> deleteAgency(op=3) **BaoYPro / Weaver 注意**:新增待办顺序与上面不同——先短轮询 AssignmentId → `saveAssignRecord` → 再 `delayForWf` → push。详见主 skill「新增待办与 wf.delayMs 执行顺序」。不要把 YH 的「先长 sleep 再查 id」原样搬到 BaoY。 ## Status map COMPLETED->complete; REJECTED/ROLLBACKED->refuse; CANCELED/TERMINATED->cancel; ABORTED->revoke; else approving ## ToBeRead (short) bosType 41C9B39B; 抄送(bizType 0/80)补链; 无URL→钉钉飞书; UNREADED->011; READED->012; BMCMessageControllerBeanEx hooks create ## Deep links PC: /shr/api/oAToSHR?redirect=...transferApprove.jsp Mobile: MBOS -> /qy/auth/V2/sso?state= SSO: kdshrsso Option B ## Tables assignReadRecord: MsgId, assignID, billId, workflowname, procInstId OAMsgCallLog: audit request/response ## Person cfidmusercode via T_bd_person + T_PM_User; empty -> throw