package contract_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 ContractQueryRequest struct {
	// <ext>core:true;inner-type:json<UserInfoRequest></ext> 【个人用户】个人用户 【作用】 指定需查询文件操作权限的个人用户 【传参】 1、若用户不存在时，将会报错。 2、参数必传其一，传入多个参数时只按参数中最高优先级查询，优先级为用户id>联系方式>手机号>邮箱>成员编号>证件号>第三方业务系统用户id>登录账号。
	UserInfo string `json:"userInfo,omitempty"`
	// <ext>core:true;format:string;deprecated:false</ext> 【签署文件状态】签署文件状态 【作用】 指定用户需查询的文件状态 【传参】 取值范围：TOTAL(全部)，DRAFT(草稿)，SIGNING(签署中)，REQUIRED(待我处理)，WAITING(待他人处理)，EXPIREING(即将截止签署)，EXPIRED(已截止签署)，COMPLETE(已完成)，REJECTED(已拒签)，RECALLED(已撤回)，ENDED(已到期)，CANCELLED（已作废），TRANSMIT(抄送我的)；不传值默认为：TOTAL（全部）
	ContractStatus string `json:"contractStatus,omitempty"`
	// <ext>core:true;format:string;deprecated:false</ext> 【用户联系方式】用户联系方式
	Contact string `json:"contact,omitempty"`
	// <ext>core:true;format:date;deprecated:false</ext> 【文件创建日期结束时间】文件创建日期结束时间 【作用】 查询到指定时间点前创建的文件 【传参】 格式：yyyy-MM-dd hh:mm:ss
	CreateTimeEnd  string                  `json:"createTimeEnd,omitempty"`
	UserInfoObject *common.UserInfoRequest `json:"userInfoObject,omitempty"`
	// <ext>core:true;format:string;deprecated:false</ext> 【查询限制条数】查询限制条数 【作用】 限制本次查询的最大条数 【传参】 最小值：0（包含），最大值：无限制；不传值默认为：100。
	SelectLimit *int64 `json:"selectLimit,omitempty"`
	// <ext>core:true;format:string;deprecated:false</ext> 【查询开始位置】查询开始位置 【作用】 指定从哪条数据开始查询 【传参】 最小值：0（包含），最大值：无限制；不传值默认为：0。
	SelectOffset *int64 `json:"selectOffset,omitempty"`
	// <ext>core:true;format:date;deprecated:false</ext> 【文件创建日期开始时间】文件创建日期开始时间 【作用】 查询从指定时间点开始创建的文件 【传参】 格式：yyyy-MM-dd hh:mm:ss
	CreateTimeStart string `json:"createTimeStart,omitempty"`
}

func (obj ContractQueryRequest) GetUrl() string {
	return "/contract/query"
}

func (obj ContractQueryRequest) GetHttpParameter() *http.HttpParameter {
	parameter := http.NewGetHttpParameter()
	parameter.AddParam("contractStatus", obj.ContractStatus)
	parameter.AddParam("contact", obj.Contact)
	parameter.AddParam("createTimeEnd", obj.CreateTimeEnd)
	parameter.AddParam("selectLimit", obj.SelectLimit)
	parameter.AddParam("selectOffset", obj.SelectOffset)
	parameter.AddParam("createTimeStart", obj.CreateTimeStart)
	if obj.UserInfoObject != nil {
		jsonBytes, _ := json.Marshal(obj.UserInfoObject)
		parameter.AddParam("userInfo", string(jsonBytes))
	} else {
		parameter.AddParam("userInfo", obj.UserInfo)
	}
	return parameter
}
