Conversation
Co-authored-by: binarywang <[email protected]>
There was a problem hiding this comment.
Pull request overview
本 PR 为 weixin-java-cp 模块补齐企业微信「人事助手(HR Assistant)」相关能力,在现有 WxCpService 服务体系中新增 HR Service,并补充对应的 API 路径常量、请求/响应 Bean 与集成测试用例。
Changes:
- 新增人事助手 API 路径常量
WxCpApiPathConsts.Hr(获取字段配置/获取档案数据/更新档案数据) - 新增 HR 领域 Bean(字段信息、字段值、员工档案数据、响应包装类)
- 新增
WxCpHrService接口与WxCpHrServiceImpl实现,并在WxCpService/BaseWxCpServiceImpl中注册getHrService()
Reviewed changes
Copilot reviewed 11 out of 11 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
| weixin-java-cp/src/main/java/me/chanjar/weixin/cp/constant/WxCpApiPathConsts.java | 增加 HR Assistant 相关接口路径常量,供服务实现拼装请求 URL |
| weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpHrService.java | 新增 HR Assistant 服务接口定义(字段配置/档案数据查询与更新) |
| weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpHrServiceImpl.java | 新增 HR Assistant 服务实现,负责组装请求体并调用企业微信 API |
| weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpService.java | 在主服务接口中新增 getHrService() 入口 |
| weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/BaseWxCpServiceImpl.java | 默认初始化并暴露 WxCpHrService,纳入统一服务管理 |
| weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/hr/WxCpHrEmployeeFieldInfo.java | 新增员工档案字段配置 Bean(字段 key/名称/类型/系统字段/选项列表等) |
| weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/hr/WxCpHrEmployeeFieldValue.java | 新增字段值承载 Bean(文本/选项/日期/附件等值类型) |
| weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/hr/WxCpHrEmployeeFieldData.java | 新增单员工档案数据 Bean(userid + 字段列表) |
| weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/hr/WxCpHrEmployeeFieldInfoResp.java | 新增“字段配置”响应包装类(继承 WxCpBaseResp) |
| weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/hr/WxCpHrEmployeeFieldDataResp.java | 新增“员工档案数据”响应包装类(继承 WxCpBaseResp) |
| weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/impl/WxCpHrServiceImplTest.java | 新增 HR Assistant 集成测试用例,覆盖字段配置查询/档案查询/档案更新调用路径 |
| @SerializedName("field_type") | ||
| private Integer fieldType; |
There was a problem hiding this comment.
PR 描述里提到“字段类型枚举”,但这里仍然使用 Integer 来承载 fieldType(并在注释里硬编码 1~8 的含义)。如果确实希望对外提供类型枚举,建议新增/改用枚举类型(同时保留与接口数值的映射),或同步修正 PR 描述避免与实现不一致。
| public WxCpHrEmployeeFieldDataResp getEmployeeFieldInfo(List<String> userids, List<String> fields) throws WxErrorException { | ||
| JsonObject jsonObject = new JsonObject(); | ||
| jsonObject.add("userids", WxCpGsonBuilder.create().toJsonTree(userids)); | ||
| if (fields != null && !fields.isEmpty()) { | ||
| jsonObject.add("fields", WxCpGsonBuilder.create().toJsonTree(fields)); | ||
| } |
There was a problem hiding this comment.
getEmployeeFieldInfo 的 userids 在接口注释中是必填且“不超过 20 个”,但当前实现无论是否为 null/空都会直接序列化并发送(可能生成 "userids":null 或空数组),让错误延迟到服务端返回。建议在客户端侧显式校验 userids 非空且 size<=20,不满足时直接抛 IllegalArgumentException(可参考 WxCpKfServiceImpl 的参数校验风格)。
| public void updateEmployeeFieldInfo(String userid, List<WxCpHrEmployeeFieldData.FieldItem> fieldList) throws WxErrorException { | ||
| JsonObject jsonObject = new JsonObject(); | ||
| jsonObject.addProperty("userid", userid); | ||
| jsonObject.add("field_list", WxCpGsonBuilder.create().toJsonTree(fieldList)); | ||
| this.cpService.post( | ||
| this.cpService.getWxCpConfigStorage().getApiUrl(UPDATE_EMPLOYEE_FIELD_INFO), | ||
| jsonObject.toString() | ||
| ); |
There was a problem hiding this comment.
updateEmployeeFieldInfo 直接把 userid 和 fieldList 写入请求体,但没有做基本参数校验:userid 为空/空白、fieldList 为 null/空时都会被序列化并发送,易导致难定位的服务端错误。建议在方法入口处校验 userid 非空白、fieldList 非空且不为空列表,不满足时抛 IllegalArgumentException。
| WxCpHrEmployeeFieldData.FieldItem fieldItem = new WxCpHrEmployeeFieldData.FieldItem(); | ||
| fieldItem.setFieldKey("sys_field_name"); | ||
| me.chanjar.weixin.cp.bean.hr.WxCpHrEmployeeFieldValue fieldValue = new me.chanjar.weixin.cp.bean.hr.WxCpHrEmployeeFieldValue(); | ||
| fieldValue.setTextValue("测试姓名"); | ||
| fieldItem.setFieldValue(fieldValue); |
There was a problem hiding this comment.
这里对 WxCpHrEmployeeFieldValue 使用了全限定类名,导致测试代码可读性较差,也不利于后续维护。建议直接添加 import 并使用简短类名。
| * | ||
| * @author <a href="https://github.com/leejoker">leejoker</a> created on 2024-01-01 | ||
| */ | ||
| @Test |
企业微信 SDK 缺少人事助手相关 API 支持(官方文档)。本 PR 新增完整的人事助手服务层。
新增内容
API 路径常量 (
WxCpApiPathConsts.Hr)GET_FIELD_INFO— 获取员工档案字段配置GET_EMPLOYEE_FIELD_INFO— 获取员工档案数据UPDATE_EMPLOYEE_FIELD_INFO— 更新员工档案数据Bean 类 (
bean/hr/)WxCpHrEmployeeFieldInfo— 字段配置(类型枚举:文本/日期/数字/单选/多选/附件/手机/邮箱)WxCpHrEmployeeFieldValue— 字段值(涵盖 text、option、multi-option、date、attachment)WxCpHrEmployeeFieldData— 单员工档案数据WxCpHrEmployeeFieldInfoResp/WxCpHrEmployeeFieldDataResp— 响应包装类服务接口与实现
WxCpHrService+WxCpHrServiceImplWxCpService#getHrService()注册入主服务,BaseWxCpServiceImpl默认初始化使用示例
Warning
Firewall rules blocked me from connecting to one or more addresses (expand for details)
I tried to connect to the following addresses, but was blocked by firewall rules:
developer.work.weixin.qq.com/home/REDACTED/work/_temp/ghcca-node/node/bin/node /home/REDACTED/work/_temp/ghcca-node/node/bin/node --enable-source-maps /home/REDACTED/work/_temp/copilot-developer-action-main/dist/index.js(dns block)/usr/bin/curl curl -s REDACTED(dns block)/usr/bin/curl curl -s REDACTED -H User-Agent: Mozilla/5.0(dns block)If you need me to access, download, or install something from one of these locations, you can either:
Original prompt
🔒 GitHub Advanced Security automatically protects Copilot coding agent pull requests. You can protect all pull requests by enabling Advanced Security for your repositories. Learn more about Advanced Security.