/*
 * Oceanengine Open Api
 * 巨量引擎开放平台 Open Api
 *
 * The version of the OpenAPI document: 1.1.19
 * 
 *
 * 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.bytedance.ads.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 java.io.IOException;
import org.openapitools.jackson.nullable.JsonNullable;

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 com.google.gson.TypeAdapter;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonWriter;
import java.io.IOException;

import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import com.bytedance.ads.JSON;

/**
 * LocalReportProjectGetV30ResponseDataProjectListInner
 */
@javax.annotation.Generated(value = "com.org.bytedance.ad_open_sdk.JavacusGenerator", date = "2024-09-10T15:29:00.246104612+08:00[Asia/Shanghai]")
public class LocalReportProjectGetV30ResponseDataProjectListInner {
  public static final String SERIALIZED_NAME_ATTRIBUTION_CLUE_MESSAGE_CNT = "attribution_clue_message_cnt";
  @SerializedName(SERIALIZED_NAME_ATTRIBUTION_CLUE_MESSAGE_CNT)
  private Long attributionClueMessageCnt = null;

  public static final String SERIALIZED_NAME_ATTRIBUTION_CLUE_PAY_ORDER_CNT = "attribution_clue_pay_order_cnt";
  @SerializedName(SERIALIZED_NAME_ATTRIBUTION_CLUE_PAY_ORDER_CNT)
  private Long attributionCluePayOrderCnt = null;

  public static final String SERIALIZED_NAME_ATTRIBUTION_CONVERSION_RATE = "attribution_conversion_rate";
  @SerializedName(SERIALIZED_NAME_ATTRIBUTION_CONVERSION_RATE)
  private Double attributionConversionRate = null;

  public static final String SERIALIZED_NAME_ATTRIBUTION_CONVERT_CNT = "attribution_convert_cnt";
  @SerializedName(SERIALIZED_NAME_ATTRIBUTION_CONVERT_CNT)
  private Long attributionConvertCnt = null;

  public static final String SERIALIZED_NAME_ATTRIBUTION_CONVERT_COST = "attribution_convert_cost";
  @SerializedName(SERIALIZED_NAME_ATTRIBUTION_CONVERT_COST)
  private Double attributionConvertCost = null;

  public static final String SERIALIZED_NAME_ATTRIBUTION_FORM_CNT = "attribution_form_cnt";
  @SerializedName(SERIALIZED_NAME_ATTRIBUTION_FORM_CNT)
  private Long attributionFormCnt = null;

  public static final String SERIALIZED_NAME_ATTRIBUTION_INTENTION_FORM_CNT = "attribution_intention_form_cnt";
  @SerializedName(SERIALIZED_NAME_ATTRIBUTION_INTENTION_FORM_CNT)
  private Long attributionIntentionFormCnt = null;

  public static final String SERIALIZED_NAME_ATTRIBUTION_INTENTION_MESSAGE_CLUE_CNT = "attribution_intention_message_clue_cnt";
  @SerializedName(SERIALIZED_NAME_ATTRIBUTION_INTENTION_MESSAGE_CLUE_CNT)
  private Long attributionIntentionMessageClueCnt = null;

  public static final String SERIALIZED_NAME_ATTRIBUTION_INTENTION_PHONE_CNT = "attribution_intention_phone_cnt";
  @SerializedName(SERIALIZED_NAME_ATTRIBUTION_INTENTION_PHONE_CNT)
  private Long attributionIntentionPhoneCnt = null;

  public static final String SERIALIZED_NAME_ATTRIBUTION_MESSAGE_ACTION_CNT = "attribution_message_action_cnt";
  @SerializedName(SERIALIZED_NAME_ATTRIBUTION_MESSAGE_ACTION_CNT)
  private Long attributionMessageActionCnt = null;

  public static final String SERIALIZED_NAME_ATTRIBUTION_PHONE_CONFIRM_CNT = "attribution_phone_confirm_cnt";
  @SerializedName(SERIALIZED_NAME_ATTRIBUTION_PHONE_CONFIRM_CNT)
  private Long attributionPhoneConfirmCnt = null;

  public static final String SERIALIZED_NAME_ATTRIBUTION_PHONE_CONNECT_CNT = "attribution_phone_connect_cnt";
  @SerializedName(SERIALIZED_NAME_ATTRIBUTION_PHONE_CONNECT_CNT)
  private Long attributionPhoneConnectCnt = null;

  public static final String SERIALIZED_NAME_CLICK_CNT = "click_cnt";
  @SerializedName(SERIALIZED_NAME_CLICK_CNT)
  private Long clickCnt = null;

  public static final String SERIALIZED_NAME_CLUE_MESSAGE_COUNT = "clue_message_count";
  @SerializedName(SERIALIZED_NAME_CLUE_MESSAGE_COUNT)
  private Long clueMessageCount = null;

  public static final String SERIALIZED_NAME_CLUE_PAY_ORDER_CNT = "clue_pay_order_cnt";
  @SerializedName(SERIALIZED_NAME_CLUE_PAY_ORDER_CNT)
  private Long cluePayOrderCnt = null;

  public static final String SERIALIZED_NAME_CONVERSION_COST = "conversion_cost";
  @SerializedName(SERIALIZED_NAME_CONVERSION_COST)
  private Double conversionCost = null;

  public static final String SERIALIZED_NAME_CONVERSION_RATE = "conversion_rate";
  @SerializedName(SERIALIZED_NAME_CONVERSION_RATE)
  private Double conversionRate = null;

  public static final String SERIALIZED_NAME_CONVERT_CNT = "convert_cnt";
  @SerializedName(SERIALIZED_NAME_CONVERT_CNT)
  private Long convertCnt = null;

  public static final String SERIALIZED_NAME_CPC_PLATFORM = "cpc_platform";
  @SerializedName(SERIALIZED_NAME_CPC_PLATFORM)
  private Double cpcPlatform = null;

  public static final String SERIALIZED_NAME_CPM_PLATFORM = "cpm_platform";
  @SerializedName(SERIALIZED_NAME_CPM_PLATFORM)
  private Double cpmPlatform = null;

  public static final String SERIALIZED_NAME_CTR = "ctr";
  @SerializedName(SERIALIZED_NAME_CTR)
  private Double ctr = null;

  public static final String SERIALIZED_NAME_DY_COLLECT = "dy_collect";
  @SerializedName(SERIALIZED_NAME_DY_COLLECT)
  private Long dyCollect = null;

  public static final String SERIALIZED_NAME_DY_COMMENT = "dy_comment";
  @SerializedName(SERIALIZED_NAME_DY_COMMENT)
  private Long dyComment = null;

  public static final String SERIALIZED_NAME_DY_FOLLOW = "dy_follow";
  @SerializedName(SERIALIZED_NAME_DY_FOLLOW)
  private Long dyFollow = null;

  public static final String SERIALIZED_NAME_DY_LIKE = "dy_like";
  @SerializedName(SERIALIZED_NAME_DY_LIKE)
  private Long dyLike = null;

  public static final String SERIALIZED_NAME_DY_LIKE_RATE = "dy_like_rate";
  @SerializedName(SERIALIZED_NAME_DY_LIKE_RATE)
  private Double dyLikeRate = null;

  public static final String SERIALIZED_NAME_DY_SHARE = "dy_share";
  @SerializedName(SERIALIZED_NAME_DY_SHARE)
  private Long dyShare = null;

  public static final String SERIALIZED_NAME_FORM_CNT = "form_cnt";
  @SerializedName(SERIALIZED_NAME_FORM_CNT)
  private Long formCnt = null;

