package contract_request

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

type ContractPresignurlV3Request struct {
	// <ext>core:true;format:string</ext> 【电子签约文件id】电子签约文件id 【作用】 查询需指定签署位置或填参的电子签约文件 【传参】 电子签约文件id和第三方业务系统文件id必传其一，均传入以电子签约文件id为准
	ContractId *int64 `json:"contractId,omitempty"`
	// <ext>core:true</ext> 【第三方业务系统文件id】第三方业务系统文件id 【作用】 查询需指定签署位置或填参的电子签约文件 【传参】 电子签约文件id和第三方业务系统文件id必传其一，均传入以电子签约文件id为准
	BizId string `json:"bizId,omitempty"`
	// <ext>core:true</ext> 【是否允许对文件进行操作】是否允许对文件进行操作 【作用】 1、允许：允许操作页面，具体可操作项由下方参数控制 2、不允许：页面仅允许查看，不允许执行任何操作 【传参】 取值范围：true（允许），false（不允许）；不传值默认为：true（允许）。
	Operable string `json:"operable,omitempty"`
	// <ext>core:true</ext> 【存在待填参数时是否允许填参】存在待填参数时是否允许填参 【作用】 控制文件中存在待填写参数时，页面是否允许进行填参操作 【传参】 取值范围：true（允许），false（不允许）；不传值默认为：true（允许）。
	CanSetParam string `json:"canSetParam,omitempty"`
	// <ext>core:true</ext> 【已填写参数是否可修改】已填写参数是否可修改 【作用】 可控制已经填写过的参数，再次获取链接时是否可修改，默认为可修改 【传参】 取值范围：true（可修改），false（不可修改）；不传值默认为：true（可修改）。
	ModifyCompleteParam string `json:"modifyCompleteParam,omitempty"`
	// <ext>core:true</ext> 【是否允许指定签署位置】是否允许指定签署位置 【作用】 控制页面是否允许对文件指定签署位置 【传参】 取值范围：true（允许），false（不允许）；不传值默认为：true（允许）。
	CanSetStamper string `json:"canSetStamper,omitempty"`
	// 【是否允许发起文件】是否允许发起文件 【作用】 控制页面是否允许发起电子签约，即是否展示发起按钮 【传参】 取值范围：true（允许），false（不允许）；不传值默认为：true（允许）。
	CanSend string `json:"canSend,omitempty"`
	// 【是否允许下载文件】是否允许下载文件 【作用】 控制页面是否允许下载文件，即是否展示下载按钮 【传参】 取值范围：true（允许），false（不允许）；不传值默认：false（不允许）。 【特殊说明】 若【用印流程-高级配置-文件下载设置】配置不允许下载未签署完成文件，则页面始终不显示下载按钮
	CanDownload *bool `json:"canDownload,omitempty"`
	// 【是否显示保存并关闭按钮】是否显示保存并关闭按钮 【传参】 取值范围：true（显示），false（不显示）；不传值默认为：true（显示）。
	CanSaveOrClose string `json:"canSaveOrClose,omitempty"`
	// 【是否显示保存草稿按钮】是否显示保存草稿按钮 【传参】 取值范围：true（显示），false（不显示）；不传值默认为：true（显示）。
	CanSaveDraft string `json:"canSaveDraft,omitempty"`
	// 【页面显示内容】页面显示内容 【传参】 取值范围：CONTRACT（全文），POINT（要点），PARAMS（参数对比）；可选多项；不传值默认为：全部 【特殊说明】 要点和参数对比仅在当前文件存在要点和参数信息时可控制是否显示
	Panel string `json:"panel,omitempty"`
	// 【要点标签】要点标签 【作用】 当模块是“要点”时，可以指定标签，如“履约计划”、“普通要点”；标签在私有云系统中维护；
	Tag string `json:"tag,omitempty"`
	// <ext>core:true</ext> 【操作人联系方式】操作人联系方式 【作用】 通过操作人联系方式查询对应的用户，记录为业务系统中指定位置或填参的操作人，方便后期追溯 【传参】 1、可传入用户手机号或者邮箱。 2、手机号允许使用大陆、港澳台、国际手机号，手机号格式为：区号+空格+手机号，例：852 9xxxxxxx ，大陆手机号可以不传区号。 3、邮箱需传入符合格式的字符串，例：xxxxxxxx@163.com。 4、若联系方式对应的用户不存在时，将会报错。 5、若用户id、联系方式、成员编号、证件号、第三方业务系统用户id、登录账号，只按参数中最高优先级查询，优先级为用户id＞联系方式＞成员编号＞证件号＞第三方业务系统用户id＞登录账号。均未传入，日志记录调用此接口的应用名称。
	OperatorContact string `json:"operatorContact,omitempty"`
	// 【操作人用户id】操作人用户id 【作用】 通过操作人用户id查询对应的用户，记录为业务系统中指定位置或填参的操作人，方便后期追溯 【传参】 1、若用户id对应的用户不存在时，将会报错。 2、若用户id、联系方式、成员编号、证件号、第三方业务系统用户id、登录账号，只按参数中最高优先级查询，优先级为用户id＞联系方式＞成员编号＞证件号＞第三方业务系统用户id＞登录账号。均未传入，日志记录调用此接口的应用名称
	OperatorUserId *int64 `json:"operatorUserId,omitempty"`
	// 【操作人第三方业务系统用户id】操作人第三方业务系统用户id 【作用】 通过操作人第三方业务系统用户id查询对应的用户，记录为业务系统中指定位置或填参的操作人，方便后期追溯 【传参】 1、若第三方业务系统用户id对应的用户不存在时，将会报错。 2、若用户id、联系方式、成员编号、证件号、第三方业务系统用户id、登录账号，只按参数中最高优先级查询，优先级为用户id＞联系方式＞成员编号＞证件号＞第三方业务系统用户id＞登录账号。均未传入，日志记录调用此接口的应用名称。
	OperatorOpenUserId string `json:"operatorOpenUserId,omitempty"`
	// 【操作人证件号】操作人证件号 【作用】 通过操作人证件号查询对应的用户，记录为业务系统中指定位置或填参的操作人，方便后期追溯 【传参】 1、若证件号对应的用户不存在时，将会报错。 2、若用户id、联系方式、成员编号、证件号、第三方业务系统用户id、登录账号，只按参数中最高优先级查询，优先级为用户id＞联系方式＞成员编号＞证件号＞第三方业务系统用户id＞登录账号。均未传入，日志记录调用此接口的应用名称。
	OperatorCardNo string `json:"operatorCardNo,omitempty"`
	// 【操作人成员编号】操作人成员编号 【作用】 通过操作人成员编号查询对应的用户，记录为业务系统中指定位置或填参的操作人，方便后期追溯 【传参】 1、若成员编号对应的用户不存在时，将会报错。 2、若用户id、联系方式、成员编号、证件号、第三方业务系统用户id、登录账号，只按参数中最高优先级查询，优先级为用户id＞联系方式＞成员编号＞证件号＞第三方业务系统用户id＞登录账号。均未传入，日志记录调用此接口的应用名称。
	OperatorNumber string `json:"operatorNumber,omitempty"`
	// 【操作人登录账号】操作人登录账号 【作用】 通过操作人登录账号查询对应的用户，记录为业务系统中指定位置或填参的操作人，方便后期追溯 【传参】 1、若登录账号对应的用户不存在时，将会报错。 2、若用户id、联系方式、成员编号、证件号、第三方业务系统用户id、登录账号，只按参数中最高优先级查询，优先级为用户id＞联系方式＞成员编号＞证件号＞第三方业务系统用户id＞登录账号。均未传入，日志记录调用此接口的应用名称。
	OperatorAccountNo string `json:"operatorAccountNo,omitempty"`
	// <ext>format:string</ext> 【页面默认展示的文档ID】页面默认展示的文档ID 【作用】 电子签约中包含多个签署文档时，可指定页面默认展示的文档 【特殊说明】 仅控制默认展示哪份文档，但是用户仍然可以手动切换查看其他文档
	DocumentId *int64 `json:"documentId,omitempty"`
	// 【链接访问次数】链接访问次数 【作用】 1、限制链接访问次数，若超过次数则链接失效 2、若不传值，则访问次数无限制；若传入具体数值，则链接在访问所传具体值次数后失效，无法继续访问 【传参】 最小值：1。单位：次。
	VisitNum *int64 `json:"visitNum,omitempty"`
	// 【链接有效期】链接有效期 【作用】 1、用于设置获取到的链接在多长时间后过期 2、参数不传值时，链接有效期取电子签章管理后台设置的“接口页面默认有效期  3、参数传入时长超过电子签章管理后台设置的“接口页面最大有效期天数”时，将以后台设置的有效期为准 【传参】 最小值：1。单位：秒。
	ExpireTime *int64 `json:"expireTime,omitempty"`
	// 【链接失效后跳转地址】链接失效后跳转地址 【作用】 当链接页面失效后页面自动跳转至指定地址（如：超过访问次数、链接已超过有效期）
	InvalidToPage string `json:"invalidToPage,omitempty"`
	// 【页面语言】页面语言 【作用】 1、用于指定链接页面使用的语言 2、英文和日文页面为付费功能，请确认开通英文版系统和日文版系统后使用 【传参】 取值范围：ZH_CN（中文），EN_US（英文），JP（日文）；不传值默认为：ZH_CN（中文）。
	Language string `json:"language,omitempty"`
	// 【关闭页面时校验必填参数是否填写】关闭页面时校验必填参数是否填写 【作用】 针对文件存在必填参数要填写的情况，通过该参数控制在页面关闭时是否校验存在必填参数未填写，避免因必填参数未填写导致文件发起失败 【传参】 取值范围：true（校验），false（不校验）；不传值默认为：false（不校验）。
	CheckRequiredParameters string `json:"checkRequiredParameters,omitempty"`
	// 【关闭页面时校验传入的印章和签署节点是否均指定位置】关闭页面时校验传入的印章和签署节点是否均指定位置 【作用】 1、调用该接口指定签署位置，保存并关闭时可校验每个签署节点和接口指定的印章是否已经指定了签署位置，防止遗漏了位置没有指定，从而导致签署时的错签或漏签。用户可以继续指定或仍选择保存 2、该配置仅在用印流程未配置【发起签约时，必须指定签署位置】时生效，当配置了必须指定则会按照配置内容进行校验 3、若选择不校验，则保存并关闭时不会进行校验提示 4、若选择校验任一文件，则传入的印章和签章节点只要在任一文件上指定了位置，即可通过校验 5、若选择校验全部文件，则传入的印章和签章节点需要在全部文件上均指定了位置，才能通过校验 【传参】 取值范围：NONE（不校验），ANY（校验任一文件），ALL（校验全部文件）；不传值默认为：ALL（校验全部文件）
	CheckLocationAssignment string `json:"checkLocationAssignment,omitempty"`
	// 【前端通信的目标域名】前端通信的目标域名 【作用】 点击页面操作按钮，会向该域名发送postmessage消息事件，第三方业务系统可通过消息事件触发相应功能，无需再另外配置回调事件
	PostMessageUrl string `json:"postMessageUrl,omitempty"`
	// 【是否显示保存并返回按钮】是否显示保存并返回按钮 【传参】 取值范围：true（显示），false（不显示）；不传值默认为：true（显示）。
	CanReturn string `json:"canReturn,omitempty"`
	// 【操作完成自动关闭页面】操作完成自动关闭页面 【作用】 用户在链接页面完成发起操作时，系统是否自动关闭链接页面 【传参】 取值范围：true（自动关闭），false（不自动关闭）；不传值默认为：false（不自动关闭）。
	AutoCloseAfterSign string `json:"autoCloseAfterSign,omitempty"`
	// 【业务系统标识】业务系统标识 【作用】 1：根据第三方业务系统用户id查询系统成员/用户信息时使用 2：涉及到多套业务系统集成且不同系统间第三方业务系统用户id可能重复时需要传入该参数
	SystemCode string                                        `json:"systemCode,omitempty"`
	PagePrompt *common.ContractPresignurlV3PagePromptRequest `json:"pagePrompt,omitempty"`
	// 【移动端页面导航头部】移动端页面导航头部 【作用】 1、移动端内嵌页面默认带有头部导航区域，且区域内提供返回按钮，嵌入其他app时会与app自带的导航头部区域航重复 2、可通过本参数控制签入移动端页面时是否提供头部导航区域 【传参】 取值范围：true（隐藏导航头部），false（显示导航头部）；不传值默认为：false（显示导航头部）。
	HideHeader *bool                                        `json:"hideHeader,omitempty"`
	PageStyle  *common.ContractPresignurlV3PageStyleRequest `json:"pageStyle,omitempty"`
}

func (obj ContractPresignurlV3Request) GetUrl() string {
	return "/contract/presignurl/v3"
}

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