package v2seal_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 V2SealCreateRequest struct {
	// <ext>core:true</ext> 【印章形式】印章形式 【作用】 控制所制作的印章形式，支持的形式包含： 1、电子印章：章面和证书存储在服务器，签署时使用电子印章章面和云证书签署，并需要印章使用者进行确认 2、物理印章：使用物理硬件管控线下的实体印章，用印时需要获取用印码解锁章筒 3、Ukey印章：证书和章面存储在Ukey中，签署时必须插入Ukey设备，支持申请新的ukey，也支持插入已有ukey录入创建印章 4、移动印章：证书和章面存储在手机等移动设备中，签署时需要在移动设备进行授权 【传参】 取值范围：ELECTRONIC（电子印章），PHYSICS（物理印章），UKEY（Ukey印章），MOBILE（移动印章）。 【特殊说明】 若电子签章管理后台的【允许通过接口制作和管理印章】功能未开启，则调用此接口无效
	BusinessType string `json:"businessType,omitempty"`
	// <ext>core:true</ext> 【印章分类】印章分类 【作用】 控制所制作的印章分类，支持的分类包含： 1、单位印章：法人单位的印章，常用的有公章、财务章、合同章等，签署时使用单位证书 2、法定代表人章：单位的法定代表人的印章，由法定代表人管理，签署时使用法定代表人的证书 3、个人执业章：代表从业人员的执业资质，常用的有注册建造师执业印章、注册土木工程师执业印章等等，通常由单位代个人申请制作和管理，签署时使用个人数字证书。 【传参】 1、取值范围：COMPANY（单位印章），LP（法定代表人章），PRACTICE（个人执业章）；不传值默认为COMPANY（单位印章）。 2、当businessType（印章形式）传值为PHYSICS（物理印章），UKEY（Ukey印章），MOBILE（移动印章）时，不支持制作个人执业章。 【特殊说明】 若电子签章管理后台的【支持执业章制作和签署】功能未开启，则接口不允许制作个人执业章；
	SealType string `json:"sealType,omitempty"`
	// <ext>core:true</ext> 【印章创建方法】印章创建方法 【传参】 1、取值范围：upload（上传图片创建印章），auto（自动生成），page（获取创建印章页面链接）。 2、当sealType（印章分类）传值为PRACTICE（个人执业章）时，不支持auto（自动生成）。
	Method string `json:"method"`
	// <ext>deprecated:true</ext> 【印章分类】印章分类 【传参】 1、取值范围：PHYSICS（物理印章），LP（法定代表人章），ELECTRONIC（电子印章），PRACTICE（个人执业章）。 2、印章形式和印章分类必传其一，均传入以印章形式为准。
	Category string `json:"category,omitempty"`
	// <ext>core:true</ext> 【印章名称】印章名称
	Name string `json:"name"`
	// <ext>core:true</ext> 【第三方业务系统印章id】第三方业务系统印章id 【作用】 传入第三方业务系统中唯一印章id，方便后续进行印章查询 【传参】 最大长度：50。
	OpenSealId string                    `json:"openSealId,omitempty"`
	Department *common.DepartmentRequest `json:"department,omitempty"`
	Company    *common.Company           `json:"company"`
	// <ext>core:true</ext> 【印章类型名称】印章类型名称 【传参】 1、传入印章所属单位在电子签章前台【设置-印章类型设置】中启用的类型。 2、sealType（印章分类）为COMPANY（单位印章）时，印章类型名称必填。 3、sealType（印章分类）为LP（法定代表人章），PRACTICE（个人执业章）时，不需要传印章类型，如果传了类型，传入的类型无效。
	SealCategoryName string `json:"sealCategoryName,omitempty"`
	// 【印章自定义字段】印章自定义字段 【作用】 1、除印章类型、所属组织等基础信息以外，印章可能需要维护其他属性，例如保管部门、所用文种等 2、自定义字段可在电子签章前台配置，定义好后可通过该参数传入字段值
	SealCustomFields []*common.SealCustomField `json:"sealCustomFields,omitempty"`
	// <ext>core:true</ext> 【印章管理员】印章管理员 【作用】 1、管理员为电子签章系统的默认印章角色，初始包含以下权限项：管理（基本信息管理、章面修改、权限管理、印章审计、紧急用印、章筒更换印章、修改Ukey Pin码、启用、停用、删除、注销） 2、可通过此参数添加印章管理员，可设置管理员的人员、授权有效期、用印授权范围（若当前角色没有“用印”权限，则传入的用印授权范围不生效） 3、若用户不存在时，将会报错
	TempManagers []*common.SealTempPermissionRequest `json:"tempManagers,omitempty"`
	// <ext>deprecated:true</ext> 【印章管理员】印章管理员 【作用】 1、管理员为电子签章系统的默认印章角色，初始包含以下权限项：管理（基本信息管理、章面修改、权限管理、印章审计、紧急用印、章筒更换印章、修改Ukey Pin码、启用、停用、删除、注销） 2、通过此参数添加的印章管理员的授权有效期为“永久” 3、若用户不存在时，将会报错 【特殊说明】 1、若此参数未填写，默认取制章员角色人员、制章员不存在时报错 2、执业章的所有角色都需要加上持有人，若接口未传，生成印章后会自动添加
	Managers []*common.UserInfo `json:"managers,omitempty"`
	// <ext>core:true</ext> 【印章签章人】印章签章人 【作用】 1、签章人为电子签章系统的默认印章角色，初始包含以下权限项：用印 2、可通过此参数添加印章管理员，可设置管理员的人员、授权有效期、用印授权范围（若当前角色没有“用印”权限，则传入的用印授权范围不生效） 3、若用户不存在时，将会报错
	TempUsers []*common.SealTempPermissionRequest `json:"tempUsers,omitempty"`
	// <ext>deprecated:true</ext> 【印章签章人】印章签章人 【作用】 1、签章人为电子签章系统的默认印章角色，初始包含以下权限项：用印 2、通过此参数添加的印章签章人的授权有效期为“永久”、用印授权范围为“全部文件” 3、若用户不存在时，将会报错 【特殊说明】 1、若制作非执业章，使用者不填默认取印章管理员的值 2、若制作执业章，使用者只能是持有人，若接口传了其他人，不生效，将自动被修改为持有人。若接口未传，也会设置为持有人
	Users []*common.UserInfo `json:"users,omitempty"`
	// 【印章自定义角色】印章自定义角色 【作用】 1、除管理员、签章人这两个系统默认角色以外，印章可能需要维护其他角色，例如只拥有查看权限的保管员 2、自定义角色可在电子签章前台配置，定义好后可通过该角色传入授权人员 3、若用户不存在时，将会报错 【传参】 1、执业章的所有角色都需要加上持有人，若接口未传，生成印章后会自动添加 2、执业章中，拥有使用权限的角色只能为持有人，若接口传了其他人，不生效，将自动被修改为持有人
	SealDiyRoles []*common.SealDiyRoleRequest `json:"sealDiyRoles,omitempty"`
	// 【授权自动签的电子用印流程】授权自动签的电子用印流程 【作用】 1、系统可定义不同的用印流程用于发起并使用印章签署文件，例如采购、销售、公文。 2、每次签署电子文件时，签章人都需通过签署密码、验证码或人脸等方式验证真实签署意愿，确保文件签署的安全性和有效性。 3、但在某些用印流程中，要使用的印章和签署位置都是确定的，不需要由签章人进行手动签署和意愿校验，希望通过用印流程发起文件后，直接由系统自动加盖印章。 4、拥有【印章权限管理】权限的人员可授权用印流程使用印章进行自动签署，授权后，系统可自动将印章外观和数字证书加盖到文件中，无需进行额外的意愿校验。 5、如果希望停止用印流程的自动签署功能，也可以随时撤销授权。 【传参】 1、指定要授权自动签的用印流程id集合，传入ALL后授权所有用印流程 2、未传则不做修改
	CategoryIds []string `json:"categoryIds,omitempty"`
	// 【授权非签章人可用印的物理用印流程】授权非签章人可用印的物理用印流程 【作用】 1、组织的实体印章可以锁入印控设备中，同时可将物理印章可维护到电子签章系统中进行管理，并由对应的管理员指定签章人，签章人可以在审批通过后解锁印控设备使用物理印章用印。 2、电子签章系统支持定义不同的用印流程用于发起并使用物理印章对纸质文件进行用印，例如采购、销售、公文。 3、但是部分场景下签章人不固定，无法提前在物理印章中指定好用户并赋予物理印章的签章权限，需要由流程管理员或发起物理用印时才可确定对应的人员，此时由于此人员没有提前在物理印章中授予签章权限，所以无法用印。 4、可通过此参数对物理印章授权用印流程，授权后，用印流程的管理员可在流程中指定任意人员用印，即使用户没有物理印章签章权限。 【传参】 1、指定要授权非签章人可用印用印流程id集合，传入ALL后授权所有用印流程 2、未传则不做处理
	PhysicsCategoryIds []string                        `json:"physicsCategoryIds,omitempty"`
	PracticeSealHolder *common.UserInfoRequest         `json:"practiceSealHolder,omitempty"`
	PhysicalModel      *common.PhysicalModel           `json:"physicalModel,omitempty"`
	UkeyInfo           *common.OpenSealUKeyInfoRequest `json:"ukeyInfo,omitempty"`
	// <ext>core:true</ext> 【证书信息】证书信息 【作用】 满足以下条件时可为该电子印章申请一个新的印章证书 1、管理后台-自定义配置-【电子印章申请印章证书或绑定单位长期证书功能】开启 2、当前印章的signCheckType（签署校验方式）为NONE（签署人身份校验并使用云证书）或OTP_TOKEN（动态口令校验并使用云证书）且印章所属法人单位的RSA或SM2长期证书首次申请策略为手动申请，若均为手动申请则可申请两种算法的印章证书，若仅满足其中一种算法，则仅可申请对应算法的印章证书，仅可申请西部CA或上海CA证书
	ElectronicSealCertInfos []*common.OpenSealCertInfoRequest    `json:"electronicSealCertInfos,omitempty"`
	CertInfo                *common.OpenSealCertInfoRequest      `json:"certInfo,omitempty"`
	ReceiverInfo            *common.OrderSealReceiverInfoRequest `json:"receiverInfo,omitempty"`
	CustomSealAttribute     *common.CustomSealAttribute          `json:"customSealAttribute,omitempty"`
	// <ext>core:true;format:base64</ext> 【印章图片base64编码】印章图片base64编码 【作用】 用于上传本地印章图片作为系统印章的章面 【传参】 1、上传印章图片Base64编码。 2、method（印章创建方法）为upload（上传图片创建印章）时，此参数必传。 3、图片大小建议200k，分辨率600左右。
	UploadImage string `json:"uploadImage,omitempty"`
	// <ext>core:true</ext> 【印章规格】印章规格 【作用】 用于设置印章章面规格 【传参】 1、取值范围：CIRCULAR_60（圆形-直径60mm），CIRCULAR_58（圆形-直径58mm），CIRCULAR_50（圆形-直径50mm），CIRCULAR_46（圆形-直径46mm），CIRCULAR_45（圆形-直径45mm），CIRCULAR_44（圆形-直径44mm），CIRCULAR_43（圆形-直径43mm），CIRCULAR_42（圆形-直径42mm），CIRCULAR_41（圆形-直径41mm），CIRCULAR_40（圆形-直径40mm），CIRCULAR_39（圆形-直径39mm），CIRCULAR_38（圆形-直径38mm），CIRCULAR_37（圆形-直径37mm），CIRCULAR_36（圆形-直径36mm），CIRCULAR_35（圆形-直径35mm），CIRCULAR_34（圆形-直径34mm），CIRCULAR_30（圆形-直径30mm），CIRCULAR_27（圆形-直径27mm），CIRCULAR_23（圆形-直径23mm），CIRCULAR_21（圆形-直径21mm），CIRCULAR_20（圆形-直径20mm），CIRCULAR_19（圆形-直径19mm），CIRCULAR_14（圆形-直径14mm），OVAL_45_30（椭圆-45mm*30mm），OVAL_40_30（椭圆-40mm*30mm），OVAL_42_30（椭圆-42mm*30mm），OVAL_50_35（椭圆-50mm*35mm），OVAL_50_38（椭圆-50mm*38mm），OVAL_49_35（椭圆-49mm*35mm），OVAL_43_29（椭圆-43mm*29mm），OVAL_39_29（椭圆-39mm*29mm），OVAL_32_18（椭圆-32mm*18mm），SQUARE_14_14（正方形-边长14mm），SQUARE_16_16（正方形-边长16mm），SQUARE_18_18（正方形-边长18mm），SQUARE_19_19（正方形-边长19mm），SQUARE_20_20（正方形-边长20mm），SQUARE_21_21（正方形-边长21mm），SQUARE_22_22（正方形-边长22mm），SQUARE_24_24（正方形-边长24mm），SQUARE_25_25（正方形-边长25mm），SQUARE_55_55（正方形-边长55mm），SQUARE_38_38（正方形-边长38mm），RECTANGLE_60_5（长方形-60mm*5mm），RECTANGLE_50_30（长方形-50mm*30mm），RECTANGLE_50_20（长方形-50mm*20mm），RECTANGLE_48_10（长方形-48mm*10mm），RECTANGLE_33_28（长方形-33mm*28mm），RECTANGLE_40_16（长方形-40mm*16mm），RECTANGLE_40_10（长方形-40mm*10mm），RECTANGLE_40_20（长方形-40mm*20mm），RECTANGLE_72_25（长方形-72mm*25mm），RECTANGLE_61_21（长方形-61mm*21mm），RECTANGLE_65_35（长方形-65mm*35mm），RECTANGLE_60_30（长方形-60mm*30mm），RECTANGLE_55_32（长方形-55mm*32mm），RECTANGLE_25_10（长方形-25mm*10mm），RECTANGLE_24_12（长方形-24mm*12mm），RECTANGLE_67_30（长方形-67mm*30mm），RECTANGLE_26_10（长方形-26mm*10mm），RECTANGLE_58_18（长方形-58mm*18mm），RECTANGLE_18_58（长方形-18mm*58mm），RECTANGLE_80_60（长方形-80mm*60mm），RECTANGLE_80_32（长方形-80mm*32mm），ARCHIVES（档案章规格-默认2行3列）, CUSTOMIZE（长方形自定义规格），DIY_SPEC（自定义规格）。  2、当method（印章创建方法）传值为upload（上传图片创建印章）时，可选规格如下： 圆形：CIRCULAR_X（X为圆形直径，取值范围：60,58,50,46,45,44,43,42,41,40,39,38,37,36,35,34,30,27,23,20,21,19,14）。 椭圆：OVAL_X_Y（X和Y分别表示椭圆的长和宽，取值范围：45_30,40_30,42_30,50_35,50_38,49_35,43_29,39_29,45_30,32_18）。 正方形：SQUARE_X_X（X表示正方形的边长，取值范围：14_14,16_16,18_18,19_19,20_20,21_21,22_22,24_24,25_25,38_38,55_55）。  3、当method（印章创建方法）传值为auto（自动生成）时，可选规格根据sealCategoryType参数决定： （1）enterprise（公章）：CIRCULAR_38，CIRCULAR_40，CIRCULAR_42，CIRCULAR_45。 （2）specialWithStar（专用章-带五角星）、specialWithoutStar（专用章-不带五角星）：CIRCULAR_38，CIRCULAR_42，CIRCULAR_45。 （3）doublelineCirWithStar（双行文字圆章-带五角星）：CIRCULAR_42。 （4）communistWithText（党纪委公章-带下方文字）、communistWithoutText（党纪委公章-不带下方文字）：CIRCULAR_42，CIRCULAR_45。 （5）labour（工会公章）：CIRCULAR_42，CIRCULAR_45，CIRCULAR_46。 （6）youth（共青团章）：CIRCULAR_45，CIRCULAR_44，CIRCULAR_40。 （7）foreignCN（椭圆章-单排文字）、moreFootOval（椭圆章-多排文字）、foreignCNEN（外资企业公章-椭圆内环绕文字）、foreignOvalMoreFootCNEN（外资企业公章-椭圆内横排文字）：OVAL_45_30。 （9）doubleCirENCN（外资企业公章-圆形内环绕文字）、doubleCirDoubleLineENCN（外资企业公章-圆形内横排文字）：CIRCULAR_40，CIRCULAR_38，CIRCULAR_42，CIRCULAR_45。 （10）moreFootRectangle（长方形章-多排文字）：RECTANGLE_50_20。 （11）moreFootCircle（专用章-多排文字）：CIRCULAR_50。
	Spec            string                  `json:"spec,omitempty"`
	ElectronicModel *common.ElectronicModel `json:"electronicModel,omitempty"`
	// 【法定代表人章自定义规格（正方形）】法定代表人章自定义规格（正方形） 【作用】 用于制作法定代表人章时，自定义印章规格，仅支持制作正方形章面。 【传参】 1、diyspec_XX（XX为自定义正方形法人章的边长，范围1-200）。 2、当sealType（印章分类）为LP（法定代表人章），且method（印章创建方法）为auto（自动生成）时，spec或diySpec必传其一，均传入以spec为准。 3、当sealType（印章分类）为LP（法定代表人章），且method（印章创建方法）为upload（上传图片创建印章）时，spec、diySpec、electronicModel必传其一，均传入时的取值优先级（spec>diySpec>electronicModel）。请注意仅electronicModel可定义出长方形的法定代表人章章面。
	DiySpec string `json:"diySpec,omitempty"`
	// <ext>core:true</ext> 【是否开启印章雾化】是否开启印章雾化 【作用】 将印章图片虚化处理，防止截图盗用，仅在完成盖章后显示清晰图片 【传参】 取值范围：true（开启），false（关闭）；不传值默认为：true（开启）。
	OpenImageBlur *bool `json:"openImageBlur,omitempty"`
	// <ext>core:true</ext> 【印章创建初始状态】印章创建初始状态 【传参】 取值范围：NORMAL（启用），FREEZE（停用）；不传值默认为：NORMAL（启用）。 【特殊说明】 1、电子印章需在法人单位认证后才能启用，若法人单位未认证，则此参数传入“启用中”不生效 2、Ukey印章、移动印章制作之后需要激活或购买等操作步骤，故调用接口后无法控制初始状态
	SealCreateStatus string `json:"sealCreateStatus,omitempty"`
	// 【法定代表人章制作后是否通知法定代表人】法定代表人章制作后是否通知法定代表人 【作用】 制作法定代表人章且形式为电子印章后，此参数可控制是否短信/邮箱通知法定代表人 【传参】 取值范围：true（发送），false （不发送）；不传值默认为：false （不发送）。
	LpSendMessage *bool                   `json:"lpSendMessage,omitempty"`
	OperatorInfo  *common.UserInfoRequest `json:"operatorInfo"`
	// 【链接有效期】链接有效期 【作用】 1、用于设置获取到的链接在多长时间后过期 2、参数不传值时，链接有效期取电子签章管理后台设置的“接口页面默认有效期  3、参数传入时长超过电子签章管理后台设置的“接口页面最大有效期天数”时，将以后台设置的有效期为准 【传参】 1、最小值：1。单位：秒。 2、仅在method（印章创建方法）传值为page（获取创建印章页面链接）时适用。
	ExpireTime *int64 `json:"expireTime,omitempty"`
	// 【链接访问次数】链接访问次数 【作用】 1、限制链接访问次数，若超过次数则链接失效 2、若不传值，则访问次数无限制；若传入具体数值，则链接在访问所传具体值次数后失效，无法继续访问 【传参】 1、最小值：1。单位：次。 2、仅在method（印章创建方法）传值为page（获取创建印章页面链接）时适用。
	VisitNum *int64 `json:"visitNum,omitempty"`
	// 【是否可修改页面值】是否可修改页面值 【传参】 1、取值范围：true（可修改），false（不可修改）；不传值默认为：true（可修改）。 2、仅在method（印章创建方法）传值为page（获取创建印章页面链接）时适用。
	Modify *bool `json:"modify,omitempty"`
	// 【创建印章后跳转页面地址】创建印章后跳转页面地址 【作用】 1、完成创建印章操作时会跳转至传入地址，未传值时会停留在当前页面。 2、仅在method（印章创建方法）传值为page（获取创建印章页面链接）时适用。
	CallbackPage string `json:"callbackPage,omitempty"`
	// 【链接失效后跳转地址】链接失效后跳转地址 【作用】 1、当链接页面失败后页面自动跳转至指定地址（如：超过访问次数、链接已超过有效期）。 2、仅在method（印章创建方法）传值为page（获取创建印章页面链接）时适用。
	InvalidToPage string `json:"invalidToPage,omitempty"`
	// 【页面语言】页面语言 【作用】 1、用于指定链接页面使用的语言 2、英文和日文页面为付费功能，请确认开通英文版系统和日文版系统后使用 【传参】 1、取值范围：ZH_CN(中文)，EN_US(英文)，JP(日文)；不传值默认为：ZH_CN（中文）。 2、仅在method（印章创建方法）传值为page（获取创建印章页面链接）时适用。
	Language  string            `json:"language,omitempty"`
	PageStyle *common.PageStyle `json:"pageStyle,omitempty"`
	// <ext>core:true</ext> 【签署校验方式】签署校验方式 【作用】 1.指定该电子印章在签署时所需使用的校验方式 2.可在管理后台-印章设置-单位印章-印章管理设置-电子印章设置中设置的可选校验方式，设置后接口仅可传入支持的校验方式 【传参】 取值范围：NONE（签署人身份校验并使用云证书），OTP_TOKEN（动态口令校验并使用云证书），UKEY（Ukey校验并使用设备内证书）；不传值默认为NONE（签署人身份校验并使用云证书）。
	SignCheckType string `json:"signCheckType,omitempty"`
	// <ext>core:true</ext> 【绑定ukey】绑定ukey 【作用】 指定Ukey校验并使用设备内证书时，可传入ukey设备号。使用该印章需要使用绑定的ukey进行签署，需确保ukey内证书主体与印章所属法人单位一致。 【传参】 1.signCheckType（签署校验方式）为UKEY（Ukey校验并使用设备内证书）时，可传入当前参数绑定Ukey 2.可传入Ukey设备号，支持传入多个，传参方式为:[\"设备号1\",\"设备号2\"]。
	BindUkeys []string `json:"bindUkeys,omitempty"`
	// <ext>core:true</ext> 【绑定动态令牌】绑定动态令牌 【作用】 动态口令校验并使用云证书时，可传入动态令牌设备号。使用该印章需要使用绑定的动态令牌进行身份校验，签署时仍使用云证书进行签署。 【传参】 1.signCheckType（签署校验方式）为OTP_TOKEN（动态口令校验并使用云证书）时，可传入当前参数绑定动态令牌 2.传入动态令牌设备号以及过期时间，支持传入多个。
	BindOptTokens []*common.SealBindOtpToken `json:"bindOptTokens,omitempty"`
	// 【移动端页面导航头部】移动端页面导航头部 【作用】 1、移动端内嵌页面默认带有头部导航区域，且区域内提供返回按钮，嵌入其他app时会与app自带的导航头部区域航重复 2、可通过本参数控制签入移动端页面时是否提供头部导航区域 【传参】 取值范围：true（隐藏导航头部），false（显示导航头部）；不传值默认为：false（显示导航头部）。
	HideHeader *bool `json:"hideHeader,omitempty"`
}

func (obj V2SealCreateRequest) GetUrl() string {
	return "/v2/seal/create"
}

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