content: /*
   * 支付宝开放平台API
   * 支付宝开放平台v3协议文档
   *
   * The version of the OpenAPI document: 2025-08-26
   * 
   *
   * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
   * https://openapi-generator.tech
   * Do not edit the class manually.
   */
  
  
  package com.alipay.v3.model;
  
  import java.util.Objects;
  import java.util.Arrays;
  import com.google.gson.TypeAdapter;
  import com.google.gson.annotations.JsonAdapter;
  import com.google.gson.annotations.SerializedName;
  import com.google.gson.stream.JsonReader;
  import com.google.gson.stream.JsonWriter;
  import io.swagger.annotations.ApiModel;
  import io.swagger.annotations.ApiModelProperty;
  import java.io.IOException;
  
  import com.google.gson.Gson;
  import com.google.gson.GsonBuilder;
  import com.google.gson.JsonArray;
  import com.google.gson.JsonDeserializationContext;
  import com.google.gson.JsonDeserializer;
  import com.google.gson.JsonElement;
  import com.google.gson.JsonObject;
  import com.google.gson.JsonParseException;
  import com.google.gson.TypeAdapterFactory;
  import com.google.gson.reflect.TypeToken;
  
  import java.lang.reflect.Type;
  import java.util.HashMap;
  import java.util.HashSet;
  import java.util.Map;
  import java.util.Map.Entry;
  import java.util.Set;
  
  import com.alipay.v3.JSON;
  
  /**
   * JobWorthPositionInfo
   */
  @javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen")
  public class JobWorthPositionInfo {
    public static final String SERIALIZED_NAME_AGE = "age";
    @SerializedName(SERIALIZED_NAME_AGE)
    private String age;
  
    public static final String SERIALIZED_NAME_BENEFIT = "benefit";
    @SerializedName(SERIALIZED_NAME_BENEFIT)
    private String benefit;
  
    public static final String SERIALIZED_NAME_CERTIFICATIONS = "certifications";
    @SerializedName(SERIALIZED_NAME_CERTIFICATIONS)
    private String certifications;
  
    public static final String SERIALIZED_NAME_COMPANY_CERTIFICATE = "company_certificate";
    @SerializedName(SERIALIZED_NAME_COMPANY_CERTIFICATE)
    private String companyCertificate;
  
    public static final String SERIALIZED_NAME_COMPANY_LOGO_AFTS_ID = "company_logo_afts_id";
    @SerializedName(SERIALIZED_NAME_COMPANY_LOGO_AFTS_ID)
    private String companyLogoAftsId;
  
    public static final String SERIALIZED_NAME_COMPANY_NAME = "company_name";
    @SerializedName(SERIALIZED_NAME_COMPANY_NAME)
    private String companyName;
  
    public static final String SERIALIZED_NAME_COUNT = "count";
    @SerializedName(SERIALIZED_NAME_COUNT)
    private Integer count;
  
    public static final String SERIALIZED_NAME_EDUCATION = "education";
    @SerializedName(SERIALIZED_NAME_EDUCATION)
    private String education;
  
    public static final String SERIALIZED_NAME_GENDER = "gender";
    @SerializedName(SERIALIZED_NAME_GENDER)
    private String gender;
  
    public static final String SERIALIZED_NAME_KA_POSITION_ID = "ka_position_id";
    @SerializedName(SERIALIZED_NAME_KA_POSITION_ID)
    private String kaPositionId;
  
    public static final String SERIALIZED_NAME_POSITION_DESC = "position_desc";
    @SerializedName(SERIALIZED_NAME_POSITION_DESC)
    private String positionDesc;
  
    public static final String SERIALIZED_NAME_POSITION_ID = "position_id";
    @SerializedName(SERIALIZED_NAME_POSITION_ID)
    private String positionId;
  
    public static final String SERIALIZED_NAME_POSITION_JOB_ID = "position_job_id";
    @SerializedName(SERIALIZED_NAME_POSITION_JOB_ID)
    private String positionJobId;
  
    public static final String SERIALIZED_NAME_POSITION_JOB_NAME = "position_job_name";
    @SerializedName(SERIALIZED_NAME_POSITION_JOB_NAME)
    private String positionJobName;
  
    public static final String SERIALIZED_NAME_POSITION_PROFESSION_ID = "position_profession_id";
    @SerializedName(SERIALIZED_NAME_POSITION_PROFESSION_ID)
    private String positionProfessionId;
  
    public static final String SERIALIZED_NAME_POSITION_PROPERTY = "position_property";
    @SerializedName(SERIALIZED_NAME_POSITION_PROPERTY)
    private String positionProperty;
  
    public static final String SERIALIZED_NAME_POSITION_STATUS = "position_status";
    @SerializedName(SERIALIZED_NAME_POSITION_STATUS)
    private String positionStatus;
  
    public static final String SERIALIZED_NAME_POSITION_TITLE = "position_title";
    @SerializedName(SERIALIZED_NAME_POSITION_TITLE)
    private String positionTitle;
  
    public static final String SERIALIZED_NAME_SALARY_MAX = "salary_max";
    @SerializedName(SERIALIZED_NAME_SALARY_MAX)
    private String salaryMax;
  
    public static final String SERIALIZED_NAME_SALARY_MIN = "salary_min";
    @SerializedName(SERIALIZED_NAME_SALARY_MIN)
    private String salaryMin;
  
    public static final String SERIALIZED_NAME_SALARY_TYPE = "salary_type";
    @SerializedName(SERIALIZED_NAME_SALARY_TYPE)
    private String salaryType;
  
    public static final String SERIALIZED_NAME_SALARY_UNIT = "salary_unit";
    @SerializedName(SERIALIZED_NAME_SALARY_UNIT)
    private String salaryUnit;
  
    public static final String SERIALIZED_NAME_SKILL_TAG = "skill_tag";
    @SerializedName(SERIALIZED_NAME_SKILL_TAG)
    private String skillTag;
  
    public static final String SERIALIZED_NAME_SKIP_URL = "skip_url";
    @SerializedName(SERIALIZED_NAME_SKIP_URL)
    private String skipUrl;
  
    public static final String SERIALIZED_NAME_WORK_CITY = "work_city";
    @SerializedName(SERIALIZED_NAME_WORK_CITY)
    private String workCity;
  
    public static final String SERIALIZED_NAME_WORK_LONGITUDE = "work_longitude";
    @SerializedName(SERIALIZED_NAME_WORK_LONGITUDE)
    private String workLongitude;
  
    public static final String SERIALIZED_NAME_WORK_REGION = "work_region";
    @SerializedName(SERIALIZED_NAME_WORK_REGION)
    private String workRegion;
  
    public static final String SERIALIZED_NAME_WORK_YEAR = "work_year";
    @SerializedName(SERIALIZED_NAME_WORK_YEAR)
    private String workYear;
  
    public JobWorthPositionInfo() { 
    }
  
    public JobWorthPositionInfo age(String age) {
      
      this.age = age;
      return this;
    }
  
     /**
     * 职位要求-年龄要求 无要求（不传）、28岁以上(OVER28)、40岁以下(BELOW40)、25岁～35岁(25TO35)
     * @return age
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "OVER28", value = "职位要求-年龄要求 无要求（不传）、28岁以上(OVER28)、40岁以下(BELOW40)、25岁～35岁(25TO35)")
  
    public String getAge() {
      return age;
    }
  
  
    public void setAge(String age) {
      this.age = age;
    }
  
  
    public JobWorthPositionInfo benefit(String benefit) {
      
      this.benefit = benefit;
      return this;
    }
  
     /**
     * 福利，现有标签，最多5个标签，使用英文,分割 参考 https://www.yuque.com/docs/share/805e9840-ae9d-499c-b566-46b3b8c9fb2d?# 《4.1 服务端接入----职位传入接口》的1.3.1.1
     * @return benefit
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "五险一金,双休", value = "福利，现有标签，最多5个标签，使用英文,分割 参考 https://www.yuque.com/docs/share/805e9840-ae9d-499c-b566-46b3b8c9fb2d?# 《4.1 服务端接入----职位传入接口》的1.3.1.1")
  
    public String getBenefit() {
      return benefit;
    }
  
  
    public void setBenefit(String benefit) {
      this.benefit = benefit;
    }
  
  
    public JobWorthPositionInfo certifications(String certifications) {
      
      this.certifications = certifications;
      return this;
    }
  
     /**
     * 技能、证书等要求，比如学历、健康证、普通话或其他技能证书等
     * @return certifications
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "特种工作证,健康证", value = "技能、证书等要求，比如学历、健康证、普通话或其他技能证书等")
  
    public String getCertifications() {
      return certifications;
    }
  
  
    public void setCertifications(String certifications) {
      this.certifications = certifications;
    }
  
  
    public JobWorthPositionInfo companyCertificate(String companyCertificate) {
      
      this.companyCertificate = companyCertificate;
      return this;
    }
  
     /**
     * 发布企业统一社会信用代码
     * @return companyCertificate
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "91330200750364874C", value = "发布企业统一社会信用代码")
  
    public String getCompanyCertificate() {
      return companyCertificate;
    }
  
  
    public void setCompanyCertificate(String companyCertificate) {
      this.companyCertificate = companyCertificate;
    }
  
  
    public JobWorthPositionInfo companyLogoAftsId(String companyLogoAftsId) {
      
      this.companyLogoAftsId = companyLogoAftsId;
      return this;
    }
  
     /**
     * 上传的aftsid
     * @return companyLogoAftsId
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "xxxx", value = "上传的aftsid")
  
    public String getCompanyLogoAftsId() {
      return companyLogoAftsId;
    }
  
  
    public void setCompanyLogoAftsId(String companyLogoAftsId) {
      this.companyLogoAftsId = companyLogoAftsId;
    }
  
  
    public JobWorthPositionInfo companyName(String companyName) {
      
      this.companyName = companyName;
      return this;
    }
  
     /**
     * 企业工商全称
     * @return companyName
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "杭州希德利餐饮管理有限公司", value = "企业工商全称")
  
    public String getCompanyName() {
      return companyName;
    }
  
  
    public void setCompanyName(String companyName) {
      this.companyName = companyName;
    }
  
  
    public JobWorthPositionInfo count(Integer count) {
      
      this.count = count;
      return this;
    }
  
     /**
     * 招聘人数
     * @return count
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "8", value = "招聘人数")
  
    public Integer getCount() {
      return count;
    }
  
  
    public void setCount(Integer count) {
      this.count = count;
    }
  
  
    public JobWorthPositionInfo education(String education) {
      
      this.education = education;
      return this;
    }
  
     /**
     * 学历要求,HIGHSCHOOL_AND_BELOW（高中及以下），POLYTECHNIC（中专），COLLEGE（大专），BACHELOR（本科），MASTER（硕士），DOCTOR_AND_ABOVE（博士及以上）
     * @return education
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "BACHELOR", value = "学历要求,HIGHSCHOOL_AND_BELOW（高中及以下），POLYTECHNIC（中专），COLLEGE（大专），BACHELOR（本科），MASTER（硕士），DOCTOR_AND_ABOVE（博士及以上）")
  
    public String getEducation() {
      return education;
    }
  
  
    public void setEducation(String education) {
      this.education = education;
    }
  
  
    public JobWorthPositionInfo gender(String gender) {
      
      this.gender = gender;
      return this;
    }
  
     /**
     * 无要求（不传）、男或者女
     * @return gender
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "男", value = "无要求（不传）、男或者女")
  
    public String getGender() {
      return gender;
    }
  
  
    public void setGender(String gender) {
      this.gender = gender;
    }
  
  
    public JobWorthPositionInfo kaPositionId(String kaPositionId) {
      
      this.kaPositionId = kaPositionId;
      return this;
    }
  
     /**
     * 合作方岗位id自定义保持唯一性
     * @return kaPositionId
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "20881234567", value = "合作方岗位id自定义保持唯一性")
  
    public String getKaPositionId() {
      return kaPositionId;
    }
  
  
    public void setKaPositionId(String kaPositionId) {
      this.kaPositionId = kaPositionId;
    }
  
  
    public JobWorthPositionInfo positionDesc(String positionDesc) {
      
      this.positionDesc = positionDesc;
      return this;
    }
  
     /**
     * 长文本描述
     * @return positionDesc
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "职位描述", value = "长文本描述")
  
    public String getPositionDesc() {
      return positionDesc;
    }
  
  
    public void setPositionDesc(String positionDesc) {
      this.positionDesc = positionDesc;
    }
  
  
    public JobWorthPositionInfo positionId(String positionId) {
      
      this.positionId = positionId;
      return this;
    }
  
     /**
     * 工作证岗位库的职位主键，只有更新职位信息时需要传入。第一次传入岗位后返回
     * @return positionId
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "123456789012345678901234", value = "工作证岗位库的职位主键，只有更新职位信息时需要传入。第一次传入岗位后返回")
  
    public String getPositionId() {
      return positionId;
    }
  
  
    public void setPositionId(String positionId) {
      this.positionId = positionId;
    }
  
  
    public JobWorthPositionInfo positionJobId(String positionJobId) {
      
      this.positionJobId = positionJobId;
      return this;
    }
  
     /**
     * 岗位对应的行业id，字段参考https://www.yuque.com/docs/share/805e9840-ae9d-499c-b566-46b3b8c9fb2d?# 《4.1 服务端接入----职位传入接口》的1.3.1.2
     * @return positionJobId
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "5378A2C2001", value = "岗位对应的行业id，字段参考https://www.yuque.com/docs/share/805e9840-ae9d-499c-b566-46b3b8c9fb2d?# 《4.1 服务端接入----职位传入接口》的1.3.1.2")
  
    public String getPositionJobId() {
      return positionJobId;
    }
  
  
    public void setPositionJobId(String positionJobId) {
      this.positionJobId = positionJobId;
    }
  
  
    public JobWorthPositionInfo positionJobName(String positionJobName) {
      
      this.positionJobName = positionJobName;
      return this;
    }
  
     /**
     * 岗位对应的职业名称
     * @return positionJobName
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "服务端开发工程师", value = "岗位对应的职业名称")
  
    public String getPositionJobName() {
      return positionJobName;
    }
  
  
    public void setPositionJobName(String positionJobName) {
      this.positionJobName = positionJobName;
    }
  
  
    public JobWorthPositionInfo positionProfessionId(String positionProfessionId) {
      
      this.positionProfessionId = positionProfessionId;
      return this;
    }
  
     /**
     * 岗位对应的职业id，字段参考https://www.yuque.com/docs/share/805e9840-ae9d-499c-b566-46b3b8c9fb2d?# 《4.1 服务端接入----职位传入接口》的1.3.1.2
     * @return positionProfessionId
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "5278A2C2", value = "岗位对应的职业id，字段参考https://www.yuque.com/docs/share/805e9840-ae9d-499c-b566-46b3b8c9fb2d?# 《4.1 服务端接入----职位传入接口》的1.3.1.2")
  
    public String getPositionProfessionId() {
      return positionProfessionId;
    }
  
  
    public void setPositionProfessionId(String positionProfessionId) {
      this.positionProfessionId = positionProfessionId;
    }
  
  
    public JobWorthPositionInfo positionProperty(String positionProperty) {
      
      this.positionProperty = positionProperty;
      return this;
    }
  
     /**
     * 岗位属性：全职(FULL_TIME)或者兼职(PART_TIME)
     * @return positionProperty
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "FULL_TIME", value = "岗位属性：全职(FULL_TIME)或者兼职(PART_TIME)")
  
    public String getPositionProperty() {
      return positionProperty;
    }
  
  
    public void setPositionProperty(String positionProperty) {
      this.positionProperty = positionProperty;
    }
  
  
    public JobWorthPositionInfo positionStatus(String positionStatus) {
      
      this.positionStatus = positionStatus;
      return this;
    }
  
     /**
     * 职位的状态，只有上架(UNCHECK)和下架(OFFLINE)两种
     * @return positionStatus
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "UNCHECK", value = "职位的状态，只有上架(UNCHECK)和下架(OFFLINE)两种")
  
    public String getPositionStatus() {
      return positionStatus;
    }
  
  
    public void setPositionStatus(String positionStatus) {
      this.positionStatus = positionStatus;
    }
  
  
    public JobWorthPositionInfo positionTitle(String positionTitle) {
      
      this.positionTitle = positionTitle;
      return this;
    }
  
     /**
     * 短文本描述
     * @return positionTitle
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "日结洗碗工", value = "短文本描述")
  
    public String getPositionTitle() {
      return positionTitle;
    }
  
  
    public void setPositionTitle(String positionTitle) {
      this.positionTitle = positionTitle;
    }
  
  
    public JobWorthPositionInfo salaryMax(String salaryMax) {
      
      this.salaryMax = salaryMax;
      return this;
    }
  
     /**
     * 薪水范围，不能低于salary_min
     * @return salaryMax
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "3000", value = "薪水范围，不能低于salary_min")
  
    public String getSalaryMax() {
      return salaryMax;
    }
  
  
    public void setSalaryMax(String salaryMax) {
      this.salaryMax = salaryMax;
    }
  
  
    public JobWorthPositionInfo salaryMin(String salaryMin) {
      
      this.salaryMin = salaryMin;
      return this;
    }
  
     /**
     * 薪水范围，不能高于salary_max
     * @return salaryMin
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "2000", value = "薪水范围，不能高于salary_max")
  
    public String getSalaryMin() {
      return salaryMin;
    }
  
  
    public void setSalaryMin(String salaryMin) {
      this.salaryMin = salaryMin;
    }
  
  
    public JobWorthPositionInfo salaryType(String salaryType) {
      
      this.salaryType = salaryType;
      return this;
    }
  
     /**
     * 薪资类型：日结(DAY)、月结(MONTH)、周结(WEEK)、完工结(DONE)、其他(OTHER)
     * @return salaryType
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "DAY", value = "薪资类型：日结(DAY)、月结(MONTH)、周结(WEEK)、完工结(DONE)、其他(OTHER)")
  
    public String getSalaryType() {
      return salaryType;
    }
  
  
    public void setSalaryType(String salaryType) {
      this.salaryType = salaryType;
    }
  
  
    public JobWorthPositionInfo salaryUnit(String salaryUnit) {
      
      this.salaryUnit = salaryUnit;
      return this;
    }
  
     /**
     * 薪资单位，元/日(DAY)、元/次(TIME)、元/月(MONTH)、元/小时(HOUR)、元/件 (NUM)、元/周 (WEEK)、其他 (OTHER)
     * @return salaryUnit
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "DAY", value = "薪资单位，元/日(DAY)、元/次(TIME)、元/月(MONTH)、元/小时(HOUR)、元/件 (NUM)、元/周 (WEEK)、其他 (OTHER)")
  
    public String getSalaryUnit() {
      return salaryUnit;
    }
  
  
    public void setSalaryUnit(String salaryUnit) {
      this.salaryUnit = salaryUnit;
    }
  
  
    public JobWorthPositionInfo skillTag(String skillTag) {
      
      this.skillTag = skillTag;
      return this;
    }
  
     /**
     * 岗位需要的技能标签，最多5个，使用英文逗号分割
     * @return skillTag
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "java,linux", value = "岗位需要的技能标签，最多5个，使用英文逗号分割")
  
    public String getSkillTag() {
      return skillTag;
    }
  
  
    public void setSkillTag(String skillTag) {
      this.skillTag = skillTag;
    }
  
  
    public JobWorthPositionInfo skipUrl(String skipUrl) {
      
      this.skipUrl = skipUrl;
      return this;
    }
  
     /**
     * 职位跳转链接，当前只支持支付宝小程序，也就是alipays://platformapi/ 开头
     * @return skipUrl
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "alipays://platformapi/startapp?", value = "职位跳转链接，当前只支持支付宝小程序，也就是alipays://platformapi/ 开头")
  
    public String getSkipUrl() {
      return skipUrl;
    }
  
  
    public void setSkipUrl(String skipUrl) {
      this.skipUrl = skipUrl;
    }
  
  
    public JobWorthPositionInfo workCity(String workCity) {
      
      this.workCity = workCity;
      return this;
    }
  
     /**
     * 高德city code，例：北京010，线上工作9999 参考https://www.yuque.com/docs/share/805e9840-ae9d-499c-b566-46b3b8c9fb2d?# 《4.1 服务端接入----职位传入接口》的1.3.1.3
     * @return workCity
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "010", value = "高德city code，例：北京010，线上工作9999 参考https://www.yuque.com/docs/share/805e9840-ae9d-499c-b566-46b3b8c9fb2d?# 《4.1 服务端接入----职位传入接口》的1.3.1.3")
  
    public String getWorkCity() {
      return workCity;
    }
  
  
    public void setWorkCity(String workCity) {
      this.workCity = workCity;
    }
  
  
    public JobWorthPositionInfo workLongitude(String workLongitude) {
      
      this.workLongitude = workLongitude;
      return this;
    }
  
     /**
     * 经纬度，前面是经度，后面是纬度，使用英文逗号隔开
     * @return workLongitude
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "116.396574,39.992706", value = "经纬度，前面是经度，后面是纬度，使用英文逗号隔开")
  
    public String getWorkLongitude() {
      return workLongitude;
    }
  
  
    public void setWorkLongitude(String workLongitude) {
      this.workLongitude = workLongitude;
    }
  
  
    public JobWorthPositionInfo workRegion(String workRegion) {
      
      this.workRegion = workRegion;
      return this;
    }
  
     /**
     * 工作地所在的区县,使用高德的adcode，例：朝阳区110105 参考https://www.yuque.com/docs/share/805e9840-ae9d-499c-b566-46b3b8c9fb2d?# 《4.1 服务端接入----职位传入接口》的1.3.1.2
     * @return workRegion
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "110105", value = "工作地所在的区县,使用高德的adcode，例：朝阳区110105 参考https://www.yuque.com/docs/share/805e9840-ae9d-499c-b566-46b3b8c9fb2d?# 《4.1 服务端接入----职位传入接口》的1.3.1.2")
  
    public String getWorkRegion() {
      return workRegion;
    }
  
  
    public void setWorkRegion(String workRegion) {
      this.workRegion = workRegion;
    }
  
  
    public JobWorthPositionInfo workYear(String workYear) {
      
      this.workYear = workYear;
      return this;
    }
  
     /**
     * 工作年限，1年以下（ONE）、1～3年（THREE）、3～5年（FIVE）、5～10年（TEN）、10年以上（OVER_TEN）
     * @return workYear
    **/
    @javax.annotation.Nullable
    @ApiModelProperty(example = "TEN", value = "工作年限，1年以下（ONE）、1～3年（THREE）、3～5年（FIVE）、5～10年（TEN）、10年以上（OVER_TEN）")
  
    public String getWorkYear() {
      return workYear;
    }
  
  
    public void setWorkYear(String workYear) {
      this.workYear = workYear;
    }
  
    /**
     * A container for additional, undeclared properties.
     * This is a holder for any undeclared properties as specified with
     * the 'additionalProperties' keyword in the OAS document.
     */
    private Map<String, Object> additionalProperties;
  
    /**
     * Set the additional (undeclared) property with the specified name and value.
     * If the property does not already exist, create it otherwise replace it.
     *
     * @param key name of the property
     * @param value value of the property
     * @return the JobWorthPositionInfo instance itself
     */
    public JobWorthPositionInfo putAdditionalProperty(String key, Object value) {
      if (this.additionalProperties == null) {
          this.additionalProperties = new HashMap<String, Object>();
      }
      this.additionalProperties.put(key, value);
      return this;
    }
  
    /**
     * Return the additional (undeclared) property.
     *
     * @return a map of objects
     */
    public Map<String, Object> getAdditionalProperties() {
      return additionalProperties;
    }
  
    /**
     * Return the additional (undeclared) property with the specified name.
     *
     * @param key name of the property
     * @return an object
     */
    public Object getAdditionalProperty(String key) {
      if (this.additionalProperties == null) {
          return null;
      }
      return this.additionalProperties.get(key);
    }
  
  
    @Override
    public boolean equals(Object o) {
      if (this == o) {
        return true;
      }
      if (o == null || getClass() != o.getClass()) {
        return false;
      }
      JobWorthPositionInfo jobWorthPositionInfo = (JobWorthPositionInfo) o;
      return Objects.equals(this.age, jobWorthPositionInfo.age) &&
          Objects.equals(this.benefit, jobWorthPositionInfo.benefit) &&
          Objects.equals(this.certifications, jobWorthPositionInfo.certifications) &&
          Objects.equals(this.companyCertificate, jobWorthPositionInfo.companyCertificate) &&
          Objects.equals(this.companyLogoAftsId, jobWorthPositionInfo.companyLogoAftsId) &&
          Objects.equals(this.companyName, jobWorthPositionInfo.companyName) &&
          Objects.equals(this.count, jobWorthPositionInfo.count) &&
          Objects.equals(this.education, jobWorthPositionInfo.education) &&
          Objects.equals(this.gender, jobWorthPositionInfo.gender) &&
          Objects.equals(this.kaPositionId, jobWorthPositionInfo.kaPositionId) &&
          Objects.equals(this.positionDesc, jobWorthPositionInfo.positionDesc) &&
          Objects.equals(this.positionId, jobWorthPositionInfo.positionId) &&
          Objects.equals(this.positionJobId, jobWorthPositionInfo.positionJobId) &&
          Objects.equals(this.positionJobName, jobWorthPositionInfo.positionJobName) &&
          Objects.equals(this.positionProfessionId, jobWorthPositionInfo.positionProfessionId) &&
          Objects.equals(this.positionProperty, jobWorthPositionInfo.positionProperty) &&
          Objects.equals(this.positionStatus, jobWorthPositionInfo.positionStatus) &&
          Objects.equals(this.positionTitle, jobWorthPositionInfo.positionTitle) &&
          Objects.equals(this.salaryMax, jobWorthPositionInfo.salaryMax) &&
          Objects.equals(this.salaryMin, jobWorthPositionInfo.salaryMin) &&
          Objects.equals(this.salaryType, jobWorthPositionInfo.salaryType) &&
          Objects.equals(this.salaryUnit, jobWorthPositionInfo.salaryUnit) &&
          Objects.equals(this.skillTag, jobWorthPositionInfo.skillTag) &&
          Objects.equals(this.skipUrl, jobWorthPositionInfo.skipUrl) &&
          Objects.equals(this.workCity, jobWorthPositionInfo.workCity) &&
          Objects.equals(this.workLongitude, jobWorthPositionInfo.workLongitude) &&
          Objects.equals(this.workRegion, jobWorthPositionInfo.workRegion) &&
          Objects.equals(this.workYear, jobWorthPositionInfo.workYear)&&
          Objects.equals(this.additionalProperties, jobWorthPositionInfo.additionalProperties);
    }
  
    @Override
    public int hashCode() {
      return Objects.hash(age, benefit, certifications, companyCertificate, companyLogoAftsId, companyName, count, education, gender, kaPositionId, positionDesc, positionId, positionJobId, positionJobName, positionProfessionId, positionProperty, positionStatus, positionTitle, salaryMax, salaryMin, salaryType, salaryUnit, skillTag, skipUrl, workCity, workLongitude, workRegion, workYear, additionalProperties);
    }
  
    @Override
    public String toString() {
      StringBuilder sb = new StringBuilder();
      sb.append("class JobWorthPositionInfo {\n");
      sb.append("    age: ").append(toIndentedString(age)).append("\n");
      sb.append("    benefit: ").append(toIndentedString(benefit)).append("\n");
      sb.append("    certifications: ").append(toIndentedString(certifications)).append("\n");
      sb.append("    companyCertificate: ").append(toIndentedString(companyCertificate)).append("\n");
      sb.append("    companyLogoAftsId: ").append(toIndentedString(companyLogoAftsId)).append("\n");
      sb.append("    companyName: ").append(toIndentedString(companyName)).append("\n");
      sb.append("    count: ").append(toIndentedString(count)).append("\n");
      sb.append("    education: ").append(toIndentedString(education)).append("\n");
      sb.append("    gender: ").append(toIndentedString(gender)).append("\n");
      sb.append("    kaPositionId: ").append(toIndentedString(kaPositionId)).append("\n");
      sb.append("    positionDesc: ").append(toIndentedString(positionDesc)).append("\n");
      sb.append("    positionId: ").append(toIndentedString(positionId)).append("\n");
      sb.append("    positionJobId: ").append(toIndentedString(positionJobId)).append("\n");
      sb.append("    positionJobName: ").append(toIndentedString(positionJobName)).append("\n");
      sb.append("    positionProfessionId: ").append(toIndentedString(positionProfessionId)).append("\n");
      sb.append("    positionProperty: ").append(toIndentedString(positionProperty)).append("\n");
      sb.append("    positionStatus: ").append(toIndentedString(positionStatus)).append("\n");
      sb.append("    positionTitle: ").append(toIndentedString(positionTitle)).append("\n");
      sb.append("    salaryMax: ").append(toIndentedString(salaryMax)).append("\n");
      sb.append("    salaryMin: ").append(toIndentedString(salaryMin)).append("\n");
      sb.append("    salaryType: ").append(toIndentedString(salaryType)).append("\n");
      sb.append("    salaryUnit: ").append(toIndentedString(salaryUnit)).append("\n");
      sb.append("    skillTag: ").append(toIndentedString(skillTag)).append("\n");
      sb.append("    skipUrl: ").append(toIndentedString(skipUrl)).append("\n");
      sb.append("    workCity: ").append(toIndentedString(workCity)).append("\n");
      sb.append("    workLongitude: ").append(toIndentedString(workLongitude)).append("\n");
      sb.append("    workRegion: ").append(toIndentedString(workRegion)).append("\n");
      sb.append("    workYear: ").append(toIndentedString(workYear)).append("\n");
      sb.append("    additionalProperties: ").append(toIndentedString(additionalProperties)).append("\n");
      sb.append("}");
      return sb.toString();
    }
  
    /**
     * Convert the given object to string with each line indented by 4 spaces
     * (except the first line).
     */
    private String toIndentedString(Object o) {
      if (o == null) {
        return "null";
      }
      return o.toString().replace("\n", "\n    ");
    }
  
  
    public static HashSet<String> openapiFields;
    public static HashSet<String> openapiRequiredFields;
  
    static {
      // a set of all properties/fields (JSON key names)
      openapiFields = new HashSet<String>();
      openapiFields.add("age");
      openapiFields.add("benefit");
      openapiFields.add("certifications");
      openapiFields.add("company_certificate");
      openapiFields.add("company_logo_afts_id");
      openapiFields.add("company_name");
      openapiFields.add("count");
      openapiFields.add("education");
      openapiFields.add("gender");
      openapiFields.add("ka_position_id");
      openapiFields.add("position_desc");
      openapiFields.add("position_id");
      openapiFields.add("position_job_id");
      openapiFields.add("position_job_name");
      openapiFields.add("position_profession_id");
      openapiFields.add("position_property");
      openapiFields.add("position_status");
      openapiFields.add("position_title");
      openapiFields.add("salary_max");
      openapiFields.add("salary_min");
      openapiFields.add("salary_type");
      openapiFields.add("salary_unit");
      openapiFields.add("skill_tag");
      openapiFields.add("skip_url");
      openapiFields.add("work_city");
      openapiFields.add("work_longitude");
      openapiFields.add("work_region");
      openapiFields.add("work_year");
  
      // a set of required properties/fields (JSON key names)
      openapiRequiredFields = new HashSet<String>();
    }
  
   /**
    * Validates the JSON Object and throws an exception if issues found
    *
    * @param jsonObj JSON Object
    * @throws IOException if the JSON Object is invalid with respect to JobWorthPositionInfo
    */
    public static void validateJsonObject(JsonObject jsonObj) throws IOException {
        if (jsonObj == null) {
          if (JobWorthPositionInfo.openapiRequiredFields.isEmpty()) {
            return;
          } else { // has required fields
            throw new IllegalArgumentException(String.format("The required field(s) %s in JobWorthPositionInfo is not found in the empty JSON string", JobWorthPositionInfo.openapiRequiredFields.toString()));
          }
        }
        if (jsonObj.get("age") != null && !jsonObj.get("age").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `age` to be a primitive type in the JSON string but got `%s`", jsonObj.get("age").toString()));
        }
        if (jsonObj.get("benefit") != null && !jsonObj.get("benefit").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `benefit` to be a primitive type in the JSON string but got `%s`", jsonObj.get("benefit").toString()));
        }
        if (jsonObj.get("certifications") != null && !jsonObj.get("certifications").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `certifications` to be a primitive type in the JSON string but got `%s`", jsonObj.get("certifications").toString()));
        }
        if (jsonObj.get("company_certificate") != null && !jsonObj.get("company_certificate").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `company_certificate` to be a primitive type in the JSON string but got `%s`", jsonObj.get("company_certificate").toString()));
        }
        if (jsonObj.get("company_logo_afts_id") != null && !jsonObj.get("company_logo_afts_id").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `company_logo_afts_id` to be a primitive type in the JSON string but got `%s`", jsonObj.get("company_logo_afts_id").toString()));
        }
        if (jsonObj.get("company_name") != null && !jsonObj.get("company_name").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `company_name` to be a primitive type in the JSON string but got `%s`", jsonObj.get("company_name").toString()));
        }
        if (jsonObj.get("education") != null && !jsonObj.get("education").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `education` to be a primitive type in the JSON string but got `%s`", jsonObj.get("education").toString()));
        }
        if (jsonObj.get("gender") != null && !jsonObj.get("gender").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `gender` to be a primitive type in the JSON string but got `%s`", jsonObj.get("gender").toString()));
        }
        if (jsonObj.get("ka_position_id") != null && !jsonObj.get("ka_position_id").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `ka_position_id` to be a primitive type in the JSON string but got `%s`", jsonObj.get("ka_position_id").toString()));
        }
        if (jsonObj.get("position_desc") != null && !jsonObj.get("position_desc").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `position_desc` to be a primitive type in the JSON string but got `%s`", jsonObj.get("position_desc").toString()));
        }
        if (jsonObj.get("position_id") != null && !jsonObj.get("position_id").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `position_id` to be a primitive type in the JSON string but got `%s`", jsonObj.get("position_id").toString()));
        }
        if (jsonObj.get("position_job_id") != null && !jsonObj.get("position_job_id").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `position_job_id` to be a primitive type in the JSON string but got `%s`", jsonObj.get("position_job_id").toString()));
        }
        if (jsonObj.get("position_job_name") != null && !jsonObj.get("position_job_name").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `position_job_name` to be a primitive type in the JSON string but got `%s`", jsonObj.get("position_job_name").toString()));
        }
        if (jsonObj.get("position_profession_id") != null && !jsonObj.get("position_profession_id").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `position_profession_id` to be a primitive type in the JSON string but got `%s`", jsonObj.get("position_profession_id").toString()));
        }
        if (jsonObj.get("position_property") != null && !jsonObj.get("position_property").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `position_property` to be a primitive type in the JSON string but got `%s`", jsonObj.get("position_property").toString()));
        }
        if (jsonObj.get("position_status") != null && !jsonObj.get("position_status").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `position_status` to be a primitive type in the JSON string but got `%s`", jsonObj.get("position_status").toString()));
        }
        if (jsonObj.get("position_title") != null && !jsonObj.get("position_title").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `position_title` to be a primitive type in the JSON string but got `%s`", jsonObj.get("position_title").toString()));
        }
        if (jsonObj.get("salary_max") != null && !jsonObj.get("salary_max").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `salary_max` to be a primitive type in the JSON string but got `%s`", jsonObj.get("salary_max").toString()));
        }
        if (jsonObj.get("salary_min") != null && !jsonObj.get("salary_min").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `salary_min` to be a primitive type in the JSON string but got `%s`", jsonObj.get("salary_min").toString()));
        }
        if (jsonObj.get("salary_type") != null && !jsonObj.get("salary_type").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `salary_type` to be a primitive type in the JSON string but got `%s`", jsonObj.get("salary_type").toString()));
        }
        if (jsonObj.get("salary_unit") != null && !jsonObj.get("salary_unit").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `salary_unit` to be a primitive type in the JSON string but got `%s`", jsonObj.get("salary_unit").toString()));
        }
        if (jsonObj.get("skill_tag") != null && !jsonObj.get("skill_tag").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `skill_tag` to be a primitive type in the JSON string but got `%s`", jsonObj.get("skill_tag").toString()));
        }
        if (jsonObj.get("skip_url") != null && !jsonObj.get("skip_url").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `skip_url` to be a primitive type in the JSON string but got `%s`", jsonObj.get("skip_url").toString()));
        }
        if (jsonObj.get("work_city") != null && !jsonObj.get("work_city").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `work_city` to be a primitive type in the JSON string but got `%s`", jsonObj.get("work_city").toString()));
        }
        if (jsonObj.get("work_longitude") != null && !jsonObj.get("work_longitude").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `work_longitude` to be a primitive type in the JSON string but got `%s`", jsonObj.get("work_longitude").toString()));
        }
        if (jsonObj.get("work_region") != null && !jsonObj.get("work_region").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `work_region` to be a primitive type in the JSON string but got `%s`", jsonObj.get("work_region").toString()));
        }
        if (jsonObj.get("work_year") != null && !jsonObj.get("work_year").isJsonPrimitive()) {
          throw new IllegalArgumentException(String.format("Expected the field `work_year` to be a primitive type in the JSON string but got `%s`", jsonObj.get("work_year").toString()));
        }
    }
  
    public static class CustomTypeAdapterFactory implements TypeAdapterFactory {
      @SuppressWarnings("unchecked")
      @Override
      public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> type) {
         if (!JobWorthPositionInfo.class.isAssignableFrom(type.getRawType())) {
           return null; // this class only serializes 'JobWorthPositionInfo' and its subtypes
         }
         final TypeAdapter<JsonElement> elementAdapter = gson.getAdapter(JsonElement.class);
         final TypeAdapter<JobWorthPositionInfo> thisAdapter
                          = gson.getDelegateAdapter(this, TypeToken.get(JobWorthPositionInfo.class));
  
         return (TypeAdapter<T>) new TypeAdapter<JobWorthPositionInfo>() {
             @Override
             public void write(JsonWriter out, JobWorthPositionInfo value) throws IOException {
               JsonObject obj = thisAdapter.toJsonTree(value).getAsJsonObject();
               obj.remove("additionalProperties");
               // serialize additonal properties
               if (value.getAdditionalProperties() != null) {
                 for (Map.Entry<String, Object> entry : value.getAdditionalProperties().entrySet()) {
                   if (entry.getValue() instanceof String)
                     obj.addProperty(entry.getKey(), (String) entry.getValue());
                   else if (entry.getValue() instanceof Number)
                     obj.addProperty(entry.getKey(), (Number) entry.getValue());
                   else if (entry.getValue() instanceof Boolean)
                     obj.addProperty(entry.getKey(), (Boolean) entry.getValue());
                   else if (entry.getValue() instanceof Character)
                     obj.addProperty(entry.getKey(), (Character) entry.getValue());
                   else {
                     obj.add(entry.getKey(), gson.toJsonTree(entry.getValue()).getAsJsonObject());
                   }
                 }
               }
               elementAdapter.write(out, obj);
             }
  
             @Override
             public JobWorthPositionInfo read(JsonReader in) throws IOException {
               JsonObject jsonObj = elementAdapter.read(in).getAsJsonObject();
               validateJsonObject(jsonObj);
               // store additional fields in the deserialized instance
               JobWorthPositionInfo instance = thisAdapter.fromJsonTree(jsonObj);
               for (Map.Entry<String, JsonElement> entry : jsonObj.entrySet()) {
                 if (!openapiFields.contains(entry.getKey())) {
                   if (entry.getValue().isJsonPrimitive()) { // primitive type
                     if (entry.getValue().getAsJsonPrimitive().isString())
                       instance.putAdditionalProperty(entry.getKey(), entry.getValue().getAsString());
                     else if (entry.getValue().getAsJsonPrimitive().isNumber())
                       instance.putAdditionalProperty(entry.getKey(), entry.getValue().getAsNumber());
                     else if (entry.getValue().getAsJsonPrimitive().isBoolean())
                       instance.putAdditionalProperty(entry.getKey(), entry.getValue().getAsBoolean());
                     else
                       throw new IllegalArgumentException(String.format("The field `%s` has unknown primitive type. Value: %s", entry.getKey(), entry.getValue().toString()));
                   } else { // non-primitive type
                     instance.putAdditionalProperty(entry.getKey(), gson.fromJson(entry.getValue(), HashMap.class));
                   }
                 }
               }
               return instance;
             }
  
         }.nullSafe();
      }
    }
  
   /**
    * Create an instance of JobWorthPositionInfo given an JSON string
    *
    * @param jsonString JSON string
    * @return An instance of JobWorthPositionInfo
    * @throws IOException if the JSON string is invalid with respect to JobWorthPositionInfo
    */
    public static JobWorthPositionInfo fromJson(String jsonString) throws IOException {
      return JSON.getGson().fromJson(jsonString, JobWorthPositionInfo.class);
    }
  
   /**
    * Convert an instance of JobWorthPositionInfo to an JSON string
    *
    * @return JSON string
    */
    public String toJson() {
      return JSON.getGson().toJson(this);
    }
  }
  
  