Merge remote-tracking branch 'base-version/main' into dev

This commit is contained in:
chenbowen
2025-11-21 18:30:15 +08:00
10 changed files with 243 additions and 52 deletions

View File

@@ -1,6 +1,10 @@
package com.zt.plat.module.system.controller.admin.integration.iwork; package com.zt.plat.module.system.controller.admin.integration.iwork;
import com.zt.plat.framework.common.pojo.CommonResult; import com.zt.plat.framework.common.pojo.CommonResult;
import com.zt.plat.module.system.controller.admin.integration.iwork.vo.IWorkAuthRegisterReqVO;
import com.zt.plat.module.system.controller.admin.integration.iwork.vo.IWorkAuthRegisterRespVO;
import com.zt.plat.module.system.controller.admin.integration.iwork.vo.IWorkAuthTokenReqVO;
import com.zt.plat.module.system.controller.admin.integration.iwork.vo.IWorkAuthTokenRespVO;
import com.zt.plat.module.system.controller.admin.integration.iwork.vo.IWorkDepartmentQueryReqVO; import com.zt.plat.module.system.controller.admin.integration.iwork.vo.IWorkDepartmentQueryReqVO;
import com.zt.plat.module.system.controller.admin.integration.iwork.vo.IWorkJobTitleQueryReqVO; import com.zt.plat.module.system.controller.admin.integration.iwork.vo.IWorkJobTitleQueryReqVO;
import com.zt.plat.module.system.controller.admin.integration.iwork.vo.IWorkOperationRespVO; import com.zt.plat.module.system.controller.admin.integration.iwork.vo.IWorkOperationRespVO;
@@ -39,6 +43,18 @@ public class IWorkIntegrationController {
private final IWorkIntegrationService integrationService; private final IWorkIntegrationService integrationService;
private final IWorkOrgRestService orgRestService; private final IWorkOrgRestService orgRestService;
@PostMapping("/auth/register")
@Operation(summary = "注册 iWork 凭证,获取服务端公钥与 secret")
public CommonResult<IWorkAuthRegisterRespVO> register(@Valid @RequestBody IWorkAuthRegisterReqVO reqVO) {
return success(integrationService.registerSession(reqVO));
}
@PostMapping("/auth/token")
@Operation(summary = "申请 iWork Token独立接口")
public CommonResult<IWorkAuthTokenRespVO> acquireToken(@Valid @RequestBody IWorkAuthTokenReqVO reqVO) {
return success(integrationService.acquireToken(reqVO));
}
@PostMapping("/user/resolve") @PostMapping("/user/resolve")
@Operation(summary = "根据外部标识获取 iWork 用户编号") @Operation(summary = "根据外部标识获取 iWork 用户编号")
public CommonResult<IWorkUserInfoRespVO> resolveUser(@Valid @RequestBody IWorkUserInfoReqVO reqVO) { public CommonResult<IWorkUserInfoRespVO> resolveUser(@Valid @RequestBody IWorkUserInfoReqVO reqVO) {

View File

@@ -0,0 +1,14 @@
package com.zt.plat.module.system.controller.admin.integration.iwork.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
* 请求重新向 iWork 注册以换取服务端公钥与 secret。
*/
@Data
public class IWorkAuthRegisterReqVO {
@Schema(description = "是否强制刷新注册信息", example = "false")
private Boolean forceRefreshRegistration;
}

View File

@@ -0,0 +1,26 @@
package com.zt.plat.module.system.controller.admin.integration.iwork.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
* 返回 iWork 注册后的公钥与密钥信息。
*/
@Data
public class IWorkAuthRegisterRespVO {
@Schema(description = "使用的 iWork 应用编号", example = "iwork-app")
private String appId;
@Schema(description = "本地配置的客户端公钥Base64")
private String clientPublicKey;
@Schema(description = "自动生成的客户端私钥Base64仅在未配置固定公钥时返回")
private String clientPrivateKey;
@Schema(description = "iWork 返回的 server public keyBase64")
private String serverPublicKey;
@Schema(description = "iWork 返回的 secret用于后续申请 token")
private String secret;
}

View File

@@ -0,0 +1,16 @@
package com.zt.plat.module.system.controller.admin.integration.iwork.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 申请 iWork token 的请求参数。
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class IWorkAuthTokenReqVO extends IWorkBaseReqVO {
@Schema(description = "是否强制重新执行注册流程")
private Boolean forceRefreshRegistration;
}

View File

@@ -0,0 +1,29 @@
package com.zt.plat.module.system.controller.admin.integration.iwork.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
* 申请 token 的返回结果。
*/
@Data
public class IWorkAuthTokenRespVO {
@Schema(description = "使用的 iWork appId", example = "iwork-app")
private String appId;
@Schema(description = "作为操作人的 iWork 用户编号", example = "1")
private String operatorUserId;
@Schema(description = "iWork 返回的访问 token")
private String token;
@Schema(description = "与 token 匹配的加密 userId供 header 直接使用")
private String encryptedUserId;
@Schema(description = "token 预计过期时间Epoch 秒)")
private Long expiresAtEpochSecond;
@Schema(description = "当前会话对应的 server public key")
private String serverPublicKey;
}

View File

@@ -85,12 +85,12 @@ public class IWorkProperties {
@Getter @Getter
public static class Headers { public static class Headers {
private final String appId = "app-id"; private final String appId = "appid";
private final String clientPublicKey = "client-public-key"; private final String clientPublicKey = "cpk";
private final String secret = "secret"; private final String secret = "secret";
private final String token = "token"; private final String token = "token";
private final String time = "time"; private final String time = "time";
private final String userId = "user-id"; private final String userId = "userid";
} }
@Data @Data

View File

@@ -9,7 +9,7 @@ public interface IWorkIntegrationErrorCodeConstants {
ErrorCode IWORK_BASE_URL_MISSING = new ErrorCode(1_010_200_001, "iWork 集成未配置网关地址"); ErrorCode IWORK_BASE_URL_MISSING = new ErrorCode(1_010_200_001, "iWork 集成未配置网关地址");
ErrorCode IWORK_CONFIGURATION_INVALID = new ErrorCode(1_010_200_002, ErrorCode IWORK_CONFIGURATION_INVALID = new ErrorCode(1_010_200_002,
"iWork 集成缺少必填配置appId/clientPublicKey/userId/workflowId"); "iWork 集成缺少必填配置appId/userId/workflowId或配置无效");
ErrorCode IWORK_REGISTER_FAILED = new ErrorCode(1_010_200_003, "iWork 注册授权失败"); ErrorCode IWORK_REGISTER_FAILED = new ErrorCode(1_010_200_003, "iWork 注册授权失败");
ErrorCode IWORK_APPLY_TOKEN_FAILED = new ErrorCode(1_010_200_004, "iWork 令牌申请失败"); ErrorCode IWORK_APPLY_TOKEN_FAILED = new ErrorCode(1_010_200_004, "iWork 令牌申请失败");
ErrorCode IWORK_REMOTE_REQUEST_FAILED = new ErrorCode(1_010_200_005, "iWork 接口请求失败"); ErrorCode IWORK_REMOTE_REQUEST_FAILED = new ErrorCode(1_010_200_005, "iWork 接口请求失败");

View File

@@ -1,5 +1,9 @@
package com.zt.plat.module.system.service.integration.iwork; package com.zt.plat.module.system.service.integration.iwork;
import com.zt.plat.module.system.controller.admin.integration.iwork.vo.IWorkAuthRegisterReqVO;
import com.zt.plat.module.system.controller.admin.integration.iwork.vo.IWorkAuthRegisterRespVO;
import com.zt.plat.module.system.controller.admin.integration.iwork.vo.IWorkAuthTokenReqVO;
import com.zt.plat.module.system.controller.admin.integration.iwork.vo.IWorkAuthTokenRespVO;
import com.zt.plat.module.system.controller.admin.integration.iwork.vo.IWorkOperationRespVO; import com.zt.plat.module.system.controller.admin.integration.iwork.vo.IWorkOperationRespVO;
import com.zt.plat.module.system.controller.admin.integration.iwork.vo.IWorkUserInfoReqVO; import com.zt.plat.module.system.controller.admin.integration.iwork.vo.IWorkUserInfoReqVO;
import com.zt.plat.module.system.controller.admin.integration.iwork.vo.IWorkUserInfoRespVO; import com.zt.plat.module.system.controller.admin.integration.iwork.vo.IWorkUserInfoRespVO;
@@ -11,6 +15,16 @@ import com.zt.plat.module.system.controller.admin.integration.iwork.vo.IWorkWork
*/ */
public interface IWorkIntegrationService { public interface IWorkIntegrationService {
/**
* 主动触发注册流程,获取 iWork 返回的服务端公钥与 secret。
*/
IWorkAuthRegisterRespVO registerSession(IWorkAuthRegisterReqVO reqVO);
/**
* 主动向 iWork 申请访问 token并返回相关会话信息。
*/
IWorkAuthTokenRespVO acquireToken(IWorkAuthTokenReqVO reqVO);
/** /**
* 根据外部标识解析 iWork 内部用户编号。 * 根据外部标识解析 iWork 内部用户编号。
*/ */

View File

@@ -107,10 +107,11 @@ easy-trans:
iwork: iwork:
base-url: http://172.16.36.233:8080 base-url: http://172.16.36.233:8080
app-id: # app-id: f47ac10b-58cc-4372-a567-0e02b2c3d479
app-id: f47ac10b-58cc-4372-a567-0e02b2c3d479
client-public-key: client-public-key:
user-id: user-id: 9869
workflow-id: workflow-id: 1753
paths: paths:
register: /api/ec/dev/auth/regist register: /api/ec/dev/auth/regist
apply-token: /api/ec/dev/auth/applytoken apply-token: /api/ec/dev/auth/applytoken
@@ -169,6 +170,8 @@ xxl:
job: job:
executor: executor:
appname: ${spring.application.name} # 执行器 AppName appname: ${spring.application.name} # 执行器 AppName
port: 0
ip: 172.16.234.132
logpath: ${user.home}/logs/xxl-job/${spring.application.name} # 执行器运行日志文件存储磁盘路径 logpath: ${user.home}/logs/xxl-job/${spring.application.name} # 执行器运行日志文件存储磁盘路径
accessToken: default_token # 执行器通讯TOKEN accessToken: default_token # 执行器通讯TOKEN