  public static final String SERIALIZED_NAME_INTENTION_FORM_CNT = "intention_form_cnt";
  @SerializedName(SERIALIZED_NAME_INTENTION_FORM_CNT)
  private Long intentionFormCnt = null;

  public static final String SERIALIZED_NAME_INTENTION_MESSAGE_CLUE_CNT = "intention_message_clue_cnt";
  @SerializedName(SERIALIZED_NAME_INTENTION_MESSAGE_CLUE_CNT)
  private Long intentionMessageClueCnt = null;

  public static final String SERIALIZED_NAME_INTENTION_PHONE_CNT = "intention_phone_cnt";
  @SerializedName(SERIALIZED_NAME_INTENTION_PHONE_CNT)
  private Long intentionPhoneCnt = null;

  public static final String SERIALIZED_NAME_LIVE_WATCH_ONE_MINUTE_COUNT = "live_watch_one_minute_count";
  @SerializedName(SERIALIZED_NAME_LIVE_WATCH_ONE_MINUTE_COUNT)
  private Long liveWatchOneMinuteCount = null;

  public static final String SERIALIZED_NAME_LUBAN_LIVE_COMMENT_CNT = "luban_live_comment_cnt";
  @SerializedName(SERIALIZED_NAME_LUBAN_LIVE_COMMENT_CNT)
  private Long lubanLiveCommentCnt = null;

  public static final String SERIALIZED_NAME_LUBAN_LIVE_ENTER_CNT = "luban_live_enter_cnt";
  @SerializedName(SERIALIZED_NAME_LUBAN_LIVE_ENTER_CNT)
  private Long lubanLiveEnterCnt = null;

  public static final String SERIALIZED_NAME_LUBAN_LIVE_SHARE_CNT = "luban_live_share_cnt";
  @SerializedName(SERIALIZED_NAME_LUBAN_LIVE_SHARE_CNT)
  private Long lubanLiveShareCnt = null;

  public static final String SERIALIZED_NAME_MESSAGE_ACTION_CNT = "message_action_cnt";
  @SerializedName(SERIALIZED_NAME_MESSAGE_ACTION_CNT)
  private Long messageActionCnt = null;

  public static final String SERIALIZED_NAME_PHONE_CONFIRM_CNT = "phone_confirm_cnt";
  @SerializedName(SERIALIZED_NAME_PHONE_CONFIRM_CNT)
  private Long phoneConfirmCnt = null;

  public static final String SERIALIZED_NAME_PHONE_CONNECT_CNT = "phone_connect_cnt";
  @SerializedName(SERIALIZED_NAME_PHONE_CONNECT_CNT)
  private Long phoneConnectCnt = null;

  public static final String SERIALIZED_NAME_PLAY25_FEED_BREAK = "play_25_feed_break";
  @SerializedName(SERIALIZED_NAME_PLAY25_FEED_BREAK)
  private Long play25FeedBreak = null;

  public static final String SERIALIZED_NAME_PLAY50_FEED_BREAK = "play_50_feed_break";
  @SerializedName(SERIALIZED_NAME_PLAY50_FEED_BREAK)
  private Long play50FeedBreak = null;

  public static final String SERIALIZED_NAME_PLAY75_FEED_BREAK = "play_75_feed_break";
  @SerializedName(SERIALIZED_NAME_PLAY75_FEED_BREAK)
  private Long play75FeedBreak = null;

  public static final String SERIALIZED_NAME_PLAY_DURATION3S = "play_duration_3s";
  @SerializedName(SERIALIZED_NAME_PLAY_DURATION3S)
  private Long playDuration3s = null;

  public static final String SERIALIZED_NAME_PLAY_DURATION5S = "play_duration_5s";
  @SerializedName(SERIALIZED_NAME_PLAY_DURATION5S)
  private Long playDuration5s = null;

  public static final String SERIALIZED_NAME_PLAY_DURATION5S_SHOW_CNT_RATE = "play_duration_5s_show_cnt_rate";
  @SerializedName(SERIALIZED_NAME_PLAY_DURATION5S_SHOW_CNT_RATE)
  private Double playDuration5sShowCntRate = null;

  public static final String SERIALIZED_NAME_PLAY_OVER = "play_over";
  @SerializedName(SERIALIZED_NAME_PLAY_OVER)
  private Long playOver = null;

  public static final String SERIALIZED_NAME_PLAY_OVER_RATE = "play_over_rate";
  @SerializedName(SERIALIZED_NAME_PLAY_OVER_RATE)
  private Double playOverRate = null;

  public static final String SERIALIZED_NAME_PROJECT_ID = "project_id";
  @SerializedName(SERIALIZED_NAME_PROJECT_ID)
  private Long projectId = null;

  public static final String SERIALIZED_NAME_PROJECT_NAME = "project_name";
  @SerializedName(SERIALIZED_NAME_PROJECT_NAME)
  private String projectName = null;

  public static final String SERIALIZED_NAME_SHOW_CNT = "show_cnt";
  @SerializedName(SERIALIZED_NAME_SHOW_CNT)
  private Long showCnt = null;

  public static final String SERIALIZED_NAME_STAT_COST = "stat_cost";
  @SerializedName(SERIALIZED_NAME_STAT_COST)
  private Double statCost = null;

  public static final String SERIALIZED_NAME_STAT_TIME_DAY = "stat_time_day";
  @SerializedName(SERIALIZED_NAME_STAT_TIME_DAY)
  private String statTimeDay = null;

  public static final String SERIALIZED_NAME_STAT_TIME_HOUR = "stat_time_hour";
  @SerializedName(SERIALIZED_NAME_STAT_TIME_HOUR)
  private String statTimeHour = null;

  public static final String SERIALIZED_NAME_TOTAL_PLAY = "total_play";
  @SerializedName(SERIALIZED_NAME_TOTAL_PLAY)
  private Long totalPlay = null;

  public LocalReportProjectGetV30ResponseDataProjectListInner() {
  }

  public LocalReportProjectGetV30ResponseDataProjectListInner attributionClueMessageCnt(Long attributionClueMessageCnt) {
    
    this.attributionClueMessageCnt = attributionClueMessageCnt;
    return this;
  }

   /**
   * 私信留资数(计费时间)
   * @return attributionClueMessageCnt
  **/
  @javax.annotation.Nullable
  public Long getAttributionClueMessageCnt() {
    return attributionClueMessageCnt;
  }


  public void setAttributionClueMessageCnt(Long attributionClueMessageCnt) {
    this.attributionClueMessageCnt = attributionClueMessageCnt;
  }


  public LocalReportProjectGetV30ResponseDataProjectListInner attributionCluePayOrderCnt(Long attributionCluePayOrderCnt) {
    
    this.attributionCluePayOrderCnt = attributionCluePayOrderCnt;
    return this;
  }

   /**
   * 团购线索数(计费时间)
   * @return attributionCluePayOrderCnt
  **/
  @javax.annotation.Nullable
  public Long getAttributionCluePayOrderCnt() {
    return attributionCluePayOrderCnt;
  }


  public void setAttributionCluePayOrderCnt(Long attributionCluePayOrderCnt) {
    this.attributionCluePayOrderCnt = attributionCluePayOrderCnt;
  }


  public LocalReportProjectGetV30ResponseDataProjectListInner attributionConversionRate(Double attributionConversionRate) {
    
    this.attributionConversionRate = attributionConversionRate;
    return this;
  }

   /**
   * 转化率(计费时间)
   * @return attributionConversionRate
  **/
  @javax.annotation.Nullable
  public Double getAttributionConversionRate() {
    return attributionConversionRate;
  }


