fadd
This commit is contained in:
187
internal/shared/fadada/config.go
Normal file
187
internal/shared/fadada/config.go
Normal file
@@ -0,0 +1,187 @@
|
||||
package fadada
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// AuthConfig 认证相关配置
|
||||
type AuthConfig struct {
|
||||
RedirectURL string `json:"redirectUrl" yaml:"redirect_url"`
|
||||
}
|
||||
|
||||
// SignConfig 签署相关配置
|
||||
type SignConfig struct {
|
||||
RedirectURL string `json:"redirectUrl" yaml:"redirect_url"`
|
||||
}
|
||||
|
||||
// ContractConfig 合同相关配置
|
||||
type ContractConfig struct {
|
||||
Name string `json:"name" yaml:"name"`
|
||||
ExpireDays int `json:"expireDays" yaml:"expire_days"`
|
||||
RetryCount int `json:"retryCount" yaml:"retry_count"`
|
||||
}
|
||||
|
||||
// CallbackConfig 回调配置
|
||||
type CallbackConfig struct {
|
||||
Enabled bool `json:"enabled" yaml:"enabled"`
|
||||
}
|
||||
|
||||
// TemplateFields 合作协议模板控件 fieldId
|
||||
type TemplateFields struct {
|
||||
// AgreementNo 协议编号控件编码列表(法大大控件不可复用,多处填同一值)
|
||||
AgreementNo []string `json:"agreementNo" yaml:"agreement_no"`
|
||||
ContractDate string `json:"contractDate" yaml:"contract_date"`
|
||||
// PartyAName 甲方企业名控件编码列表(多处填同一企业名)
|
||||
PartyAName []string `json:"partyAName" yaml:"party_a_name"`
|
||||
PartyAUSCC string `json:"partyAUscc" yaml:"party_a_uscc"`
|
||||
PartyAAddress string `json:"partyAAddress" yaml:"party_a_address"`
|
||||
PartyARep string `json:"partyARep" yaml:"party_a_rep"`
|
||||
PartyASignDate string `json:"partyASignDate" yaml:"party_a_sign_date"`
|
||||
PartyBSignDate string `json:"partyBSignDate" yaml:"party_b_sign_date"`
|
||||
}
|
||||
|
||||
// Config 法大大服务配置
|
||||
type Config struct {
|
||||
AppID string `json:"appId" yaml:"app_id"`
|
||||
AppSecret string `json:"appSecret" yaml:"app_secret"`
|
||||
ServerURL string `json:"serverUrl" yaml:"server_url"`
|
||||
OpenCorpID string `json:"openCorpId" yaml:"open_corp_id"`
|
||||
// NoAuthSceneCode 免验证签场景码;仅 freeSignType=business 时需要。当前按模板免验证签,可留空。
|
||||
NoAuthSceneCode string `json:"noAuthSceneCode" yaml:"no_auth_scene_code"`
|
||||
TemplateID string `json:"templateId" yaml:"template_id"`
|
||||
// PartyAActorID / PartyBActorID 签署模板中的参与方标识(actorId),须与模板角色名一致
|
||||
PartyAActorID string `json:"partyAActorId" yaml:"party_a_actor_id"`
|
||||
PartyBActorID string `json:"partyBActorId" yaml:"party_b_actor_id"`
|
||||
// TemplateDocID 签署模板文档 docId(填单必填);为空则创建任务后从详情自动解析
|
||||
TemplateDocID string `json:"templateDocId" yaml:"template_doc_id"`
|
||||
TemplateFields *TemplateFields `json:"templateFields" yaml:"template_fields"`
|
||||
Contract *ContractConfig `json:"contract" yaml:"contract"`
|
||||
Auth *AuthConfig `json:"auth" yaml:"auth"`
|
||||
Sign *SignConfig `json:"sign" yaml:"sign"`
|
||||
Callback *CallbackConfig `json:"callback" yaml:"callback"`
|
||||
}
|
||||
|
||||
// NewConfig 创建并校验法大大配置
|
||||
func NewConfig(
|
||||
appID, appSecret, serverURL, openCorpID, noAuthSceneCode, templateID string,
|
||||
partyAActorID, partyBActorID, templateDocID string,
|
||||
fields *TemplateFields,
|
||||
contract *ContractConfig,
|
||||
auth *AuthConfig,
|
||||
sign *SignConfig,
|
||||
callback *CallbackConfig,
|
||||
) (*Config, error) {
|
||||
if appID == "" {
|
||||
return nil, fmt.Errorf("法大大应用ID不能为空")
|
||||
}
|
||||
if appSecret == "" {
|
||||
return nil, fmt.Errorf("法大大应用密钥不能为空")
|
||||
}
|
||||
if serverURL == "" {
|
||||
return nil, fmt.Errorf("法大大服务器URL不能为空")
|
||||
}
|
||||
|
||||
return &Config{
|
||||
AppID: appID,
|
||||
AppSecret: appSecret,
|
||||
ServerURL: serverURL,
|
||||
OpenCorpID: openCorpID,
|
||||
NoAuthSceneCode: noAuthSceneCode,
|
||||
TemplateID: templateID,
|
||||
PartyAActorID: partyAActorID,
|
||||
PartyBActorID: partyBActorID,
|
||||
TemplateDocID: templateDocID,
|
||||
TemplateFields: fields,
|
||||
Contract: contract,
|
||||
Auth: auth,
|
||||
Sign: sign,
|
||||
Callback: callback,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// Validate 验证配置完整性
|
||||
func (c *Config) Validate() error {
|
||||
if c.AppID == "" {
|
||||
return fmt.Errorf("法大大应用ID不能为空")
|
||||
}
|
||||
if c.AppSecret == "" {
|
||||
return fmt.Errorf("法大大应用密钥不能为空")
|
||||
}
|
||||
if c.ServerURL == "" {
|
||||
return fmt.Errorf("法大大服务器URL不能为空")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// ValidateTemplateFields 校验模板填单所需配置
|
||||
func (c *Config) ValidateTemplateFields() error {
|
||||
if c.TemplateID == "" {
|
||||
return fmt.Errorf("法大大模板ID不能为空")
|
||||
}
|
||||
if c.OpenCorpID == "" {
|
||||
return fmt.Errorf("法大大 open_corp_id 不能为空")
|
||||
}
|
||||
if c.TemplateFields == nil {
|
||||
return fmt.Errorf("法大大 template_fields 未配置")
|
||||
}
|
||||
f := c.TemplateFields
|
||||
if len(f.AgreementNo) == 0 {
|
||||
return fmt.Errorf("法大大 template_fields.agreement_no 不能为空")
|
||||
}
|
||||
for i, id := range f.AgreementNo {
|
||||
if strings.TrimSpace(id) == "" {
|
||||
return fmt.Errorf("法大大 template_fields.agreement_no[%d] 不能为空", i)
|
||||
}
|
||||
}
|
||||
if len(f.PartyAName) == 0 {
|
||||
return fmt.Errorf("法大大 template_fields.party_a_name 不能为空")
|
||||
}
|
||||
for i, id := range f.PartyAName {
|
||||
if strings.TrimSpace(id) == "" {
|
||||
return fmt.Errorf("法大大 template_fields.party_a_name[%d] 不能为空", i)
|
||||
}
|
||||
}
|
||||
// party_a/b_sign_date 为签署控件,签署时自动写入,填单可不配
|
||||
required := map[string]string{
|
||||
"contract_date": f.ContractDate,
|
||||
"party_a_uscc": f.PartyAUSCC,
|
||||
"party_a_address": f.PartyAAddress,
|
||||
"party_a_rep": f.PartyARep,
|
||||
}
|
||||
for name, id := range required {
|
||||
if id == "" {
|
||||
return fmt.Errorf("法大大 template_fields.%s 不能为空", name)
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// ResolvePartyAActorID 甲方参与方标识(优先配置,默认与签署模板角色名一致)
|
||||
func (c *Config) ResolvePartyAActorID() string {
|
||||
if c != nil && c.PartyAActorID != "" {
|
||||
return c.PartyAActorID
|
||||
}
|
||||
return ActorIDPartyA
|
||||
}
|
||||
|
||||
// ResolvePartyBActorID 乙方参与方标识(优先配置,默认与签署模板角色名一致)
|
||||
func (c *Config) ResolvePartyBActorID() string {
|
||||
if c != nil && c.PartyBActorID != "" {
|
||||
return c.PartyBActorID
|
||||
}
|
||||
return ActorIDPartyB
|
||||
}
|
||||
|
||||
const (
|
||||
// 接口成功码
|
||||
successCode = "100000"
|
||||
|
||||
// 个人证件类型:身份证(文档 userIdentType)
|
||||
UserIdentTypeIDCard = "id_card"
|
||||
|
||||
// 企业认证方式:法人认证(文档 corpIdentMethod)
|
||||
CorpIdentMethodLegalRep = "legalRep"
|
||||
// 经办人认证方式:手机号(文档 oprIdentMethod)
|
||||
OprIdentMethodMobile = "mobile"
|
||||
)
|
||||
Reference in New Issue
Block a user