package company_request

import (
	"git.sxidc.com/student-physical-examination/contract_lock_sdk/http"
	"os"
)

type CompanyauthV2Request struct {
	// <ext>core:true</ext> 【认证模式】认证模式 【作用】 可控制法人单位是初次认证还是重复认证 1、false：即法人单位为初次认证，之前未在系统中进行过认证 2、true：即法人单位为重复认证，法人单位已经在系统中成功认证过，可能因为变名称或者变更法定代表人等原因需要重新认证 【传参】 取值范围：false（初次认证），true（重复认证）；不传值默认为：false（初次认证）。
	Repeat string `json:"repeat,omitempty"`
	// <ext>core:true;format:string</ext> 【法人单位id】法人单位id 【作用】 1、认证模式为初次认证时，可定位认证审核失败的法人单位，匹配成功后将以本次提交的认证信息继续进行认证。如果不是以上情况，初次认证时传入的法人单位id不生效。在这种场景下同时传入companyId（法人单位id）、openCompanyId（第三方业务系统法人单位id）时，则只取companyId进行匹配 2、认证模式为重复认证时，用于定位需要重复认证的法人单位 【传参】 repeat（认证模式）为true（重复认证）时必传。
	CompanyId *int64 `json:"companyId,omitempty"`
	// <ext>core:true</ext> 【认证方式】认证方式 【作用】 支持传入认证时需要使用的认证方式 【传参】 取值范围：1（法定代表人认证），2（正向打款认证），3（反向打款认证），4（项目部材料认证）。
	AuthType *int64 `json:"authType"`
	// <ext>core:true</ext> 【单位类型】单位类型 【作用】 1、企业：有限责任公司、股份有限公司、个人独资企业等请选择此类型  2、个体工商户 ：个体工商户请选择此类型 3、政府 :国务院或地方政府组成部门以及直属机构，例如外交部、海关、税务、民政局等请选择此类型 4、其他大陆组织：社会团体、民办非企业单位例如工会、妇联、工商联等请选择此类型 5、事业单位：教育、科技、文化、卫生、社会福利等请选择此类型 6、港澳台及海外组织 7、项目部 【传参】 取值范围：1（企业），2（个体工商户），3（政府），4（其他大陆组织），5（事业单位），6（港澳台及海外组织），7（项目部）。；不传值默认为：1（企业）。
	CompanyType *int64 `json:"companyType,omitempty"`
	// <ext>core:true</ext> 【地区】地区 【作用】 若认证单位不是大陆组织，请传入其所属地区，非大陆单位只能使用正向打款认证，其余认证方式暂不支持 【传参】 取值范围：CN（中国大陆），TW（中国台湾），HK（中国香港），MO（中国澳门），OTHER（其他国家/地区）；不传值默认为：CN（中国大陆）。
	Area string `json:"area,omitempty"`
	// <ext>core:true</ext> 【法人单位名称】法人单位名称 【作用】 1、请传入营业执照上的真实单位名称 2、如果是项目部认证，请传入项目部全称
	Name string `json:"name"`
	// <ext>core:true</ext> 【统一社会信用代码/工商注册号】统一社会信用代码/工商注册号 【作用】 1、请传入营业执照上的统一社会信用代码/工商注册号 2、如果是项目部认证，请传入项目部所属法人单位营业执照上的统一社会信用代码/工商注册号 3、若repeat（认证模式）为true（重复认证）时，统一社会信用代码不允许修改，该参数传值不生效
	RegisterNo string `json:"registerNo"`
	// <ext>core:true</ext> 【法定代表人姓名】法定代表人姓名 【作用】 请传入营业执照上的法定代表人姓名，若单位类型是个体工商户，请传入经营者姓名；若单位类型是项目部，请传入项目部所属法人单位的法定代表人姓名
	LegalPerson string `json:"legalPerson"`
	// <ext>core:true</ext> 【营业执照】营业执照 【作用】 请传入彩色原件或加盖公司公章的复印件；若单位类型是项目部，请传入项目部所属法人单位的营业执照 【传参】 支持的文件格式：jpg，jpeg，png，pdf。文件大小不超过10M。
	License *os.File `json:"license"`
	// <ext>core:true</ext> 【内外部单位】内外部单位 【作用】 若单位不存在时会创建单位，可通过该参数指定创建的单位为内部单位还是外部单位 1、INNER_COMPANY：即创建内部法人单位，为集团统一管理的内部单位 2、COMPANY：即创建外部法人单位 3、若单位已经存在，则该参数传值不生效 【传参】 取值范围：INNER_COMPANY（内部法人单位），COMPANY（外部法人单位）。
	TenantType string `json:"tenantType"`
	// <ext>core:true</ext> 【第三方业务系统法人单位id】第三方业务系统法人单位id 【作用】 1、可传入第三方业务系统法人单位id，不传值时会随机生成一个id，认证成功后该值会返回第三方业务系统； 2、若单位当前已有第三方业务系统法人单位id，则此参数传参不生效，也不会再生成一个新的id； 3、认证模式为初次认证时，可定位认证审核失败的法人单位，匹配成功后将以本次提交的认证信息继续进行认证。在这种场景下同时传入companyId（法人单位id）、openCompanyId（第三方业务系统法人单位id）时，则只取companyId进行匹配。
	OpenCompanyId string `json:"openCompanyId,omitempty"`
	// 【所在区域】所在区域 【作用】 用于业务系统对认证的法人单位进行标记，该信息会在认证通过后回调给业务系统
	Province string `json:"province,omitempty"`
	// <ext>core:true</ext> 【印章管理员姓名】印章管理员姓名 【作用】 若单位认证申请人无权限管理印章，可在此处输入实际的印章管理员姓名，认证通过后由印章管理员负责管理单位内的印章。不传值时默认取申请人作为印章管理员 【传参】 若authorizer（印章管理员姓名）与authorizerCardNo（印章管理员证件号）传入其一，则另一个字段也必传
	Authorizer string `json:"authorizer,omitempty"`
	// <ext>core:true</ext> 【印章管理证件号】印章管理员证件号 【作用】 若单位认证申请人无权限管理印章，可在此处输入实际的印章管理员证件号，认证通过后由印章管理员负责管理单位内的印章。不传值时默认取申请人作为印章管理员 【传参】 若authorizer（印章管理员姓名）与authorizerCardNo（印章管理员证件号）传入其一，则另一个字段也必传
	AuthorizerCardNo string `json:"authorizerCardNo,omitempty"`
	// <ext>core:true</ext> 【申请人姓名】申请人姓名 【作用】 即认证申请人姓名，用于记录申请认证的用户。若不单独传入印章管理员，则默认赋予申请人印章管理员的角色
	Charger string `json:"charger"`
	// <ext>core:true;format:phone</ext> 【申请人手机号】申请人手机号 【作用】 即认证申请人手机号，用于记录申请认证的用户。若不单独传入印章管理员，则默认赋予申请人印章管理员的角色 【传参】 1、手机号允许使用大陆、港澳台、国际手机号，手机号格式为：区号+空格+手机号，例：852 9xxxxxxx ，大陆手机号可以不传区号。 2、同时传入手机号及邮箱时，按手机号>邮箱的优先级进行查询，若手机号查询到用户，则对应用户认证完成后更新姓名、证件号，此时邮箱会忽略；若手机号未查询到用户，此时会根据邮箱查询，若邮箱查询到用户，则对应用户认证完成后更新姓名、证件号，此时手机号会忽略；若手机号与邮箱均未查询到用户，则会将手机号、邮箱创建新用户并在用户认证完成后更新姓名、证件号。
	Mobile string `json:"mobile,omitempty"`
	// <ext>core:true;format:email</ext> 【申请人邮箱】申请人邮箱 【作用】 即认证申请人邮箱，用于记录申请认证的用户。若不单独传入印章管理员，则默认赋予申请人印章管理员的角色 【传参】 1、邮箱需传入符合格式的字符串，例：xxxxxxxx@163.com。 2、同时传入手机号及邮箱时，按手机号>邮箱的优先级进行查询，若手机号查询到用户，则对应用户认证完成后更新姓名、证件号，此时邮箱会忽略；若手机号未查询到用户，此时会根据邮箱查询，若邮箱查询到用户，则对应用户认证完成后更新姓名、证件号，此时手机号会忽略；若手机号与邮箱均未查询到用户，则会将手机号、邮箱创建新用户并在用户认证完成后更新姓名、证件号。
	Email string `json:"email,omitempty"`
	// <ext>core:true</ext> 【法定代表人证件号】法定代表人证件号 【作用】 传入法定代表人证件号，用于核验法人真实身份，仅支持组织类型为企业和个体工商户时使用该方式 【传参】 若authType（认证方式）填写1（法定代表人认证），则该项必填
	LegalPersonId string `json:"legalPersonId,omitempty"`
	// <ext>core:true</ext> 【法定代表人手机号】法定代表人手机号 【作用】 请传入法定代表人手机号，用于给法人发送认证授权短信，法人收到短信后需要统一授权并完成身份核验 【传参】 1、手机号允许使用大陆、港澳台、国际手机号，手机号格式为：区号+空格+手机号，例：852 9xxxxxxx ，大陆手机号可以不传区号。 2、若用户不存在时，则创建用户，创建规则为：将传入的法定代表人手机号创建新用户。 3、若authType（认证方式）填写1（法定代表人认证），则该项必填。
	LegalPersonContact string `json:"legalPersonContact,omitempty"`
	// 【发送法人认证授权消息通知】发送法人认证授权消息通知 【作用】 当基本信息审核通过后，需要由法人进行认证授权，可配置是否给法定代表人发送短信消息通知 【传参】 取值范围：true（通知），false（不通知）；不传值默认为：false（不通知）
	RemindLegalSign string `json:"remindLegalSign,omitempty"`
	// <ext>core:true</ext> 【法定代表人证件类型】法定代表人证件类型 【作用】 支持指定法定代表人进行身核验时的证件类型 【传参】 取值范围：IDCARD（二代身份证），PASSPORT（护照），HKMP（港澳通行证），MTPS（台胞证）；不传值默认为：IDCARD（二代身份证）
	PaperType string `json:"paperType,omitempty"`
	// <ext>core:true</ext> 【认证授权书】认证授权书 【作用】 若选择对公打款、项目部材料认证的认证方式，为确保组织真实意愿，需要传入线下加盖公章的授权书，只能加盖法人单位公章，不支持财务章、合同章等。授权书模板可联系项目人员获取 【传参】 1、若authType（认证方式）填写2（正向打款认证）或 3（反向打款认证）或4（项目部材料认证），则认证授权书必传。 2、支持的文件格式：jpg，jpeg，png，pdf。文件大小不超过10M。
	OperAuthorization *os.File `json:"operAuthorization,omitempty"`
	// 【认证补充协议】认证补充协议 【作用】 如果存在单位认证时需要签署/盖章的补充协议，可联系电子签章平台厂商客服配置补充协议。配置完成后，单位认证时除了认证授权书外还需要签署补充协议进行才能完成认证。 【传参】 支持的文件格式：pdf。文件大小不超过50M
	SupplyAgreement *os.File `json:"supplyAgreement,omitempty"`
	// <ext>core:true</ext> 【授权期限】授权期限 【作用】 1、可传入授权到期时间，到达设置的授权期限后，组织机构认证将失效 2、不传值时默认为长期有效 3、若电子签章管理后台已经预设了单位认证有效期，则传入此参数无效 【传参】 日期格式：yyyy-MM-dd
	AuthEndTime string `json:"authEndTime,omitempty"`
	// 是否计费 【作用】 电子签章管理后台可对所有内部外部单位以及个人设置计费规则，收取相应的签署、证书、认证等费用，可标记单位是否计费 【传参】 取值范围：true（是），false（否）；不传值默认为：false(否)。
	Customer string `json:"customer,omitempty"`
	// <ext>core:true</ext> 【开户银行】开户银行 【作用】 请传入认证组织的对公账户的开户银行，民生银行需要传入具体支行，其余银行请直接传入总行 【传参】 若authType（认证方式）填写 3（反向打款认证），则该项必传。
	BankName string `json:"bankName,omitempty"`
	// <ext>core:true</ext> 【银行卡号】银行卡号 【作用】 请传入贵司对公账户的银行卡号 【传参】 若authType（认证方式）填写 3（反向打款认证），则该项必传。
	BankCardNo string `json:"bankCardNo,omitempty"`
	// <ext>core:true</ext> 【银行卡类型】银行卡类型 【作用】 仅支持对公账户打款 【传参】 取值范围：1（对公账户）；不传值默认为：1（对公账户）
	CardType *int64 `json:"cardType,omitempty"`
	// <ext>core:true</ext> 【证件照正面】证件照正面 【作用】 若选择项目部材料认证，需要上传项目部负责人的证件照正面 【传参】 1、若authType（认证方式）填写4（项目部材料认证），则证件照正面必传。 2、支持的文件格式：jpg，jpeg，png，pdf。文件大小不超过10M。
	FrontIDFile *os.File `json:"frontIDFile,omitempty"`
	// <ext>core:true</ext> 【证件照反面】证件照反面 【作用】 若选择项目部材料认证，需要上传项目部负责人的证件照反面 【传参】 1、若authType（认证方式）填写4（项目部材料认证），则证件照反面必传。 2、支持的文件格式：jpg，jpeg，png，pdf。文件大小不超过10M。
	BackIDFile *os.File `json:"backIDFile,omitempty"`
	// <ext>core:true</ext> 【项目部认证其他材料】项目部认证其他材料 【作用】 若选择项目部材料认证，需要上传项目部成立文件、项目部负责人任命书、项目部负责人授权书、项目部印章启用函等其他材料 【传参】 1、若authType（认证方式）填写4（项目部材料认证），则其他材料必传。 2、支持的文件格式：jpg，jpeg，png，pdf。文件大小不超过10M。
	OtherFiles []*os.File `json:"otherFiles,omitempty"`
	// 【法人单位创建成功是否通知】法人单位创建成功是否通知 【作用】 1、法人单位创建成功后，是否短信或邮件通知认证申请人，优先发送短信通知 2、若法人单位已经存在，则不发送该通知 【传参】 取值范围：false（不通知），true（通知）；不传值默认为：false（不通知）。
	Remind string `json:"remind,omitempty"`
}

