package others_request

import (
	"encoding/json"
	"git.sxidc.com/student-physical-examination/contract_lock_sdk/http"
)

type CrossborderContractEditRequest struct {
	// <ext>core:true;format:string</ext> 【跨境电子签约文件id】跨境电子签约文件id 【作用】 查询需要编辑的跨境电子签约文件 【传参】 电子签约文件id和第三方业务系统文件id必传其一，均传入以电子签约文件id为准。
	Id *int64 `json:"id,omitempty"`
	// <ext>core:true;format:string</ext> 【第三方业务系统文件id】第三方业务系统文件id 【作用】 查询需要编辑的跨境电子签约文件 【传参】 电子签约文件id和第三方业务系统文件id必传其一，均传入以电子签约文件id为准。
	BizId string `json:"bizId,omitempty"`
	// <ext>core:true;deprecated:true</ext> 【编辑模式】编辑模式 【作用】 1、对于参数中的数组对象（documents签署文档、signatories签署方、actions签署节点、contractPublicTag公共标签）支持两种模式的编辑：ALL_UPDATE(全量更新)、INCREASE_UPDATE(增量更新)，通过传入的参数控制。 1）增量更新：如果原电子签约文件中已存在，则更新，不存在则新增。例如已有签署方“维森集团”，传入新的签署方“众畅科技”，则签署方会变成“维森集团”和“众畅科技” （1）传入签署文档：根据签署文档id匹配，如果已存在则更新，不存在则新增 （2）传入签署方：依次根据（signatoryNo）签署方编号、tenantName（组织签署方根据签署方名称）、contact（个人签署方按照联系方式）进行匹配，如果已存在对应的签署方则会进行更新，如果不存在该签署方则会新增签署方 （3）传入签署动作：根据类型匹配，如果已存在则更新，不存在则新增 2）全量更新：传入的数组对象会全量替换原电子签约文件中的内容。例如已有签署方“维森集团”，传入新的签署方“众畅科技”，则签署方会替换为“众畅科技” 【传参】 取值范围：ALL_UPDATE(全量更新)，INCREASE_UPDATE(增量更新)；不传值默认为：INCREASE_UPDATE(增量更新)。 【特殊说明】 水印设置仅支持增量更新
	EditType string `json:"editType,omitempty"`
	// <ext>core:true</ext> 【文件信息编辑更新类型】文件信息编辑更新类型 【作用】 1、增量更新：已存在，则更新，不存在则新增，且不支持删除。 （1）签署文档：根据签署文档id匹配，如果已存在则更新，不存在则新增 （2）签署方：依次根据（signatoryNo）签署方编号、tenantName（组织签署方根据签署方名称）、contact（个人签署方按照联系方式）进行匹配，如果已存在对应的签署方则会进行更新，如果不存在该签署方则会新增签署方。 （3）签署动作：根据类型匹配，如果已存在则更新，不存在则新增 （4）公共标签：传入即新增 （5）文件主题、编号、签署截止日期、模板参数等，均直接按传入的新值更新 2、全量更新：按最新传入的信息进行更新，原有的信息不生效。 （1）需将创建电子签约时传入的所需字段信息再次传入，传入的新值将全量替换原创建时传入的旧值。 【传参】 取值范围：ALL_UPDATE(全量更新)，INCREASE_UPDATE(增量更新)；不传值默认为：INCREASE_UPDATE(增量更新)。
	EditContractType string `json:"editContractType,omitempty"`
	// <ext>core:true</ext> 【文件主题】文件主题 【作用】 电子签约文件的标题，如签署劳动合同时，可设置为“劳动合同-XX公司-张三” 【传参】 最大长度：500（包含）。 【特殊说明】 用印流程-高级配置中可设置文件主题生成规则，若设置按规则自动生成，则接口传入无效；若设置为发起人自定义，则接口传入的文件主题生效。
	Subject string `json:"subject,omitempty"`
	// 【文件编号】文件编号 【作用】电子签约文件的编号，方便对文件进行查询、归档等管理，如“QYS-20160101-000001” 【传参】 最大长度：400（包含）。 【特殊说明】 用印流程若设置按规则自动生成，则接口传入无效；若设置为发起人自定义，则接口传入的文件编号生效
	Sn string `json:"sn,omitempty"`
	// <ext>core:true;format:date</ext> 【文件定时发起时间】文件定时发起时间 【作用】 可以创建文件后保存草稿，在设定的时间由系统自动发起文件 【传参】 1、仅在send（是否发起电子签约）为false（保存为草稿）时生效。 2、日期格式：yyyy-MM-dd HH:mm
	SendTimeStr string `json:"sendTimeStr,omitempty"`
	// 【文件描述】文件描述 【作用】 用于对文件进行补充描述，不会在页面展示，仅在系统数据库中记录 【传参】 最大长度：1200（包含）。
	Description string `json:"description,omitempty"`
	// <ext>core:true</ext> 【发起主体名称】发起主体名称 【作用】 即电子签约文件的发起单位，仅能传入用印流程设置的发起主体范围 【传参】 最大长度：500（包含）。
	TenantName string `json:"tenantName,omitempty"`
	// <ext>core:true</ext> 【发起人姓名】发起人姓名 【作用】 当传入的发起人未在系统中时，将使用该姓名作为发起人账号的姓名。如发起人已存在，则传入的姓名无效
	CreatorName string `json:"creatorName,omitempty"`
	// <ext>core:true</ext> 【发起人联系方式】发起人联系方式 【作用】 可传入手机号、邮箱查询并记录该电子签约文件的发起人。 【传参】 1、可传入用户手机号或者邮箱。 2、手机号允许使用大陆、港澳台、国际手机号，手机号格式为：区号+空格+手机号，例：852 9xxxxxxx ，大陆手机号可以不传区号。 3、邮箱需传入符合格式的字符串，例：xxxxxxxx@163.com。 4、当前参数传入时，将会替代creatorInfo参数中的contact参数，按照creatorInfo的参数逻辑进行查询发起人
	CreatorContact string `json:"creatorContact,omitempty"`
	// <ext>core:true</ext> 【发起人成员编号】发起人成员编号 【作用】 可传入成员编号查询并记录该电子签约文件的发起人 【传参】 1、联系方式与成员编号任传其一，均传入时以联系方式为准。 2、使用联系方式或成员编号查询用户且用户不存在时，将使用对应的参数值和发起人姓名创建新用户，并会加入发起主体组织内部。 3、不传发起人时默认为发起主体名称。
	CreatorNumber string `json:"creatorNumber,omitempty"`
	// <ext>core:true</ext> 【自定义字段】自定义字段 【作用】 1、除文件主题、文件编号等基础信息，不同类型的文件发起时需要填写的字段信息是不同的，例如发起采购合同可填写金额，发起人事合同可填写员工岗位 2、自定义字段可在【电子签章管理后台】统一定义或在用印流程中根据业务定义，定义好后可通过该参数传入字段值
	CustomizeFields []CbCustomizeFiled `json:"customizeFields,omitempty"`
	// <ext>core:true;format:string</ext> 【签署文档id】签署文档id 【作用】 可自定义上传本地、图片、文件模板作为本次签署的文件，但因转换文档需要时间，如在本接口发起文件时同步转换文档会导致发起文件耗时较长，所以需提前调用创建文档相关接口转换为签署文档id后再通过此参数填写。创建文档接口如下： 1、<docs>/cross-border/v2/document/createbyfile</docs> ：选择本地的文件转换为PDF格式的签署文档 2、<docs>/cross-border/document/createbytemplate</docs> ：传入系统中已维护的文件模板id，将模板转换成PDF格式的签署文档 3、<docs>/cross-border/document/createbytemplates</docs> ：传入系统中多个已维护的文件模板id，将模板转换为PDF格式的签署文档 4、<docs>/cross-border/document/createbyfiles</docs> ：选择多个本地的文件，合并并转换为PDF格式的签署文档 5、<docs>/cross-border/v2/document/createbyurl</docs> ：使用传入的url获取文件转换为PDF格式的签署文档，支持本地路径/网络路径或ftp存储路径的文件 【特殊说明】 用印流程-文件设置中开启“发起签约时，允许新增文件”，则传入的签署文档与用印流程中配置的文件模板都作为电子签约文档；若未开启配置，则只能使用用印流程中配置的文件模板
	Documents []int64 `json:"documents,omitempty"`
	// <ext>core:true</ext> 【模板参数】模板参数 【作用】 1、签署文件中包含待填写的参数时，支持传入参数的值补全文件内容 2、支持传入所有签署方的待填参数，用户进行拟定时可查看接口传入的默认值，但可改
	DocumentParams []CbDocumentParam `json:"documentParams,omitempty"`
	// <ext>core:true</ext> 【签署方】签署方 【作用】 即需签署的组织（仅支持内部组织签署方）和个人，组织签署方下可设置签署节点（签署、审批），个人仅支持签署 【特殊说明】 签署方不允许为空
	Signatories []CbSignatory `json:"signatories,omitempty"`
	// <ext>core:true</ext> 【签署截止日期】签署截止日期 【作用】 若超过该日期，文件的所有签署方将不能进行文件签署，文件状态变为“已截止签署” 【传参】 1、日期格式：yyyy-MM-dd。 2、若传入2022-03-09，系统将在2022年3月9日的23时59分59秒后将文件标记为“已截止签署”。
	ExpireTime string `json:"expireTime,omitempty"`
	// 【公共标签】公共标签 【作用】 可传入电子签约文件的标签对文件进行分类、筛选等管理，公共标签仅发起方内部成员可见、可编辑 【传参】 支持传入多个，传参方式为:[\"公共标签1\",\"公共标签2\"]。
	ContractPublicTag []string `json:"contractPublicTag,omitempty"`
}

func (obj CrossborderContractEditRequest) GetUrl() string {
	return "/cross-border/contract/edit"
}

func (obj CrossborderContractEditRequest) GetHttpParameter() *http.HttpParameter {
	parameter := http.NewPostHttpParameter()
	jsonBytes, _ := json.Marshal(obj)
	parameter.SetJsonParamer(string(jsonBytes))
	return parameter
}
