content: /**
   * Copyright &copy; 2012-2016 <a href="https://github.com/HuangBingGui/jeespring">jeespring</a> All rights reserved.
   */
  package com.jeespring.common.persistence;
  
  import com.alibaba.fastjson.annotation.JSONField;
  import com.fasterxml.jackson.annotation.JsonIgnore;
  import com.google.common.collect.Maps;
  import com.jeespring.common.config.Global;
  import com.jeespring.common.utils.StringUtils;
  import com.jeespring.modules.sys.entity.User;
  import com.jeespring.modules.sys.utils.UserUtils;
  import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
  
  import javax.xml.bind.annotation.XmlTransient;
  import java.io.Serializable;
  import java.util.Map;
  
  /**
   * Entity支持类
   *
   * @author 黄炳桂 516821420@qq.com
   * @version 2014-05-16
   */
  //@SupTreeList
  public abstract class AbstractEntity<T> implements Serializable {
  
      private static final long serialVersionUID = 1L;
  
      /**
       * 实体编号（唯一标识）
       */
      protected String id;
  
      /**
       * 当前用户
       */
      protected User currentUser;
  
      /**
       * 当前实体分页对象
       */
      protected Page<T> page;
      private String orderBy = ""; // 标准查询有效， 实例： updatedate desc, name asc
      private String groupBy = ""; // 标准查询有效， 实例： updatedate desc, name asc
      protected int pageNo = 1; // 当前页码
      protected int pageSize = Integer.valueOf(Global.getConfig("page.pageSize")); // 页面大小，设置为“-1”表示不进行分页（分页无效）
  
      /**
       * 自定义SQL（SQL标识，SQL内容）
       */
      protected Map<String, String> sqlMap;
  
      /**
       * 是否是新记录（默认：false），调用setIsNewRecord()设置新记录，使用自定义ID。
       * 设置为true后强制执行插入语句，ID不会自动生成，需从手动传入。
       */
      protected boolean isNewRecord = false;
  
      public AbstractEntity() {
  
      }
  
      public AbstractEntity(String id) {
          this();
          this.id = id;
      }
  
      public String getId() {
          return id;
      }
  
      public void setId(String id) {
          this.id = id;
      }
  
      @JsonIgnore
      @XmlTransient
      @JSONField(serialize=false)
      public User getCurrentUser() {
          if (currentUser == null) {
              currentUser = UserUtils.getUser();
          }
          return currentUser;
      }
  
      public void setCurrentUser(User currentUser) {
          this.currentUser = currentUser;
      }
  
      @JsonIgnore
      @XmlTransient
      @JSONField(serialize=false)
      public Page<T> getPage() {
          if (page == null) {
              page = new Page<T>();
          }
          return page;
      }
  
      public Page<T> setPage(Page<T> page) {
          this.page = page;
          return page;
      }
  
      public String getOrderBy() {
          return orderBy;
      }
  
      public void setOrderBy(String orderBy) {
          this.orderBy = orderBy;
      }
  
      public String getGroupBy() {
          return groupBy;
      }
  
      public void setGroupBy(String groupBy) {
          this.groupBy = groupBy;
      }
  
      public int getPageNo() {
          return pageNo;
      }
  
      public void setPageNo(int pageNo) {
          this.pageNo = pageNo;
      }
  
  
      public int getPageSize() {
          return pageSize;
      }
  
      public void setPageSize(int pageSize) {
          this.pageSize = pageSize;
      }
  
      @JsonIgnore
      @XmlTransient
      @JSONField(serialize=false)
      public Map<String, String> getSqlMap() {
          if (sqlMap == null) {
              sqlMap = Maps.newHashMap();
          }
          return sqlMap;
      }
  
      public void setSqlMap(Map<String, String> sqlMap) {
          this.sqlMap = sqlMap;
      }
  
      /**
       * 插入之前执行方法，子类实现
       */
      public abstract void preInsert();
  
      /**
       * 更新之前执行方法，子类实现
       */
      public abstract void preUpdate();
  
      /**
       * 是否是新记录（默认：false），调用setIsNewRecord()设置新记录，使用自定义ID。
       * 设置为true后强制执行插入语句，ID不会自动生成，需从手动传入。
       *
       * @return
       */
      public boolean getIsNewRecord() {
          return isNewRecord || StringUtils.isBlank(getId());
      }
  
      /**
       * 是否是新记录（默认：false），调用setIsNewRecord()设置新记录，使用自定义ID。
       * 设置为true后强制执行插入语句，ID不会自动生成，需从手动传入。
       */
      public void setIsNewRecord(boolean isNewRecord) {
          this.isNewRecord = isNewRecord;
      }
  
      /**
       * 全局变量对象
       */
      @JsonIgnore
      @JSONField(serialize=false)
      public Global getGlobal() {
          return new Global();
      }
      /**
       * 获取数据库名称,该方法至关重要,在所有的mapper里面都是用
       */
      @JsonIgnore
      @JSONField(serialize=false)
      public String getDbName() {
          return Global.getJdbcType();
      }
  
      @Override
      public boolean equals(Object obj) {
          if (null == obj) {
              return false;
          }
          if (this == obj) {
              return true;
          }
          if (!getClass().equals(obj.getClass())) {
              return false;
          }
          AbstractEntity<?> that = (AbstractEntity<?>) obj;
          return null == this.getId() ? false : this.getId().equals(that.getId());
      }
  
      @Override
      public String toString() {
          return ReflectionToStringBuilder.toString(this);
      }
  
      /**
       * 删除标记（0：正常；1：删除；2：审核；）
       */
      public static final String DEL_FLAG_NORMAL = "0";
      public static final String DEL_FLAG_DELETE = "1";
      public static final String DEL_FLAG_AUDIT = "2";
  
  }
  