  public void setAttributionConversionRate(Double attributionConversionRate) {
    this.attributionConversionRate = attributionConversionRate;
  }


  public LocalReportProjectGetV30ResponseDataProjectListInner attributionConvertCnt(Long attributionConvertCnt) {
    
    this.attributionConvertCnt = attributionConvertCnt;
    return this;
  }

   /**
   * 转化数(计费时间)
   * @return attributionConvertCnt
  **/
  @javax.annotation.Nullable
  public Long getAttributionConvertCnt() {
    return attributionConvertCnt;
  }


  public void setAttributionConvertCnt(Long attributionConvertCnt) {
    this.attributionConvertCnt = attributionConvertCnt;
  }


  public LocalReportProjectGetV30ResponseDataProjectListInner attributionConvertCost(Double attributionConvertCost) {
    
    this.attributionConvertCost = attributionConvertCost;
    return this;
  }

   /**
   * 转化成本(元)(计费时间)
   * @return attributionConvertCost
  **/
  @javax.annotation.Nullable
  public Double getAttributionConvertCost() {
    return attributionConvertCost;
  }


  public void setAttributionConvertCost(Double attributionConvertCost) {
    this.attributionConvertCost = attributionConvertCost;
  }


  public LocalReportProjectGetV30ResponseDataProjectListInner attributionFormCnt(Long attributionFormCnt) {
    
    this.attributionFormCnt = attributionFormCnt;
    return this;
  }

   /**
   * 表单提交数(计费时间)
   * @return attributionFormCnt
  **/
  @javax.annotation.Nullable
  public Long getAttributionFormCnt() {
    return attributionFormCnt;
  }


  public void setAttributionFormCnt(Long attributionFormCnt) {
    this.attributionFormCnt = attributionFormCnt;
  }


  public LocalReportProjectGetV30ResponseDataProjectListInner attributionIntentionFormCnt(Long attributionIntentionFormCnt) {
    
    this.attributionIntentionFormCnt = attributionIntentionFormCnt;
    return this;
  }

   /**
   * 意向表单数(计费时间)
   * @return attributionIntentionFormCnt
  **/
  @javax.annotation.Nullable
  public Long getAttributionIntentionFormCnt() {
    return attributionIntentionFormCnt;
  }


  public void setAttributionIntentionFormCnt(Long attributionIntentionFormCnt) {
    this.attributionIntentionFormCnt = attributionIntentionFormCnt;
  }


  public LocalReportProjectGetV30ResponseDataProjectListInner attributionIntentionMessageClueCnt(Long attributionIntentionMessageClueCnt) {
    
    this.attributionIntentionMessageClueCnt = attributionIntentionMessageClueCnt;
    return this;
  }

   /**
   * 意向咨询数(计费时间)
   * @return attributionIntentionMessageClueCnt
  **/
  @javax.annotation.Nullable
  public Long getAttributionIntentionMessageClueCnt() {
    return attributionIntentionMessageClueCnt;
  }


  public void setAttributionIntentionMessageClueCnt(Long attributionIntentionMessageClueCnt) {
    this.attributionIntentionMessageClueCnt = attributionIntentionMessageClueCnt;
  }


  public LocalReportProjectGetV30ResponseDataProjectListInner attributionIntentionPhoneCnt(Long attributionIntentionPhoneCnt) {
    
    this.attributionIntentionPhoneCnt = attributionIntentionPhoneCnt;
    return this;
  }

   /**
   * 意向话单数(计费时间)
   * @return attributionIntentionPhoneCnt
  **/
  @javax.annotation.Nullable
  public Long getAttributionIntentionPhoneCnt() {
    return attributionIntentionPhoneCnt;
  }


  public void setAttributionIntentionPhoneCnt(Long attributionIntentionPhoneCnt) {
    this.attributionIntentionPhoneCnt = attributionIntentionPhoneCnt;
  }


  public LocalReportProjectGetV30ResponseDataProjectListInner attributionMessageActionCnt(Long attributionMessageActionCnt) {
    
    this.attributionMessageActionCnt = attributionMessageActionCnt;
    return this;
  }

   /**
   * 私信咨询数(计费时间)
   * @return attributionMessageActionCnt
  **/
  @javax.annotation.Nullable
  public Long getAttributionMessageActionCnt() {
    return attributionMessageActionCnt;
  }


  public void setAttributionMessageActionCnt(Long attributionMessageActionCnt) {
    this.attributionMessageActionCnt = attributionMessageActionCnt;
  }


  public LocalReportProjectGetV30ResponseDataProjectListInner attributionPhoneConfirmCnt(Long attributionPhoneConfirmCnt) {
    
    this.attributionPhoneConfirmCnt = attributionPhoneConfirmCnt;
    return this;
  }

   /**
   * 电话拨打数(计费时间)
   * @return attributionPhoneConfirmCnt
  **/
  @javax.annotation.Nullable
  public Long getAttributionPhoneConfirmCnt() {
    return attributionPhoneConfirmCnt;
  }


  public void setAttributionPhoneConfirmCnt(Long attributionPhoneConfirmCnt) {
    this.attributionPhoneConfirmCnt = attributionPhoneConfirmCnt;
  }


  public LocalReportProjectGetV30ResponseDataProjectListInner attributionPhoneConnectCnt(Long attributionPhoneConnectCnt) {
    
    this.attributionPhoneConnectCnt = attributionPhoneConnectCnt;
    return this;
  }

   /**
   * 电话接通数(计费时间)
   * @return attributionPhoneConnectCnt
  **/
  @javax.annotation.Nullable
  public Long getAttributionPhoneConnectCnt() {
    return attributionPhoneConnectCnt;
  }


  public void setAttributionPhoneConnectCnt(Long attributionPhoneConnectCnt) {
    this.attributionPhoneConnectCnt = attributionPhoneConnectCnt;
  }


  public LocalReportProjectGetV30ResponseDataProjectListInner clickCnt(Long clickCnt) {
    
    this.clickCnt = clickCnt;
    return this;
  }

   /**
   * 点击次数
   * @return clickCnt
  **/
  @javax.annotation.Nullable
  public Long getClickCnt() {
    return clickCnt;
  }


  public void setClickCnt(Long clickCnt) {
    this.clickCnt = clickCnt;
  }


  public LocalReportProjectGetV30ResponseDataProjectListInner clueMessageCount(Long clueMessageCount) {
    
    this.clueMessageCount = clueMessageCount;
    return this;
  }

   /**
   * 私信留资数
   * @return clueMessageCount
  **/
  @javax.annotation.Nullable
  public Long getClueMessageCount() {
    return clueMessageCount;
  }


  public void setClueMessageCount(Long clueMessageCount) {
    this.clueMessageCount = clueMessageCount;
  }


  public LocalReportProjectGetV30ResponseDataProjectListInner cluePayOrderCnt(Long cluePayOrderCnt) {
    
    this.cluePayOrderCnt = cluePayOrderCnt;
    return this;
  }

   /**
   * 团购线索数
   * @return cluePayOrderCnt
  **/
  @javax.annotation.Nullable
  public Long getCluePayOrderCnt() {
    return cluePayOrderCnt;
  }


  public void setCluePayOrderCnt(Long cluePayOrderCnt) {
    this.cluePayOrderCnt = cluePayOrderCnt;
  }


  public LocalReportProjectGetV30ResponseDataProjectListInner conversionCost(Double conversionCost) {
    
    this.conversionCost = conversionCost;
    return this;
  }

