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(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日"),
 | ||
| 		},
 | ||
| 	}
 | ||
| }
 |