package com.artfess.uc.model;

import com.artfess.uc.api.constant.GroupTypeConstant;
import com.artfess.uc.api.model.GroupStructEnum;
import com.artfess.uc.api.model.IGroup;
import com.artfess.uc.api.model.IdentityType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.apache.commons.compress.utils.Lists;

import java.util.List;
import java.util.Map;

/**
 * <pre>
 * 描述：组织架构 实体对象
 * 构建组：x5-bpmx-platform
 * 作者:ray
 * 邮箱:zhangyg@jee-soft.cn
 * 日期:2016-06-28 15:13:03
 * 版权：广州宏天软件有限公司
 * </pre>
 */
@TableName("UC_ORG")
@ApiModel(description = "组织架构 ")
public class Org extends UcBaseModel<Org> implements IGroup {

    /**
     *
     */
    private static final long serialVersionUID = 7138977532880036358L;

    /**
     * 主键
     */
    @TableId("ID_")
    @ApiModelProperty(name = "id", notes = "组织id")
    protected String id;

    /**
     * name_
     */
    @TableField("NAME_")
    @ApiModelProperty(name = "name", notes = "组织名称")
    protected String name;

    @TableField(exist = false)
    @ApiModelProperty(name = "parent", notes = "父级对象")
    protected Org parent;

    /**
     * prent_id_
     */
    @TableField("PARENT_ID_")
    @ApiModelProperty(name = "parentId", notes = "组织父节点id")
    protected String parentId;

    /**
     * code_
     */
    @TableField("CODE_")
    @ApiModelProperty(name = "code", notes = "组织编码")
    protected String code;

    /**
     * 级别
     */
    @TableField("GRADE_")
    @ApiModelProperty(name = "grade", notes = "组织级别")
    protected String grade;

    /**
     * 组织类型（ogn,dept）
     */
    @TableField("ORG_KIND_")
    @ApiModelProperty(name = "orgKind", notes = "组织类型（ogn,dept）")
    protected String orgKind;

    /**
     * 维度Id
     */
    @TableField("DEM_ID_")
    @ApiModelProperty(name = "demId", notes = "维度id")
    protected String demId;

    @TableField("ORDER_NO_")
    @ApiModelProperty(name = "orderNo", notes = "序号")
    protected Long orderNo;

    /**
     * 上级组织名称
     */
    @TableField(exist = false)
    @ApiModelProperty(name = "parentOrgName", notes = "上级组织名称")
    protected String parentOrgName;

    /**
     * 是否主组织。
     */
    @TableField(exist = false)
    @ApiModelProperty(name = "isMaster", notes = "是否主组织")
    private int isMaster = 0;

    /**
     * /**
     * 路径
     */
    @TableField("PATH_")
    @ApiModelProperty(name = "path", notes = "路径")
    protected String path;

    /**
     * 组织路径名
     */
    @TableField("PATH_NAME_")
    @ApiModelProperty(name = "pathName", notes = "组织路径名")
    protected String pathName;
    /**
     * 是否有子节点   否0  是1
     */
    @TableField(exist = false)
    @ApiModelProperty(name = "isIsParent", notes = "是否有子节点   否0  是1")
    protected int isIsParent = 0;

    /**
     * 组织参数
     */
    @TableField(exist = false)
    @ApiModelProperty(name = "params", notes = "组织参数（获取单个组织时才会有值）")
    protected Map<String, Object> params;

    /**
     * 维度名称
     */
    @TableField(exist = false)
    @ApiModelProperty(name = "demName", notes = "所属维度")
    protected String demName;

    @TableField(exist = false)
    @ApiModelProperty(name = "demCode")
    protected String demCode;

    /**
     * OA关联ID
     */
    @TableField(exist = false)
    @ApiModelProperty(name = "refId", notes = "OA关联ID")
    protected String refId;

    /**
     * 组织用户关联id
     */
    @TableField(exist = false)
    @ApiModelProperty(name = "orgUserId", notes = "组织用户关联id")
    protected String orgUserId;

    @TableField("LIMIT_NUM_")
    @ApiModelProperty(name = "limitNum", notes = "组织限编用户数量(0:不受限制)")
    protected Integer limitNum = 0;

    @TableField("NOW_NUM_")
    @ApiModelProperty(name = "nowNum", notes = "组织现编用户数量")
    protected Integer nowNum;

    @TableField("EXCEED_LIMIT_NUM_")
    @ApiModelProperty(name = "exceedLimitNum", notes = "是否允许超过限编(0:允许；1:不允许)")
    protected Integer exceedLimitNum = 0;

    /**
     * 是否是叶子节点  true 是  false 不是
     */
    @TableField(exist = false)
    @ApiModelProperty(name = "isLeaf", notes = "是否是叶子节点  true 是  false 不是 ")
    protected boolean isLeaf = false;

    @TableField(exist = false)
    @ApiModelProperty("部门列表")
    protected List<Org> deptList = Lists.newArrayList();

    @TableField(exist = false)
    @ApiModelProperty("子组织")
    protected List<Org> subOrgs = Lists.newArrayList();

    @TableField(exist = false)
    @ApiModelProperty("用户列表")
    protected List<User> userList = Lists.newArrayList();

    public Integer getExceedLimitNum() {
        return exceedLimitNum;
    }

    public void setExceedLimitNum(Integer exceedLimitNum) {
        this.exceedLimitNum = exceedLimitNum;
    }

