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 ContractSignurlSendRequest 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;format:string;deprecated:true</ext> 【签署方ID】签署方ID 【特殊说明】 （公司ID/个人ID），和tenantName不能同时为空
	TenantId *int64 `json:"tenantId,omitempty"`
	// <ext>core:true</ext> 【签署方名称】签署方名称 【作用】 查询需发送通知的签署方，未查询到时将新增签署方
	TenantName string `json:"tenantName,omitempty"`
	// <ext>core:true</ext> 【签署方类型】签署方类型 【作用】 查询需发送通知的签署方，未查询到时将新增签署方 【传参】 取值范围：COMPANY（组织），PERSONAL（个人）。
	TenantType string `json:"tenantType"`
	// <ext>core:true</ext> 【经办人姓名】经办人姓名 【作用】 1、查询到签署方时，不生效 2、新增签署方时，指定组织签署方的经办人姓名 3、新增个人签署方无需传入该参数，将使用tenantName作为签署方姓名
	ReceiverName string `json:"receiverName,omitempty"`
	// <ext>core:true</ext> 【经办人联系方式】经办人联系方式 【作用】 1、查询到签署方时，用于获取对应用户的签署页面 2、新增签署方时，用于查询用户。用于作为组织签署方的经办人或个人签署方 【传参】  1、可传入用户手机号或者邮箱。 2、手机号允许使用大陆、港澳台、国际手机号，手机号格式为：区号+空格+手机号，例：852 9xxxxxxx ，大陆手机号可以不传区号。 3、邮箱需传入符合格式的字符串，例：xxxxxxxx@163.com。 4、传入该参数查询用户时，若用户不存在时，则使用传入的联系方式创建新用户，并将该用户加入组织
	Contact string `json:"contact,omitempty"`
	// <ext>core:true</ext> 【经办人邮箱】经办人邮箱 【作用】 1、查询到签署方时，用于获取对应用户的签署页面 2、新增签署方时，用于查询用户。用于作为组织签署方的经办人或个人签署方 【传参】  1、邮箱需传入符合格式的字符串，例：xxxxxxxx@163.com。 2、传入该参数查询用户时，若用户不存在时，则使用传入的联系方式创建新用户，并将该用户加入组织
	Email string `json:"email,omitempty"`
	// <ext>core:true</ext> 【经办人成员编号】经办人成员编号 【作用】 1、查询到签署时，用于获取对应用户的签署页面 2、新增签署方时，用于查询用户。用于作为组织签署方的经办人或个人签署方 【传参】 1、当未传入经办人联系方式、邮箱时，可使用经办人成员编号、经办人第三方业务系统用户id查询用户，作为组织签署方的经办人，或个人签署方。 2、经办人成员编号、经办人第三方业务系统用户id均传入时，以经办人成员编号为准。 3、若使用经办人成员编号查询用户时，若用户不存在时，则将使用传入的成员编号创建新用户，并将该用户加入组织。
	ReceiverNumber string `json:"receiverNumber,omitempty"`
	// <ext>core:true</ext> 【经办人第三方业务系统用户id】经办人第三方业务系统用户id 【作用】 1、查询到签署时，用于获取对应用户的签署页面 2、新增签署方时，用于查询用户。用于作为组织签署方的经办人或个人签署方 【传参】 1、当未传入经办人联系方式、邮箱时，可使用经办人成员编号、经办人第三方业务系统用户id查询用户，作为组织签署方的经办人，或个人签署方。 2、经办人成员编号、经办人第三方业务系统用户id均传入时，以经办人成员编号为准。 3、使用该参数查询用户，若用户不存在时，将会报错提示。
	OpenUserId string `json:"openUserId,omitempty"`
	// 【接收人证件号】接收人证件号 【作用】 接收人未认证时，可指定接收人认证时的默认证件号；若接收人已认证，此参数不会生效 【传参】 传入签署方已存在时，参数不生效
	CardNo string `json:"cardNo,omitempty"`
	// 【回调参数】回调参数 【作用】 用户签署完成后或退回电子签约，将该参数通过回调函数返回（旧参数，建议使用【用印流程】中配置的回调）
	CallbackParam string `json:"callbackParam,omitempty"`
	// 【回调Header参数】回调Header参数 【作用】 用户签署完成后或退回电子签约，将该参数通过回调函数返回（旧参数，建议使用【用印流程】中配置的回调） 【传参】 Json格式。
	CallbackHeader string `json:"callbackHeader,omitempty"`
	// 【签署节点】签署节点 【作用】 新增签署方时，组织签署方下可设置不同的签署节点进行签署，如组织签署、个人签字、审批 【传参】 传入签署方已存在时，参数不生效 【特殊说明】 外部组织签署方仅支持指定签署人，不能指定印章id
	Actions []*common.ContractSignurlSendActionsRequest `json:"actions,omitempty"`
	// 【签署位置】签署位置 【作用】 传入签署方已存在时，覆盖更新签署位置
	Locations []*common.SignatoryRect `json:"locations,omitempty"`
	// 【是否允许添加相同个人签署方】是否允许添加相同个人签署方 【作用】 控制电子签约中是否允许添加重复的个人签署方 【传参】 取值范围：true（允许），false（不允许）；不传值默认为：false（不允许）。 【特殊说明】 已存在的个人签署方签署完成后，才可以新增重复个人签署方
	PersonalRepeatAllow *bool `json:"personalRepeatAllow,omitempty"`
	// 【认证时可修改项】认证时可修改项 【作用】 用于控制接收人在实名认证时可以修改哪些接口传入的信息 【传参】 1、取值范围：NONE（所有参数都不允许修改），NAME(姓名)，CARDNO(证件号)，MOBILE(手机号)，BANKNO(银行账号)，BANKPHONE(银行预留手机号)；可选多项；不传值默认为：除了手机号外所有参数都允许修改。 2、如同时传了NONE和其他参数，接口将会报错。其他值可传入多项，传入的值即代表可以修改。 3、传入签署方已存在时，参数不生效。
	ModifyFields []string `json:"modifyFields,omitempty"`
	// 【个人认证的证件类型】个人认证的证件类型 【作用】 签署方内的用户未认证时，可指定其个人认证时使用的默认证件类型 【传参】 1、取值范围：IDCARD（二代身份证），PASSPORT（护照），HKMP（港澳通行证），MTPS（台胞证），OTHER（其他）；不传值默认为：IDCARD（二代身份证）。 2、传入签署方已存在时，参数不生效。
	PaperType string `json:"paperType,omitempty"`
	// 【个人签名类型要求】个人签名类型要求 【作用】 签署方下的个人进行签字时可使用的签名类型，包括： 1、系统签名：系统自动生成的签名 2、自定义签名：手写或上传图片生成的签名 3、Ukey签名：使用Ukey中的数字证书和章面签署 4、移动签名：使用移动设备中存储的数字证书和章面进行签署 【传参】 取值范围：PersonalSeal_System（系统签名），PersonalSeal_Custom（自定义签名），PersonalSeal_Ukey（Ukey签名），PersonalSeal_Mobile（移动签名）；不传值默认为：用印流程配置。  【特殊说明】 仅对非预设签署方有效（非预设签署方：不是流程中预设的签署方，而是发起时接口添加的签署方）
	PersonalSealType string `json:"personalSealType,omitempty"`
	// 【是否全文浏览后才能签署】是否全文浏览后才能签署 【传参】 取值范围：true（需全文浏览），false（无需全文浏览）；不传值默认为：用印流程配置。 【特殊说明】 若为用印流程预设的签署方，将忽略该接口传参，使用流程预设配置
	ViewAllContract *bool `json:"viewAllContract,omitempty"`
	// 【是否每次需重新手写个人签名】是否每次需重新手写个人签名 【传参】 取值范围：true（每次重新手写），false（使用已有签名）；不传值默认为：用印流程配置。 【特殊说明】 1、签署方允许使用的签名类型要求中包括“自定义签名”时才会生效，如果指定使用个人名章或系统签名，则不生效 2、若为用印流程预设的签署方，将忽略该接口传参，使用流程预设配置
	NeedHandwrittenSeal *bool `json:"needHandwrittenSeal,omitempty"`
	// 【是否允许当面签】是否允许当面签 【作用】 实际签署场景中，可能个人接收方就在发起方对面（如线下开户场景），且不方便操作（如未携带手机时），个人接收方可以直接在发起方设备操作进行认证、签署 【传参】 取值范围：true（允许当面签），false（不允许当面签）；不传值默认为：用印流程配置。
	FaceSign *bool `json:"faceSign,omitempty"`
	// 【当面签设备】当面签设备    【作用】     个人签署方可使用的当面签设备     【传参】  取值范围：PC_MOBILE （电脑或手机），INTEGRATED_MACHINE （一体机）；不传值默认为：取用印流程配置。
	FaceSignMethod string `json:"faceSignMethod,omitempty"`
	// 【未实名用户确认签署时在一体机读取身份证】未实名用户确认签署时在一体机读取身份证   【作用】    未实名的用户可通过一体机读取身份证的方式获取姓名和证件号，指定是否必须读取身份    【传参】  取值范围：READ_ID_CARD（必须读取身份证信息），READ_ID_CARD_BY_SPONSOR （允许发起人操作跳过读取身份证）。
	ReadUserAuthInfoMethod string `json:"readUserAuthInfoMethod,omitempty"`
	// 【是否忽略remind参数并发送通知】是否忽略remind参数并发送通知 【作用】 1、/contract/createbycategory中可对签署方、签署节点传入remind参数控制是否需要发送签署通知，remind传入false时调用发送通知接口不会发送通知 2、此参数可设置忽略remind设置，仍然发送消息通知 【传参说明】 取值范围：true（忽略），false（不忽略）；不传值默认为false（不忽略）。
	NoticeIgnoreRemind *bool `json:"noticeIgnoreRemind,omitempty"`
	// 【文件浏览时长要求】 文件浏览时长要求 【作用】 控制签署方需要在浏览时长达到配置要求后，才能进行签署 【传参】 1、最小值：1（包含），最大值：200（包含）；不传值默认为：用印流程配置。 2、单位：秒。 3、传入1则代表至少需要浏览1s后，才能进行签署。 【特殊说明】 1、创建签署流程时，若用印流程预设签署方，将忽视接口传参，使用流程预设配置。后续可通过相关修改接口更改该值。
	ViewTime *int64 `json:"viewTime,omitempty"`
	// 【是否允许经办人修改签署节点】是否允许经办人修改签署节点 【作用】  通过此参数可控制接收方经办人，是否允许修改签署节点信息，包括组织签章节点的印章/签章人、个人签字的签批人 【传参】  取值范围： true（允许），false（不允许）；不传值默认为false（不允许）。
	ChangeSigner *bool `json:"changeSigner,omitempty"`
	// 【指定签字人备注】指定签字人备注 【作用】 为外部接收方添加个人签字节点时，可传入备注内容作为提示，例如传入“该文件需要您签字，麻烦您看一下”
	InviteRemark string `json:"inviteRemark,omitempty"`
	// 【统一社会信用代码】统一社会信用代码 【作用】 通过统一社会信用代码查询指定单位作为签署方 【传参】 1、同时传入统一社会信用代码、签署方名称时，按传入参数取交集查询指单位作为组织签署方。 2、统一社会信用代码和签署方名称查到多个单位时，将会报错。 3、统一社会信用代码和签署方名称找不到单位时，将会根据传入信息新建单位。 4、仅对外部法人单位生效
	CompanyRegisterNo string `json:"companyRegisterNo,omitempty"`
}

func (obj ContractSignurlSendRequest) GetUrl() string {
	return "/contract/signurl/send"
}

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