iwork 用印改动 未完成
This commit is contained in:
File diff suppressed because it is too large
Load Diff
202
docs/数据总线用户使用指南.md
Normal file
202
docs/数据总线用户使用指南.md
Normal file
File diff suppressed because it is too large
Load Diff
43
sql/dm/system_iwork_seal_log_dm8.sql
Normal file
43
sql/dm/system_iwork_seal_log_dm8.sql
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
-- iWork 用印回调日志(DM8)
|
||||||
|
-- 表:system_iwork_seal_log
|
||||||
|
-- 序列:system_iwork_seal_log_seq
|
||||||
|
|
||||||
|
-- 清理旧对象(若存在)
|
||||||
|
DROP TABLE IF EXISTS system_iwork_seal_log;
|
||||||
|
|
||||||
|
CREATE TABLE system_iwork_seal_log (
|
||||||
|
id BIGINT NOT NULL,
|
||||||
|
request_id VARCHAR(128) NOT NULL,
|
||||||
|
business_code VARCHAR(128),
|
||||||
|
biz_callback_key VARCHAR(255),
|
||||||
|
status INTEGER,
|
||||||
|
retry_count INTEGER DEFAULT 0,
|
||||||
|
max_retry INTEGER,
|
||||||
|
last_error_message VARCHAR(512),
|
||||||
|
raw_callback VARCHAR(2000),
|
||||||
|
last_callback_time DATETIME,
|
||||||
|
creator VARCHAR(64),
|
||||||
|
create_time DATETIME DEFAULT SYSDATE,
|
||||||
|
updater VARCHAR(64),
|
||||||
|
update_time DATETIME DEFAULT SYSDATE,
|
||||||
|
deleted SMALLINT DEFAULT 0 NOT NULL,
|
||||||
|
PRIMARY KEY (id),
|
||||||
|
UNIQUE (request_id)
|
||||||
|
);
|
||||||
|
|
||||||
|
COMMENT ON TABLE system_iwork_seal_log IS 'iWork 用印回调日志';
|
||||||
|
COMMENT ON COLUMN system_iwork_seal_log.id IS '主键';
|
||||||
|
COMMENT ON COLUMN system_iwork_seal_log.request_id IS 'iWork requestId 唯一标识';
|
||||||
|
COMMENT ON COLUMN system_iwork_seal_log.business_code IS '业务单号';
|
||||||
|
COMMENT ON COLUMN system_iwork_seal_log.biz_callback_key IS '业务回调标识';
|
||||||
|
COMMENT ON COLUMN system_iwork_seal_log.status IS '状态枚举';
|
||||||
|
COMMENT ON COLUMN system_iwork_seal_log.retry_count IS '已重试次数';
|
||||||
|
COMMENT ON COLUMN system_iwork_seal_log.max_retry IS '最大重试次数快照';
|
||||||
|
COMMENT ON COLUMN system_iwork_seal_log.last_error_message IS '最后错误信息';
|
||||||
|
COMMENT ON COLUMN system_iwork_seal_log.raw_callback IS '回调原文截断';
|
||||||
|
COMMENT ON COLUMN system_iwork_seal_log.last_callback_time IS '最近回调时间';
|
||||||
|
COMMENT ON COLUMN system_iwork_seal_log.creator IS '创建者';
|
||||||
|
COMMENT ON COLUMN system_iwork_seal_log.create_time IS '创建时间';
|
||||||
|
COMMENT ON COLUMN system_iwork_seal_log.updater IS '更新者';
|
||||||
|
COMMENT ON COLUMN system_iwork_seal_log.update_time IS '最后更新时间';
|
||||||
|
COMMENT ON COLUMN system_iwork_seal_log.deleted IS '是否删除';
|
||||||
@@ -36,9 +36,9 @@ public class IWorkWorkflowCreateReqDTO extends IWorkBaseReqDTO {
|
|||||||
|
|
||||||
@Schema(description = "用印材料附件 URL(必填)")
|
@Schema(description = "用印材料附件 URL(必填)")
|
||||||
private String xyywjUrl;
|
private String xyywjUrl;
|
||||||
|
|
||||||
@Schema(description = "用印材料附件文件名(必填)")
|
@Schema(description = "业务回调标识(回调分发使用,≤255 字符)")
|
||||||
private String xyywjFileName;
|
private String bizCallbackKey;
|
||||||
|
|
||||||
@Schema(description = "用印事项")
|
@Schema(description = "用印事项")
|
||||||
private String yysx;
|
private String yysx;
|
||||||
|
|||||||
@@ -0,0 +1,23 @@
|
|||||||
|
package com.zt.plat.module.system.mq.iwork;
|
||||||
|
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
public class IWorkBizCallbackMessage {
|
||||||
|
|
||||||
|
/** 统一回调主题 */
|
||||||
|
public static final String TOPIC = "SYSTEM_IWORK_BIZ_CALLBACK";
|
||||||
|
|
||||||
|
/** requestId 唯一标识 */
|
||||||
|
private String requestId;
|
||||||
|
/** 业务回调标识 */
|
||||||
|
private String bizCallbackKey;
|
||||||
|
/** 回调负载对象(可为 Map) */
|
||||||
|
private Object payload;
|
||||||
|
/** 当前尝试次数,从 0 开始 */
|
||||||
|
private int attempt;
|
||||||
|
/** 最大尝试次数 */
|
||||||
|
private int maxAttempts;
|
||||||
|
}
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
package com.zt.plat.module.system.mq.iwork;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Builder
|
||||||
|
public class IWorkBizCallbackResultMessage {
|
||||||
|
|
||||||
|
/** 统一回调结果主题 */
|
||||||
|
public static final String TOPIC = "SYSTEM_IWORK_BIZ_CALLBACK_RESULT";
|
||||||
|
|
||||||
|
/** requestId 唯一标识 */
|
||||||
|
private String requestId;
|
||||||
|
/** 业务回调标识,对应发送方设置的 tag */
|
||||||
|
private String bizCallbackKey;
|
||||||
|
/** 是否成功 */
|
||||||
|
private boolean success;
|
||||||
|
/** 错误消息 */
|
||||||
|
private String errorMessage;
|
||||||
|
/** 当前尝试次数(业务侧可回传) */
|
||||||
|
private int attempt;
|
||||||
|
/** 最大尝试次数 */
|
||||||
|
private int maxAttempts;
|
||||||
|
/** 回调负载(用于 system 端重试再投递) */
|
||||||
|
private Object payload;
|
||||||
|
}
|
||||||
@@ -3,6 +3,7 @@ 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.framework.tenant.core.aop.TenantIgnore;
|
import com.zt.plat.framework.tenant.core.aop.TenantIgnore;
|
||||||
import com.zt.plat.module.system.controller.admin.integration.iwork.vo.*;
|
import com.zt.plat.module.system.controller.admin.integration.iwork.vo.*;
|
||||||
|
import com.zt.plat.module.system.service.integration.iwork.IWorkCallbackLogService;
|
||||||
import com.zt.plat.module.system.service.integration.iwork.IWorkIntegrationService;
|
import com.zt.plat.module.system.service.integration.iwork.IWorkIntegrationService;
|
||||||
import com.zt.plat.module.system.service.integration.iwork.IWorkOrgRestService;
|
import com.zt.plat.module.system.service.integration.iwork.IWorkOrgRestService;
|
||||||
import com.zt.plat.module.system.service.integration.iwork.IWorkSyncService;
|
import com.zt.plat.module.system.service.integration.iwork.IWorkSyncService;
|
||||||
@@ -19,6 +20,8 @@ import org.springframework.web.bind.annotation.PostMapping;
|
|||||||
import org.springframework.web.bind.annotation.RequestBody;
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
|
|
||||||
import static com.zt.plat.framework.common.pojo.CommonResult.success;
|
import static com.zt.plat.framework.common.pojo.CommonResult.success;
|
||||||
/**
|
/**
|
||||||
* 提供统一 iWork 流程能力的管理端接口。
|
* 提供统一 iWork 流程能力的管理端接口。
|
||||||
@@ -34,6 +37,7 @@ public class IWorkIntegrationController {
|
|||||||
private final IWorkIntegrationService integrationService;
|
private final IWorkIntegrationService integrationService;
|
||||||
private final IWorkOrgRestService orgRestService;
|
private final IWorkOrgRestService orgRestService;
|
||||||
private final IWorkSyncService syncService;
|
private final IWorkSyncService syncService;
|
||||||
|
private final IWorkCallbackLogService callbackLogService;
|
||||||
|
|
||||||
@PostMapping("/auth/register")
|
@PostMapping("/auth/register")
|
||||||
@Operation(summary = "注册 iWork 凭证,获取服务端公钥与 secret")
|
@Operation(summary = "注册 iWork 凭证,获取服务端公钥与 secret")
|
||||||
@@ -87,6 +91,39 @@ public class IWorkIntegrationController {
|
|||||||
return success(integrationService.voidWorkflow(reqVO));
|
return success(integrationService.voidWorkflow(reqVO));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PreAuthorize("@ss.hasPermission('system:iwork:log:query')")
|
||||||
|
@PostMapping("/log/page")
|
||||||
|
@Operation(summary = "iWork 回调日志分页查询")
|
||||||
|
public CommonResult<com.zt.plat.framework.common.pojo.PageResult<IWorkCallbackLogRespVO>> pageLogs(@Valid @RequestBody IWorkCallbackLogPageReqVO reqVO) {
|
||||||
|
com.zt.plat.framework.common.pojo.PageResult<com.zt.plat.module.system.dal.dataobject.iwork.IWorkSealLogDO> page = callbackLogService.page(reqVO);
|
||||||
|
java.util.List<IWorkCallbackLogRespVO> mapped = new java.util.ArrayList<>();
|
||||||
|
for (com.zt.plat.module.system.dal.dataobject.iwork.IWorkSealLogDO log : page.getList()) {
|
||||||
|
IWorkCallbackLogRespVO vo = new IWorkCallbackLogRespVO();
|
||||||
|
vo.setId(log.getId());
|
||||||
|
vo.setRequestId(log.getRequestId());
|
||||||
|
vo.setBusinessCode(log.getBusinessCode());
|
||||||
|
vo.setBizCallbackKey(log.getBizCallbackKey());
|
||||||
|
vo.setStatus(log.getStatus());
|
||||||
|
vo.setRetryCount(log.getRetryCount());
|
||||||
|
vo.setMaxRetry(log.getMaxRetry());
|
||||||
|
vo.setLastErrorMessage(log.getLastErrorMessage());
|
||||||
|
vo.setRawCallback(log.getRawCallback());
|
||||||
|
vo.setLastCallbackTime(log.getLastCallbackTime());
|
||||||
|
vo.setCreateTime(log.getCreateTime());
|
||||||
|
vo.setUpdateTime(log.getUpdateTime());
|
||||||
|
mapped.add(vo);
|
||||||
|
}
|
||||||
|
return success(new com.zt.plat.framework.common.pojo.PageResult<>(mapped, page.getTotal(), page.getSummary()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@PreAuthorize("@ss.hasPermission('system:iwork:log:retry')")
|
||||||
|
@PostMapping("/log/retry")
|
||||||
|
@Operation(summary = "iWork 回调手工重试")
|
||||||
|
public CommonResult<Boolean> retry(@Valid @RequestBody IWorkWorkflowVoidReqVO reqVO) {
|
||||||
|
callbackLogService.resetAndDispatch(reqVO.getRequestId());
|
||||||
|
return success(true);
|
||||||
|
}
|
||||||
|
|
||||||
// ----------------- 人力组织接口 -----------------
|
// ----------------- 人力组织接口 -----------------
|
||||||
|
|
||||||
@PostMapping("/hr/subcompany/page")
|
@PostMapping("/hr/subcompany/page")
|
||||||
|
|||||||
@@ -0,0 +1,39 @@
|
|||||||
|
package com.zt.plat.module.system.controller.admin.integration.iwork.vo;
|
||||||
|
|
||||||
|
import com.zt.plat.framework.common.pojo.PageParam;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
import lombok.ToString;
|
||||||
|
import org.springframework.format.annotation.DateTimeFormat;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
import static com.zt.plat.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
|
||||||
|
|
||||||
|
@Schema(description = "管理后台 - iWork 用印回调日志分页查询")
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@ToString(callSuper = true)
|
||||||
|
public class IWorkCallbackLogPageReqVO extends PageParam {
|
||||||
|
|
||||||
|
@Schema(description = "requestId")
|
||||||
|
private String requestId;
|
||||||
|
|
||||||
|
@Schema(description = "业务单号")
|
||||||
|
private String businessCode;
|
||||||
|
|
||||||
|
@Schema(description = "业务回调标识")
|
||||||
|
private String bizCallbackKey;
|
||||||
|
|
||||||
|
@Schema(description = "状态")
|
||||||
|
private Integer status;
|
||||||
|
|
||||||
|
@Schema(description = "创建时间范围")
|
||||||
|
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||||
|
private LocalDateTime[] createTime;
|
||||||
|
|
||||||
|
@Schema(description = "最后回调时间范围")
|
||||||
|
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||||
|
private LocalDateTime[] lastCallbackTime;
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
package com.zt.plat.module.system.controller.admin.integration.iwork.vo;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
@Schema(description = "iWork 用印回调日志响应 VO")
|
||||||
|
@Data
|
||||||
|
public class IWorkCallbackLogRespVO {
|
||||||
|
|
||||||
|
private Long id;
|
||||||
|
private String requestId;
|
||||||
|
private String businessCode;
|
||||||
|
private String bizCallbackKey;
|
||||||
|
private Integer status;
|
||||||
|
private Integer retryCount;
|
||||||
|
private Integer maxRetry;
|
||||||
|
private String lastErrorMessage;
|
||||||
|
private String rawCallback;
|
||||||
|
private LocalDateTime lastCallbackTime;
|
||||||
|
private LocalDateTime createTime;
|
||||||
|
private LocalDateTime updateTime;
|
||||||
|
}
|
||||||
@@ -2,12 +2,21 @@ package com.zt.plat.module.system.controller.admin.integration.iwork.vo;
|
|||||||
|
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import jakarta.validation.constraints.NotBlank;
|
import jakarta.validation.constraints.NotBlank;
|
||||||
|
import jakarta.validation.constraints.Size;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
@Schema(name = "IWorkFileCallbackReqVO", description = "iWork 文件回调请求 VO")
|
@Schema(name = "IWorkFileCallbackReqVO", description = "iWork 文件回调请求 VO")
|
||||||
@Data
|
@Data
|
||||||
public class IWorkFileCallbackReqVO {
|
public class IWorkFileCallbackReqVO {
|
||||||
|
|
||||||
|
@Schema(description = "iWork requestId,唯一标识", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||||
|
@NotBlank(message = "requestId 不能为空")
|
||||||
|
private String requestId;
|
||||||
|
|
||||||
|
@Schema(description = "业务回调标识 bizCallbackKey,≤255 字符", example = "seal-flow-callback")
|
||||||
|
@Size(max = 255, message = "bizCallbackKey 长度不能超过 255 字符")
|
||||||
|
private String bizCallbackKey;
|
||||||
|
|
||||||
@Schema(description = "文件下载 URL", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://example.com/file.pdf")
|
@Schema(description = "文件下载 URL", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://example.com/file.pdf")
|
||||||
@NotBlank(message = "文件 URL 不能为空")
|
@NotBlank(message = "文件 URL 不能为空")
|
||||||
private String fileUrl;
|
private String fileUrl;
|
||||||
@@ -19,6 +28,9 @@ public class IWorkFileCallbackReqVO {
|
|||||||
@Schema(description = "文件名称,可选", example = "合同附件.pdf")
|
@Schema(description = "文件名称,可选", example = "合同附件.pdf")
|
||||||
private String fileName;
|
private String fileName;
|
||||||
|
|
||||||
@Schema(description = "OA 单点下载使用的 ssoToken,可选", example = "6102A7C13F09DD6B1AF06CDA0E479AC8...")
|
@Schema(description = "业务回调状态/结果码,可选")
|
||||||
private String ssoToken;
|
private String status;
|
||||||
|
|
||||||
|
@Schema(description = "原始回调文本(可选,若不传则使用 payload 或请求体序列化)")
|
||||||
|
private String rawBody;
|
||||||
}
|
}
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user