package cn.timer.api.bean.zzgl;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Stream;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

import com.alibaba.druid.sql.ast.expr.SQLCaseExpr.Item;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.extension.activerecord.Model;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @author Tang 2019-11-17
 */
@Entity
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "zzgl_bmgw_m")
@ApiModel("部门岗位表")
public class ZzglBmgwM extends Model<ZzglBmgwM> {

	private static final long serialVersionUID = -3467488578145579513L;

	@Id
	@GeneratedValue
	@TableId(type = IdType.AUTO)
	@ApiModelProperty(value = "编号", example = "101")
	private Integer id;

	@ApiModelProperty(value = "组织机构代码 企业中心(企业信息id)", example = "101")
	private Integer orgCode;

	@ApiModelProperty(value = "上级部门id 上级部门id", example = "101")
	private Integer upId;

	@ApiModelProperty(value = "名称 ", example = "名称")
	private String name;

	@ApiModelProperty(value = "状态 状态 0:正常1:关闭", example = "0")
	private Integer sts;

	@ApiModelProperty(value = "是否管理者 0:超管;1:管理员;2:员工", example = "1")
	private Integer isAdmin;

	@ApiModelProperty(value = "是否可修改 是否可修改 0:否 1:是", example = "0")
	private Integer isUpdate;

	@ApiModelProperty(value = "类型 0:部门;1:岗位", example = "0")
	private Integer type;

	@ApiModelProperty(value = "备注 ", example = "备注")
	private String remark;

	@ApiModelProperty(value = "部门领导id ", example = "9688")
	private Integer leader;

	@TableField(fill = FieldFill.UPDATE)
	@ApiModelProperty(value = "更新时间 ", example = "2019-10-01")
	private Date updateTime;

	@TableField(fill = FieldFill.INSERT)
	@ApiModelProperty(value = "创建时间 ", example = "2019-10-01")
	private Date createTime;

	// 遍历,获取旗下所有子部门和岗位id
	public static void getupDepts(ArrayList<Integer> list, Integer objId, List<ZzglBmgwM> objs) {
		if (objId != null) {
			list.add(objId);
			Stream<ZzglBmgwM> s = objs.stream().filter(item -> objId.equals(item.getId()));
			if (s != null)
				s.forEach(zzglBmgwM -> {
					getupDepts(list, zzglBmgwM.getUpId(), objs);
				});
		}
	}

	// 遍历,获取旗下所有子部门和岗位id(weng)
	public static void getDepts(ArrayList<Integer> list, Integer objId, List<ZzglBmgwM> objs) {
		if (objId != null) {
		objs.stream().filter(item -> objId.equals(item.getUpId())).forEach(zzglBmgwM -> {
			list.add(zzglBmgwM.getId());
			getDepts(list, zzglBmgwM.getId(), objs);
		});
		}
	}
	// 遍历,获取该员工所有上级部门(weng)
	public static void getUpDepts(ArrayList<Integer> list, Integer objId, List<ZzglBmgwM> objs) {//7290
		if (objId != null) {
			for (ZzglBmgwM bmgw : objs) {
				Integer bmgwId = bmgw.getId();
				Integer upId = bmgw.getUpId();
				if (bmgwId.equals(objId)) {
					list.add(bmgwId);
					if (upId!=null) {
						getUpDepts(list, upId, objs);
					}
				}
			}
		}
	}
	
	
	
}