cloud

cloud cloudpure/mjava-2masterにプッシュしました

1 日 前

cloud cloudpure/mjava-3_newmainにプッシュしました

1 週間 前

cloud cloudpure/mjava-2masterにプッシュしました

1 週間 前

cloud cloudpure/mjava-2masterにプッシュしました

1 週間 前

cloud cloudpure/mjava-2masterにプッシュしました

1 週間 前

cloud cloudpure/akdsmasterにプッシュしました

  • 0b55cb7aef fix(workhours): 归属公司字段ID纠错 + delete-all bug 修复 + 新增分级验证入口 - 纠正人员档案"归属公司"字段 ID:textField_mmekrcji → selectField_mh8xhqc4(下拉选择器),目标表单写入字段仍为 textField_mmekrcji(两侧 fieldId 不同) - 修复 deleteAllRequiredHours 提前退出 bug:原 `if (totalDeleted >= totalCount) break` 用累计已删数对比当次剩余总数,两者相遇时提前 break 导致残留(实测 3288→3218 / 1518→1700 未清);去除该条件,仅靠循环顶部 dataList.isEmpty() 判空,加 20 万条安全阈值防死循环 - 新增 syncOneEmployeeOneDay / syncBatchEmployees 两个 Service 方法与 /sync-one、/sync-batch HTTP 端点,填补"单条 ↔ 全量"之间的分级验证缺口,返回体回显 sampleEmployees 便于核对字段 2026-04-23 全量验证:687 人 × 21 工作日 = 14427 条 / 0 失败 / 17.9 分钟 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
  • 75bf88694f feat(personnel-sync): 钉钉→宜搭人员档案单向同步 - mjava 扩展 DDClient_Contacts: listDepartmentUserDetail/_all/getAllUserDetails (topapi/v2/user/list + 自动分页 + userid 去重) - 新增 PersonnelSyncConf/Service/Controller, 支持 full / dry-run / probe / probe-single / probe-stats / probe-diff - 字段同步: userid/job_number/dept_id_list[升序首个]/active→状态/hired_date; 属性按 extattr 或部门白名单兜底 - update 显式 ignoreEmpty=false + useLatestVersion=true (否则 DateField 被过滤+记录版本冲突) - dev 指向测试表 FORM-5D6C2D1BE7A0430AA8D2E604BB97A9B2BN64 验证, prod 保留生产 formUuid 待 fieldStatus/extAttrKey 补齐后切换 - 定时任务暂不加, 后续依据业务补 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
  • これらの 2 コミットの比較を表示 »

1 週間 前

cloud vibeCoding/mjava-aimainにプッシュしました

  • d54b2c6fcb docs: 新增项目 README 从文档中心 /Users/malk/Desktop/Tech/claude/后端/README.md 迁入本仓库根。 内容覆盖: - 定位与第一阶段 YAGNI 约束 - 仓库结构(6 子项目 + openspec) - 基座能力 7 大类清单(utils/server.common/filter/base/config/service.{vendor}/其他) - 子项目速览(端口/context/状态) - 核心约定速记 - 快速开始 + 新客户接入步骤 - OpenSpec 扩展(opsx 命令 + 已归档 capability 清单) - 文档索引(指向文档中心绝对路径) 文档中心保留开发规范(后端/CLAUDE.md + .claude/docs/),README 归源码仓库。 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

2 週間 前

cloud vibeCoding/mjava-aimainにプッシュしました

  • 4fcc72ca6f chore(openspec): archive Phase B 3 个专项 + 更新索引 openspec archive 统一归档: - 2026-04-19-extend-yida-api-coverage → specs/yida-form-atomic + yida-process-atomic - 2026-04-19-extend-dingtalk-contacts-api → specs/dingtalk-contacts-v2 - 2026-04-19-add-request-auth-replay-guard → specs/request-auth + replay-guard 三者代码均已落地、mvn compile + mvn package 全 reactor 通过,归档后稳态 spec 自动 合并到 openspec/specs/ 目录。 仍 active 的 3 个 change(有明确未完 tasks): - add-observability-foundation 12/14 待生产冒烟 - add-mjava-pro 15/30 TenantTaskDecorator/DynamicService 延后 - add-mjava-com 19/30 首批 Action 注册待补 同步更新 CLAUDE.md 与 BACKLOG.md 的归档状态。 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

2 週間 前