func (obj CompanyauthV2Request) GetUrl() string {
	return "/companyauth/v2"
}

func (obj CompanyauthV2Request) GetHttpParameter() *http.HttpParameter {
	parameter := http.NewPostHttpParameter()
	parameter.AddParam("repeat", obj.Repeat)
	parameter.AddParam("companyId", obj.CompanyId)
	parameter.AddParam("authType", obj.AuthType)
	parameter.AddParam("companyType", obj.CompanyType)
	parameter.AddParam("area", obj.Area)
	parameter.AddParam("name", obj.Name)
	parameter.AddParam("registerNo", obj.RegisterNo)
	parameter.AddParam("legalPerson", obj.LegalPerson)
	parameter.AddParam("tenantType", obj.TenantType)
	parameter.AddParam("openCompanyId", obj.OpenCompanyId)
	parameter.AddParam("province", obj.Province)
	parameter.AddParam("authorizer", obj.Authorizer)
	parameter.AddParam("authorizerCardNo", obj.AuthorizerCardNo)
	parameter.AddParam("charger", obj.Charger)
	parameter.AddParam("mobile", obj.Mobile)
	parameter.AddParam("email", obj.Email)
	parameter.AddParam("legalPersonId", obj.LegalPersonId)
	parameter.AddParam("legalPersonContact", obj.LegalPersonContact)
	parameter.AddParam("remindLegalSign", obj.RemindLegalSign)
	parameter.AddParam("paperType", obj.PaperType)
	parameter.AddParam("authEndTime", obj.AuthEndTime)
	parameter.AddParam("customer", obj.Customer)
	parameter.AddParam("bankName", obj.BankName)
	parameter.AddParam("bankCardNo", obj.BankCardNo)
	parameter.AddParam("cardType", obj.CardType)
	parameter.AddParam("remind", obj.Remind)
	parameter.AddFiles("license", obj.License)
	parameter.AddFiles("operAuthorization", obj.OperAuthorization)
	parameter.AddFiles("supplyAgreement", obj.SupplyAgreement)
	parameter.AddFiles("frontIDFile", obj.FrontIDFile)
	parameter.AddFiles("backIDFile", obj.BackIDFile)
	parameter.AddListFiles("otherFiles", obj.OtherFiles)
	return parameter
}