   /**
   * 转化成本(元)
   * @return conversionCost
  **/
  @javax.annotation.Nullable
  public Double getConversionCost() {
    return conversionCost;
  }


  public void setConversionCost(Double conversionCost) {
    this.conversionCost = conversionCost;
  }


  public LocalReportProjectGetV30ResponseDataProjectListInner conversionRate(Double conversionRate) {
    
    this.conversionRate = conversionRate;
    return this;
  }

   /**
   * 转化率
   * @return conversionRate
  **/
  @javax.annotation.Nullable
  public Double getConversionRate() {
    return conversionRate;
  }


  public void setConversionRate(Double conversionRate) {
    this.conversionRate = conversionRate;
  }


  public LocalReportProjectGetV30ResponseDataProjectListInner convertCnt(Long convertCnt) {
    
    this.convertCnt = convertCnt;
    return this;
  }

   /**
   * 转化数
   * @return convertCnt
  **/
  @javax.annotation.Nullable
  public Long getConvertCnt() {
    return convertCnt;
  }


  public void setConvertCnt(Long convertCnt) {
    this.convertCnt = convertCnt;
  }


  public LocalReportProjectGetV30ResponseDataProjectListInner cpcPlatform(Double cpcPlatform) {
    
    this.cpcPlatform = cpcPlatform;
    return this;
  }

   /**
   * 点击均价(元)
   * @return cpcPlatform
  **/
  @javax.annotation.Nullable
  public Double getCpcPlatform() {
    return cpcPlatform;
  }


  public void setCpcPlatform(Double cpcPlatform) {
    this.cpcPlatform = cpcPlatform;
  }


  public LocalReportProjectGetV30ResponseDataProjectListInner cpmPlatform(Double cpmPlatform) {
    
    this.cpmPlatform = cpmPlatform;
    return this;
  }

   /**
   * 平均千次展示费用(元)
   * @return cpmPlatform
  **/
  @javax.annotation.Nullable
  public Double getCpmPlatform() {
    return cpmPlatform;
  }


  public void setCpmPlatform(Double cpmPlatform) {
    this.cpmPlatform = cpmPlatform;
  }


  public LocalReportProjectGetV30ResponseDataProjectListInner ctr(Double ctr) {
    
    this.ctr = ctr;
    return this;
  }

   /**
   * 点击率
   * @return ctr
  **/
  @javax.annotation.Nullable
  public Double getCtr() {
    return ctr;
  }


  public void setCtr(Double ctr) {
    this.ctr = ctr;
  }


  public LocalReportProjectGetV30ResponseDataProjectListInner dyCollect(Long dyCollect) {
    
    this.dyCollect = dyCollect;
    return this;
  }

   /**
   * 视频收藏次数
   * @return dyCollect
  **/
  @javax.annotation.Nullable
  public Long getDyCollect() {
    return dyCollect;
  }


  public void setDyCollect(Long dyCollect) {
    this.dyCollect = dyCollect;
  }


  public LocalReportProjectGetV30ResponseDataProjectListInner dyComment(Long dyComment) {
    
    this.dyComment = dyComment;
    return this;
  }

   /**
   * 视频评论次数
   * @return dyComment
  **/
  @javax.annotation.Nullable
  public Long getDyComment() {
    return dyComment;
  }


  public void setDyComment(Long dyComment) {
    this.dyComment = dyComment;
  }


  public LocalReportProjectGetV30ResponseDataProjectListInner dyFollow(Long dyFollow) {
    
    this.dyFollow = dyFollow;
    return this;
  }

   /**
   * 粉丝量
   * @return dyFollow
  **/
  @javax.annotation.Nullable
  public Long getDyFollow() {
    return dyFollow;
  }


  public void setDyFollow(Long dyFollow) {
    this.dyFollow = dyFollow;
  }


  public LocalReportProjectGetV30ResponseDataProjectListInner dyLike(Long dyLike) {
    
    this.dyLike = dyLike;
    return this;
  }

   /**
   * 视频点赞次数
   * @return dyLike
  **/
  @javax.annotation.Nullable
  public Long getDyLike() {
    return dyLike;
  }


  public void setDyLike(Long dyLike) {
    this.dyLike = dyLike;
  }


  public LocalReportProjectGetV30ResponseDataProjectListInner dyLikeRate(Double dyLikeRate) {
    
    this.dyLikeRate = dyLikeRate;
    return this;
  }

   /**
   * 视频点赞率
   * @return dyLikeRate
  **/
  @javax.annotation.Nullable
  public Double getDyLikeRate() {
    return dyLikeRate;
  }


  public void setDyLikeRate(Double dyLikeRate) {
    this.dyLikeRate = dyLikeRate;
  }


  public LocalReportProjectGetV30ResponseDataProjectListInner dyShare(Long dyShare) {
    
    this.dyShare = dyShare;
    return this;
  }

   /**
   * 视频分享次数
   * @return dyShare
  **/
  @javax.annotation.Nullable
  public Long getDyShare() {
    return dyShare;
  }


  public void setDyShare(Long dyShare) {
    this.dyShare = dyShare;
  }


  public LocalReportProjectGetV30ResponseDataProjectListInner formCnt(Long formCnt) {
    
    this.formCnt = formCnt;
    return this;
  }

   /**
   * 表单提交数
   * @return formCnt
  **/
  @javax.annotation.Nullable
  public Long getFormCnt() {
    return formCnt;
  }


  public void setFormCnt(Long formCnt) {
    this.formCnt = formCnt;
  }


  public LocalReportProjectGetV30ResponseDataProjectListInner intentionFormCnt(Long intentionFormCnt) {
    
    this.intentionFormCnt = intentionFormCnt;
    return this;
  }

   /**
   * 意向表单数
   * @return intentionFormCnt
  **/
  @javax.annotation.Nullable
  public Long getIntentionFormCnt() {
    return intentionFormCnt;
  }


  public void setIntentionFormCnt(Long intentionFormCnt) {
    this.intentionFormCnt = intentionFormCnt;
  }


  public LocalReportProjectGetV30ResponseDataProjectListInner intentionMessageClueCnt(Long intentionMessageClueCnt) {
    
    this.intentionMessageClueCnt = intentionMessageClueCnt;
    return this;
  }

   /**
   * 意向咨询数
   * @return intentionMessageClueCnt
  **/
  @javax.annotation.Nullable
  public Long getIntentionMessageClueCnt() {
    return intentionMessageClueCnt;
  }


  public void setIntentionMessageClueCnt(Long intentionMessageClueCnt) {
    this.intentionMessageClueCnt = intentionMessageClueCnt;
  }


  public LocalReportProjectGetV30ResponseDataProjectListInner intentionPhoneCnt(Long intentionPhoneCnt) {
    
    this.intentionPhoneCnt = intentionPhoneCnt;
    return this;
  }

   /**
   * 意向话单数
   * @return intentionPhoneCnt
  **/
  @javax.annotation.Nullable
  public Long getIntentionPhoneCnt() {
    return intentionPhoneCnt;
  }


  public void setIntentionPhoneCnt(Long intentionPhoneCnt) {
    this.intentionPhoneCnt = intentionPhoneCnt;
  }


  public LocalReportProjectGetV30ResponseDataProjectListInner liveWatchOneMinuteCount(Long liveWatchOneMinuteCount) {
    
    this.liveWatchOneMinuteCount = liveWatchOneMinuteCount;
    return this;
  }

   /**
   * 直播间超1分钟停留次数
   * @return liveWatchOneMinuteCount
  **/
  @javax.annotation.Nullable
  public Long getLiveWatchOneMinuteCount() {
    return liveWatchOneMinuteCount;
  }


