--- name: kdshr-dev description: >- Kingdee EAS/SHR (sHR) custom development discipline for BaoYPro and similar EAS/sHR projects — not Cosmic/苍穹 or other Kingdee product lines. Use when writing or reviewing Java integration code (weaverTodo, SSO, BMC, OpenAPI) on EAS/sHR, when API fields or platform getters are unclear, or when the user mentions 不要乱猜, 不确定先问, 减少多余判断, or coding standards for Kingdee sHR secondary development. --- # Kingdee SHR 二开编码纪律 适用:`kdshrpmsg` / `kdshrsso` 及 **金蝶 EAS/sHR**(如 BaoYPro、YHPro)二开。与业务 skill 一起用;本 skill 管「怎么写、不确定怎么办」。 **不适用**:金蝶其他产品线(如 **苍穹 Cosmic**、云星空等)——那些项目的目录与源码编码约定不同,**不要**套用下文 `src`/GBK、`websrc`/UTF-8 规则。 --- ## 不确定就先问,禁止乱猜(强制) 对 **平台 API、BMC/Info 字段、getter、表结构、对方接口必填项** 拿不准时: 1. **先向用户提问**(可一次问清),写清:缺什么、可选方案、你倾向哪种。 2. **用户确认或给出文档/源码依据后再写代码**。 3. **禁止**: - 反射遍历一串可能存在的 `getXxx` 碰运气; - 编造未证实的方法名、字段名、bosType、枚举值; - 用多层 `try/catch` + 空忽略把「猜」藏起来; - 为兜底再堆一串多余分支「也许有用」。 已确认可用的(如文档、现网日志、同类已测通代码、用户明确指定)才能写进实现。 ### 已确认(BaoYPro BMC → 消息中心 sendMsg,测试已通过) - 人员标识:只传 `workCode`(工号),**不传** `employeeId`。 - 发送人:`msgInfo.getSenderId()` → `getUserById` → `UserInfo.getNumber()` / `getName()`。 - 接收人:`msgInfo.getReceiver()` → `resolveReceiverWorkcode`(工号)。 - 正文:`msgInfo.getBody()`;空则回退 `getTitle()`。 - 标题:`msgInfo.getTitle()`。 - 环境 moduleId/eventId:以 `weaverTodoConfig.properties` 为准,测试与生产不同,勿写死在代码里。 ### 提问示例(仍未知时) - 对方接口必填项与文档表头冲突时,以用户/现场补丁结论为准(如只要 workCode)。 - 新客户 BMC 字段未确认前,不要反射猜 getter。 --- ## 实现偏好 - **配置优于猜测**:对方要求固定发送人、租户、模块 id 时,用 properties;不要从 Info 里瞎抠。 - **少分支**:一个来源够用就不要写三套 fallback。 - **失败要响**:必填缺失直接打 error 日志并返回失败,并写清缺哪项配置/字段。 - **编码(仅 EAS/sHR 工程)**: - `src/`:后端 Java 一般 **GBK**。 - `websrc/`:前端/门户侧 Java(含 handler、osf 等)一般 **UTF-8**。 - 配置如 `weaverTodoConfig.properties`、`integration-config-*.json`:多为 **UTF-8**,须与加载代码一致。 - 改文件前先确认目录;**苍穹等非 sHR 工程勿套用本条**。 --- ## 与业务 skill 的关系 | Skill | 管什么 | |-------|--------| | `kdshrpmsg` | 待办/通知业务 intake、接口选型、切生产清单 | | `kdshrsso` | SSO 模式 intake、切生产 | | **`kdshr-dev`(本 skill)** | 不确定先问、不乱猜 API、少写多余判断 | 做消息/SSO 时:先走对应业务 intake;写具体取值逻辑时遵守本 skill。