cloud vibeCoding/mjava-aimainにプッシュしました

  • de396c23ee chore: archive init-project-baseline + update BACKLOG 全量进度 Phase B + Phase C 代码全部落地并编译通过,全 reactor 6 模块 mvn package 成功: - mjava(基座) - mjava-mcli / mjava-shunfeng / mjava-guangming(存量客户) - mjava-pro / mjava-com(新专项骨架) openspec: - 归档 init-project-baseline → changes/archive/2026-04-19-init-project-baseline/ - BACKLOG.md 更新全阶段完成状态 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

2 週間 前

cloud vibeCoding/mjava-aimainにプッシュしました

  • 7ea0adb311 feat(mjava-com): 通用能力 BaaS 网关最小脚手架(add-mjava-com) 新增模块 mjava-com(端口 9020,context /api/com,package com.malk.apigw): - pom.xml: 仅依赖 mjava - Boot.java: @EnableScheduling + @EnableJpaAuditing 调用方层 (com.malk.apigw.caller): - CallerProfile: callerId/secret/allowedActions/rateLimit/expireAt/enabled - CallerRegistryProperties: prefix com(caller.registry.* + actions.enabled) - CallerRegistryService: 启动全量 + @Scheduled 定时刷新宜搭权限表 - CallerRateLimiter: Guava RateLimiter per callerId 动作路由 (com.malk.apigw.action): - ActionHandler: 函数式接口 McR handle(caller, body) - ActionRegistry: Map<vendor.action, handler> 支持 register/get/contains 拦截 + 网关 (com.malk.apigw.{config,controller}): - CallerAuthInterceptor: 复用基座 UtilSignature + NonceCache 校验顺序 Header → 时间窗 → callerId+enabled+expireAt → Nonce → HMAC → 限流 成功写 caller 到 request attribute + MDC callerId - ComWebConfig: 注册拦截器 - GatewayController: POST /{vendor}/{action} 三层校验(代码 registry / yml enabled / caller.allowedActions)后调 handler 与 add-request-auth-replay-guard 的关系: CallerAuthInterceptor **直接复用** UtilSignature + NonceCache,不重新实现 HMAC (design.md 已声明为前置依赖) 验证:mvn -pl mjava-com -am compile 通过;全 reactor 6 模块编译通过 延后(tasks.md): - DingtalkActionRegistry / AliworkActionRegistry 首批 action 注册(等首个调用方接入时按需补) - logback pattern 追加 callerId Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

2 週間 前

cloud vibeCoding/mjava-aimainにプッシュしました

  • 660b557f82 feat(mjava-pro): 多客户单部署子模块最小脚手架(add-mjava-pro) 按 change 四件套落地 mjava-pro,提供租户上下文 + 宜搭应用表驱动的注册表: 新增模块 mjava-pro(端口 9010,context /api/pro): - pom.xml: 仅依赖 mjava 基座;独立 Boot jar - Boot.java: @EnableScheduling + @EnableJpaAuditing + scanBasePackages=com.malk - application.yml: scheduling=true 启用注册表定时刷新 - application-prod.yml.example: 全部敏感值走环境变量 租户运行时(com.malk.pro.tenant): - TenantProfile / VendorCredential: 数据载体 - TenantContext: ThreadLocal 持有当前请求租户;set/current/clear/propagate - TenantInterceptor: preHandle 读 X-Tenant-Id → 注册表查 → set;401/403 返回统一 McR;afterCompletion clear MDC - TenantRegistryProperties: prefix tenant.registry(formUuid/ttlSeconds/failFast/field 映射) - TenantRegistryService: @PostConstruct 全量加载;@Scheduled(fixedDelay) 定时刷新; 直接消费 YDClient_Form.searchForm(extend-yida-api-coverage 原子接口); 同 tenantId 多 vendor 合并到 vendorCredentials Map 配置 & Controller: - ProWebConfig: 注册 TenantInterceptor(与基座 WebConfiguration 共存) - AdminController: @Profile("dev") @NoAuth POST /_admin/reloadTenant 热刷 根 pom.xml modules 追加 mjava-pro。 验证:mvn -pl mjava-pro -am compile 通过,全模块 reactor 编译通过。 延后(见 tasks.md): - TenantTaskDecorator(@Async 跨线程传播)待首次生产启用时评估 - DynamicDDService / DynamicYDService Client 透传样例待需求明确后补 - 单元 + 集成测试 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

2 週間 前

