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 V2SealEditRequest struct {
	// <ext>core:true</ext> 【印章形式】印章形式 【传参】 取值范围：ELECTRONIC（电子印章），PHYSICS（物理印章），UKEY（Ukey印章），MOBILE（移动印章） 【特殊说明】 1、印章形式和category至少传一个，两个都传时以印章形式优先； 2、若电子签章控制台不允许通过接口管理印章，则调用此接口无效
	BusinessType string `json:"businessType,omitempty"`
	// <ext>core:true</ext> 【印章分类】印章分类 【传参】 取值范围：COMPANY（单位印章），LP（法定代表人章），PRACTICE（个人执业章） 【特殊说明】 未传时默认单位印章
	SealType string `json:"sealType,omitempty"`
	// <ext>deprecated:true</ext> 【印章分类】印章分类 【传参】 1、取值范围：PHYSICS（物理印章），LP（法定代表人章），ELECTRONIC（电子印章），PRACTICE（个人执业章）。 2、印章形式和category至少传一个，两个都传时以印章形式优先。
	Category string `json:"category,omitempty"`
	// <ext>core:true</ext> 【印章修改方式】印章修改方式 【传参】 1、取值范围：upload（上传自定义图片方式修改），auto（通过自动生成章面方式修改），base （印章基本信息修改），page（页面方式修改印章），change_edit（部分替换），change_all（全量替换）。 2、当sealType（印章分类）为LP（法定代表人章）时，仅支持base；若businessType（印章形式）为PHYSICS（物理印章）时，以上参数均支持。 3、当sealType（印章分类）为PRACTICE（个人执业章）时，不支持auto（通过自动生成章面方式修改）。
	Method      string                 `json:"method"`
	SealRequest *common.SealRequest    `json:"sealRequest,omitempty"`
	Company     *common.CompanyRequest `json:"company,omitempty"`
	// <ext>core:true</ext> 【印章类型名称】印章类型名称 【传参】 1、传入印章所属单位在电子签章前台【设置-印章类型设置】中启用的类型。 2、sealType（印章分类）为LP（法定代表人章），PRACTICE（个人执业章）时，不需要传印章类型，如果传了类型，传入的类型无效。
	SealCategoryName string `json:"sealCategoryName,omitempty"`
	// <ext>core:true</ext> 【新印章名称】新印章名称
	Name string `json:"name,omitempty"`
	// <ext>core:true</ext> 【新第三方业务系统印章id】新第三方业务系统印章id
	OpenSealId string                    `json:"openSealId,omitempty"`
	Department *common.DepartmentRequest `json:"department,omitempty"`
	// 【印章自定义字段】印章自定义字段 【作用】 1、除印章类型、所属组织等基础信息以外，印章可能需要维护其他属性，例如保管部门、所用文种等 2、自定义字段可在电子签章前台配置，定义好后可通过该参数传入字段值或修改字段值 【传参】 仅在method（印章修改方式）为base （印章基本信息修改）时适用。
	SealCustomFields []*common.SealCustomFieldCreate `json:"sealCustomFields,omitempty"`
	// <ext>core:true;deprecated:true</ext> 【全量替换印章管理员】全量替换印章管理员 【传参】 1、仅在method（印章修改方式）为base时适用。 2、当sealType（印章分类）为LP（法定代表人章）时，不支持修改印章管理员。 3、执业章管理员必须包含持有人，若接口未传持有人，会自动添加。 4、若用户不存在时，将会报错
	Managers []*common.UserInfo `json:"managers,omitempty"`
	// <ext>core:true;deprecated:true</ext> 【全量替换印章签章人】全量替换印章签章人 【传参】 1、仅在method（印章修改方式）为base时适用。 2、当sealType（印章分类）为LP（法定代表人章）、PRACTICE（个人执业章）时，不支持修改印章管理员。 3、若用户不存在时，将会报错
	Users []*common.UserInfo `json:"users,omitempty"`
	// <ext>core:true</ext> 【印章自定义角色】印章自定义角色 【特殊说明】 1、修改方式为base、change时适用； 2、印章分类为法定代表人章时，不适用； 3、执业章的角色必须包含持有人，若全量替换时，接口未传持有人，修改权限时会自动添加持有人；拥有使用权限的角色只能为持有人，若接口传了其他人，不生效，将自动被修改为持有人。 4、若用户不存在时，将会报错
	SealDiyRoles []*common.SealDiyRoleRequest `json:"sealDiyRoles,omitempty"`
	// 【授权自动签的电子用印流程】授权自动签的电子用印流程 【作用】 1、系统可定义不同的用印流程用于发起并使用印章签署文件，例如采购、销售、公文。 2、每次签署电子文件时，签章人都需通过签署密码、验证码或人脸等方式验证真实签署意愿，确保文件签署的安全性和有效性。 3、但在某些用印流程中，要使用的印章和签署位置都是确定的，不需要由签章人进行手动签署和意愿校验，希望通过用印流程发起文件后，直接由系统自动加盖印章。 4、拥有【印章权限管理】权限的人员可授权用印流程使用印章进行自动签署，授权后，系统可自动将印章外观和数字证书加盖到文件中，无需进行额外的意愿校验。 5、如果希望停止用印流程的自动签署功能，也可以随时撤销授权。 【传参】 1、指定要授权自动签的用印流程id集合，传入NULL后清空所有授权，传入ALL后授权所有用印流程 2、未传则不做修改 3、该参数仅在method（印章修改方式）参数传入base （印章基本信息修改），page（页面方式修改印章），change_edit（部分替换），change_all（全量替换）时生效。
	CategoryIds []string `json:"categoryIds,omitempty"`
	// 【授权非签章人可用印的物理用印流程】授权非签章人可用印的物理用印流程 【作用】 1、组织的实体印章可以锁入印控设备中，同时可将物理印章可维护到电子签章系统中进行管理，并由对应的管理员指定签章人，签章人可以在审批通过后解锁印控设备使用物理印章用印。 2、电子签章系统支持定义不同的用印流程用于发起并使用物理印章对纸质文件进行用印，例如采购、销售、公文。 3、物理用印流程中可以指定对应的用印人，但是部分场景下签章人不固定，或无法提前在物理印章中指定好签章人，需要由流程管理员或发起物理用印时才可确定对应的用印人，此时这个用印人可能是没有物理印章使用权限的签章人，所以物理印章可以授权用印流程中指定的用印人进行用印。 4、将物理印章授权用印流程后，用印流程的管理员可在流程中指定任意人员用印，即使用户没有印章签章权限。 【传参】 1、指定要授权非签章人可用印用印流程id集合，传入NULL后清空所有授权，传入ALL后授权所有用印流程 2、未传则不做处理 3、该参数仅在method（印章修改方式）参数传入base （印章基本信息修改），page（页面方式修改印章），change_edit（部分替换），change_all（全量替换）时生效。
	PhysicsCategoryIds     []string                       `json:"physicsCategoryIds,omitempty"`
	SealChangeUsersRequest *common.SealChangeUsersRequest `json:"sealChangeUsersRequest,omitempty"`
	PhysicalModel          *common.PhysicalModel          `json:"physicalModel,omitempty"`
	CustomSealAttribute    *common.CustomSealAttribute    `json:"customSealAttribute,omitempty"`
	// <ext>core:true</ext> 【印章规格】印章规格 【作用】 用于上传图片或自动生成方式修改电子印章时，选择印章规格 【传参】 取值范围：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（自定义规格） 【传参说明】 1、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） 2、当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。 【特殊说明】 单位印章使用upload方式修改章面时，spec非必传，为空取原印章规格
	Spec            string                  `json:"spec,omitempty"`
	ElectronicModel *common.ElectronicModel `json:"electronicModel,omitempty"`
	// 【是否开启印章雾化】是否开启印章雾化 【作用】 将印章图片虚化处理，防止截图盗用，仅在完成盖章后显示清晰图片 【传参】 取值范围：true（开启），false（关闭）；不传值默认为：true（开启）。
	OpenImageBlur *bool                   `json:"openImageBlur,omitempty"`
	OperatorInfo  *common.UserInfoRequest `json:"operatorInfo"`
	// 【页面完成后的跳转链接】页面完成后的跳转链接 【说明】 页面完成后的跳转链接，仅method为page时适用
	CallbackPage string `json:"callbackPage,omitempty"`
	// 【链接访问次数】链接访问次数 【作用】 1、限制链接访问次数，若超过次数则链接失效 2、若不传值，则访问次数无限制；若传入具体数值，则链接在访问所传具体值次数后失效，无法继续访问 【传参】 1、最小值：1。单位：次。 2、仅在method（印章修改方式）传值为page（页面方式修改印章）时适用。
	VisitNum *int64 `json:"visitNum,omitempty"`
	// 【链接有效期】链接有效期 【作用】 1、用于设置获取到的链接在多长时间后过期 2、参数不传值时，链接有效期取电子签章管理后台设置的“接口页面默认有效期  3、参数传入时长超过电子签章管理后台设置的“接口页面最大有效期天数”时，将以后台设置的有效期为准 【传参】 1、最小值：1。单位：秒。 2、仅在method（印章修改方式）传值为page（页面方式修改印章）时适用。
	ExpireTime *int64 `json:"expireTime,omitempty"`
	// 【变更印章后跳转页面地址】变更印章后跳转页面地址 【作用】 1、完成变更印章操作时会跳转至传入地址，未传值时会停留在当前页面 2、仅在method（印章修改方式）传值为page（页面方式修改印章）时适用。
	InvalidToPage string            `json:"invalidToPage,omitempty"`
	PageStyle     *common.PageStyle `json:"pageStyle,omitempty"`
	// 【页面语言】页面语言 【作用】 1、用于指定链接页面使用的语言 2、英文和日文页面为付费功能，请确认开通英文版系统和日文版系统后使用 【传参】 1、取值范围：ZH_CN(中文)，EN_US(英文)，JP(日文)；不传值默认为：ZH_CN（中文）。 2、仅在method（印章修改方式）传值为page（页面方式修改印章）时适用。
	Language string `json:"language,omitempty"`
	// 【是否可修改页面值】是否可修改页面值 【传参】 1、取值范围：true（可修改），false（不可修改）；不传值默认为：true（可修改） 2、仅在method（印章修改方式）传值为page（页面方式修改印章）时适用。
	Modify *bool `json:"modify,omitempty"`
	// 【移动端页面导航头部】移动端页面导航头部 【作用】 1、移动端内嵌页面默认带有头部导航区域，且区域内提供返回按钮，嵌入其他app时会与app自带的导航头部区域航重复 2、可通过本参数控制签入移动端页面时是否提供头部导航区域 【传参】 取值范围：true（隐藏导航头部），false（显示导航头部）；不传值默认为：false（显示导航头部）。
	HideHeader *bool `json:"hideHeader,omitempty"`
}

func (obj V2SealEditRequest) GetUrl() string {
	return "/v2/seal/edit"
}

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