  public void setLiveWatchOneMinuteCount(Long liveWatchOneMinuteCount) {
    this.liveWatchOneMinuteCount = liveWatchOneMinuteCount;
  }


  public LocalReportProjectGetV30ResponseDataProjectListInner lubanLiveCommentCnt(Long lubanLiveCommentCnt) {
    
    this.lubanLiveCommentCnt = lubanLiveCommentCnt;
    return this;
  }

   /**
   * 直播间评论次数
   * @return lubanLiveCommentCnt
  **/
  @javax.annotation.Nullable
  public Long getLubanLiveCommentCnt() {
    return lubanLiveCommentCnt;
  }


  public void setLubanLiveCommentCnt(Long lubanLiveCommentCnt) {
    this.lubanLiveCommentCnt = lubanLiveCommentCnt;
  }


  public LocalReportProjectGetV30ResponseDataProjectListInner lubanLiveEnterCnt(Long lubanLiveEnterCnt) {
    
    this.lubanLiveEnterCnt = lubanLiveEnterCnt;
    return this;
  }

   /**
   * 直播间观看次数
   * @return lubanLiveEnterCnt
  **/
  @javax.annotation.Nullable
  public Long getLubanLiveEnterCnt() {
    return lubanLiveEnterCnt;
  }


  public void setLubanLiveEnterCnt(Long lubanLiveEnterCnt) {
    this.lubanLiveEnterCnt = lubanLiveEnterCnt;
  }


  public LocalReportProjectGetV30ResponseDataProjectListInner lubanLiveShareCnt(Long lubanLiveShareCnt) {
    
    this.lubanLiveShareCnt = lubanLiveShareCnt;
    return this;
  }

   /**
   * 直播间分享次数
   * @return lubanLiveShareCnt
  **/
  @javax.annotation.Nullable
  public Long getLubanLiveShareCnt() {
    return lubanLiveShareCnt;
  }


  public void setLubanLiveShareCnt(Long lubanLiveShareCnt) {
    this.lubanLiveShareCnt = lubanLiveShareCnt;
  }


  public LocalReportProjectGetV30ResponseDataProjectListInner messageActionCnt(Long messageActionCnt) {
    
    this.messageActionCnt = messageActionCnt;
    return this;
  }

   /**
   * 私信咨询数
   * @return messageActionCnt
  **/
  @javax.annotation.Nullable
  public Long getMessageActionCnt() {
    return messageActionCnt;
  }


  public void setMessageActionCnt(Long messageActionCnt) {
    this.messageActionCnt = messageActionCnt;
  }


  public LocalReportProjectGetV30ResponseDataProjectListInner phoneConfirmCnt(Long phoneConfirmCnt) {
    
    this.phoneConfirmCnt = phoneConfirmCnt;
    return this;
  }

   /**
   * 电话拨打数
   * @return phoneConfirmCnt
  **/
  @javax.annotation.Nullable
  public Long getPhoneConfirmCnt() {
    return phoneConfirmCnt;
  }


  public void setPhoneConfirmCnt(Long phoneConfirmCnt) {
    this.phoneConfirmCnt = phoneConfirmCnt;
  }


  public LocalReportProjectGetV30ResponseDataProjectListInner phoneConnectCnt(Long phoneConnectCnt) {
    
    this.phoneConnectCnt = phoneConnectCnt;
    return this;
  }

   /**
   * 电话接通数
   * @return phoneConnectCnt
  **/
  @javax.annotation.Nullable
  public Long getPhoneConnectCnt() {
    return phoneConnectCnt;
  }


  public void setPhoneConnectCnt(Long phoneConnectCnt) {
    this.phoneConnectCnt = phoneConnectCnt;
  }


  public LocalReportProjectGetV30ResponseDataProjectListInner play25FeedBreak(Long play25FeedBreak) {
    
    this.play25FeedBreak = play25FeedBreak;
    return this;
  }

   /**
   * 视频25%进度播放次数
   * @return play25FeedBreak
  **/
  @javax.annotation.Nullable
  public Long getPlay25FeedBreak() {
    return play25FeedBreak;
  }


  public void setPlay25FeedBreak(Long play25FeedBreak) {
    this.play25FeedBreak = play25FeedBreak;
  }


  public LocalReportProjectGetV30ResponseDataProjectListInner play50FeedBreak(Long play50FeedBreak) {
    
    this.play50FeedBreak = play50FeedBreak;
    return this;
  }

   /**
   * 视频50%进度播放次数
   * @return play50FeedBreak
  **/
  @javax.annotation.Nullable
  public Long getPlay50FeedBreak() {
    return play50FeedBreak;
  }


  public void setPlay50FeedBreak(Long play50FeedBreak) {
    this.play50FeedBreak = play50FeedBreak;
  }


  public LocalReportProjectGetV30ResponseDataProjectListInner play75FeedBreak(Long play75FeedBreak) {
    
    this.play75FeedBreak = play75FeedBreak;
    return this;
  }

   /**
   * 视频75%进度播放次数
   * @return play75FeedBreak
  **/
  @javax.annotation.Nullable
  public Long getPlay75FeedBreak() {
    return play75FeedBreak;
  }


  public void setPlay75FeedBreak(Long play75FeedBreak) {
    this.play75FeedBreak = play75FeedBreak;
  }


  public LocalReportProjectGetV30ResponseDataProjectListInner playDuration3s(Long playDuration3s) {
    
    this.playDuration3s = playDuration3s;
    return this;
  }

   /**
   * 视频3s播放次数
   * @return playDuration3s
  **/
  @javax.annotation.Nullable
  public Long getPlayDuration3s() {
    return playDuration3s;
  }


  public void setPlayDuration3s(Long playDuration3s) {
    this.playDuration3s = playDuration3s;
  }


  public LocalReportProjectGetV30ResponseDataProjectListInner playDuration5s(Long playDuration5s) {
    
    this.playDuration5s = playDuration5s;
    return this;
  }

   /**
   * 视频5s播放次数
   * @return playDuration5s
  **/
  @javax.annotation.Nullable
  public Long getPlayDuration5s() {
    return playDuration5s;
  }


  public void setPlayDuration5s(Long playDuration5s) {
    this.playDuration5s = playDuration5s;
  }


  public LocalReportProjectGetV30ResponseDataProjectListInner playDuration5sShowCntRate(Double playDuration5sShowCntRate) {
    
    this.playDuration5sShowCntRate = playDuration5sShowCntRate;
    return this;
  }

   /**
   * 视频5s播放率
   * @return playDuration5sShowCntRate
  **/
  @javax.annotation.Nullable
  public Double getPlayDuration5sShowCntRate() {
    return playDuration5sShowCntRate;
  }


  public void setPlayDuration5sShowCntRate(Double playDuration5sShowCntRate) {
    this.playDuration5sShowCntRate = playDuration5sShowCntRate;
  }


  public LocalReportProjectGetV30ResponseDataProjectListInner playOver(Long playOver) {
    
    this.playOver = playOver;
    return this;
  }

   /**
   * 视频播放完成次数
   * @return playOver
  **/
  @javax.annotation.Nullable
  public Long getPlayOver() {
    return playOver;
  }


  public void setPlayOver(Long playOver) {
    this.playOver = playOver;
  }


  public LocalReportProjectGetV30ResponseDataProjectListInner playOverRate(Double playOverRate) {
    
    this.playOverRate = playOverRate;
    return this;
  }

   /**
   * 视频完播率
   * @return playOverRate
  **/
  @javax.annotation.Nullable
  public Double getPlayOverRate() {
    return playOverRate;
  }