    public Integer getLimitNum() {
        return limitNum;
    }

    public void setLimitNum(Integer limitNum) {
        this.limitNum = limitNum;
    }

    public Integer getNowNum() {
        return nowNum;
    }

    public void setNowNum(Integer nowNum) {
        this.nowNum = nowNum;
    }

    public String getOrgUserId() {
        return orgUserId;
    }

    public void setOrgUserId(String orgUserId) {
        this.orgUserId = orgUserId;
    }

    public String getPathName() {
        return pathName;
    }

    public boolean isIsParent() {
        return isIsParent == 1;
    }

    public void setIsParent(int isIsParent) {
        this.isIsParent = isIsParent;
    }

    public void setPathName(String pathName) {
        this.pathName = pathName;
    }

    public void setPath(String path) {
        this.path = path;
    }

    public void setParentOrgName(String parentOrgName) {
        this.parentOrgName = parentOrgName;
    }

    /**
     * 返回 主键
     *
     * @return
     */
    public String getParentOrgName() {
        return this.parentOrgName;
    }

    public void setOrderNo(Long orderNo) {
        this.orderNo = orderNo;
    }

    public void setId(String id) {
        this.id = id;
    }

    /**
     * 返回 主键
     *
     * @return
     */
    public String getId() {
        return this.id;
    }

    public void setName(String name) {
        this.name = name;
    }

    /**
     * 返回 name_
     *
     * @return
     */
    public String getName() {
        return this.name;
    }

    public void setParentId(String parentId) {
        this.parentId = parentId;
    }

    public Org getParent() {
        return parent;
    }

    public void setParent(Org parent) {
        this.parent = parent;
    }

    /**
     * 返回 prent_id_
     *
     * @return
     */
    public String getParentId() {
        return this.parentId;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getDemId() {
        return demId;
    }

    public void setDemId(String demId) {
        this.demId = demId;
    }

    /**
     * 返回 code_
     *
     * @return
     */
    public String getCode() {
        return this.code;
    }

    public void setGrade(String grade) {
        this.grade = grade;
    }

    /**
     * 返回 级别
     *
     * @return
     */
    public String getGrade() {
        return this.grade;
    }

    public String getOrgKind() {
        return orgKind;
    }

    public void setOrgKind(String orgKind) {
        this.orgKind = orgKind;
    }

    public String getGroupId() {
        return this.id;
    }

    public String getGroupCode() {
        return this.code;
    }

    public Long getOrderNo() {

        return this.orderNo;
    }

    public String getPath() {
        return this.path;
    }

    public int getIsMaster() {
        return isMaster;
    }

    public void setIsMaster(int isMaster) {
        this.isMaster = isMaster;
    }

    public Map<String, Object> getParams() {
        return params;
    }

    public void setParams(Map<String, Object> params) {
        this.params = params;
    }

    public String getDemName() {
        return demName;
    }

    public void setDemName(String demName) {
        this.demName = demName;
    }

    public String getRefId() {
        return refId;
    }

    public void setRefId(String refId) {
        this.refId = refId;
    }

    @Override
    public String getIdentityType() {
        return IdentityType.GROUP;
    }

    @Override
    public String getGroupType() {
        return GroupTypeConstant.ORG.key();
    }

    @Override
    public GroupStructEnum getStruct() {
        return null;
    }

    public String getDemCode() {
        return demCode;
    }

    public void setDemCode(String demCode) {
        this.demCode = demCode;
    }

    public boolean isLeaf() {
        return this.isIsParent == 0;
    }

    public void setLeaf(boolean isLeaf) {
        this.isLeaf = isLeaf;
    }

    public int getIsIsParent() {
        return isIsParent;
    }

    public void setIsIsParent(int isIsParent) {
        this.isIsParent = isIsParent;
    }

    public List<Org> getSubOrgs() {
        return subOrgs;
    }

    public void setSubOrgs(List<Org> subOrgs) {
        this.subOrgs = subOrgs;
    }

    public List<Org> getDeptList() {
        return deptList;
    }

    public void setDeptList(List<Org> deptList) {
        this.deptList = deptList;
    }

    public List<User> getUserList() {
        return userList;
    }

    public void setUserList(List<User> userList) {
        this.userList = userList;
    }


    /**
     * @see Object#toString()
     */
    @Override
    public String toString() {
        return "Org{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", parent=" + parent +
                ", parentId='" + parentId + '\'' +
                ", code='" + code + '\'' +
                ", grade='" + grade + '\'' +
                ", orgKind='" + orgKind + '\'' +
                ", demId='" + demId + '\'' +
                ", orderNo=" + orderNo +
                ", parentOrgName='" + parentOrgName + '\'' +
                ", isMaster=" + isMaster +
                ", path='" + path + '\'' +
                ", pathName='" + pathName + '\'' +
                ", isIsParent=" + isIsParent +
                ", params=" + params +
                ", demName='" + demName + '\'' +
                ", demCode='" + demCode + '\'' +
                ", refId='" + refId + '\'' +
                ", orgUserId='" + orgUserId + '\'' +
                ", limitNum=" + limitNum +
                ", nowNum=" + nowNum +
                ", exceedLimitNum=" + exceedLimitNum +
                ", isLeaf=" + isLeaf +
                ", deptList=" + deptList +
                ", subOrgs=" + subOrgs +
                ", userList=" + userList +
                '}';
    }
}