首页 文章 精选 留言 我的

精选列表

搜索[数字孪生],共10001篇文章
优秀的个人博客,低调大师

腾讯会议数字资产离职继承

员工离职时,其名下的**周期性会议(未来待召开会议)**与**云录制文件**需要交接给在职继承人。本文给出一套可直接集成的实现方案:在 HR 离职审批通过后,调用腾讯会议用户资产转移接口(`/v1/users/delete-transfer`)自动完成交接。 下载链接中共包含三份代码: |交付物|说明| | --- | --- | |Node.js 核心库(transfer-nodejs)|TypeScript| |Java 核心库(transfer-java/)|Java 17 + Maven,由 Agent Skill 生成| |skills(transfer-skills)|Agent Skill,用于生成其他语言版本| ## 前提条件 1. 已创建腾讯会议自建应用(参考[自建应用创建指引](https://cloud.tencent.com/document/product/1095/42413)),开启「管理企业用户」权限点,操作者具备用户列表编辑权限; 1. 使用 AK/SK 鉴权(SdkId / AppId / SecretId / SecretKey); 1. 运行环境:Node.js ≥ 18,或 Java ≥ 17。 ## 快速开始 ``` # Node.js 独立服务 cd transfer-nodejs && npm install && npm run build && npm run start:prod # Java 库(编译 + 单元测试) cd transfer-java && mvn package ``` ## 用 Agent Skill 生成其他语言版本 Java 核心库不是人工翻译的,而是由 Agent Skill 驱动 AI 编程助手生成的,保证不同语言版本行为一致。Skill 位于 `skills/meeting-asset-transfer/`,支持按需移植到任意目标语言(默认 Java),结构如下: ``` meeting-asset-transfer/ ├── SKILL.md # 目标语言判定 + 生成工作流 + 行为保真清单(20+ 核对项) └── references/ ├── ts-source-spec.md # TS 源码语义规格:签名算法、请求体字段、校验规则(语言无关) ├── tencent-meeting-api.md # delete-transfer 接口契约 + 实测错误码表(语言无关) ├── porting-guide.md # 通用移植指南:各语言 HMAC/HTTP/JSON 选型、校验适配、安全基线 └── lang-java.md # Java 专用映射 profile:类职责、HTTP 客户端、异常策略 ``` 使用方式:让 AI 编程助手加载该 skill,并指明目标语言(不指明时默认 Java)。它会先读取语言无关的规格文档,再加载目标语言的映射规则(有专用 profile 用 profile,否则走通用移植指南),按「签名 → 客户端 → DTO → 编排」的顺序生成代码,最后逐项核对保真清单并编译验证。 当腾讯会议接口变更或需要调整行为时,只需更新 skill 中的规格文档再重新生成,各语言版本即可保持同步;完成一门新语言的移植后,还可将映射决策沉淀为新的 `lang-.md` profile,保证后续同语言移植的一致性。 ## 实现流程 ### 1 删除离职用户 资产转移接口仅支持对**已被删除的企业用户**操作,因此发起转移前,离职用户必须已在腾讯会议企业内删除。客户侧的账号删除可以通过调用腾讯会议[「删除用户」REST API](https://cloud.tencent.com/document/product/1095/93436)(`DELETE /v1/users/{userid}`)删除。 > 注意:删除账号不会销毁其名下会议与录制数据,资产在转移前处于待交接状态。 ### 2 集成资产继承库 #### Node.js / TypeScript 将 `transfer-nodejs/src/meeting/` 整个目录拷入自有项目,提供以下接口方法: |方法|说明| | --- | --- | |new TencentMeetingClient(config)|创建客户端,凭证通过构造参数传入| |transferAssets(client, request)|批量转移:逐项调用 + 结果汇总(最常用入口)| |validateAssetTransferRequest(body)|入参校验,返回错误信息列表(空列表表示通过)| |client.transferUserAssets(params)|单次转移,需自行控制循环/并发时使用| |buildSignatureHeaders(secretId, secretKey, method, uri, body)|AK/SK 签名,调用腾讯会议其他 REST API 可复用| 客户端配置参数: |参数|必填|默认值|说明| | --- | --- | --- | --- | |appId / secretId / secretKey|是|—|自建应用凭证| |operatorId|是|—|操作者 userid,需具备用户列表编辑权限| |sdkId|是|—|自建应用 SdkId| |baseUrl|否|https://api.meeting.qq.com|接口地址| |timeoutMs|否|10000|单次请求超时| 在 HR 离职审批通过的回调中调用: ``` import { TencentMeetingClient } from './meeting/client'; import { transferAssets } from './meeting/transfer'; const client = new TencentMeetingClient({ appId: config.meeting.appId, // 从自有配置中心/密钥管理体系获取 secretId: config.meeting.secretId, secretKey: config.meeting.secretKey, operatorId: config.meeting.operatorId, sdkId: config.meeting.sdkId, }); const result = await transferAssets(client, { from_userids: ['departed_user'], // 离职员工,须已在企业内删除 to_userids: ['heir_user'], // 接收人,一般为主管或同岗位接替人 transfer_scopes: ['all'], // meeting=周期性会议 recording=云录制 all=全部 }); // result: { total, success_count, fail_count, results[] } // 失败项在 results[i].error_code / error_message 中原样透传腾讯错误 ``` #### Java Java 库位于 `meeting-asset-transfer-java/`,包 `com.example.meeting.transfer`,拷入 `src/main/java` 即可。接口方法与 TypeScript 版一一对应: |方法|说明| | --- | --- | |new TencentMeetingConfig(appId, secretId, secretKey, operatorId, sdkId)|配置(record 类型,可选 registered / baseUrl / timeoutMs)| |new TencentMeetingClient(config)|创建客户端,HTTP 使用 JDK 内置 java.net.http.HttpClient| |AssetTransferService.transferAssets(client, request)|批量转移:逐项调用 + 结果汇总| |AssetTransferService.validate(request)|入参校验,返回 List(空列表表示通过)| |client.transferUserAssets(fromUserid, receiverId, transferData)|单次转移,transferData:"0"=全部 "1"=云录制 "2"=会议列表| |SignatureUtil.buildSignatureHeaders(...)|AK/SK 签名,可复用| 调用示例: ``` TencentMeetingConfig config = new TencentMeetingConfig( "your-app-id", "your-secret-id", "your-secret-key", "admin_userid", "your-sdk-id"); TencentMeetingClient client = new TencentMeetingClient(config); AssetTransferRequest request = new AssetTransferRequest( List.of("departed_user"), List.of("heir_user"), List.of(TransferScope.ALL)); List errors = AssetTransferService.validate(request); if (!errors.isEmpty()) { // 校验失败,errors 逐条指出出错字段与下标 } AssetTransferResponse result = AssetTransferService.transferAssets(client, request); if (result.fail_count() > 0) { // 按 result.results().get(i).error_code() 处理失败项,如 500047=用户未删除 } ``` 密钥一律从配置中心或环境变量注入,不写入代码、不输出日志。 ### 3 (可选)独立部署 HTTP 服务 不便修改自有系统代码时,可将 `transfer/` 作为独立服务部署,HR 系统通过 HTTP 调用。将 `.env.example` 复制为 `.env` 并填写: ``` ###### 必填参数 ###### MEETING_APP_ID= # 自建应用 AppId MEETING_SDK_ID= # 自建应用 SdkId MEETING_SECRET_ID= # 自建应用 SecretId MEETING_SECRET_KEY= # 自建应用 SecretKey MEETING_OPERATOR_ID= # 操作者 userid ###### 可选参数 ###### API_KEY= # 对调用方的鉴权密钥,建议 openssl rand -hex 32 生成;不配置则不校验 PORT=3000 # 监听端口 ``` ``` npm install && npm run build && npm run start:prod ``` 服务暴露 `POST /api/v1/asset-transfers`,请求体与核心库入参结构一致(三个等长列表);配置了 `API_KEY` 时请求头需携带 `x-api-key`。响应逐项返回成功/失败,失败项携带透传的 `error_code` / `error_message`,HR 系统可据此生成待办或告警。 ### 4 错误码处理 常见的错误码包括: |场景|HTTP|error_code| | --- | --- | --- | |离职用户未删除(来源为在职用户)|500|500047| |收发同人|400|190004| |接收人为已删除用户|400|190004| |用户不存在(操作者/来源/接收人)|500|20001| |来源 IP 不在应用白名单|400|500125| |鉴权失败(AppId/SecretId/SecretKey 错误)|400|190303| |应用/操作者无权限|400|9042 / 500014|

