# 2026-06-03 工作记录 ## 钉钉智能薪酬平台对接 - 新增 `dingtalk_salary` 平台 + 2个接口到 `sql/seed_data_dingtalk_salary.sql` - 新认证类型 `APP_SIGNATURE`:app-id + signature 头部认证 - 签名算法:MD5(body_string + app_secret).toUpperCase() ### 接口明细 1. **salary_dept_list** — `POST /oapi/salary/dept/list`,无入参,单次拉取全量部门 2. **salary_statistics** — `POST /oapi/salary/statistics/dept`,prefetch 自 salary_dept_list,row_inject statisticsMonth ### 代码改动 - `api_client.go`: `applyAuthHeader` 扩展支持 `APP_SIGNATURE` 认证,新增 `applyAppSignatureAuth` + `computeBodySignature` - `platform_manager.go`: 新增 `APP_SIGNATURE` case,从 auth_config 提取 app_id/app_secret - `dynamic_sync.go`: - `toFloat64` 扩展支持 string→float64(适配 salary API 返回 code: "200" 字符串) - `buildReqBody`/`buildPrefetchParams` skip list 新增 `row_inject` - 新增 `injectRowFields` 函数:将请求参数注入响应行 - `injectRowFields` 调用于 syncWithPrefetch 中3处 row 注入点 ## 新增钉钉智能薪酬人力成本报表接口 (2026-06-03 第二阶段) ### 新增接口 3. **salary_statistic_report** — `POST /oapi/salary/statistic/report/data`,无分页,single_record,获取指定月份的人力成本报表 - 入参:`calBizId`(格式 yyyyMM"M",如 "202606M",为空默认当月) - 出参:`data.calBizId` + `data.sumStatisticsData`(成本项数组 JSONB) - 表:`dingtalk_salary_statistic_report`,conflict_key: `calBizId` 4. **salary_statistic_report_group** — `POST /oapi/salary/statistic/report/groupData`,无分页,single_record - 入参:`calBizId` + `salaryGroupName`(必填),使用 `row_inject` 注入 salaryGroupName - 表:`dingtalk_salary_statistic_report_group`,conflict_keys: `calBizId` + `salaryGroupName` ### 代码改动 - `dynamic_sync.go`:修复主同步路径(非 prefetch)中 `injectRowFields` 未调用的问题 - 在 5 处 savePage 调用前添加 injectRowFields:初始页、游标分页循环、hasMore 分页、普通分页(有/无 response_config) - 使 `row_inject` 在单记录(single_record)非 prefetch 接口中也能生效