package company_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 CompanyV2CreateRequest struct {
	// <ext>core:true</ext> 【法人单位名称】法人单位名称
	Name string `json:"name"`
	// <ext>core:true</ext> 【第三方业务系统法人单位id】第三方业务系统法人单位id 【作用】 与业务系统的法人单位唯一标识进行关联，便于后续的查询与管理
	OpenCompanyId string `json:"openCompanyId,omitempty"`
	// <ext>core:true</ext> 【法人单位代码】法人单位代码 【传参说明】 支持传入统一社会信用代码或工商注册号
	RegisterNo string `json:"registerNo,omitempty"`
	// <ext>core:true</ext> 【法定代表人/负责人】法定代表人/负责人 【传参说明】 营业执照上的法定代表人或负责人
	LegalPerson string `json:"legalPerson,omitempty"`
	// <ext>core:true</ext> 【是否是内部法人单位】法人单位类型 【作用】 用于区分是内部法人单位还是外部法人单位 【传参】 取值范围：true（内部法人单位），false（外部法人单位）；默认为：true（内部法人单位）。 【特殊说明】 创建内部法人单位时，会将该法人单位加入到平台方组织架构下，独立管理需要另外设置
	IsInner *bool `json:"isInner,omitempty"`
	// <ext>core:true</ext> 【法人单位自定义字段】法人单位自定义字段 【作用】 1、除法人单位名称、法定代表人姓名等基础信息，需要补充填写的法人单位的额外信息，用于后续区分。例如法人单位类型是供应商或经销商2、自定义字段可在电子签章管理后台统一定义或电子签章前台设置组织内法人单位的自定义属性，定义好后可通过该参数传入字段值
	CompanyCustomFields []*common.CompanyCustomField `json:"companyCustomFields,omitempty"`
	// 【是否开启计费】是否开启计费 【作用】 1、电子签章管理后台可在费用分摊功能中设置计费规则，对开启计费的外部单位收取相应的签署、证书、认证等费用，可通过此参数设置外部法人单位是否需要计费 2、费用分摊功能为付费功能，由lisence控制，需开通功能才可使用 【传参】 取值范围：true（开启计费），false（不开启计费）；不传值默认为：false（不开启计费）。
	Customer         *bool                                          `json:"customer,omitempty"`
	ParentDepartment *common.CompanyV2CreateParentDepartmentRequest `json:"parentDepartment,omitempty"`
	// <ext>core:true</ext> 【 法人单位印章管理员】 法人单位印章管理员 【作用】 指定用户管理当前法人单位所有印章，拥有法人单位印章的制作、管理以及审批权限。指定后将会通过姓名和证件号关联对应用户，并赋予相关权限 【传参】 1、管理员姓名，若需要指定则需要将管理员名称与管理员证件号一起填写 2、若电子签章系统设置了不允许直接配置印章权限，则接口传入的单位印章管理员不生效
	Authorizer string `json:"authorizer,omitempty"`
	// <ext>core:true</ext> 【法人单位印章管理员证件号】法人单位印章管理员证件号。 【作用】 传入姓名和证件号后，系统里相同信息的用户会被关联为单位印章管理员，管理当前法人单位所有印章，拥有印章制作、管理以及审批权限。 【传参】 1、管理员证件号，若需要指定则需要将管理员名称与管理员证件号一起填写。 2、证件号请填写准确，否则将无法自动匹配用户。 3、若电子签章系统设置了不允许直接配置印章权限，则接口传入的单位印章管理员证件号不生效。
	AuthorizerCardNo string `json:"authorizerCardNo,omitempty"`
	// <ext>core:true</ext> 【系统管理员姓名】系统管理员姓名 【作用】 用于指定外部法人单位的系统管理员，指定后，该用户可进行法人单位认证、组织架构管理、权限分配以及系统设置 【传参】 1、管理员姓名，若管理员不存在时，将以该姓名创建用户；若管理员未实名时，将以该姓名进行变更；若管理员已认证时，则忽略该姓名。 2、若是外部法人单位必填；内部法人单位无需填写，填写后不生效。
	Charger string `json:"charger,omitempty"`
	// <ext>core:true;format:phone</ext> 【系统管理手机号】系统管理手机号 【作用】 用于系统管理员账号登录 【传参】 1、若是外部单位，手机号或邮箱必传其一。 2、同时传入手机号及邮箱时，按手机号>邮箱的优先级进行查询，若手机号查询到用户，则对应用户关联至系统管理员角色，此时邮箱会忽略；若手机号未查询到用户，此时会根据邮箱查询，若邮箱查询到用户，则对应用户关联至系统管理员角色，此时手机号会忽略；若手机号与邮箱均未查询到用户，则会将姓名、手机号、邮箱创建新用户并关联至系统管理员角色。 3、手机号允许使用大陆、港澳台、国际手机号，手机号格式为：区号+空格+手机号，例：852 9xxxxxxx ，大陆手机号可以不传区号。
	Mobile string `json:"mobile,omitempty"`
	// <ext>core:true;format:email</ext> 【系统管理员邮箱】系统管理员邮箱 【作用】 用于系统管理员账号登录 【传参】 1、若是外部单位，手机号或邮箱必传其一。 2、同时传入手机号及邮箱时，按手机号>邮箱的优先级进行查询。若手机号查询到用户，则对应用户关联至系统管理员角色，此时邮箱会忽略；若手机号未查询到用户，此时会根据邮箱查询，若邮箱查询到用户，则对应用户关联至系统管理员角色，此时手机号会忽略；若手机号与邮箱均未查询到用户，则会将姓名、手机号、邮箱创建新用户并关联至系统管理员角色。 3、邮箱需传入符合格式的字符串，例：xxxxxxxx@163.com。
	Email string `json:"email,omitempty"`
	// 【是否发送认证通知】是否发送认证通知 【作用】 1、控制法人单位创建成功后，是否向接口传入的单位系统管理员联系方式发送短信或邮件通知进行认证 2、手机号与邮箱均传入时优先发送短信通知 【传参】 取值范围：false（不发送），true（发送）；不传值默认为：false（不发送）。
	Remind *bool `json:"remind,omitempty"`
	// 【是否信任第三方认证】是否信任第三方认证 【作用】 是否信任第三方认证可直接申请契约锁云证书 【传参说明】 不传则为否，传时是单位名称、代码、法定代表人必传（该参数需要隐藏，不在接口文档内体现）
	TrustThirdAuth *bool `json:"trustThirdAuth,omitempty"`
}

func (obj CompanyV2CreateRequest) GetUrl() string {
	return "/company/v2/create"
}

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