168 lines
4.0 KiB
Go
168 lines
4.0 KiB
Go
|
|
package esign
|
|||
|
|
|
|||
|
|
import (
|
|||
|
|
"fmt"
|
|||
|
|
"time"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
// TemplateService 模板服务
|
|||
|
|
// 处理模板填写和文件生成相关操作
|
|||
|
|
type TemplateService struct {
|
|||
|
|
httpClient *HTTPClient
|
|||
|
|
config *Config
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// NewTemplateService 创建模板服务
|
|||
|
|
func NewTemplateService(httpClient *HTTPClient, config *Config) *TemplateService {
|
|||
|
|
return &TemplateService{
|
|||
|
|
httpClient: httpClient,
|
|||
|
|
config: config,
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// UpdateConfig 更新配置
|
|||
|
|
func (s *TemplateService) UpdateConfig(config *Config) {
|
|||
|
|
s.config = config
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Fill 填写模板生成文件
|
|||
|
|
// 根据模板ID和填写内容生成包含填写内容的文档
|
|||
|
|
//
|
|||
|
|
// 参数说明:
|
|||
|
|
// - components: 需要填写的组件列表,包含字段键名和值
|
|||
|
|
//
|
|||
|
|
// 返回: 生成的文件ID和错误信息
|
|||
|
|
func (s *TemplateService) Fill(components []Component) (*FillTemplate, error) {
|
|||
|
|
fmt.Println("开始填写模板生成文件...")
|
|||
|
|
|
|||
|
|
// 生成带时间戳的文件名
|
|||
|
|
fileName := generateFileName("天远数据API合作协议", "pdf")
|
|||
|
|
|
|||
|
|
// 构建请求数据
|
|||
|
|
requestData := FillTemplateRequest{
|
|||
|
|
DocTemplateID: s.config.TemplateID,
|
|||
|
|
FileName: fileName,
|
|||
|
|
Components: components,
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 序列化请求数据
|
|||
|
|
jsonData, err := MarshalRequest(requestData)
|
|||
|
|
if err != nil {
|
|||
|
|
return nil, err
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 发送API请求
|
|||
|
|
responseBody, err := s.httpClient.Request("POST", "/v3/files/create-by-doc-template", jsonData)
|
|||
|
|
if err != nil {
|
|||
|
|
return nil, fmt.Errorf("填写模板失败: %v", err)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 解析响应
|
|||
|
|
var response FillTemplateResponse
|
|||
|
|
if err := UnmarshalResponse(responseBody, &response); err != nil {
|
|||
|
|
return nil, err
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 检查响应状态
|
|||
|
|
if err := CheckResponseCode(response.Code, response.Message); err != nil {
|
|||
|
|
return nil, err
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
fmt.Printf("模板填写成功,文件ID: %s\n", response.Data.FileID)
|
|||
|
|
return &FillTemplate{
|
|||
|
|
FileID: response.Data.FileID,
|
|||
|
|
FileDownloadUrl: response.Data.FileDownloadUrl,
|
|||
|
|
FileName: fileName,
|
|||
|
|
TemplateID: s.config.TemplateID,
|
|||
|
|
FillTime: time.Now(),
|
|||
|
|
}, nil
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// FillWithDefaults 使用默认数据填写模板
|
|||
|
|
// 使用预设的默认数据填写模板,适用于测试或标准流程
|
|||
|
|
//
|
|||
|
|
// 参数说明:
|
|||
|
|
// - partyA: 甲方企业名称
|
|||
|
|
// - legalRepA: 甲方法人姓名
|
|||
|
|
// - partyB: 乙方企业名称
|
|||
|
|
// - legalRepB: 乙方法人姓名
|
|||
|
|
//
|
|||
|
|
// 返回: 生成的文件ID和错误信息
|
|||
|
|
func (s *TemplateService) FillWithDefaults(partyA, legalRepA, partyB, legalRepB string) (*FillTemplate, error) {
|
|||
|
|
// 构建默认填写组件
|
|||
|
|
components := []Component{
|
|||
|
|
{
|
|||
|
|
ComponentKey: "JFQY",
|
|||
|
|
ComponentValue: partyA,
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
ComponentKey: "JFFR",
|
|||
|
|
ComponentValue: legalRepA,
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
ComponentKey: "YFQY",
|
|||
|
|
ComponentValue: partyB,
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
ComponentKey: "YFFR",
|
|||
|
|
ComponentValue: legalRepB,
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
ComponentKey: "QDRQ",
|
|||
|
|
ComponentValue: formatDateForTemplate(),
|
|||
|
|
},
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return s.Fill(components)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// FillWithCustomData 使用自定义数据填写模板
|
|||
|
|
// 允许传入自定义的组件数据来填写模板
|
|||
|
|
//
|
|||
|
|
// 参数说明:
|
|||
|
|
// - customComponents: 自定义组件数据
|
|||
|
|
//
|
|||
|
|
// 返回: 生成的文件ID和错误信息
|
|||
|
|
func (s *TemplateService) FillWithCustomData(customComponents map[string]string) (*FillTemplate, error) {
|
|||
|
|
var components []Component
|
|||
|
|
|
|||
|
|
// 将map转换为Component切片
|
|||
|
|
for key, value := range customComponents {
|
|||
|
|
components = append(components, Component{
|
|||
|
|
ComponentKey: key,
|
|||
|
|
ComponentValue: value,
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return s.Fill(components)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// CreateDefaultComponents 创建默认模板数据
|
|||
|
|
// 返回用于测试的默认模板填写数据
|
|||
|
|
//
|
|||
|
|
// 返回: 默认组件数据
|
|||
|
|
func CreateDefaultComponents() []Component {
|
|||
|
|
return []Component{
|
|||
|
|
{
|
|||
|
|
ComponentKey: "JFQY",
|
|||
|
|
ComponentValue: "海南省学宇思网络科技有限公司",
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
ComponentKey: "JFFR",
|
|||
|
|
ComponentValue: "刘福思",
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
ComponentKey: "YFQY",
|
|||
|
|
ComponentValue: "测试企业",
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
ComponentKey: "YFFR",
|
|||
|
|
ComponentValue: "测试法人",
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
ComponentKey: "QDRQ",
|
|||
|
|
ComponentValue: time.Now().Format("2006年01月02日"),
|
|||
|
|
},
|
|||
|
|
}
|
|||
|
|
}
|