diff --git a/backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/controller/AihrOrgSyncController.java b/backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/controller/AihrOrgSyncController.java index 2d9d5689..d9f24007 100644 --- a/backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/controller/AihrOrgSyncController.java +++ b/backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/controller/AihrOrgSyncController.java @@ -27,7 +27,7 @@ public class AihrOrgSyncController { @SaCheckRole(value = {TenantConstants.SUPER_ADMIN_ROLE_KEY, HR_OPERATOR_ROLE}, mode = SaMode.OR) @PostMapping("/sync") - public R sync(@RequestBody(required = false) SyncRequest request) { + public R sync(@RequestBody(required = true) SyncRequest request) { return R.ok(orgSyncService.sync(request)); } diff --git a/docs/BRD_IMPLEMENTATION_AUDIT.md b/docs/BRD_IMPLEMENTATION_AUDIT.md index 877fe2d3..244909d4 100644 --- a/docs/BRD_IMPLEMENTATION_AUDIT.md +++ b/docs/BRD_IMPLEMENTATION_AUDIT.md @@ -3,6 +3,7 @@ 更新时间:2026-07-14 - 2026-07-14 BRD 5.4/G3 组织同步写入保护:`POST /api/aihr/org/sync` 现在要求请求显式传 `dryRun=true` 或 `dryRun=false`,省略请求体或传 `null` 会在外部拉取前直接拒绝,避免空请求因 `replaceExisting=true` 默认值意外写入组织快照;补充服务单测、`demo-check` marker 和 API 对接说明,未修改线上组织数据。 +- 2026-07-14 BRD 5.4/G3 组织同步 HTTP 入参边界补强:组织同步控制器现在要求请求体必须存在,空 POST 在 HTTP 层直接按请求错误处理;服务层继续要求 `dryRun` 显式传 `true/false`,避免把空请求误判为写入操作。补充 `demo-check` marker,未修改数据库或线上组织数据。 - 2026-07-14 BRD 严格门禁真实窗口复核:`AIHR_PILOT_START_DATE=2026-07-07 AIHR_PILOT_END_DATE=2026-07-11 AIHR_PILOT_STRICT=true ./scripts/demo-check.sh` 已通过源码、页面壳、租户和验证码检查,正式数据门禁实际失败为 `service_promotion=0`、`daily_service=0`、住宅 SOP `3/5`、案例 `2/20`、在职手机号映射 `1/3001`、入职日期 `0/3001`、满足十次训练 `0/52`、校准 `0/20`、SOP 可用 `0/0`、满意度响应 `0`;未写入业务数据,不能用本地演示样本伪造通过。 - 2026-07-14 BRD 验收脚本 marker 第三处同步:员工画像页当前使用“AI训练综合分仅作训练参考”,严格预检仍检查已废弃的“AI评分仅作训练参考”;现同步为当前文案,保留 AI 不直接等同绩效的风险提示。 - 2026-07-14 BRD 验收脚本 marker 再同步:严格预检继续发现成长激励页已将“当前运营口径(只读)”改为“学分规则(待 HR 配置)/规划参考,当前不生效”,脚本现检查当前真实文案,仍保留“规则未配置、不生效”的业务边界。 diff --git a/scripts/demo-check.sh b/scripts/demo-check.sh index 6d7ea0b3..6cabd172 100755 --- a/scripts/demo-check.sh +++ b/scripts/demo-check.sh @@ -359,6 +359,7 @@ contains backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service contains backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrOrgSyncService.java "rows.stream().filter(OrgRow::suspectText)" contains backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrOrgSyncService.java "boolean suspectText = hasQuestionMark(projectName)" contains backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrOrgSyncService.java "组织同步必须明确传 dryRun" +contains backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/controller/AihrOrgSyncController.java "@RequestBody(required = true)" contains backend/ruoyi-modules/ruoyi-aihr/src/test/java/org/dromara/aihr/service/AihrOrgSyncServiceTest.java "syncRequiresExplicitDryRunMode" contains backend/ruoyi-admin/src/main/resources/application-prod.yml "store-display-fields: false"