package seal_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 SealApplyMulitiplebycategoryRequest struct {
	// <ext>core:true</ext> 【用印流程id】用印流程id 【作用】 根据用印流程id查询用印流程。使用此流程发起用印申请，发起后按流程的设置进行审批、用印等操作 【传参】 用印流程id和用印流程名称必传其一，同时传入以用印流程id为准。
	CategoryId *int64 `json:"categoryId,omitempty"`
	// <ext>core:true</ext> 【用印流程名称】用印流程名称 【作用】 根据用印流程名称查询用印流程。使用此流程发起用印申请，发起后按流程的设置进行审批、用印等操作 【传参】 用印流程id和用印流程名称必传其一，同时传入以用印流程id为准。
	CategoryName string `json:"categoryName,omitempty"`
	// 【用印申请所属单位名称】用印申请所属单位名称 【作用】 根据用印申请的所属单位，查询单位所属的平台方或独立管理组织。将该用印申请记录为对应的平台方或独立管理组织发起 【传参】 不传值时，默认为平台方。
	TenantName string `json:"tenantName,omitempty"`
	// <ext>core:true</ext> 【事项标题】事项标题 【作用】 传入用印申请的标题，以区分申请的主要内容，方便查看或管理 【传参】 最大长度500字符。 【特殊说明】 在用印流程-【高级配置】中可设置事项标题生成规则：①若设置为按规则自动生成，则接口传入的值无效；②若设置为发起人自定义，则以接口传入的值生效
	Subject string `json:"subject"`
	// <ext>core:true</ext> 【编号】编号 【作用】 用印申请的编号，方便对申请进行查询、管理 【特殊说明】 用印流程-高级配置中可设置【事项标题生成规则】：①若设置为不开启，或按规则自动生成，则接口传入的无效；②若设置为发起人自定义，则按接口传入的生效。③设置为必填时，此参数必传
	SerialNo          string                        `json:"serialNo,omitempty"`
	ApplyerUser       *common.UserInfoRequest       `json:"applyerUser"`
	ApplyerUserConfig *common.UserInfoRequestConfig `json:"applyerUserConfig,omitempty"`
	// <ext>deprecated:true</ext> 【申请人姓名】申请人姓名
	ApplyerName string `json:"applyerName,omitempty"`
	// <ext>deprecated:true</ext> 【申请人联系方式】申请人联系方式 【传参方式】 联系方式允许使用：手机号、电子邮箱 手机号允许使用国际手机号手机号，手机号格式为：区号+空格+手机号，例：852 9xxxxxxx ，大陆手机号可以不传区号
	ApplyerContact string `json:"applyerContact,omitempty"`
	// <ext>deprecated:true</ext> 【申请人员工编号】申请人员工编号 【特殊说明】 联系方式与员工编号二选一必传
	ApplyerNumber string `json:"applyerNumber,omitempty"`
	// 【流程指定印章的用印次数】流程指定印章的用印次数 【作用】 1、当用印流程中指定了印章时，通过此参数统一设置印章的用印次数。无需再传入流程指定的印章信息 2、当流程指定的印章需要分别设置用印次数时，请在auths（用印信息）中分别传入每个印章信息及用印次数 【传参】 最小值：1（包含）。单位：次。
	Count *int64 `json:"count,omitempty"`
	// <ext>core:true</ext> 【用印信息】用印信息 【作用】 传入申请用印的印章，及其用印次数。 【传参】 用印流程【用印节点设置】中，可设置指定印章的方式，不同方式下此参数生效规则不同： 1、申请人指定印章时，本参数必传，以传入印章为准。 2、审批人指定印章时，本参数不生效。 3、流程中指定印章时，本参数必传，若传入的印章与流程指定的印章不完全相同，则仅按照本参数传入的印章为准；未传入印章，则必须传入count（流程指定印章的用印次数），将流程指定的印章统一设置用印次数。
	Auths []*common.SealApplyMulitiplebycategoryAuthsRequest `json:"auths,omitempty"`
	// <ext>core:true</ext>  【用印信息-惠朗一体机模式】用印信息-惠朗一体机模式  【作用】  1、可传入需申请用印的印章，及印章用印次数、签章人、用印时间  2、仅限于使用惠朗打印盖章一体的模式下使用。 【特殊说明】 本参数为接入惠朗一体机时使用，为付费功能，请在惠朗打印盖章一体机功能开启时使用
	PatternAuths []*common.PatternAuthsWithCategory `json:"patternAuths,omitempty"`
	// <ext>core:true</ext> 【用印文档id集合】用印文档id集合 【作用】 作为用印申请中的用印文档 【传参】 传入多个文档id用“,”隔开。
	Documents []int64 `json:"documents,omitempty"`
	// <ext>core:true</ext> 【使用事由】使用事由 【作用】 使用事由用于备注申请原因、用印要求等内容 【传参】 最大长度3000字符。
	Description string `json:"description,omitempty"`
	// 【第三方审批节点】第三方审批节点 【作用】 将第三方系统的审批人、审批时间、审批意见等信息在用印详情中展示
	FlowNodes []*common.ThirdFlowNode `json:"flowNodes,omitempty"`
	// <ext>core:true</ext> 【第三方表单】第三方表单 【作用】 将第三方系统中的用印相关字段展示在用印申请中，方便参与人查看。例如合同金额、客户联系方式等字段 【传参】 key为字段名，value为字段值。支持传入多组字段的key/value。
	Forms []*common.Form `json:"forms,omitempty"`
	// 【用印完成回调地址】用印完成回调地址 【作用】 用印申请中，所有印章全部用印完成时，向该地址回调 【特殊说明】 1、此参数传入的回调地址优先级最低，当其他回调未配置“用印完成回调”时，才触发此回调 2、回调优先级为前台用印流程中配置的回调>后台物理硬件管理中配置的回调>后台应用中配置的回调>接口传入的回调
	CallbackUrl string `json:"callbackUrl,omitempty"`
	// 【指定审批人】指定审批人 【作用】 用于指定审批节点中的审批人 【特殊说明】 审批节点必须由用印流程设置为【允许指定审批人】，本参数才生效
	SealApplyAuditorInfos []*common.SealApplyMulitiplebycategorySealApplyAuditorInfosRequest `json:"sealApplyAuditorInfos,omitempty"`
	// 【删除审批节点】删除审批节点 【作用】 传入用印流程预设的审批节点名称，删除此审批节点 【传参】 多个审批节点名称用“,”隔开。 【特殊说明】 仅用印流程设置了【发起时允许删除】的审批节点，才能通过接口删除
	DeleteAuditNodeNames []string `json:"deleteAuditNodeNames,omitempty"`
	// <ext>core:true</ext> 【自定义字段】自定义字段 【作用】 1、除事项标题、编号等基础信息，不同场景的用印申请需要填写的字段信息可能不同。例如发起采购合同可能需要填写金额，发起人事合同可能需要填写员工岗位。可通过自定义字段，在申请中增加业务相关的字段 2、自定义字段可在电子签章后台统一定义或在物理用印流程中根据业务定义，定义好后通过该参数传入字段值
	CustomizeFields []*common.CustomizeFiled `json:"customizeFields,omitempty"`
	// <ext>core:true</ext> 【是否添加员工】是否添加员工 【作用】 传入未加入组织申请人时，是否加入到对应法人单位下面。 【传参】 取值范围：true（添加），false（不添加）；不传值默认为：true（添加）。
	AddEmployee *bool `json:"addEmployee,omitempty"`
}

func (obj SealApplyMulitiplebycategoryRequest) GetUrl() string {
	return "/seal/apply/mulitipleByCategory"
}

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