最早的组织机构管理是用上面直线型的方式来做。把每个对象创建出来。
但是这种方式不大灵活,如果在部门中添加新的部门整个组织的架构都要变动。
所以我们在下面定义了一种相对新一点的组织机构。
OrgType:组织机构类型,用来说明组织机构有哪些组织。
/**
* 组织机构类型对象,用来设定系统中存在哪些组织类型
* 如:对于学校而言,可能存在:学校,分校,校长办,行政部门,教学部门,专业,班级
* @author KongHao
*
*/
@Entity
@Table(name="t_org_type")
public class OrgType {
/**
* 类型的标识
*/
private int id;
/**
* 类型的名称
*/
private String name;
/**
* 类型的sn序号
*/
private String sn;
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@NotEmpty(message="组织机构类型名称不能为空")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@NotEmpty(message="组织机构标识不能为空")
public String getSn() {
return sn;
}
public void setSn(String sn) {
this.sn = sn;
}
}
OrgTypeRule:组织类型规则,用来定义组织类型之间的规则,例如哪些类型下面应该有哪些子类。
/**
* 组织机构类型的规则表,用来确定组织之间的关系
* @author KongHao
*
*/
@Entity
@Table(name="t_org_type_rule")
public class OrgTypeRule {
/**
* 规则标识
*/
private int id;
/**
* 规则的父id
*/
private int pid;
/**
* 规则的子id
*/
private int cid;
/**
* 两者之间的数量,如果为-1表示可以有无限多个
*/
private int num;
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getPid() {
return pid;
}
public void setPid(int pid) {
this.pid = pid;
}
public int getCid() {
return cid;
}
public void setCid(int cid) {
this.cid = cid;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
}
Org:定义组织相关的内容,形成一颗组织树。
/**
* 组织对象,该表可以生成完整的组织树
* 根据组织类型来具体存储实际中存在的组织
* 昭通学院-->XX
* 校本部-->FX
* 南校区-->FX
* @author KongHao
*
*/
@Entity
@Table(name="t_org")
public class Org {
/**
* 组织机构的id
*/
private int id;
/**
* 组织机构的名称
*/
private String name;
/**
* 组织机构所属类型的id,此处不要使用ManyToOne
*/
private int typeId;
/**
* 组织机构所属类型的名称,冗余
*/
private String typeName;
/**
* 组织机构的排序号
*/
private int orderNum;
/**
* 组织机构的父亲组织
*/
private Org parent;
/**
* 管理类型
*/
private int managerType;
/**
* 组织机构的地址
*/
private String address;
/**
* 组织机构的电话
*/
private String phone;
/**
* 扩展属性1,用于在针对某些特殊的组织存储相应的信息
*/
private String att1;
/**
* 扩展属性2,用于在针对某些特殊的组织存储相应的信息
*/
private String att2;
/**
* 扩展属性3,用于在针对某些特殊的组织存储相应的信息
*/
private String att3;
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@NotEmpty(message="组织机构的名称不能为空")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Column(name="tid")
public int getTypeId() {
return typeId;
}
public void setTypeId(int typeId) {
this.typeId = typeId;
}
@Column(name="tname")
public String getTypeName() {
return typeName;
}
public void setTypeName(String typeName) {
this.typeName = typeName;
}
@Column(name="order_num")
public int getOrderNum() {
return orderNum;
}
public void setOrderNum(int orderNum) {
this.orderNum = orderNum;
}
@Column(name="manager_type")
public int getManagerType() {
return managerType;
}
public void setManagerType(int managerType) {
this.managerType = managerType;
}
@ManyToOne
@JoinColumn(name="pid")
public Org getParent() {
return parent;
}
public void setParent(Org parent) {
this.parent = parent;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getAtt1() {
return att1;
}
public void setAtt1(String att1) {
this.att1 = att1;
}
public String getAtt2() {
return att2;
}
public void setAtt2(String att2) {
this.att2 = att2;
}
public String getAtt3() {
return att3;
}
public void setAtt3(String att3) {
this.att3 = att3;
}
@Override
public boolean equals(Object obj) {
Org o = (Org)obj;
return this.id==o.getId();
}
public Org() {
}
public Org(int id, String name) {
super();
this.id = id;
this.name = name;
}
}
Person:请直接看代码注释
/**
* 人员对象,对于人员而言,某些项目中,可能Person里面会有一些非常特殊的属性,并不能够在人员对象中
* 一一展示,如学校系统:教师和学生要存储的信息完全不一致,此时就创建两个关联类来和Person进行关联
* 然后根据情况来确定是否有必要提供添加人员的功能,如果都是使用其他对象关联,如果所有的人员要么是教师
* 要么是学生,此时可以提供相应的教师和学生的添加功能,在添加学生和教师的时候直接添加Person对象
* 所以此处就把的公共属性抽取出来
* @author KongHao
*
*/
@Entity
@Table(name="t_person")
public class Person {
private int id;
private String name;
private String sfzh;
private String phone;
private int sex;
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSfzh() {
return sfzh;
}
public void setSfzh(String sfzh) {
this.sfzh = sfzh;
}
public int getSex() {
return sex;
}
public void setSex(int sex) {
this.sex = sex;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
}
Position:人在组织中所处的岗位
/**
* 岗位的对象,用来确定某个人员所属的岗位
* 存储的就是岗位的名称
* 副校长,校长,处长,副处长,科长,普通员工
* @author KongHao
*
*/
@Entity
@Table(name="t_position")
public class Position {
/**
* 岗位的标识
*/
private int id;
/**
* 岗位的名称
*/
private String name;
/**
* 岗位的sn
*/
private String sn;
/**
* 岗位的是否具备管理功能,目前意义不大
*/
private int manager;
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@NotEmpty(message="岗位名称不能为空")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@NotEmpty(message="岗位的标识不能为空")
public String getSn() {
return sn;
}
public void setSn(String sn) {
this.sn = sn;
}
public int getManager() {
return manager;
}
public void setManager(int manager) {
this.manager = manager;
}
}
PersonOrgPos:人员组织岗位对应关系
/**
* 人员组织岗位对应关系表,这张表里面存储了人员和组织和岗位的对应关系
* @author KongHao
*
*/
@Entity
@Table(name="t_person_org_pos")
public class PersonOrgPos {
/**
* 关系标识
*/
private int id;
/**
* 人员id,这里也可以存储实体类,但是不太建议
*/
private int personId;
/**
* 组织的id
*/
private int orgId;
/**
* 岗位的id
*/
private int posId;
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Column(name="person_id")
public int getPersonId() {
return personId;
}
public void setPersonId(int personId) {
this.personId = personId;
}
@Column(name="org_id")
public int getOrgId() {
return orgId;
}
public void setOrgId(int orgId) {
this.orgId = orgId;
}
@Column(name="pos_id")
public int getPosId() {
return posId;
}
public void setPosId(int posId) {
this.posId = posId;
}
}