Files
tyapi-server/internal/shared/esign/template_service.go
2025-07-28 01:46:39 +08:00

168 lines
4.0 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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(s.config.Contract.Name, "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日"),
},
}
}