cloud vibeCoding/mjava-aimainにプッシュしました

  • c1fa189160 fix(compile): 修复 Phase B 新增代码 + 2 处 shunfeng 历史歧义 Phase B 新增代码编译错误(本次修复): - YDClient_FormImpl / YDClient_ProcessImpl: new McException(单参 String) 匹配到 McREnum 重载,改为 (code, message) - YDClient_FormImpl / YDClient_ProcessImpl: DDR_New 字段为 code/message,之前误用 errorCode/errorMsg - NonceCache: TimedCache 无 setCapacity,改用 LRUCache(capacity, ttl) 一步到位 shunfeng pre-existing 编译歧义(非本次新增): - ZoomClientImpl.getMeeting: UtilHttp.doGet(url, header, null) 对 3 参 Map 与 Class 重载歧义 → (Map) null 显式 - MeetingServiceImpl.buildScheduleBody*: UtilMap.map("summary,start,end", subject, start, end) 命中 void 重载 → (Object) subject 选 varargs 验证:mvn -pl mjava-mcli,mjava-shunfeng,mjava-guangming -am compile 全部通过 同步勾掉 init-project-baseline tasks.md 5.4。 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

2 週間 前

cloud vibeCoding/mjava-aimainにプッシュしました

  • bad4b2446f docs(openspec): tick add-request-auth-replay-guard tasks 1-4

2 週間 前

cloud vibeCoding/mjava-aimainにプッシュしました

  • ad4f8e2881 feat(auth): 基座请求鉴权 + 防重放(add-request-auth-replay-guard) 按 change 四件套实施基座 HMAC 签名 + Nonce 去重能力: 新增: - com.malk.utils.UtilSignature: HMAC-SHA256 签名 + SHA256 bodyHash + 常量时间比较 - com.malk.core.NonceCache: 基于 Hutool TimedCache 的 LRU Nonce 缓存,TTL=window+30s - com.malk.config.AuthConfigProperties: prefix mjava.auth(enabled/secret/window/nonceCacheSize/exemptPaths) - com.malk.filter.NoAuth: METHOD + TYPE 级豁免注解 - com.malk.filter.AuthFilter: @Order(HIGHEST+20) 位于 TraceIdFilter 后; enabled=false / exempt-paths 放行;Header + 时间戳窗口 + Nonce 校验 - com.malk.filter.AuthInterceptor: preHandle 识别 @NoAuth + body 读取 + 签名校验 修改: - WebConfiguration: 注册 AuthInterceptor - application.yml: 默认 mjava.auth.enabled=false,secret 走 ${AUTH_SECRET} 签名协议:HMAC-SHA256(secret, ts + "\n" + nonce + "\n" + method + "\n" + path + "\n" + sha256Hex(body)) Header 四件套:X-MJ-Key / X-MJ-Timestamp / X-MJ-Nonce / X-MJ-Signature 默认 enabled=false 保障三家生产客户零破坏。子项目按需开启。 已知风险(BACKLOG): - body 二次读取:生产启用前需加 ContentCachingRequestWrapper - logback pattern 追加 [%X{authKey:-}] 延后 - 单元/集成测试阻塞 Maven 未装 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

2 週間 前

