package v2contract_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 V2ContractListRequest struct {
	SignCompany *common.CompanyRequest `json:"signCompany,omitempty"`
	// <ext>core:true</ext> 【文件主题】文件主题
	Subject string `json:"subject,omitempty"`
	// <ext>core:true;deprecated:true</ext> 【用印流程id】用印流程id 【作用】 查询使用指定用印流程发起的电子签约文件 【传参】 该参数为旧参数，不建议传入，categoryId（用印流程id）和category（用印流程）均传入时以category为准
	CategoryId string               `json:"categoryId,omitempty"`
	Category   *common.CategoryInfo `json:"category,omitempty"`
	// <ext>core:true</ext> 【签署状态】签署状态 【传参】 取值范围： DRAFT（草稿），FILLING（拟定中），SIGNING（签署中），TERMINATING（作废中），COMPLETE（已完成包含强制结束），COMPLETEWITHOUTFINISHED(已完成不包含强制结束)，FINISHED(强制结束)，EXPIREING(即将截止签署)，REJECTED（已退回），RECALLED（已撤回），EXPIRED（已过期），TERMINATED（已作废）；不传值默认为：全部状态。
	Status  string                  `json:"status,omitempty"`
	Creator *common.UserInfoRequest `json:"creator,omitempty"`
	Signer  *common.UserInfoRequest `json:"signer,omitempty"`
	// <ext>core:true</ext> 【签署人的签署方类型】签署人的签署方类型 【作用】 1、查询指定个人用户签署的文件时，可指定查询其作为个人签署方或组织签署方的文件 2、例如传入签署人张三，传入签署人的签署方类型为个人签署方，则查询张三作为个人签署方签署的文件 【传参】 1、取值范围： COMPANY（组织签署方），PERSONAL（个人签署方）；不传值默认为：COMPANY（组织签署方）。 2、仅当signer（签署人）传参时生效。
	SignatoryType string `json:"signatoryType,omitempty"`
	// <ext>core:true;deprecated:true</ext> 【印章id】印章id 【作用】 查询使用指定印章签署的电子签约文件 【传参】 该参数为旧参数，不建议传入，sealId（印章id）和seal（印章）均传入时以seal为准
	SealId string                      `json:"sealId,omitempty"`
	Seal   *common.SealMultipleRequest `json:"seal,omitempty"`
	// <ext>core:true;format:date</ext> 【发起时间-起始】发起时间-起始 【作用】 查询指定时间区间内发起的电子签约文件 【传参】 1、日期格式：yyyy-MM-dd HH:mm:ss。 2、仅传入起始时间则查询从起始时间开始的所有文件，同时传入起始和结束时间则可查询该时间区间内的文件。
	CreateTimeStart string `json:"createTimeStart,omitempty"`
	// <ext>core:true;format:date</ext> 【发起时间-结束】发起时间-结束 【作用】 查询指定时间区间内发起的电子签约文件 【传参】 1、日期格式：yyyy-MM-dd HH:mm:ss。 2、仅传入结束时间则查询截止到结束时间的所有文件，同时传入起始和结束时间则可查询该时间区间内的文件。
	CreateTimeEnd string `json:"createTimeEnd,omitempty"`
	// <ext>core:true;format:date</ext> 【签署截止时间-起始】签署截止时间-起始 【作用】 1、查询指定时间区间内签署截止的电子签约文件 2、签署截止日期在创建电子签约时传入，若超过该日期，文件的所有签署方将不能进行文件签署，文件状态变为“已截止签署” 【传参】 1、日期格式：yyyy-MM-dd HH:mm:ss。 2、仅传入起始时间则查询从起始时间开始的所有文件，同时传入起始和结束时间则可查询该时间区间内的文件。
	ExpiredTimeStart string `json:"expiredTimeStart,omitempty"`
	// <ext>core:true;format:date</ext> 【签署截止时间-结束】签署截止时间-结束 【作用】 1、查询指定时间区间内签署截止的电子签约文件 2、签署截止日期在创建电子签约时传入，若超过该日期，文件的所有签署方将不能进行文件签署，文件状态变为“已截止签署” 【传参】 1、日期格式：yyyy-MM-dd HH:mm:ss。 2、仅传入结束时间则查询截止到结束时间的所有文件，同时传入起始和结束时间则可查询该时间区间内的文件。
	ExpiredTimeEnd string `json:"expiredTimeEnd,omitempty"`
	// <ext>core:true;format:date</ext> 【文件到期时间-起始】文件到期时间-起始 【作用】 1、查询指定时间区间内到期的电子签约文件 2、文件到期日期在创建电子签约时传入，即文件履行期限的截止日期，若超过此日期，文件将标记为“已到期” 【传参】 1、日期格式：yyyy-MM-dd HH:mm:ss。 2、仅传入起始时间则查询从起始时间开始的所有文件，同时传入起始和结束时间则可查询该时间区间内的文件。
	EndTimeStart string `json:"endTimeStart,omitempty"`
	// <ext>core:true;format:date</ext> 【文件到期时间-结束】文件到期时间-结束 【作用】 1、查询指定时间区间内到期的电子签约文件 2、文件到期日期在创建电子签约时传入，即文件履行期限的截止日期，若超过此日期，文件将标记为“已到期” 【传参】 1、日期格式：yyyy-MM-dd HH:mm:ss。 2、仅传入结束时间则查询截止到结束时间的所有文件，同时传入起始和结束时间则可查询该时间区间内的文件。
	EndTimeEnd string `json:"endTimeEnd,omitempty"`
	// <ext>core:true;format:date</ext> 【签署完成时间-起始】签署完成时间-起始 【作用】 查询指定时间区间内签署完成的电子签约文件 【传参】 1、日期格式：yyyy-MM-dd HH:mm:ss。 2、仅传入起始时间则查询从起始时间开始的所有文件，同时传入起始和结束时间则可查询该时间区间内的文件。
	CompleteTimeStart string `json:"completeTimeStart,omitempty"`
	// <ext>core:true;format:date</ext> 【签署完成时间-结束】签署完成时间-结束 【作用】 查询指定时间区间内签署完成的电子签约文件 【传参】 1、日期格式：yyyy-MM-dd HH:mm:ss。 2、仅传入结束时间则查询截止到结束时间的所有文件，同时传入起始和结束时间则可查询该时间区间内的文件。
	CompleteTimeEnd string `json:"completeTimeEnd,omitempty"`
	// <ext>core:true</ext> 【自定义字段】自定义字段 【作用】 根据文件在创建时传入的自定义字段值，筛选出自定义字段值关联的文件列表集合 【传参】 传入多个自定义字段时，则取各个字段均关联的文件列表集合
	CustomizeFields []*common.CustomizeFiled `json:"customizeFields,omitempty"`
	// 【查询开始位置】查询开始位置 【作用】 指定从哪条数据开始查询 【传参】 最小值：0（包含），最大值：无限制；不传值默认为：0。
	SelectOffset string `json:"selectOffset,omitempty"`
	// 【查询限制条数】查询限制条数 【作用】 限制本次查询返回的最大条数 【传参】 最小值：0（包含），最大值：无限制；不传值默认为：1000。
	SelectLimit string `json:"selectLimit,omitempty"`
	// 【返回数据的排序方式】返回数据的排序方式 【作用】 定义查询结果返回的排序方式 【传参】 取值范围：AES（升序），DESC（降序）；不传值默认为：DESC（降序）。
	OrderMode string `json:"orderMode,omitempty"`
}

func (obj V2ContractListRequest) GetUrl() string {
	return "/v2/contract/list"
}

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