  public void setPlayOverRate(Double playOverRate) {
    this.playOverRate = playOverRate;
  }


  public LocalReportProjectGetV30ResponseDataProjectListInner projectId(Long projectId) {
    
    this.projectId = projectId;
    return this;
  }

   /**
   * 项目ID
   * @return projectId
  **/
  @javax.annotation.Nullable
  public Long getProjectId() {
    return projectId;
  }


  public void setProjectId(Long projectId) {
    this.projectId = projectId;
  }


  public LocalReportProjectGetV30ResponseDataProjectListInner projectName(String projectName) {
    
    this.projectName = projectName;
    return this;
  }

   /**
   * 项目名称
   * @return projectName
  **/
  @javax.annotation.Nullable
  public String getProjectName() {
    return projectName;
  }


  public void setProjectName(String projectName) {
    this.projectName = projectName;
  }


  public LocalReportProjectGetV30ResponseDataProjectListInner showCnt(Long showCnt) {
    
    this.showCnt = showCnt;
    return this;
  }

   /**
   * 展示次数
   * @return showCnt
  **/
  @javax.annotation.Nullable
  public Long getShowCnt() {
    return showCnt;
  }


  public void setShowCnt(Long showCnt) {
    this.showCnt = showCnt;
  }


  public LocalReportProjectGetV30ResponseDataProjectListInner statCost(Double statCost) {
    
    this.statCost = statCost;
    return this;
  }

   /**
   * 消耗(元)
   * @return statCost
  **/
  @javax.annotation.Nullable
  public Double getStatCost() {
    return statCost;
  }


  public void setStatCost(Double statCost) {
    this.statCost = statCost;
  }


  public LocalReportProjectGetV30ResponseDataProjectListInner statTimeDay(String statTimeDay) {
    
    this.statTimeDay = statTimeDay;
    return this;
  }

   /**
   * 时间-天
   * @return statTimeDay
  **/
  @javax.annotation.Nullable
  public String getStatTimeDay() {
    return statTimeDay;
  }


  public void setStatTimeDay(String statTimeDay) {
    this.statTimeDay = statTimeDay;
  }


  public LocalReportProjectGetV30ResponseDataProjectListInner statTimeHour(String statTimeHour) {
    
    this.statTimeHour = statTimeHour;
    return this;
  }

   /**
   * 时间-小时
   * @return statTimeHour
  **/
  @javax.annotation.Nullable
  public String getStatTimeHour() {
    return statTimeHour;
  }


  public void setStatTimeHour(String statTimeHour) {
    this.statTimeHour = statTimeHour;
  }


  public LocalReportProjectGetV30ResponseDataProjectListInner totalPlay(Long totalPlay) {
    
    this.totalPlay = totalPlay;
    return this;
  }

   /**
   * 视频播放次数
   * @return totalPlay
  **/
  @javax.annotation.Nullable
  public Long getTotalPlay() {
    return totalPlay;
  }


  public void setTotalPlay(Long totalPlay) {
    this.totalPlay = totalPlay;
  }



  @Override
  public boolean equals(Object o) {
    if (this == o) {
      return true;
    }
    if (o == null || getClass() != o.getClass()) {
      return false;
    }
    LocalReportProjectGetV30ResponseDataProjectListInner localReportProjectGetV30ResponseDataProjectListInner = (LocalReportProjectGetV30ResponseDataProjectListInner) o;
    return Objects.equals(this.attributionClueMessageCnt, localReportProjectGetV30ResponseDataProjectListInner.attributionClueMessageCnt) &&
        Objects.equals(this.attributionCluePayOrderCnt, localReportProjectGetV30ResponseDataProjectListInner.attributionCluePayOrderCnt) &&
        Objects.equals(this.attributionConversionRate, localReportProjectGetV30ResponseDataProjectListInner.attributionConversionRate) &&
        Objects.equals(this.attributionConvertCnt, localReportProjectGetV30ResponseDataProjectListInner.attributionConvertCnt) &&
        Objects.equals(this.attributionConvertCost, localReportProjectGetV30ResponseDataProjectListInner.attributionConvertCost) &&
        Objects.equals(this.attributionFormCnt, localReportProjectGetV30ResponseDataProjectListInner.attributionFormCnt) &&
        Objects.equals(this.attributionIntentionFormCnt, localReportProjectGetV30ResponseDataProjectListInner.attributionIntentionFormCnt) &&
        Objects.equals(this.attributionIntentionMessageClueCnt, localReportProjectGetV30ResponseDataProjectListInner.attributionIntentionMessageClueCnt) &&
        Objects.equals(this.attributionIntentionPhoneCnt, localReportProjectGetV30ResponseDataProjectListInner.attributionIntentionPhoneCnt) &&
        Objects.equals(this.attributionMessageActionCnt, localReportProjectGetV30ResponseDataProjectListInner.attributionMessageActionCnt) &&
        Objects.equals(this.attributionPhoneConfirmCnt, localReportProjectGetV30ResponseDataProjectListInner.attributionPhoneConfirmCnt) &&
        Objects.equals(this.attributionPhoneConnectCnt, localReportProjectGetV30ResponseDataProjectListInner.attributionPhoneConnectCnt) &&
        Objects.equals(this.clickCnt, localReportProjectGetV30ResponseDataProjectListInner.clickCnt) &&
        Objects.equals(this.clueMessageCount, localReportProjectGetV30ResponseDataProjectListInner.clueMessageCount) &&
        Objects.equals(this.cluePayOrderCnt, localReportProjectGetV30ResponseDataProjectListInner.cluePayOrderCnt) &&
        Objects.equals(this.conversionCost, localReportProjectGetV30ResponseDataProjectListInner.conversionCost) &&
        Objects.equals(this.conversionRate, localReportProjectGetV30ResponseDataProjectListInner.conversionRate) &&
        Objects.equals(this.convertCnt, localReportProjectGetV30ResponseDataProjectListInner.convertCnt) &&
        Objects.equals(this.cpcPlatform, localReportProjectGetV30ResponseDataProjectListInner.cpcPlatform) &&
        Objects.equals(this.cpmPlatform, localReportProjectGetV30ResponseDataProjectListInner.cpmPlatform) &&
        Objects.equals(this.ctr, localReportProjectGetV30ResponseDataProjectListInner.ctr) &&
        Objects.equals(this.dyCollect, localReportProjectGetV30ResponseDataProjectListInner.dyCollect) &&
        Objects.equals(this.dyComment, localReportProjectGetV30ResponseDataProjectListInner.dyComment) &&
        Objects.equals(this.dyFollow, localReportProjectGetV30ResponseDataProjectListInner.dyFollow) &&
        Objects.equals(this.dyLike, localReportProjectGetV30ResponseDataProjectListInner.dyLike) &&
        Objects.equals(this.dyLikeRate, localReportProjectGetV30ResponseDataProjectListInner.dyLikeRate) &&
        Objects.equals(this.dyShare, localReportProjectGetV30ResponseDataProjectListInner.dyShare) &&
        Objects.equals(this.formCnt, localReportProjectGetV30ResponseDataProjectListInner.formCnt) &&
        Objects.equals(this.intentionFormCnt, localReportProjectGetV30ResponseDataProjectListInner.intentionFormCnt) &&
        Objects.equals(this.intentionMessageClueCnt, localReportProjectGetV30ResponseDataProjectListInner.intentionMessageClueCnt) &&
        Objects.equals(this.intentionPhoneCnt, localReportProjectGetV30ResponseDataProjectListInner.intentionPhoneCnt) &&
        Objects.equals(this.liveWatchOneMinuteCount, localReportProjectGetV30ResponseDataProjectListInner.liveWatchOneMinuteCount) &&
        Objects.equals(this.lubanLiveCommentCnt, localReportProjectGetV30ResponseDataProjectListInner.lubanLiveCommentCnt) &&
        Objects.equals(this.lubanLiveEnterCnt, localReportProjectGetV30ResponseDataProjectListInner.lubanLiveEnterCnt) &&
        Objects.equals(this.lubanLiveShareCnt, localReportProjectGetV30ResponseDataProjectListInner.lubanLiveShareCnt) &&
        Objects.equals(this.messageActionCnt, localReportProjectGetV30ResponseDataProjectListInner.messageActionCnt) &&
        Objects.equals(this.phoneConfirmCnt, localReportProjectGetV30ResponseDataProjectListInner.phoneConfirmCnt) &&
        Objects.equals(this.phoneConnectCnt, localReportProjectGetV30ResponseDataProjectListInner.phoneConnectCnt) &&
        Objects.equals(this.play25FeedBreak, localReportProjectGetV30ResponseDataProjectListInner.play25FeedBreak) &&
        Objects.equals(this.play50FeedBreak, localReportProjectGetV30ResponseDataProjectListInner.play50FeedBreak) &&
        Objects.equals(this.play75FeedBreak, localReportProjectGetV30ResponseDataProjectListInner.play75FeedBreak) &&
        Objects.equals(this.playDuration3s, localReportProjectGetV30ResponseDataProjectListInner.playDuration3s) &&
        Objects.equals(this.playDuration5s, localReportProjectGetV30ResponseDataProjectListInner.playDuration5s) &&
        Objects.equals(this.playDuration5sShowCntRate, localReportProjectGetV30ResponseDataProjectListInner.playDuration5sShowCntRate) &&
        Objects.equals(this.playOver, localReportProjectGetV30ResponseDataProjectListInner.playOver) &&
        Objects.equals(this.playOverRate, localReportProjectGetV30ResponseDataProjectListInner.playOverRate) &&
        Objects.equals(this.projectId, localReportProjectGetV30ResponseDataProjectListInner.projectId) &&
        Objects.equals(this.projectName, localReportProjectGetV30ResponseDataProjectListInner.projectName) &&
        Objects.equals(this.showCnt, localReportProjectGetV30ResponseDataProjectListInner.showCnt) &&
        Objects.equals(this.statCost, localReportProjectGetV30ResponseDataProjectListInner.statCost) &&
        Objects.equals(this.statTimeDay, localReportProjectGetV30ResponseDataProjectListInner.statTimeDay) &&
        Objects.equals(this.statTimeHour, localReportProjectGetV30ResponseDataProjectListInner.statTimeHour) &&
        Objects.equals(this.totalPlay, localReportProjectGetV30ResponseDataProjectListInner.totalPlay);
  }