优秀的个人博客,低调大师

Objective-C之数字对象

int , float , long都是OC的基本数据类型,但是(!important)它们都不是对象。但是有的时候需要将他们最为一个对象来使用,例如:NSArray要求存储的值必须是对象。那么这里就可以使用NSNumber类。 一 , 为NSNumber赋值: ① :赋值一个int类型的值,创建和初始化int2O = [NSNumber numberWithInteger:100] 意义: 为int2O赋值整形100对象 ②:获得init2O的的值init2Get = [init2O integerValue] 注意 : integerValue说明init2O里面存的是int类型的值 例如: #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { NSNumber *init2O; NSInteger init2Get; init2O = [NSNumber numberWithInteger:100]; init2Get = [init2O integerValue]; NSLog(@"%li",(long)init2Get); } return 0; } 结果: 二,可以使用initWithInteger来直接实例化一个NSNumber 其他的类型 赋值方法 实例化 检索方法 numberWithChar initWithChar charValue numberWithUnsignedChar initWithUnsignedChar unsignedCharValue numberWithShort initWithShort shortValue numberWithUnsignedShort initWithUnsignedShort unsignedShortValue numberWithInteger initWithInteger integerValue numberWithUnsignedInteger initWithUnsignedInteger unsignedIntegerValue numberWithInt initWithInt intValue numberWithUnsignedInt initWithUnsignedInt unsignedIntValue numberWithLong initWithLong longValue numberWithUnsignedLong initWithUnsignedLong unsignedLongValue numberWithLongLong initWithLongLong longlongValue numberWithUnsignedLongLong initWithUnsignedLongLong unsignedLongLongValue numberWithFloat initWithFloat floatValue numberWithDouble initWithDouble doubletValue numberWithBool initWithBool booltValue 验证2个number是否是相等的 #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { NSNumber *init2O = [[NSNumber alloc] initWithInteger:100]; NSInteger init2Get; init2Get = [init2O integerValue]; NSLog(@"%li",(long)init2Get); //验证是否相等 NSNumber *float2O = [[NSNumber alloc] initWithFloat:100.00]; if( [init2O isEqualToNumber:float2O] == YES){ NSLog(@"Equal!!!"); } } return 0; } 结果: 验证小于 #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { NSNumber *init2O = [[NSNumber alloc] initWithInteger:100]; NSInteger init2Get; init2Get = [init2O integerValue]; NSLog(@"%li",(long)init2Get); //验证是否相等 NSNumber *float2O = [[NSNumber alloc] initWithFloat:100.00]; if( [init2O compare:float2O] == NSOrderedAscending){ NSLog(@"Asc!!!"); }else{ NSLog(@"No Asc"); } } return 0; } 结果: 本文转自Aonaufly51CTO博客,原文链接:http://blog.51cto.com/aonaufly/2054108,如需转载请自行联系原作者

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

用户登录
用户注册