cloud vibeCoding/mjava-aimainにプッシュしました

  • e16ec1035a feat(dingtalk): 补齐 DDClient_Contacts v2 对齐方法 按 extend-dingtalk-contacts-api 实施钉钉通讯录 v2 对齐:27 新方法 用户管理(10): createUser_v2 / updateUser / getUser_v2 / getUserByMobile_v2 / listUsersSimple listDeptUserDetail_v2 / listInactiveUsers / getUserByUnionId / listAdmins listDimissionEmployees_v2 部门管理(6): createDepartment_v2 / updateDepartment / deleteDepartment getDepartment_v2 / listSubDepartments_v2 / listParentByDept 角色管理(8): addRole / updateRole / deleteRole / listRoles / getRole / listRoleEmployees addRolesForEmps / removeRolesForEmps 员工字段管理(3): upsertHideField / removeHideField / listHideFields 规范对齐(mjava-baseline §3.4.2 / §3.4.4): - 每方法 1:1 对应一个钉钉官方 endpoint - 旧方法全部保留不动(mcli/shunfeng/guangming 零破坏) - body_ext 透传所有可选参数;User 模块 javadoc 枚举 20+ 字段 - 复用 qs() / merge() 辅助方法减少模板代码 - 统一走 DDR.doPost 旧 OAPI 模式 已知风险(见 BACKLOG): - 部分路径(role/*, hide_field/*, listparentbydept)基于推断,冒烟前需对照官方文档复核 - 本机无 Maven,未编译验证 - createUser_v2 dept_id_list 使用逗号字符串,若官方要求数组需调整 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

2 週間 前

cloud vibeCoding/mjava-aimainにプッシュしました

  • 0c0d76d4ca feat(aliwork): 落地 YDClient_Form + YDClient_Process 原子接口 按 extend-yida-api-coverage proposal 实施宜搭表单 + 流程原子 Client: 新增(不动旧 YDClient/YDService,零破坏): - com.malk.server.aliwork.YDAuth: 请求鉴权上下文数据载体(accessToken/appType/systemToken/userId) - com.malk.service.aliwork.YDClient_Form: 表单原子接口(16 方法,含 CRUD/查询/批量/日志/评论/附件 URL) - com.malk.service.aliwork.YDClient_Process: 流程原子接口(13 方法,含生命周期/任务动作/查询) - impl/YDClient_FormImpl + YDClient_ProcessImpl: 对应实现 规范对齐(mjava-baseline §3.4.2): - 每方法 1:1 对应一个宜搭 API endpoint - 第 1 参 YDAuth;必填参数显式;可选参数统一 body_ext - javadoc 枚举 body_ext 所有已知 key + @apiNote 链到官方 - accessToken 为 null 时回退到全局 DDClient.initTokenHeader(单租户兼容) 已知风险(见 BACKLOG 实施中风险记录): - 部分流程 endpoint URL 基于推断,冒烟前需对照官方文档复核 - 本机无 Maven,未编译验证 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

2 週間 前

cloud vibeCoding/mjava-aimainにプッシュしました

  • 6301776d75 fix(openspec): 规整 add-mjava-pro / add-mjava-com spec 结构 之前 spec.md 放在 change 根目录 + 用 REQ-XXX-NNN 风格,OpenSpec 无法识别为 delta。 本次修复: - spec 拆到 specs/{capability}/spec.md 子目录 - add-mjava-com: baas-gateway/ + caller-registry/ - add-mjava-pro: multi-tenant-runtime/ + tenant-registry/ - 格式改为 ## ADDED Requirements + ### Requirement: X (SHALL/MUST) + #### Scenario: Y - 删除旧 spec.md - openspec validate --strict 两个 change 均通过 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

2 週間 前

cloud vibeCoding/mjava-aimainにプッシュしました

  • 8c1df66cf9 docs(openspec): add-request-auth-replay-guard (基座鉴权+防重放) 新增 Phase B.2 核心专项:mjava 基座 HMAC-SHA256 请求鉴权 + Nonce 防重放。 - proposal/design/spec/tasks 四件套 valid - 能力:request-auth(Header: X-MJ-Key/Timestamp/Nonce/Signature)+ replay-guard(时间窗 + NonceCache LRU) - 默认 enabled=false 保障 mcli/shunfeng/guangming 零破坏;按需开启 - 三级豁免:全局开关 / exempt-paths / @NoAuth 注解 - 签名协议:HMAC-SHA256(secret, timestamp + "\n" + nonce + "\n" + method + "\n" + path + "\n" + bodyHash) - 密钥走 ${AUTH_SECRET} 环境变量 同步更新: - add-mjava-com/design.md 声明本 change 为前置依赖(CallerAuthInterceptor 直接复用 UtilSignature + NonceCache) - CLAUDE.md 加 change 条目 - BACKLOG.md 加 B2.7,标注为 mjava-com 前置依赖 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

2 週間 前

cloud vibeCoding/mjava-aimainにプッシュしました

  • 90419e9036 docs(openspec): 立项 extend-yida-api-coverage + extend-dingtalk-contacts-api - 归档 extract-dingtalk-standard-api → archive/2026-04-18-extract-dingtalk-standard-api/ - 新增 crypto-utils 稳态 spec(由归档自动提升) - 新增 changes/extend-yida-api-coverage/:YDClient_Form + YDClient_Process 拆分规则与覆盖度矩阵(14+12 个 endpoint) - 新增 changes/extend-dingtalk-contacts-api/:按用户/部门/角色/字段四个子模块对齐规则(~25 个方法清单,~17 新增 + 8 v2 对齐) - openspec validate --strict 两个 change 均通过 - CLAUDE.md + BACKLOG.md 更新 Phase B.1 范围,标注高优先级宜搭优先 用户指令:改造先不做,完成规则定义后再启动 /opsx:apply。 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

2 週間 前

cloud vibeCoding/mjava-aimainにプッシュしました

  • d847d2b677 docs(openspec): add BACKLOG.md + mark init-baseline verifications done - 新增 openspec/BACKLOG.md:跨 change 的待办看板,按阶段 A/B.1/B.2/C 编排 - 勾选 init-project-baseline tasks 5.1-5.3(目录/文档结构验证通过) - 5.4 编译冒烟阻塞在本机未装 Maven,已标注 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

2 週間 前