  private static <T> boolean equalsNullable(JsonNullable<T> a, JsonNullable<T> b) {
    return a == b || (a != null && b != null && a.isPresent() && b.isPresent() && Objects.deepEquals(a.get(), b.get()));
  }

  @Override
  public int hashCode() {
    return Objects.hash(attributionClueMessageCnt, attributionCluePayOrderCnt, attributionConversionRate, attributionConvertCnt, attributionConvertCost, attributionFormCnt, attributionIntentionFormCnt, attributionIntentionMessageClueCnt, attributionIntentionPhoneCnt, attributionMessageActionCnt, attributionPhoneConfirmCnt, attributionPhoneConnectCnt, clickCnt, clueMessageCount, cluePayOrderCnt, conversionCost, conversionRate, convertCnt, cpcPlatform, cpmPlatform, ctr, dyCollect, dyComment, dyFollow, dyLike, dyLikeRate, dyShare, formCnt, intentionFormCnt, intentionMessageClueCnt, intentionPhoneCnt, liveWatchOneMinuteCount, lubanLiveCommentCnt, lubanLiveEnterCnt, lubanLiveShareCnt, messageActionCnt, phoneConfirmCnt, phoneConnectCnt, play25FeedBreak, play50FeedBreak, play75FeedBreak, playDuration3s, playDuration5s, playDuration5sShowCntRate, playOver, playOverRate, projectId, projectName, showCnt, statCost, statTimeDay, statTimeHour, totalPlay);
  }

  private static <T> int hashCodeNullable(JsonNullable<T> a) {
    if (a == null) {
      return 1;
    }
    return a.isPresent() ? Arrays.deepHashCode(new Object[]{a.get()}) : 31;
  }

