208 lines
5.3 KiB
Go
208 lines
5.3 KiB
Go
package esign
|
|
|
|
import (
|
|
"fmt"
|
|
)
|
|
|
|
// FileOpsService 文件操作服务
|
|
// 处理文件下载、流程查询等操作
|
|
type FileOpsService struct {
|
|
httpClient *HTTPClient
|
|
config *Config
|
|
}
|
|
|
|
// NewFileOpsService 创建文件操作服务
|
|
func NewFileOpsService(httpClient *HTTPClient, config *Config) *FileOpsService {
|
|
return &FileOpsService{
|
|
httpClient: httpClient,
|
|
config: config,
|
|
}
|
|
}
|
|
|
|
// UpdateConfig 更新配置
|
|
func (s *FileOpsService) UpdateConfig(config *Config) {
|
|
s.config = config
|
|
}
|
|
|
|
// DownloadSignedFile 下载已签署文件及附属材料
|
|
// 获取签署完成后的文件下载链接和证书下载链接
|
|
//
|
|
// 参数说明:
|
|
// - signFlowId: 签署流程ID
|
|
//
|
|
// 返回: 下载文件响应和错误信息
|
|
func (s *FileOpsService) DownloadSignedFile(signFlowId string) (*DownloadSignedFileResponse, error) {
|
|
fmt.Println("开始下载已签署文件及附属材料...")
|
|
|
|
// 发送API请求
|
|
urlPath := fmt.Sprintf("/v3/sign-flow/%s/attachments", signFlowId)
|
|
responseBody, err := s.httpClient.Request("GET", urlPath, nil)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("下载已签署文件失败: %v", err)
|
|
}
|
|
|
|
// 解析响应
|
|
var response DownloadSignedFileResponse
|
|
if err := UnmarshalResponse(responseBody, &response); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if err := CheckResponseCode(response.Code, response.Message); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
fmt.Printf("已签署文件下载信息获取成功!\n")
|
|
fmt.Printf("文件数量: %d\n", len(response.Data.Files))
|
|
fmt.Printf("附属材料数量: %d\n", len(response.Data.Attachments))
|
|
if response.Data.CertificateDownloadUrl != "" {
|
|
fmt.Printf("证书下载链接: %s\n", response.Data.CertificateDownloadUrl)
|
|
}
|
|
|
|
return &response, nil
|
|
}
|
|
|
|
// QuerySignFlowDetail 查询签署流程详情
|
|
// 获取签署流程的详细状态和参与方信息
|
|
//
|
|
// 参数说明:
|
|
// - signFlowId: 签署流程ID
|
|
//
|
|
// 返回: 流程详情响应和错误信息
|
|
func (s *FileOpsService) QuerySignFlowDetail(signFlowId string) (*QuerySignFlowDetailResponse, error) {
|
|
fmt.Println("开始查询签署流程详情...")
|
|
|
|
// 发送API请求
|
|
urlPath := fmt.Sprintf("/v3/sign-flow/%s/detail", signFlowId)
|
|
responseBody, err := s.httpClient.Request("GET", urlPath, nil)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("查询签署流程详情失败: %v", err)
|
|
}
|
|
|
|
// 解析响应
|
|
var response QuerySignFlowDetailResponse
|
|
if err := UnmarshalResponse(responseBody, &response); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if err := CheckResponseCode(response.Code, response.Message); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
fmt.Printf("查询签署流程详情响应: %+v\n", response)
|
|
return &response, nil
|
|
}
|
|
|
|
// GetSignedFileDownloadUrls 获取已签署文件的下载链接
|
|
// 从下载响应中提取所有文件的下载链接
|
|
//
|
|
// 参数说明:
|
|
// - downloadResponse: 下载文件响应
|
|
//
|
|
// 返回: 文件下载链接映射
|
|
func GetSignedFileDownloadUrls(downloadResponse *DownloadSignedFileResponse) map[string]string {
|
|
urls := make(map[string]string)
|
|
|
|
// 添加已签署文件
|
|
for _, file := range downloadResponse.Data.Files {
|
|
urls[file.FileName] = file.DownloadUrl
|
|
}
|
|
|
|
// 添加附属材料
|
|
for _, attachment := range downloadResponse.Data.Attachments {
|
|
urls[attachment.FileName] = attachment.DownloadUrl
|
|
}
|
|
|
|
return urls
|
|
}
|
|
|
|
// GetSignFlowStatusText 获取签署流程状态文本
|
|
// 从流程详情中提取状态信息
|
|
//
|
|
// 参数说明:
|
|
// - status: 流程状态码
|
|
//
|
|
// 返回: 流程状态描述
|
|
func GetSignFlowStatusText(status int32) string {
|
|
switch status {
|
|
case 1:
|
|
return "草稿"
|
|
case 2:
|
|
return "签署中"
|
|
case 3:
|
|
return "已完成"
|
|
case 4:
|
|
return "已撤销"
|
|
case 5:
|
|
return "已过期"
|
|
case 6:
|
|
return "已拒绝"
|
|
default:
|
|
return fmt.Sprintf("未知状态(%d)", status)
|
|
}
|
|
}
|
|
|
|
// GetSignerStatus 获取签署人状态
|
|
// 从流程详情中提取指定签署人的状态
|
|
//
|
|
// 参数说明:
|
|
// - detailResponse: 流程详情响应
|
|
// - signerName: 签署人姓名
|
|
//
|
|
// 返回: 签署人状态描述
|
|
func GetSignerStatus(detailResponse *QuerySignFlowDetailResponse, signerName string) string {
|
|
for _, signer := range detailResponse.Data.Signers {
|
|
var name string
|
|
if signer.PsnSigner != nil {
|
|
name = signer.PsnSigner.PsnName
|
|
} else if signer.OrgSigner != nil {
|
|
name = signer.OrgSigner.OrgName
|
|
}
|
|
|
|
if name == signerName {
|
|
switch signer.SignStatus {
|
|
case 1:
|
|
return "待签署"
|
|
case 2:
|
|
return "已签署"
|
|
case 3:
|
|
return "已拒绝"
|
|
case 4:
|
|
return "已过期"
|
|
default:
|
|
return fmt.Sprintf("未知状态(%d)", signer.SignStatus)
|
|
}
|
|
}
|
|
}
|
|
return "未找到签署人"
|
|
}
|
|
|
|
// IsSignFlowCompleted 检查签署流程是否完成
|
|
// 根据状态码判断签署流程是否已完成
|
|
//
|
|
// 参数说明:
|
|
// - detailResponse: 流程详情响应
|
|
//
|
|
// 返回: 是否完成
|
|
func IsSignFlowCompleted(detailResponse *QuerySignFlowDetailResponse) bool {
|
|
// 状态码2表示已完成
|
|
return detailResponse.Data.SignFlowStatus == 2
|
|
}
|
|
|
|
// GetFileList 获取文件列表
|
|
// 从下载响应中获取所有文件信息
|
|
//
|
|
// 参数说明:
|
|
// - downloadResponse: 下载文件响应
|
|
//
|
|
// 返回: 文件信息列表
|
|
func GetFileList(downloadResponse *DownloadSignedFileResponse) []SignedFileInfo {
|
|
var files []SignedFileInfo
|
|
|
|
// 添加已签署文件
|
|
files = append(files, downloadResponse.Data.Files...)
|
|
|
|
// 添加附属材料
|
|
files = append(files, downloadResponse.Data.Attachments...)
|
|
|
|
return files
|
|
} |