cloud

cloud запушил(а) main в vibeCoding/mjava-guangming

  • 08c4ab6f21 feat(guangming): 钉钉应用权限同步 — 角色管理 + 应用可见范围反写 mjava 公共 SDK 扩展: - DDClient_Role 接口(应用可见范围 + 应用列表 + 角色组/角色 CRUD + 角色成员批量增删) - DDImplClient_Role 实现,体内统一 fastjson UTF-8 编码 + errcode 校验 guangming 子模块新增 service / controller / repository: - AppRoleSyncService.initApp(agentId, appName?, appGroup?) 一站式初始化(读可见范围 → 部门递归展开 → 落库 → 建唯一角色组「开放平台应用权限」→ 建角色 + 绑人 → 反写应用可见范围 addRoleIds);幂等守卫 - AppRoleSyncService.updateUsers(agentId, addUserIds, delUserIds) 增量更新角色成员,不动应用可见范围 - 配套运维接口:single / preview / status / users-sync / all / import-apps - t_dingtalk_app_mapping 实体 + JPA Dao(findByAppKey / findFirstByAgentId / findFirstByRoleGroupIdIsNotNull) 业务方主接口: - POST /api/gm/role-sync/init - POST /api/gm/role-sync/users-update Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

1 неделя назад

cloud запушил(а) main в vibeCoding/mjava-ai

  • 79f0146435 feat(utils): UtilHttp 加 §3.5 审计日志 + UtilHttpAudit 脱敏工具 BACKLOG B2.1 实施。UtilHttp.doRequest 单点改造,所有 doPost/doGet/doPut/doDelete/doPatch/doUpload 重载经它代理,无需重复埋点: - 进入时记 startMs + 推断 vendor / endpoint - debug 出入参日志的 header/param/body/form 走 UtilHttpAudit.sanitize - 成功路径 INFO [http] vendor=X method=Y endpoint=Z latencyMs=N status=success respSize=M - 异常路径 WARN status=error msg=<exception>,rethrow 不吞 新增 UtilHttpAudit 静态工具(独立 logger name=audit): - sanitize: 递归脱敏 Map(token/secret/password/aesKey/privateKey/authorization/access_token/client_secret/client_id/appSecret/appKey),不污染源 Map,case-insensitive - endpoint: URL 提取 path(去 scheme+host+query) - vendor: 从 host 识别 dingtalk/fxiaoke/teambition/feishu/etc,未知→other - logSuccess/logError: 统一 [http] 格式 新增 UtilHttpAuditTest 18 用例全过(sanitize 7 + isSensitiveKey 2 + endpoint 5 + vendor 3 + 边界 1)。 OpenSpec change extend-http-audit-log 已立项(proposal/spec/tasks 三件套),等首次生产部署冒烟后 archive。 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

1 неделя назад

cloud запушил(а) main в vibeCoding/mjava-ai

  • 59ca459452 test(utils): UtilSignatureTest 覆盖 HMAC-SHA256 / SHA256 / 常量时间比较 12 个用例: - sha256Hex: 空输入 NIST 向量 / null 等价空 / "abc" 向量 / 输出 64 位小写 hex - sign: 确定性 / 6 维输入变化检测 / 输出 64 位小写 hex / 与固化基线匹配 - safeEquals: identical / 不同 / null 三种 / 空字符串 覆盖 add-mjava-com tasks §8.1 HmacSignatureTest 要求。CallerRegistryTest 因主体逻辑涉及 spring bean + 远程调用,单元测试覆盖率低,留待集成测试补。 跑法: mvn -pl mjava install -Dmaven.test.skip=true mvn -pl mjava test -Dmaven.test.skip=false -DskipTests=false -Dtest=UtilSignatureTest Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
  • 0d81c62ff2 test(mjava-pro): TenantContextTest 覆盖 set/clear/propagate/跨线程隔离 add-mjava-pro tasks §7.1 单元测试落地。8 个用例覆盖: - current/currentTenantId 未 set 返回 null - set + current/currentTenantId 一致 - set 覆盖前值 - clear 后回 null - propagate 从 null 切走再恢复 null - propagate 从已有 profile 切走再恢复原 profile - propagate runnable 抛异常时 finally 仍恢复 - ThreadLocal 跨线程隔离(worker 看不到 main 的 profile, main 也不被 worker 污染) 跑法(父 pom 默认 maven.test.skip=true 跳过测试): mvn -pl mjava install -Dmaven.test.skip=true mvn -pl mjava-pro test -Dmaven.test.skip=false -DskipTests=false -Dtest=TenantContextTest Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
  • Просмотр сравнение для этих 2 коммитов »

1 неделя назад

cloud запушил(а) main в vibeCoding/mjava-ai

  • 136468ad91 refactor(token-namespace): 基座 4 vendor token cache key 迁移到 namespace API 阶段 2 收尾。基座原有 4 处硬编码 cache key(DDImpl 3 个 / INTP 1 个 / FXK 1 个 / TB 1 个)多 appKey/多 corp 场景会撞 key。各 Conf 加 NS 常量(vendor name),cache key 改为 UtilToken.get(NS, "{type}:" + appKey/clientId) 形式: - DDImplClient: appToken/userToken/jsapiTicket 三处按 ddConf.getAppKey() 隔离 - INTPImplClient_User: 按 intpConf.getClientId() 隔离,删 INTPConf.CACHE_KEY_TOKEN 老常量 - FXKImplClient: 按 fxkConf.getAppId() 隔离,删 UNIQUE_STORAGE_ID 私有常量 - TBClientImpl: 按 tbConf.getAppID() 隔离 - DynamicDDService 改引 DDConf.NS 避免硬编码字符串重复 旧 key 缓存条目失效(首次调用重新拉 token),无业务异常。Interface 签名 0 变更。 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
  • b343a3b812 feat(utils): UtilToken 加 namespace API + DynamicDDService 切到新 API UtilToken 新增 put/get/getWithRefresh 的 namespace 重载,namespace + key 拼接为 "{namespace}:{key}",namespace 空白时退化为单参 key 模式,向后兼容原有调用方。多租户场景调用方不再需要手动 String.format 拼 key。 DynamicDDService 删除 TOKEN_KEY_FMT 常量,改用 UtilToken.get(tenantId, "dingtalk:"+appKey) 示范新 API。基座现有 4 处 hardcoded key 调用方(DDImpl/INTP/FXK/TB)保持不动,留待阶段 2 按需迁移。 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
  • 2a1bf55d3e fix(dingtalk-contacts): 补 OAPI_BASE 常量 + 2 处直接 .get() NPE 高危补 assertSuccess DDConf 新增 OAPI_BASE / API_BASE 公共常量,替代 DDImplClient_Contacts 内 v2 系列私有 OAPI 常量定义。 listSubDepartmentId / listDepartmentUserId 此前 (Map) DDR.doPost(...).getResult() 直接 .get("xxx_list"),errcode != 0 时 result 为 null 触发 NPE。补 DDR.assertSuccess() 调用,先抛带 errcode + errmsg 的业务异常。 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
  • ed0ae33088 refactor(yida): YDHelpers 抽出共用 helper + 修隐藏 bug 6 处 YDClient_FormImpl / YDClient_ProcessImpl 此前各贴一份完全相同的 url/body/mergeExt/assertResult 私有方法。抽到 package-private YDHelpers 静态工具类,配合 UtilRespMapper 替代散落的 instanceof + cast 样板,两个 impl 净减 158 行。 顺带修 6 处隐藏 bug: - getForm/listInnerTable/listForms/getProcess 共 4 处 GET 方法 body_ext putAll 顺序颠倒导致 auth 字段被 body_ext 覆盖 - listFormIds/searchProcesses/listProcessIds 共 3 处 doPost 第三参 param 位错传 body(应为 null) YDConf 加 BASE_V1/BASE_V2 常量(原散落 impl 内),与 §3.4.2 baseline 一致。 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
  • 14def659ab feat(utils): 新增 UtilRespMapper 第三方响应类型守卫工具 收敛 VenR 子类 result 字段的 instanceof + cast + 容错默认值样板。asMap/asMapList/asStringList/asString/asInt/asBool 各方法在 null/类型不符时返回安全默认值,不抛异常,调用方通过 assertSuccess 处理失败响应即可。供宜搭/钉钉/集成平台 Client 实现共用。 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
  • Просмотр сравнение для этих 5 коммитов »

1 неделя назад

cloud запушил(а) main в vibeCoding/mjava-ai

  • 3027e67a71 test(integration): dev/test profile 联调入口 INTPTestController 新增 com.malk.test.INTPTestController,仅 dev/test profile 暴露 5 端点(/test/intp/token + users CRUD),凭据落 application-*.yml 的 integration.{baseUrl,clientId,clientSecret},access_token 内部缓存不出参。生产 profile 自动不暴露。 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
  • 477207517c chore(mjava-mcli): prod.yml.example 补 aliwork 段对齐 dev profile mjava-mcli 客户模板 prod.example 缺 aliwork 段,dev profile 已用。补齐 env 占位与基座 prod.yml.example 格式一致。 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
  • Просмотр сравнение для этих 2 коммитов »

1 неделя назад

cloud запушил(а) main в vibeCoding/mjava-ai

  • bbc01c8d9a chore(docs): 规范文档与 OpenSpec 工作流迁出仓库,本仓只保留程序 迁出清单 -> /Users/malk/Desktop/Tech/claude/后端/mjava-ai/ - openspec/ 整目录(BACKLOG + changes + specs + archive) - .claude/(opsx commands + openspec skills) - CLAUDE.md / README.md 完整版 - mjava-pro/README.md / mjava-com/README.md 仓内 CLAUDE.md / README.md 改为极简指针文件,指向文档中心; 程序代码(pom + java + yml.example + .gitignore + log + idea)保持原状; mvn -am compile 通过。
  • 9444e46cf5 docs(openspec): 立项 define-customer-tiering 客户接入三档分流 新 capability customer-tiering, 约束新客户接入决策: - R1 三档矩阵 A 公共托管(mjava-pro) / B 独立子模块(mjava-{客户}) / C 独立 git 仓 - R2 决策流程: 从 A 起评, 按硬指标升档; A→B 触发(需写 Java 代码 / 需私有 schema / 需独立部署) / B→C 触发(客户机房 / 源码进客户 git / 基座大幅分叉); 升档单向不可逆 - R3 升档迁移路径: A→B 双轨期 1-2 周; B→C fork 基座 + 移出 mjava-ai - R4 A 档(mjava-pro)入驻清单 8 必填字段 + DB/缓存/日志隔离边界 - R5 mjava-com 暴露白名单制 + 危险动作默认禁开 + 60 QPS 默认限流 + 强制审计 - R6 C 档独立仓与 mjava-ai 解耦边界 (R4 grep 互不联动 + fork 不依赖 jar) - R7 README/CLAUDE.md 同步更新约束 仅产出规范, 不动 Java 源; 与 add-mjava-pro/add-mjava-com 互补不阻塞
  • 7af06b8a49 docs(mjava-com): 外部对接指南 + HMAC 签名算法 + Python/Node.js 样例 - 调用协议: 4 个必填 Header (X-Caller-Id / X-MJ-Timestamp / X-MJ-Nonce / X-MJ-Signature) + JSON body - 签名算法: HMAC-SHA256(secret, ts + "\n" + nonce + "\n" + METHOD + "\n" + path + "\n" + sha256_hex(body)) - 完整 Python / Node.js 客户端样例代码 - 错误码表: AUTH_* / RATE_LIMITED / ACTION_NOT_FOUND / ACTION_FORBIDDEN / VENDOR_ERROR - 调用方注册流程 + 暴露白名单双层校验 + 限流策略 - tasks.md 7.3 勾选; 7.4 标 stale; 3.3/3.4 ActionRegistry 首批 action 仍按 proposal 延后等首调用方
  • 012df8fbd6 feat(mjava-pro): DynamicDDService / DynamicYDService 多租户凭据中转 - DynamicDDService: 从 TenantContext 取钉钉 credential, 调基座 DDClient.getAccessToken(appKey, appSecret); UtilToken key namespace {tenantId}:dingtalk:{appKey} 隔离不同租户 token; TTL 7200s - DynamicYDService: 构造 YDAuth(accessToken 复用 DynamicDDService, appType/systemToken/userId 取自 VendorCredential.extra; 缺则抛 YDA_CONFIG_INCOMPLETE; userId 缺省走 YDConf.PUB_ACCOUNT) - mjava-pro/README.md: 调用范式 / A 档入驻 SOP / 隔离边界 / tenant.registry.* 配置块 - tasks.md 勾选 4.1/4.2/4.3/5.1/6.3 + 6.4 标 stale 跳过 + 5.2/5.3 写明延后理由 - 不改基座 UtilHttp/DDImplClient: tenantId 通过 MDC 自动进审计日志, logback pattern 已含 [%X{tenantId:-}]
  • e93d5b7f5f docs(openspec): archive standardize-client-service-layering - 7 条规则(R1~R7)固化到 capability spec openspec/specs/client-service-layering/spec.md - 整个 change 目录归档到 openspec/changes/archive/2026-06-10-standardize-client-service-layering/ - tasks.md 全勾选含 6.2 子模块 mvn compile 验证 / 6.3 grep server/ 发现 FilePath.java @Component 作为 known debt 留后续 - 仓内 CLAUDE.md 去掉"archive 后"占位标注 + 已归档段补两项 + 进行中段补两个立项中 change - README.md 在"详细规范见"段后加分层规则锚点
  • Просмотр сравнение для этих 5 коммитов »

1 неделя назад

cloud запушил(а) main в vibeCoding/mjava-ai

  • 4ca7bf06fe refactor: 补齐 686d608 漏掉的 pom.xml / README.md 模块清理 上一个 commit message 已声明这两项改动但 stage 漏了: - pom.xml 移除 mjava-shunfeng / mjava-guangming 两个 <module> 声明 - README.md 同步移除目录树与子项目速览表的两行
  • 79f06ddb1e feat(mjava): 补 ALYConf 抽 URL 常量 + 迁 util→utils.crypto + 规则锚点 - O3 新增 server/aliyun/ALYConf.java(4 个发票市场 URL 常量), ALYInvoiceImpl 内硬编码 URL 替换为 ALYConf.URL_*,server/ 层结构对齐其他产品板块 - O2 util/crypto/RSACrypt.java 迁到 utils/crypto/RSACrypt.java (package 同步改),本仓零引用经 R4 grep 确认,清掉 util/ 与 utils/ 并存的拧巴目录(util/ 自动消失) - O6 仓库 CLAUDE.md 与 openspec/specs/project-baseline.md 修正 stale mjava-baseline.md 引用(指向 后端/CLAUDE.md, 实际权威位置),加 capability spec client-service-layering 锚点
  • f69d90ed04 docs(openspec): 立项 client/Service 分层规则与钉钉 impl 改名两个 change standardize-client-service-layering: 固化 R1~R7 七条分层规则 作为新 capability spec(原子接口分层 / 板块拆 client / 调用优先级 / 变更确认 / 命名一致 / server 层定位 / Service 准入);R4 跨仓 grep 范围明确为基础建设期默认仅本仓,客户接入后扩。同步覆盖 O3 ALYConf / O4 INTP 范式约定 / O6 规则进 baseline 三个落地优化的 tasks。 rename-dingtalk-impl-suffix: R5 命名一致对钉钉 14 个存量 DDImplClient_X 中缀文件改名为 DDClient_XImpl 后缀的占位提案, 分 4 批落地,排期门控等 standardize change archive 后开始。
  • 686d608a18 refactor: 剥离 mjava-guangming / mjava-shunfeng 子模块 mjava-ai 收敛为基础 Java 服务程序,mjava 作为基座, 保留 mjava-mcli/pro/com。光明/顺丰已在 cur/mjava-guangming/ 独立仓维护,本仓副本不再保留。 - 根 pom.xml 移除两个 module 声明 - 删除 mjava-guangming/ 和 mjava-shunfeng/ 整目录(23 文件) - README.md 子项目速览与目录树同步移除两行
  • a227b00f95 chore(openspec): archive add-integration-user-api → specs/integration-user-api - changes/add-integration-user-api/ → changes/archive/2026-04-26-add-integration-user-api/ - specs/integration-user-api/spec.md 入稳态目录 - BACKLOG B1.7 标 ✅;归档列表 7 changes - 联调冒烟由首个真实接入客户在测试环境完成 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
  • Просмотр сравнение для этих 10 коммитов »

1 неделя назад

cloud запушил(а) master в cloudpure/akds

  • f6cf11c4e2 feat(workhours): 审批回写同步状态字段接入(v0.7.1) 业务方在工时审批/其他工时审批表上各加 3 个字段(同名同 ID), fieldId 已填入 application-dev.yml: - 同步状态 selectField_mq58cd5p(SelectField,选项:全部成功/部分失败/全部失败) - 同步总数 numberField_mq58cd5q - 失败数量 numberField_mq58cd5r 代码 syncStatus 字面值改为 全部成功/部分失败/全部失败,严格对齐宜搭 SelectField 选项, 避免写入未匹配选项被宜搭拒绝。 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
  • 21a98a61b8 fix(workhours): 审批回写修 resolveDetailRows NPE + 加同步状态字段(v0.6+v0.7) v0.6 修 NPE: resolveDetailRows 当 inlineRows==null(审批单不含某子表 key,如其他工时审批单无 BILLABLE/NON_BILLABLE,或工时审批单仅填项目工时未填非项目)时不再调 queryDetails,基座 _queryDetails 对宜搭返回 data=null 的空子表查询会 ArrayList.addAll(null) NPE 致接口 500 /汇总表完全不更新;queryDetails 返回 null 同样兜底空 list。规范沉淀进 yida-serverside.md §子表取数控制(新增 inlineRows==null 第三档分支)。 v0.7 加同步状态字段+sleep 2s 避同步锁: - ApprovalWriteBackResult 加 syncStatus(成功/部分成功/失败) + syncTotal + failCount 三字段 - WHConf 加 6 个 fieldId 配置(工时/其他工时审批各 3 个),application-dev.yml 占位空串 - 汇总表全部回写完毕后 sleep 2s 等宜搭审批结束的内部同步索引/锁释放, 再 update 原审批单写 3 字段(writebackSyncFields) - fieldId 任一为空跳过该类别回写(向后兼容,业务方分阶段建字段) - 回写异常仅 error 日志不抛(同步字段不影响主流程返回) Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
  • Просмотр сравнение для этих 2 коммитов »

1 неделя назад

cloud запушил(а) master в cloudpure/akds

  • 0d31443033 chore: gitignore 忽略 .DS_Store 与 .cache/ Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

недель назад: 2

cloud запушил(а) master в cloudpure/akds

  • 1773e1430e chore(personnel-sync): 定时任务改工作日 8/13/18 + 新增外部触发接口 定时全量同步由「03:00 基线 + 10:05~22:05 每小时(14 次)」改为工作日 08:00/13:00/ 18:00 各一次(单方法挂 3 条 cron)。新增 POST /personnel-sync/trigger 无参外部触发 接口, 等价一次生产全量同步, 与排障用 /full 区分。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
  • 1ad67b28e6 feat(workhours): 新增审批结果回写工时汇总表接口 审批结束或撤销后调 POST /approval/writeback?instanceId=&result= 回写工时汇总表 (人+天唯一)。同意→子表行已审批=明细工时, 拒绝/撤销→子表行已提交=0, 主表合计按 子表行幂等重算。入参即审批单表单实例ID, 用 ydClient retrieve_id 直查详情; 类型按 是否含 tableField_mmae8t99 结构判定。子表取数 <50 直接用 ==50 才递归取全; 子表 全量覆盖按白名单重建(成员/关联字段 _id 后缀); 10 线程 + RateLimiter(20QPS) + 重试。 返回统一 McR<ApprovalWriteBackResult>。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
  • 31e1ea03b5 feat(workhours): 增量定时改每天3次 + 新增是否cf员工字段及存量回填 - 定时增量同步由每日1次(凌晨3点)改为每日3次(07:00/12:15/18:30), 用 @Scheduled 可重复注解挂3条cron(单条cron时/分独立无法表达离散时点);月度全量不变 - 新增「是否cf员工」字段:人员档案 textField_mow9w7d8 -> 应填报工时 textField_mpp7a2k7, 查询/写入逻辑同步,小批量回显样本加该字段 - 新增 backfillCfEmployee(dryRun) + GET /workhours/backfill-cf 回填存量记录cf字段: 按应填报日期逐月分区查询(绕宜搭search 3万条上限),update 用 useLatestVersion=true 刷新到含新字段的最新表单版本 + ignoreEmpty=false,20 QPS限流 + 失败重试退避,幂等可重跑 - 已执行: 扫描42829/更新26054/失败0,dryRun校验 toUpdate=0 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
  • Просмотр сравнение для этих 3 коммитов »

недель назад: 2

cloud запушил(а) master в cloudpure/akds

  • f8607311cd feat(personnel-sync): 外部部门兜底+重复条防御+定时改工作日多频次 抓取/防御 - fetchAllDingUsers 在主递归后显式补抓 externalDeptIds 部门并按 userid 去重 (本期实测主递归已覆盖 1066052389 的 234 人, 补抓"新增 0 人"; 留作钉钉将来 挪外部部门到非组织树时的保险) - fetchAllYidaPersonnel 检测到同 userid 多条时 WARN 日志,保留 instanceId 字典序较小者(早建条)不再静默覆盖 调试接口 (排障常用,常驻) - POST /personnel-sync/single?userid=xxx — 单人同步,与 full 同一套字段映射 - GET /personnel-sync/probe-yida?userid=xxx — 列出宜搭按 userid 命中的全部 - GET /personnel-sync/probe-duplicates — 全表扫重复 userid + 空人员条 一次性清理 (跑过即失效, 下次发版可删 cleanupKnownDuplicatesOnce) - POST /personnel-sync/cleanup-dups-once?dryRun=true|false - 已清理 jingzhao(删后建空字段重复条)与 626967876吴超(同步条钉钉字段 merge 到业务条后删同步条);钉钉相关字段以同步为主,业务字段保留 生产表清理后 total=715→713, 重复组 0, 二跑全 0 幂等 定时任务 - 原 cron "0 0 3,13 * * ?" 改为工作日两段: · nightlyFullSync cron="0 0 3 ? * MON-FRI" 每工作日 03:00 基线 · hourlyFullSync cron="0 5 10-22 ? * MON-FRI" 每工作日 10:05~22:05 每小时 共 14 次/工作日, 周末不跑; 两个 @Scheduled 共享 running 互斥锁 配置内化整理 - PersonnelSyncConf 由 @ConfigurationProperties(prefix=personnel-sync) 改为 Java 硬编码默认值, 移除对 yml 的注入依赖 - application-{dev,prod}.yml 删除 personnel-sync 配置段 - application-dev.yml: datasource 切回 localhost + scheduling=false (开发态) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

недель назад: 3

cloud запушил(а) master в cloudpure/akds

  • c46dc37dcb fix(personnel-sync): 添加 QPS 限速 + 重试退避 + 定时任务并发保护 - PersonnelSyncConf: 新增 ddApiQps(50)/yidaApiQps(30) 配置, 可在 yml 覆盖 - PersonnelSyncServiceImpl: Guava RateLimiter 分别限速钉钉 user/get 和宜搭写接口; 重试改为指数退避 (1s/2s/4s 上限 8s), 解决即时重试加剧 QPS 超限问题 - PersonnelSyncTimer: AtomicBoolean 防止上一轮未完成时下一轮并发触发 (会使 QPS 翻倍) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

1 месяц назад

cloud запушил(а) master в cloudpure/akds

  • 5e0b76a1b2 feat(personnel-sync): 员工编号字段数据源由 job_number 改为 userid - toYidaFormData: fieldJobNumber 写入 userid (钉钉唯一 ID, 必有); fieldJobNumber2 保留 job_number 写入逻辑, 两字段语义解耦 - PersonnelSyncConf / application-{dev,prod}.yml 注释同步 - 生产表 FORM-CCEEE... 本地 prod profile 已跑全量修复: 首跑 fetched=668 created=4 updated=659 markedInactive=7 failed=0 二跑 全 0 收敛 (幂等验证通过)

1 месяц назад

cloud запушил(а) main в cloudpure/mjava-3_new

  • fa43e2dce6 feat(harrison): 物流类型打印模板业务类型中英文对照 物流服务发票模板(HARRISON 海运-物流服务.xlsx) PARTICULARS 列填充时 将业务类型由中文映射为英文(内陆运输->TRANSPORTATION 等), 未命中映射保持原值 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

1 месяц назад

cloud запушил(а) master в cloudpure/akds

  • 35114afa68 feat(personnel-sync): 扩展人员档案同步至13字段+定时任务 - PersonnelSyncConf 新增 7 个 fieldXxx(姓名/员工工号/北森编号/Manager/归属公司/是否CF/成本中心)、4 个 extAttrKey、limitFirstN 测试开关 - toYidaFormData 扩展到 13 字段映射;readExtAttr 兼容 extension(JSON 串)与旧式 extattr Map;批量接口不返 manager_userid,enrichManagers 按需逐人 user/get 补 - 在职判定改为存在性(钉钉里查到→在职、不在→离职),不再读 active 布尔 - limitFirstN>0(或 ?limit=N)时:钉钉全量按 userid 升序取前 N 条 + 跳过 MARK_OFF - 内外判定改为部门含 1066052389→外部,否则内部(externalDeptIds) - Controller /full、/dry-run 支持 ?limit=;Service fullSync/dryRun 加 Integer limit 参数 - 新增 PersonnelSyncTimer:cron 0 0 3,13 * * ?(每天 03:00/13:00 各一次 fullSync) - application-dev.yml 指向测试表 FORM-6889...(limitFirstN:10);application-prod.yml 指向生产表 FORM-CCEEE...(limitFirstN:0),两环境字段 ID 一致 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

1 месяц назад

cloud запушил(а) master в cloudpure/mjava-2

1 месяц назад

cloud запушил(а) main в cloudpure/mjava-3_new

1 месяц назад

cloud запушил(а) master в cloudpure/mjava-2

1 месяц назад

cloud запушил(а) master в cloudpure/mjava-2

1 месяц назад

cloud запушил(а) master в cloudpure/mjava-2

1 месяц назад