  @Override
  public String toString() {
    StringBuilder sb = new StringBuilder();
    sb.append("class LocalReportProjectGetV30ResponseDataProjectListInner {\n");
    sb.append("    attributionClueMessageCnt: ").append(toIndentedString(attributionClueMessageCnt)).append("\n");
    sb.append("    attributionCluePayOrderCnt: ").append(toIndentedString(attributionCluePayOrderCnt)).append("\n");
    sb.append("    attributionConversionRate: ").append(toIndentedString(attributionConversionRate)).append("\n");
    sb.append("    attributionConvertCnt: ").append(toIndentedString(attributionConvertCnt)).append("\n");
    sb.append("    attributionConvertCost: ").append(toIndentedString(attributionConvertCost)).append("\n");
    sb.append("    attributionFormCnt: ").append(toIndentedString(attributionFormCnt)).append("\n");
    sb.append("    attributionIntentionFormCnt: ").append(toIndentedString(attributionIntentionFormCnt)).append("\n");
    sb.append("    attributionIntentionMessageClueCnt: ").append(toIndentedString(attributionIntentionMessageClueCnt)).append("\n");
    sb.append("    attributionIntentionPhoneCnt: ").append(toIndentedString(attributionIntentionPhoneCnt)).append("\n");
    sb.append("    attributionMessageActionCnt: ").append(toIndentedString(attributionMessageActionCnt)).append("\n");
    sb.append("    attributionPhoneConfirmCnt: ").append(toIndentedString(attributionPhoneConfirmCnt)).append("\n");
    sb.append("    attributionPhoneConnectCnt: ").append(toIndentedString(attributionPhoneConnectCnt)).append("\n");
    sb.append("    clickCnt: ").append(toIndentedString(clickCnt)).append("\n");
    sb.append("    clueMessageCount: ").append(toIndentedString(clueMessageCount)).append("\n");
    sb.append("    cluePayOrderCnt: ").append(toIndentedString(cluePayOrderCnt)).append("\n");
    sb.append("    conversionCost: ").append(toIndentedString(conversionCost)).append("\n");
    sb.append("    conversionRate: ").append(toIndentedString(conversionRate)).append("\n");
    sb.append("    convertCnt: ").append(toIndentedString(convertCnt)).append("\n");
    sb.append("    cpcPlatform: ").append(toIndentedString(cpcPlatform)).append("\n");
    sb.append("    cpmPlatform: ").append(toIndentedString(cpmPlatform)).append("\n");
    sb.append("    ctr: ").append(toIndentedString(ctr)).append("\n");
    sb.append("    dyCollect: ").append(toIndentedString(dyCollect)).append("\n");
    sb.append("    dyComment: ").append(toIndentedString(dyComment)).append("\n");
    sb.append("    dyFollow: ").append(toIndentedString(dyFollow)).append("\n");
    sb.append("    dyLike: ").append(toIndentedString(dyLike)).append("\n");
    sb.append("    dyLikeRate: ").append(toIndentedString(dyLikeRate)).append("\n");
    sb.append("    dyShare: ").append(toIndentedString(dyShare)).append("\n");
    sb.append("    formCnt: ").append(toIndentedString(formCnt)).append("\n");
    sb.append("    intentionFormCnt: ").append(toIndentedString(intentionFormCnt)).append("\n");
    sb.append("    intentionMessageClueCnt: ").append(toIndentedString(intentionMessageClueCnt)).append("\n");
    sb.append("    intentionPhoneCnt: ").append(toIndentedString(intentionPhoneCnt)).append("\n");
    sb.append("    liveWatchOneMinuteCount: ").append(toIndentedString(liveWatchOneMinuteCount)).append("\n");
    sb.append("    lubanLiveCommentCnt: ").append(toIndentedString(lubanLiveCommentCnt)).append("\n");
    sb.append("    lubanLiveEnterCnt: ").append(toIndentedString(lubanLiveEnterCnt)).append("\n");
    sb.append("    lubanLiveShareCnt: ").append(toIndentedString(lubanLiveShareCnt)).append("\n");
    sb.append("    messageActionCnt: ").append(toIndentedString(messageActionCnt)).append("\n");
    sb.append("    phoneConfirmCnt: ").append(toIndentedString(phoneConfirmCnt)).append("\n");
    sb.append("    phoneConnectCnt: ").append(toIndentedString(phoneConnectCnt)).append("\n");
    sb.append("    play25FeedBreak: ").append(toIndentedString(play25FeedBreak)).append("\n");
    sb.append("    play50FeedBreak: ").append(toIndentedString(play50FeedBreak)).append("\n");
    sb.append("    play75FeedBreak: ").append(toIndentedString(play75FeedBreak)).append("\n");
    sb.append("    playDuration3s: ").append(toIndentedString(playDuration3s)).append("\n");
    sb.append("    playDuration5s: ").append(toIndentedString(playDuration5s)).append("\n");
    sb.append("    playDuration5sShowCntRate: ").append(toIndentedString(playDuration5sShowCntRate)).append("\n");
    sb.append("    playOver: ").append(toIndentedString(playOver)).append("\n");
    sb.append("    playOverRate: ").append(toIndentedString(playOverRate)).append("\n");
    sb.append("    projectId: ").append(toIndentedString(projectId)).append("\n");
    sb.append("    projectName: ").append(toIndentedString(projectName)).append("\n");
    sb.append("    showCnt: ").append(toIndentedString(showCnt)).append("\n");
    sb.append("    statCost: ").append(toIndentedString(statCost)).append("\n");
    sb.append("    statTimeDay: ").append(toIndentedString(statTimeDay)).append("\n");
    sb.append("    statTimeHour: ").append(toIndentedString(statTimeHour)).append("\n");
    sb.append("    totalPlay: ").append(toIndentedString(totalPlay)).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("attribution_clue_message_cnt");
    openapiFields.add("attribution_clue_pay_order_cnt");
    openapiFields.add("attribution_conversion_rate");
    openapiFields.add("attribution_convert_cnt");
    openapiFields.add("attribution_convert_cost");
    openapiFields.add("attribution_form_cnt");
    openapiFields.add("attribution_intention_form_cnt");
    openapiFields.add("attribution_intention_message_clue_cnt");
    openapiFields.add("attribution_intention_phone_cnt");
    openapiFields.add("attribution_message_action_cnt");
    openapiFields.add("attribution_phone_confirm_cnt");
    openapiFields.add("attribution_phone_connect_cnt");
    openapiFields.add("click_cnt");
    openapiFields.add("clue_message_count");
    openapiFields.add("clue_pay_order_cnt");
    openapiFields.add("conversion_cost");
    openapiFields.add("conversion_rate");
    openapiFields.add("convert_cnt");
    openapiFields.add("cpc_platform");
    openapiFields.add("cpm_platform");
    openapiFields.add("ctr");
    openapiFields.add("dy_collect");
    openapiFields.add("dy_comment");
    openapiFields.add("dy_follow");
    openapiFields.add("dy_like");
    openapiFields.add("dy_like_rate");
    openapiFields.add("dy_share");
    openapiFields.add("form_cnt");
    openapiFields.add("intention_form_cnt");
    openapiFields.add("intention_message_clue_cnt");
    openapiFields.add("intention_phone_cnt");
    openapiFields.add("live_watch_one_minute_count");
    openapiFields.add("luban_live_comment_cnt");
    openapiFields.add("luban_live_enter_cnt");
    openapiFields.add("luban_live_share_cnt");
    openapiFields.add("message_action_cnt");
    openapiFields.add("phone_confirm_cnt");
    openapiFields.add("phone_connect_cnt");
    openapiFields.add("play_25_feed_break");
    openapiFields.add("play_50_feed_break");
    openapiFields.add("play_75_feed_break");
    openapiFields.add("play_duration_3s");
    openapiFields.add("play_duration_5s");
    openapiFields.add("play_duration_5s_show_cnt_rate");
    openapiFields.add("play_over");
    openapiFields.add("play_over_rate");
    openapiFields.add("project_id");
    openapiFields.add("project_name");
    openapiFields.add("show_cnt");
    openapiFields.add("stat_cost");
    openapiFields.add("stat_time_day");
    openapiFields.add("stat_time_hour");
    openapiFields.add("total_play");

    // a set of required properties/fields (JSON key names)
    openapiRequiredFields = new HashSet<String>();
  }


  public static class CustomTypeAdapterFactory implements TypeAdapterFactory {
    @SuppressWarnings("unchecked")
    @Override
    public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> type) {
       if (!LocalReportProjectGetV30ResponseDataProjectListInner.class.isAssignableFrom(type.getRawType())) {
         return null; // this class only serializes 'LocalReportProjectGetV30ResponseDataProjectListInner' and its subtypes
       }
       final TypeAdapter<JsonElement> elementAdapter = gson.getAdapter(JsonElement.class);
       final TypeAdapter<LocalReportProjectGetV30ResponseDataProjectListInner> thisAdapter
                        = gson.getDelegateAdapter(this, TypeToken.get(LocalReportProjectGetV30ResponseDataProjectListInner.class));

       return (TypeAdapter<T>) new TypeAdapter<LocalReportProjectGetV30ResponseDataProjectListInner>() {
           @Override
           public void write(JsonWriter out, LocalReportProjectGetV30ResponseDataProjectListInner value) throws IOException {
             JsonObject obj = thisAdapter.toJsonTree(value).getAsJsonObject();
             elementAdapter.write(out, obj);
           }

           @Override
           public LocalReportProjectGetV30ResponseDataProjectListInner read(JsonReader in) throws IOException {
             JsonElement jsonElement = elementAdapter.read(in);
             return thisAdapter.fromJsonTree(jsonElement);
           }

       }.nullSafe();
    }
  }

 /**
  * Create an instance of LocalReportProjectGetV30ResponseDataProjectListInner given an JSON string
  *
  * @param jsonString JSON string
  * @return An instance of LocalReportProjectGetV30ResponseDataProjectListInner
  * @throws IOException if the JSON string is invalid with respect to LocalReportProjectGetV30ResponseDataProjectListInner
  */
  public static LocalReportProjectGetV30ResponseDataProjectListInner fromJson(String jsonString) throws IOException {
    return JSON.getGson().fromJson(jsonString, LocalReportProjectGetV30ResponseDataProjectListInner.class);
  }

 /**
  * Convert an instance of LocalReportProjectGetV30ResponseDataProjectListInner to an JSON string
  *
  * @return JSON string
  */
  public String toJson() {
    return JSON.getGson().toJson(this);
  }
}

