Commit 321361c9 authored by xiandafu's avatar xiandafu
Browse files

init

parent 2971e3f1
package com.ibeetl.admin.core.rbac;
/**
* 数据权限算法结果
* @author xiandafu
*
*/
public enum AccessType {
OnlyUser(1), OnlyOrg(2), AllOrg(3), NoneOrg(4);
private int value;
AccessType(int value) {
this.value = value;
}
}
package com.ibeetl.admin.core.rbac;
import com.ibeetl.admin.core.service.CorePlatformService;
/**
* 数据权限接口类
* @author Administrator
*
*/
public interface DataAccess {
DataAccessResullt getOrg(Long userId,Long orgId );
String getName();
Integer getType();
}
package com.ibeetl.admin.core.rbac;
import java.util.ArrayList;
import java.util.List;
import com.ibeetl.admin.core.rbac.tree.OrgItem;
public interface DataAccessFactory {
/**
* 得到数去访问权限
* @param type
* @return
*/
public DataAccess getDataAccess(Integer type);
/**
* 得到用户能看到得到组织机构树,比如,用户只能看到公司级别的组织机构树。
* DefaultDataAccessFactory 默认实现了能看到所在公司(集团,母公司)的组织机构树
* @param OrgItem
* @return
*/
public OrgItem getUserOrgTree(OrgItem item) ;
public List<DataAccess> all();
}
package com.ibeetl.admin.core.rbac;
import java.util.List;
/**
* 通过DataAccess 得出跟查询相关的用户或者组织机构列表
* @author lijiazhi
*
*/
public class DataAccessResullt {
private List<Long> userIds;
private List<Long> orgIds;
//1 结果仅仅包含用户, 2 ,结果仅仅包含组织机构 3 结果匹配所有组织结构 4 结果不匹配任何组织机构
private AccessType status ;
public List<Long> getUserIds() {
return userIds;
}
public void setUserIds(List<Long> userIds) {
this.userIds = userIds;
}
public List<Long> getOrgIds() {
return orgIds;
}
public void setOrgIds(List<Long> orgIds) {
this.orgIds = orgIds;
}
public AccessType getStatus() {
return status;
}
public void setStatus(AccessType status) {
this.status = status;
}
}
package com.ibeetl.admin.core.rbac;
import java.util.ArrayList;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonView;
import com.ibeetl.admin.core.entity.CoreOrg;
import com.ibeetl.admin.core.entity.CoreUser;
public class UserLoginInfo {
//用户所在机构
List<CoreOrg> orgs = new ArrayList<CoreOrg>();
//用户信息
CoreUser user;
//用户默认登录机构
CoreOrg currentOrg = null;
public List<CoreOrg> getOrgs() {
return orgs;
}
public void setOrgs(List<CoreOrg> orgs) {
this.orgs = orgs;
}
public CoreUser getUser() {
return user;
}
public void setUser(CoreUser user) {
this.user = user;
}
public CoreOrg getCurrentOrg() {
return currentOrg;
}
public void setCurrentOrg(CoreOrg currentOrg) {
this.currentOrg = currentOrg;
}
}
package com.ibeetl.admin.core.rbac.da;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.ibeetl.admin.core.entity.CoreOrg;
import com.ibeetl.admin.core.rbac.AccessType;
import com.ibeetl.admin.core.rbac.DataAccess;
import com.ibeetl.admin.core.rbac.DataAccessResullt;
import com.ibeetl.admin.core.rbac.tree.OrgItem;
import com.ibeetl.admin.core.service.CorePlatformService;
/**
* 所有机构
* @author lijiazhi
*
*/
@Component
public class AllGroupAccess implements DataAccess {
@Autowired
CorePlatformService platformService;
@Override
public DataAccessResullt getOrg(Long userId, Long orgId) {
DataAccessResullt ret = new DataAccessResullt();
ret.setStatus(AccessType.AllOrg);
return ret;
}
@Override
public String getName() {
return "所有机构";
}
@Override
public Integer getType() {
return 5;
}
}
package com.ibeetl.admin.core.rbac.da;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.context.ApplicationContext;
import com.ibeetl.admin.core.rbac.DataAccess;
import com.ibeetl.admin.core.rbac.DataAccessFactory;
import com.ibeetl.admin.core.rbac.tree.OrgItem;
/**
* 系统提供的数据访问权限设置,适合大多数情况。如果只是小型公司,只需要配置数据字典组织机构类型和数据访问类型为系统默认的子集即可
*
* @author xiandafu
*
*/
public class DefaultDataAccessFactory implements DataAccessFactory {
public static final String GROUP_TYPE = "ORGT0"; // 集团
public static final String COMPANY_TYPE = "ORGT1"; // 公司
public static final String DEPARTMENT_TYPE = "ORGT2"; // 部门
public static final String TEAM_TYPE = "ORGT3"; //小组
public static final String PARENT_CORP_TYPE = "ORGT99"; // 母公司
protected Map<Integer,DataAccess> map = new HashMap<Integer,DataAccess> ();
protected ApplicationContext applicationContext;
public DefaultDataAccessFactory(ApplicationContext applicationContext) {
this.applicationContext = applicationContext;
DataAccess da1 = applicationContext.getBean(OwnerDataAccess.class);
DataAccess da2 = applicationContext.getBean(SameCompanyAllDataAccess.class);
DataAccess da3 = applicationContext.getBean(SameOrgDataAccess.class);
DataAccess da4 = applicationContext.getBean(SameDeparmentAllDataAccess.class);
DataAccess da5 = applicationContext.getBean(AllGroupAccess.class);
DataAccess da6 = applicationContext.getBean(GroupDataAccess.class);
DataAccess da7 = applicationContext.getBean(ParentCorpDataAccess.class);
DataAccess da8 = applicationContext.getBean(GroupOnlyDataAccess.class);
this.addDataAccessType(da1);
this.addDataAccessType(da2);
this.addDataAccessType(da3);
this.addDataAccessType(da4);
this.addDataAccessType(da5);
this.addDataAccessType(da6);
this.addDataAccessType(da6);
this.addDataAccessType(da7);
this.addDataAccessType(da8);
}
public DataAccess getDataAccess(Integer type){
return map.get(type);
}
public List<DataAccess> all(){
return new ArrayList<DataAccess>(map.values());
}
public void addDataAccessType(DataAccess da){
if(da.getType()>255){
throw new RuntimeException("数据权限类型支持1-255");
}
map.put(da.getType(), da);
}
@Override
public OrgItem getUserOrgTree(OrgItem item) {
while (item != null ) {
String orgType = item.getOrg().getType();
if(orgType.equals(COMPANY_TYPE)||orgType.equals(PARENT_CORP_TYPE)||orgType.equals(GROUP_TYPE)) {
return item;
}
}
return null;
}
}
package com.ibeetl.admin.core.rbac.da;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.ibeetl.admin.core.entity.CoreOrg;
import com.ibeetl.admin.core.rbac.AccessType;
import com.ibeetl.admin.core.rbac.DataAccess;
import com.ibeetl.admin.core.rbac.DataAccessResullt;
import com.ibeetl.admin.core.rbac.tree.OrgItem;
import com.ibeetl.admin.core.service.CorePlatformService;
/**
* 集团公司所有
* @author lijiazhi
*
*/
@Component
public class GroupDataAccess implements DataAccess {
@Autowired
CorePlatformService platformService;
@Override
public DataAccessResullt getOrg(Long userId, Long orgId) {
OrgItem root = platformService.buildOrg();
OrgItem company = root.findChild(orgId);
OrgItem group = root.findParentOrgItem(DefaultDataAccessFactory.GROUP_TYPE);
List<OrgItem> all = group.findAllChildOrgItem();
List<Long> list = new ArrayList<Long>(all.size());
for(OrgItem org:all){
list.add(org.getId());
}
DataAccessResullt ret = new DataAccessResullt();
ret.setStatus(AccessType.OnlyOrg);
ret.setOrgIds(list);
return ret;
}
@Override
public String getName() {
return "集团下所有";
}
@Override
public Integer getType() {
return 6;
}
}
package com.ibeetl.admin.core.rbac.da;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.ibeetl.admin.core.entity.CoreOrg;
import com.ibeetl.admin.core.rbac.AccessType;
import com.ibeetl.admin.core.rbac.DataAccess;
import com.ibeetl.admin.core.rbac.DataAccessResullt;
import com.ibeetl.admin.core.rbac.tree.OrgItem;
import com.ibeetl.admin.core.service.CorePlatformService;
/**
* 集团公司所有,但不包含集团下的公司,仅仅集团职能部门
* @author lijiazhi
*
*/
@Component
public class GroupOnlyDataAccess implements DataAccess {
@Autowired
CorePlatformService platformService;
@Override
public DataAccessResullt getOrg(Long userId, Long orgId) {
OrgItem root = platformService.buildOrg();
OrgItem company = root.findChild(orgId);
OrgItem group = root.findParentOrgItem(DefaultDataAccessFactory.GROUP_TYPE);
//排除集团下的所有公司
List<OrgItem> all = group.findAllChildOrgItem(null,DefaultDataAccessFactory.COMPANY_TYPE);
List<Long> list = new ArrayList<Long>(all.size());
for(OrgItem org:all){
list.add(org.getId());
}
DataAccessResullt ret = new DataAccessResullt();
ret.setStatus(AccessType.OnlyOrg);
ret.setOrgIds(list);
return ret;
}
@Override
public String getName() {
return "仅集团部门";
}
@Override
public Integer getType() {
return 8;
}
}
package com.ibeetl.admin.core.rbac.da;
import java.util.Arrays;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.ibeetl.admin.core.rbac.AccessType;
import com.ibeetl.admin.core.rbac.DataAccess;
import com.ibeetl.admin.core.rbac.DataAccessResullt;
import com.ibeetl.admin.core.service.CorePlatformService;
/**
* 只查看自己
* @author lijiazhi
*
*/
@Component
public class OwnerDataAccess implements DataAccess {
@Autowired
CorePlatformService platformService;
@Override
public DataAccessResullt getOrg(Long userId, Long orgId) {
DataAccessResullt ret = new DataAccessResullt();
ret.setStatus(AccessType.OnlyUser);
ret.setUserIds(Arrays.asList(userId));
return ret;
}
@Override
public String getName() {
return "只查看自己";
}
@Override
public Integer getType() {
return 1;
}
}
package com.ibeetl.admin.core.rbac.da;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.ibeetl.admin.core.entity.CoreOrg;
import com.ibeetl.admin.core.rbac.AccessType;
import com.ibeetl.admin.core.rbac.DataAccess;
import com.ibeetl.admin.core.rbac.DataAccessResullt;
import com.ibeetl.admin.core.rbac.tree.OrgItem;
import com.ibeetl.admin.core.service.CorePlatformService;
/**
* 母公司所有
* @author lijiazhi
*
*/
@Component
public class ParentCorpDataAccess implements DataAccess {
@Autowired
CorePlatformService platformService;
@Override
public DataAccessResullt getOrg(Long userId, Long orgId) {
OrgItem root = platformService.buildOrg();
OrgItem company = root.findAllChildOrgItem(DefaultDataAccessFactory.PARENT_CORP_TYPE).get(0);
List<OrgItem> all = company.findAllChildOrgItem();
List<Long> list = new ArrayList<Long>(all.size());
for(OrgItem org:all){
list.add(org.getId());
}
DataAccessResullt ret = new DataAccessResullt();
ret.setStatus(AccessType.OnlyOrg);
ret.setOrgIds(list);
return ret;
}
@Override
public String getName() {
return "母公司";
}
@Override
public Integer getType() {
return 7;
}
}
package com.ibeetl.admin.core.rbac.da;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.ibeetl.admin.core.entity.CoreOrg;
import com.ibeetl.admin.core.rbac.AccessType;
import com.ibeetl.admin.core.rbac.DataAccess;
import com.ibeetl.admin.core.rbac.DataAccessResullt;
import com.ibeetl.admin.core.rbac.tree.OrgItem;
import com.ibeetl.admin.core.service.CorePlatformService;
/**
* 同公司下所有
* @author lijiazhi
*
*/
@Component
public class SameCompanyAllDataAccess implements DataAccess {
@Autowired
CorePlatformService platformService;
@Override
public DataAccessResullt getOrg(Long userId, Long orgId) {
DataAccessResullt ret = new DataAccessResullt();
ret.setStatus(AccessType.OnlyOrg);
OrgItem item = platformService.getCurrentOrgItem();
OrgItem company = item.findParentOrgItem(DefaultDataAccessFactory.COMPANY_TYPE);
if(company==null){
ret.setOrgIds(Collections.EMPTY_LIST);
return ret;
}
List<OrgItem> all = company.findAllChildOrgItem(null,DefaultDataAccessFactory.COMPANY_TYPE);
all.add(company);
List<Long> list = new ArrayList<Long>(all.size());
for(OrgItem org:all){
list.add(org.getId());
}
ret.setOrgIds(list);
return ret;
}
@Override
public String getName() {
return "查看同公司(不含子公司)";
}
@Override
public Integer getType() {
return 2;
}
}
package com.ibeetl.admin.core.rbac.da;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.ibeetl.admin.core.entity.CoreOrg;
import com.ibeetl.admin.core.rbac.AccessType;
import com.ibeetl.admin.core.rbac.DataAccess;
import com.ibeetl.admin.core.rbac.DataAccessResullt;
import com.ibeetl.admin.core.rbac.tree.OrgItem;
import com.ibeetl.admin.core.service.CorePlatformService;
/**
* 同部门下所有
* @author lijiazhi
*
*/
@Component
public class SameDeparmentAllDataAccess implements DataAccess {
@Autowired
CorePlatformService platformService;
@Override
public DataAccessResullt getOrg(Long userId, Long orgId) {
DataAccessResullt ret = new DataAccessResullt();
ret.setStatus(AccessType.OnlyOrg);
OrgItem item = platformService.getCurrentOrgItem();
OrgItem dept = item.findParentOrgItem(DefaultDataAccessFactory.DEPARTMENT_TYPE);
if(dept==null){
ret.setOrgIds(Collections.EMPTY_LIST);
return ret;
}
List<OrgItem> all = dept.findAllChildOrgItem(null);
all.add(dept);
List<Long> list = new ArrayList<Long>(all.size());
for(OrgItem org:all){
list.add(org.getId());
}
ret.setOrgIds(list);
return ret;
}
@Override
public String getName() {
return "部门和子部门下所有";
}
@Override
public Integer getType() {
return 4;
}
}
package com.ibeetl.admin.core.rbac.da;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.ibeetl.admin.core.entity.CoreOrg;
import com.ibeetl.admin.core.rbac.AccessType;
import com.ibeetl.admin.core.rbac.DataAccess;
import com.ibeetl.admin.core.rbac.DataAccessResullt;
import com.ibeetl.admin.core.rbac.tree.OrgItem;
import com.ibeetl.admin.core.service.CorePlatformService;
/**
* 同机构
* @author lijiazhi
*
*/
@Component
public class SameOrgDataAccess implements DataAccess {
@Autowired
CorePlatformService platformService;
@Override
public DataAccessResullt getOrg(Long userId, Long orgId) {
DataAccessResullt ret = new DataAccessResullt();
ret.setStatus(AccessType.OnlyOrg);
ret.setOrgIds(Arrays.asList(orgId));
return ret;
}
@Override
public String getName() {
return "同结构";
}
@Override
public Integer getType() {
return 3;
}
}
package com.ibeetl.admin.core.rbac.tree;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.ibeetl.admin.core.entity.CoreFunction;
public class FunctionItem implements TreeItem{
CoreFunction sysFunction = null;
List<FunctionItem> children = new ArrayList<>();
@JsonIgnore
FunctionItem parent = null;
String name ;
public FunctionItem(CoreFunction sysFunction){
this.sysFunction = sysFunction;
this.name = sysFunction!=null?sysFunction.getName():null;
}
public void setParent(FunctionItem parent){
this.parent = parent;
parent.children.add(this);
}
public List<FunctionItem> getChildren(){
return this.children;
}
public Long getId(){
return sysFunction.getId();
}
public CoreFunction getData(){
return this.sysFunction;
}
/**
* 查找某个指定的子功能
* @param functionId
* @return
*/
public FunctionItem findChild(long functionId){
if(sysFunction.getId()==functionId){
return this;
}
for(FunctionItem item:children){
FunctionItem find = item.findChild(functionId);
if(find!=null){
return find;
}
}
return null;
}
/**
* 查找所有的子功能
* @return
*/
public List<FunctionItem> findAllItem(){
List<FunctionItem> all = new LinkedList<>();
findAllChildItem(all,this);
return all;
}
public List<Long> findAllChildrenId(){
List<FunctionItem> items =findAllItem();
List<Long> children = new ArrayList<Long>();
for(FunctionItem item:items){
children.add(item.getId());
}
return children;
}
private void findAllChildItem(List<FunctionItem> all,FunctionItem parent){
for(FunctionItem item:parent.children){
all.add(item);
findAllChildItem(all,item);
}
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((sysFunction == null) ? 0 : sysFunction.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
FunctionItem other = (FunctionItem) obj;
if (sysFunction == null) {
if (other.sysFunction != null)
return false;
} else if (!sysFunction.equals(other.sysFunction))
return false;
return true;
}
@Override
public String toString() {
return "MenuItem [sysFunction=" + sysFunction.getName() + ","+this.children.size()+"]";
}
@Override
public String getName() {
return sysFunction==null?"":sysFunction.getName();
}
}
package com.ibeetl.admin.core.rbac.tree;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.ibeetl.admin.core.entity.CoreMenu;
public class MenuItem implements TreeItem{
CoreMenu sysMenu = null;
List<MenuItem> children = new ArrayList<MenuItem>();
@JsonIgnore
MenuItem parent = null;
String name;
public MenuItem(CoreMenu sysMenu){
this.sysMenu = sysMenu;
this.name = sysMenu!=null?sysMenu.getName():null;
}
public void setParent(MenuItem parent){
this.parent = parent;
parent.children.add(this);
}
public List<MenuItem> getChildren(){
return this.children;
}
public Long getId(){
return sysMenu.getId();
}
public CoreMenu getData(){
return this.sysMenu;
}
public void filter(Set<Long> allows){
Iterator<MenuItem> it = this.children.iterator();
while(it.hasNext()){
MenuItem item = it.next();
if(item.getChildren().size()==0&&!allows.contains(item.getData().getId())){
it.remove();
}
if(item.getChildren().size()!=0){
item.filter(allows);
if(item.getChildren().size()==0){
it.remove();
}
}
}
}
/**
* 查找某个指定的子功能
* @param functionId
* @return
*/
public MenuItem findChild(Long menuId){
if(sysMenu.getId().equals(menuId)){
return this;
}
for(MenuItem item:children){
MenuItem find = item.findChild(menuId);
if(find!=null){
return find;
}
}
return null;
}
/**
* 查找所有的子菜单
* @return
*/
public List<MenuItem> findAllItem(){
List<MenuItem> all = new LinkedList<>();
findAllChildItem(all,this);
return all;
}
private void findAllChildItem(List<MenuItem> all,MenuItem parent){
for(MenuItem item:parent.children){
all.add(item);
findAllChildItem(all,item);
}
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((sysMenu == null) ? 0 : sysMenu.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
MenuItem other = (MenuItem) obj;
if (sysMenu == null) {
if (other.sysMenu != null)
return false;
} else if (!sysMenu.equals(other.sysMenu))
return false;
return true;
}
public MenuItem getParent() {
return parent;
}
@Override
public String toString() {
return "MenuItem [sysMenu=" + sysMenu.getName() + ","+this.children.size()+"]";
}
@Override
public String getName() {
return this.name;
}
}
package com.ibeetl.admin.core.rbac.tree;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.ibeetl.admin.core.entity.CoreOrg;
public class OrgItem implements TreeItem {
private Long id;
private CoreOrg org;
@JsonIgnore
private OrgItem parent;
private List<OrgItem> children = new ArrayList<>();
private String name;
public OrgItem(CoreOrg org){
this.id = org.getId();
this.org = org;
this.name =org!=null?org.getName():null;
}
public OrgItem findChild(Long orgId){
if(id.equals(orgId)){
return this;
}
for(OrgItem item:children){
OrgItem find = item.findChild(orgId);
if(find!=null){
return find;
}
}
return null;
}
public OrgItem findParentOrgItem(String type){
if(this.org.getType().equals(type)){
return this;
}
OrgItem parent = this;
while((parent=parent.getParent())!=null){
if(parent.getId()!=0&&parent.org.getType().equals(type)){
return parent;
}
}
return null;
}
/** 查询所有符合条件的的组织机构
* @param type 参考SysOrg,type=0 获取所有子机构
* @return
*/
public List<OrgItem> findAllChildOrgItem(String type){
return findAllChildOrgItem(type,null);
}
/**
* 取得当前机构的所有子机构
* @return
*/
public List<Long> findAllChildrenId(){
List<OrgItem> items =findAllChildOrgItem(null);
List<Long> children = new ArrayList<Long>();
for(OrgItem item:items){
children.add(item.getId());
}
return children;
}
/** 查询下级所期望的机构,但不查询breakType 指定的机构
* @param type 期望机构,0代表所有 ,1 集团 2 公司 等
* @param breakType 不希望出现的机构
* @return
*/
public List<OrgItem> findAllChildOrgItem(String type ,String breakType){
List<OrgItem> all = new LinkedList<>();
findChildOrgItem(all,this,type,breakType);
return all;
}
public List<OrgItem> findAllChildOrgItem(){
return this.findAllChildOrgItem(null, null);
}
private void findChildOrgItem(List<OrgItem> all,OrgItem parent,String type,String breakType){
for(OrgItem item:parent.children){
if(item.org.getType().equals(breakType)){
continue ;
}
if(type==null||type.equals(item.org.getType())){
all.add(item);
}
findChildOrgItem(all,item,type,breakType);
}
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
OrgItem other = (OrgItem) obj;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
return true;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public CoreOrg getOrg() {
return org;
}
public void setOrg(CoreOrg org) {
this.org = org;
}
public OrgItem getParent() {
return parent;
}
public void setParent(OrgItem parent) {
this.parent = parent;
this.parent.children.add(this);
}
public List<OrgItem> getChildren() {
return children;
}
public void setChildren(List<OrgItem> children) {
this.children = children;
}
@Override
public String getName() {
return this.name;
}
}
package com.ibeetl.admin.core.rbac.tree;
import java.util.List;
/**
* 菜单,功能点,组织机构等跟树有关的结构的接口
* @author lijiazhi
*
*/
public interface TreeItem extends java.io.Serializable {
public String getName();
public Long getId();
public List getChildren();
}
package com.ibeetl.admin.core.service;
import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import org.beetl.sql.core.SQLManager;
import org.beetl.sql.core.TailBean;
import org.beetl.sql.core.db.KeyHolder;
import org.springframework.beans.factory.annotation.Autowired;
import com.ibeetl.admin.core.annotation.Dict;
import com.ibeetl.admin.core.util.DictUtil;
import com.ibeetl.admin.core.util.FieldDict;
import com.ibeetl.admin.core.util.PlatformException;
import com.ibeetl.admin.core.util.enums.DelFlagEnum;
/**
* 描述:
* @author : xiandafu
*/
public class BaseService<T> {
@Autowired
protected DictUtil dictUtil;
@Autowired
protected SQLManager sqlManager;
/**
* 根据id查询对象,如果主键ID不存在
* @param id
* @return
*/
public T queryById(Object id) {
T t = sqlManager.single(getCurrentEntityClassz(), id);
queryEntityAfter((Object) t);
return t;
}
/**
* 根据id查询
* @param classz 返回的对象类型
* @param id 主键id
* @return
*/
public T queryById(Class<T> classz, Object id) {
T t = sqlManager.unique(classz, id);
queryEntityAfter((Object) t);
return t;
}
/**
* 新增一条数据
* @param model 实体类
* @return
*/
public boolean save(T model) {
return sqlManager.insert(model,true) > 0;
}
/**
* 删除数据(一般为逻辑删除,更新del_flag字段为1)
* @param ids
* @return
*/
public boolean deleteById(List<Long> ids) {
if (ids == null || ids.isEmpty()) {
throw new PlatformException("删除数据ID不能为空");
}
for (Long id : ids) {
}
List<Object> list = new ArrayList<>();
for (Long id : ids) {
Map map = new HashMap();
// always id,delFlag for pojo
map.put("id", id);
map.put("delFlag", DelFlagEnum.DELETED.getValue());
list.add(map);
}
int[] count = sqlManager.updateBatchTemplateById(getCurrentEntityClassz(), list);
int successCount = 0;
for (int successFlag : count) {
successCount += successFlag;
}
return successCount == ids.size();
}
public boolean deleteById(Long id) {
Map map = new HashMap();
// always id,delFlag for pojo
map.put("id", id);
map.put("delFlag", DelFlagEnum.DELETED.getValue());
int ret = sqlManager.updateTemplateById(getCurrentEntityClassz(), map);
return ret==1;
}
/**
* 根据id删除数据
* @param id 主键值
* @return
*/
public int forceDelete(Long id) {
return sqlManager.deleteById(getCurrentEntityClassz(), id);
}
/**
* 根据id删除数据
* @param id 主键值
* @return
*/
public int forceDelete(Class<T> classz, Long id) {
return sqlManager.deleteById(classz, id);
}
/**
* 更新,只更新不为空的字段
* @param model
* @return
*/
public boolean updateTemplate(T model) {
return sqlManager.updateTemplateById(model)>0;
}
/**
* 更新所有字段
* @param model
* @return
*/
public boolean update(T model) {
return sqlManager.updateById(model) > 0;
}
/**
* 获取当前注入泛型T的类型
* @return 具体类型
*/
@SuppressWarnings("unchecked")
private Class<T> getCurrentEntityClassz() {
return (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
}
public void queryListAfter(List list,FieldDict[] more){
for (Object bean : list) {
queryEntityAfter(bean,more);
}
}
public void queryEntityAfter(Object bean){
this.queryEntityAfter(bean, null);
}
public void queryListAfter(List list) {
for (Object bean : list) {
queryEntityAfter(bean);
}
}
public void queryEntityAfter(Object bean,FieldDict[] more) {
if (bean == null) {
return;
}
if(!(bean instanceof TailBean)){
throw new PlatformException("指定的pojo"+bean.getClass()+" 不能获取数据字典,需要继承TailBean");
}
TailBean ext = (TailBean)bean;
Field[] fields = ext.getClass().getDeclaredFields();
for (Field field : fields) {
if (field.isAnnotationPresent(Dict.class)) {
field.setAccessible(true);
Dict dict = field.getAnnotation(Dict.class);
try {
String display = "";
Object fieldValue = field.get(ext);
if (fieldValue != null) {
display = dictUtil.getDictName(fieldValue.toString());
}
ext.set(field.getName() + dict.suffix(), display);
} catch (Exception e) {
e.printStackTrace();
}
}
}
if(more==null){
return ;
}
for(FieldDict desc:more){
Object fieldValue = ext.get(desc.getField());
String display = "";
if (fieldValue != null) {
display = dictUtil.getDictName(fieldValue.toString());
}
ext.set(desc.getDisplayField(), display);
}
}
}
package com.ibeetl.admin.core.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.ibeetl.admin.core.dao.CoreAuditDao;
import com.ibeetl.admin.core.entity.CoreAudit;
@Service
@Transactional
public class CoreAuditService extends BaseService<CoreAudit> {
@Autowired
private CoreAuditDao sysAuditDao;
}
\ No newline at end of file
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment