cloud

cloud pushattu kohteeseen codex/akds-timecard-repair-20260716 paikassa cloudpure/akds

  • 5d04d4182e fix(workhours): 完善入职边界与审批回写兜底
  • 222ea7a336 chore(docs): 移除 superpowers 开发文档
  • a55b92d828 fix(workhours): 补齐离职项目经理审批兜底
  • aa400ab442 feat(workhours): 回填应填报人姓名
  • b7d76a0b8e fix(timecard): 完善审批明细容量分片

13 tuntia sitten

cloud luotu uusi haara codex/akds-timecard-repair-20260716 kohteeseen cloudpure/akds

13 tuntia sitten

cloud pushattu kohteeseen main paikassa vibeCoding/mjava-ai

1 viikko sitten

cloud pushattu kohteeseen main paikassa vibeCoding/mjava-ai

1 viikko sitten

cloud pushattu kohteeseen master paikassa cloudpure/akds

  • 4e75622c46 fix(customer): update customer name field id

3 viikkoa sitten

cloud pushattu kohteeseen main paikassa vibeCoding/mjava-ai

  • 470ab97cef feat(benteler): 完成 EIAM 批量同步与宜搭回写

3 viikkoa sitten

cloud pushattu kohteeseen master paikassa cloudpure/akds

3 viikkoa sitten

cloud pushattu kohteeseen master paikassa cloudpure/akds

  • 38b846cfdb feat(customer): add tianyancha company enrichment

3 viikkoa sitten

cloud pushattu kohteeseen codex/akds-workhours-20260715 paikassa cloudpure/akds

  • 6c6253fc36 docs(workhours): 完成应填报工时文档收敛
  • 429682a24c docs(workhours): 制定文档收敛执行计划
  • 4c1e0370b2 docs(workhours): 设计文档目录重构方案
  • e7d27cc64a docs(workhours): 归档重复与离职清理结果
  • 455fd148a0 feat(workhours): 增加重复数据安全清理接口

3 viikkoa sitten

cloud luotu uusi haara codex/akds-workhours-20260715 kohteeseen cloudpure/akds

3 viikkoa sitten

cloud pushattu kohteeseen master paikassa cloudpure/akds

  • a3dadf0187 fix(workhours): 月度写入加限流退避防丢数据 + 外部员工关联项目经理 问题一:月度全量/增量写入按人散落丢数据(吕加冕缺 6-16/6-25 等) - 根因:concurrentUpsert 10 线程裸冲宜搭写接口触发「请求过于频繁」, 紧贴重试 3 次全部命中同一限流窗口 → 单条记录被永久丢弃;增量同步只 补近 2 天改档案的人,丢的不会自愈。同文件 backfillCfEmployee 早已 修过同一问题,但月度主写入一直漏补。 - 修复:concurrentUpsert 加 RateLimiter.create(20.0) + 重试间 Thread.sleep(1000*(retry+1)) 退避(与 cf 回填同款处方)。 问题二:外部员工 Manager 字段空缺(之前仅内部员工取钉钉直属主管) - 新增 queryProjectPmMap:扫项目档案全量 + 遍历成员子表,按 userId 匹配 PM;仅命中「排除已下线(成员子表 dateField_mo6s11tc < 目标月 1 号)后唯一在线项目 + PM 非空」才写,多项目/无项目/PM 空均留空, 不兜底 Raymond、不做离职校验(与前端 TimeCard 刻意不同:后端只是 记数据,非审批找活人)。 - queryManagerMap 改双参:内部走钉钉主管、外部走 PM 匹配; syncOneEmployeeOneDay 外部分支也同步走 PM 匹配。 - 子表全量取数:内联 <50 直接用、==50 走 ydService.queryDetails 递归取全。**NPE 兜底**:基座 _queryDetails 对宜搭返回 data=null 的 子表查询触发 ArrayList.addAll(null) NPE(ApprovalWriteBack 用同款 模式从未撞上——审批子表总有数据;但项目档案部分项目成员==50 触发了 此边界)。NPE 时退回内联 50 行(可能漏第 51+ 行成员,业务可接受 + 日志告警便于后续排查)。 配置: - WHConf 加 formUuidProject 字段;dev yml 与 prod yml workhours 块均加同字段(顺手补 prod yml 历史缺失的 workhours 完整块——本 次新加 formUuidProject 若仅落 dev yml 在 prod profile 下加载不到)。 真机验证(已通过): - /workhours/sync?month=2026-06 → fail=0 / success=16380 / Manager 落地 519(内部 431 + 外部 88) / 耗时 862s ≈ 20 QPS - 外部员工 PM 匹配统计:275 待匹配 / 88 命中 / 0 多项目跳过 / 0 PM 空 / 187 未匹配项目 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
  • 4ae958a870 chore(personnel-sync): cron 改工作日 06/13/19, 错开钉钉整点高峰 8/13/18 整点撞钉钉全网 QPS 高峰偶发 subcode=90002, 错开到 6/13/19 降低重试触发概率 tag 字符串同步 "06/13/19" 重试逻辑 (54fa164) 仍保留作为兜底 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
  • 54fa164a4d feat(personnel-sync): timer 加整点限流重试 (失败间隔 60s 重试 2 次) 根因: 工作日 08/13/18 整点定时 fullSync 偶发钉钉 subcode=90002 (topapi/v2/department/listsubid 全网整点 QPS >1200) 导致 fetchAllDingUsers 首步抛 McException 中断整轮同步, 下一次 cron 还得再等几小时 修复: runFullSync 加重试循环, 异常不阻断, 等 60s 让钉钉冷却后重试 共 3 次尝试 (首次 + 2 次重试), 仍失败放弃本轮等下一次 cron MAX_ATTEMPTS=3 / RETRY_DELAY_MS=60_000 常量化 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
  • Näytä vertailu näille 3 commiteille »

1 kuukausi sitten

cloud pushattu kohteeseen main paikassa 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 kuukausi sitten

cloud pushattu kohteeseen main paikassa 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 kuukausi sitten

cloud pushattu kohteeseen main paikassa 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>
  • Näytä vertailu näille 2 commiteille »

1 kuukausi sitten

cloud pushattu kohteeseen main paikassa 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>
  • Näytä vertailu näille 5 commiteille »

1 kuukausi sitten

cloud pushattu kohteeseen main paikassa 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>
  • Näytä vertailu näille 2 commiteille »

1 kuukausi sitten

cloud pushattu kohteeseen main paikassa 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 在"详细规范见"段后加分层规则锚点
  • Näytä vertailu näille 5 commiteille »

1 kuukausi sitten

cloud pushattu kohteeseen main paikassa 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>
  • Näytä vertailu näille 10 commiteille »

1 kuukausi sitten

cloud pushattu kohteeseen master paikassa 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>
  • Näytä vertailu näille 2 commiteille »

1 kuukausi sitten

cloud pushattu kohteeseen master paikassa cloudpure/akds

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

2 kuukautta sitten