forked from gitee/vben-java
增加组织架构层级树,用于流程计算处理人
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
package vboot.core.module.sys.org.tier;
|
||||
|
||||
import lombok.Data;
|
||||
import vboot.core.module.sys.org.root.SysOrg;
|
||||
|
||||
import javax.persistence.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
//层级节点
|
||||
@Entity
|
||||
@Data
|
||||
public class SysOrgTierNode {
|
||||
|
||||
@Id
|
||||
@Column(length = 32)
|
||||
private String id;//ID
|
||||
|
||||
@Column(length = 100)
|
||||
private String name;//名称
|
||||
|
||||
@Transient
|
||||
private List<SysOrgTierNode> children = new ArrayList<>(); //行项目
|
||||
|
||||
@Transient
|
||||
private String pid;//父ID
|
||||
|
||||
@ManyToOne(fetch = FetchType.EAGER)
|
||||
@JoinColumn(name = "pid")
|
||||
private SysOrgTierNode parent;//父元素
|
||||
|
||||
private Integer tieid;//1为机构,2为部门,4为岗位,8为用户,16为常用群组,32为角色线
|
||||
|
||||
@Column(length = 1000)
|
||||
private String tier;//层级
|
||||
|
||||
private String notes;//备注
|
||||
|
||||
private Integer ornum;//排序号
|
||||
|
||||
@Column(updatable = false)
|
||||
private Date crtim = new Date();//创建时间
|
||||
|
||||
private Date uptim;//更新时间
|
||||
|
||||
private Boolean avtag;//可用标记
|
||||
|
||||
@ManyToOne(fetch = FetchType.EAGER)
|
||||
@JoinColumn(name = "memid")
|
||||
private SysOrg member;
|
||||
}
|
||||
@@ -0,0 +1,92 @@
|
||||
package vboot.core.module.sys.org.tier;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import vboot.core.common.api.R;
|
||||
import vboot.core.common.dao.JdbcDao;
|
||||
import vboot.core.common.dao.Sqler;
|
||||
import vboot.core.common.pojo.Ztree;
|
||||
import vboot.core.xutil.lang.XstrUtil;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.util.List;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("sys/org/tnode")
|
||||
public class SysOrgTierNodeApi {
|
||||
|
||||
private String table = "sys_org_tier_node";
|
||||
|
||||
@GetMapping
|
||||
public R get(String name, String pid, String notes) {
|
||||
Sqler sqler = new Sqler(table);
|
||||
if (XstrUtil.isNotBlank(name)) {
|
||||
sqler.addLike("t.name" , name);
|
||||
} else {
|
||||
if ("".equals(pid)) {
|
||||
sqler.addWhere("t.pid is null");
|
||||
} else if (XstrUtil.isNotBlank(pid)) {
|
||||
sqler.addEqual("t.pid" , pid);
|
||||
}
|
||||
}
|
||||
sqler.addLike("t.notes" , notes);
|
||||
sqler.addWhere("t.avtag=1");
|
||||
sqler.addOrder("t.ornum");
|
||||
sqler.addSelect("t.ornum,t.notes,t.pid,t.crtim,t.uptim");
|
||||
return R.ok(jdbcDao.findPageData(sqler));
|
||||
}
|
||||
|
||||
//查询层级树
|
||||
@GetMapping("tree")
|
||||
public R getTree(String name) {
|
||||
Sqler sqler = new Sqler("sys_org_tier_node");
|
||||
sqler.addSelect("t.pid");
|
||||
sqler.addLike("t.name", name);
|
||||
sqler.addOrder("t.ornum");
|
||||
sqler.addWhere("t.avtag=1");
|
||||
List<Ztree> list = jdbcDao.findTreeList(sqler);
|
||||
return R.ok(list);
|
||||
}
|
||||
|
||||
//排除了自己
|
||||
// @GetMapping("listn")
|
||||
// public R listn(String name, String id) {
|
||||
// Sqler sqler = new Sqler(table);
|
||||
// sqler.addLike("t.name", name);
|
||||
// sqler.addWhere("t.avtag=1");
|
||||
// sqler.addOrder("t.ornum");
|
||||
// sqler.addSelect("t.pid");
|
||||
// return R.ok(service.findWithoutItself(sqler, id));
|
||||
// }
|
||||
|
||||
@GetMapping("one/{id}")
|
||||
public R getOne(@PathVariable String id, HttpServletRequest request) {
|
||||
SysOrgTierNode main = service.findById(id);
|
||||
return R.ok(main);
|
||||
}
|
||||
|
||||
|
||||
@PostMapping
|
||||
public R post(@RequestBody SysOrgTierNode main) {
|
||||
service.insert(main);
|
||||
return R.ok(main.getId());
|
||||
}
|
||||
|
||||
@PutMapping
|
||||
public R put(@RequestBody SysOrgTierNode main) throws Exception {
|
||||
service.update(main);
|
||||
return R.ok(main.getId());
|
||||
}
|
||||
|
||||
@DeleteMapping("{ids}")
|
||||
public R delete(@PathVariable String[] ids) {
|
||||
return R.ok(service.delete(ids));
|
||||
}
|
||||
|
||||
@Autowired
|
||||
private JdbcDao jdbcDao;
|
||||
|
||||
@Autowired
|
||||
private SysOrgTierNodeService service;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package vboot.core.module.sys.org.tier;
|
||||
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
|
||||
public interface SysOrgTierNodeRepo extends JpaRepository<SysOrgTierNode,String> {
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,184 @@
|
||||
package vboot.core.module.sys.org.tier;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.jdbc.core.BeanPropertyRowMapper;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import vboot.core.common.api.PageData;
|
||||
import vboot.core.common.dao.JdbcDao;
|
||||
import vboot.core.common.dao.Sqler;
|
||||
import vboot.core.common.pojo.ZidName;
|
||||
import vboot.core.xutil.lang.XstrUtil;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public class SysOrgTierNodeService {
|
||||
|
||||
@Transactional(readOnly = true)
|
||||
public SysOrgTierNode findById(String id) {
|
||||
return nodeRepo.findById(id).get();
|
||||
}
|
||||
|
||||
public SysOrgTierNode insert(SysOrgTierNode main) {
|
||||
if (main.getId() == null || "".equals(main.getId())) {
|
||||
main.setId(XstrUtil.getUUID());
|
||||
}
|
||||
if (main.getParent() == null || StrUtil.isBlank(main.getParent().getId())) {
|
||||
main.setTier("x" + main.getId() + "x");
|
||||
} else {
|
||||
String tier = jdbcDao.findOneString("select tier from sys_org_tier_node where id=?", main.getParent().getId());
|
||||
main.setTier(tier + main.getId() + "x");
|
||||
}
|
||||
return nodeRepo.save(main);
|
||||
}
|
||||
|
||||
|
||||
public SysOrgTierNode update(SysOrgTierNode main) throws Exception {
|
||||
main.setUptim(new Date());
|
||||
if (main.getParent() == null || StrUtil.isBlank(main.getParent().getId())) {
|
||||
main.setTier("x" + main.getId() + "x");
|
||||
} else {
|
||||
String tier = jdbcDao.findOneString("select tier from sys_org_tier_node where id=?", main.getParent().getId());
|
||||
main.setTier(tier + main.getId() + "x");
|
||||
String[] arr = tier.split("x");
|
||||
for (String str : arr) {
|
||||
if (main.getId().equals(str)) {
|
||||
throw new Exception("父层级不能为自己或者自己的子层级");
|
||||
}
|
||||
}
|
||||
}
|
||||
SysOrgTierNode backTier = nodeRepo.save(main);
|
||||
String oldTier = jdbcDao.findOneString("select tier from sys_org_tier_node where id=?", main.getId());
|
||||
dealTier(oldTier, main.getTier(), main.getId());
|
||||
return backTier;
|
||||
}
|
||||
|
||||
public int delete(String[] ids) {
|
||||
for (String str : ids) {
|
||||
nodeRepo.deleteById(str);
|
||||
}
|
||||
return ids.length;
|
||||
}
|
||||
|
||||
private void dealTier(String oldTier, String newTier, String id) {
|
||||
String sql = "select id,tier as name from sys_org_tier_node where tier like ? and id<>?";
|
||||
List<ZidName> list = jdbcDao.findIdNameList(sql, oldTier + "%", id);
|
||||
String updateSql = "update sys_org_tier_node set tier=? where id=?";
|
||||
List<Object[]> updateList = new ArrayList<Object[]>();
|
||||
batchReady(oldTier, newTier, list, updateList);
|
||||
jdbcDao.batch(updateSql, updateList);
|
||||
}
|
||||
|
||||
|
||||
private void batchReady(String oldTier, String newTier, List<ZidName> list, List<Object[]> updateList) {
|
||||
for (ZidName ztwo : list) {
|
||||
Object[] arr = new Object[2];
|
||||
arr[1] = ztwo.getId();
|
||||
arr[0] = ztwo.getName().replace(oldTier, newTier);
|
||||
updateList.add(arr);
|
||||
}
|
||||
}
|
||||
|
||||
public List<SysOrgTierNode> findAll(Sqler sqler) {
|
||||
List<SysOrgTierNode> list = jdbcDao.getTp().query(sqler.getSql(), sqler.getParams(), new BeanPropertyRowMapper<>(SysOrgTierNode.class));
|
||||
return list;
|
||||
}
|
||||
|
||||
public PageData findPageData(Sqler sqler) {
|
||||
return jdbcDao.findPageData(sqler);
|
||||
}
|
||||
|
||||
public List<SysOrgTierNode> findTree(Sqler sqler) {
|
||||
List<SysOrgTierNode> list = jdbcDao.getTp().query(sqler.getSql(), sqler.getParams(), new BeanPropertyRowMapper<>(SysOrgTierNode.class));
|
||||
return buildByRecursive(list);
|
||||
}
|
||||
|
||||
//使用递归方法建树
|
||||
private List<SysOrgTierNode> buildByRecursive(List<SysOrgTierNode> nodes) {
|
||||
List<SysOrgTierNode> list = new ArrayList<>();
|
||||
for (SysOrgTierNode node : nodes) {
|
||||
if (node.getPid() == null) {
|
||||
list.add(findChildrenByTier(node, nodes));
|
||||
} else {
|
||||
boolean flag = false;
|
||||
for (SysOrgTierNode node2 : nodes) {
|
||||
if (node.getPid().equals(node2.getId())) {
|
||||
flag = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!flag) {
|
||||
list.add(findChildrenByTier(node, nodes));
|
||||
}
|
||||
}
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
//递归查找子节点
|
||||
private SysOrgTierNode findChildrenByTier(SysOrgTierNode node, List<SysOrgTierNode> nodes) {
|
||||
for (SysOrgTierNode item : nodes) {
|
||||
if (node.getId().equals(item.getPid())) {
|
||||
if (node.getChildren() == null) {
|
||||
node.setChildren(new ArrayList<>());
|
||||
}
|
||||
node.getChildren().add(findChildrenByTier(item, nodes));
|
||||
}
|
||||
}
|
||||
return node;
|
||||
}
|
||||
|
||||
|
||||
// public List<SysOrgTierTree> findWithoutItself(Sqler sqler, String id) {
|
||||
// List<SysOrgTierTree> list = jdbcDao.getTp().query(sqler.getSql(), sqler.getParams(), new BeanPropertyRowMapper<>(SysOrgTierTree.class));
|
||||
// return buildByRecursiveWithoutItself(list, id);
|
||||
// }
|
||||
|
||||
//使用递归方法建树不包含自己
|
||||
// private List<SysOrgTierTree> buildByRecursiveWithoutItself(List<SysOrgTierTree> nodes, String id) {
|
||||
// List<SysOrgTierTree> list = new ArrayList<>();
|
||||
// for (SysOrgTierTree node : nodes) {
|
||||
// if (node.getPid() == null && !node.getId().equals(id)) {
|
||||
// list.add(findChildrenByTierWithoutItself(node, nodes, id));
|
||||
// } else {
|
||||
// boolean flag = false;
|
||||
// for (SysOrgTierTree node2 : nodes) {
|
||||
// if (node.getPid() != null && node.getPid().equals(node2.getId())) {
|
||||
// flag = true;
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
// if (!flag && !node.getId().equals(id)) {
|
||||
// list.add(findChildrenByTierWithoutItself(node, nodes, id));
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// return list;
|
||||
// }
|
||||
|
||||
//递归查找子节点不包含自己
|
||||
// private SysOrgTierTree findChildrenByTierWithoutItself(SysOrgTierTree node, List<SysOrgTierTree> nodes, String id) {
|
||||
// for (SysOrgTierTree item : nodes) {
|
||||
// if (node.getId().equals(item.getPid()) && (!item.getId().equals(id))) {
|
||||
// if (node.getChildren() == null) {
|
||||
// node.setChildren(new ArrayList<>());
|
||||
// }
|
||||
// node.getChildren().add(findChildrenByTierWithoutItself(item, nodes, id));
|
||||
// }
|
||||
// }
|
||||
// return node;
|
||||
// }
|
||||
|
||||
@Autowired
|
||||
private JdbcDao jdbcDao;
|
||||
|
||||
@Autowired
|
||||
private SysOrgTierNodeRepo nodeRepo;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package vboot.core.module.sys.org.tier;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.Id;
|
||||
|
||||
//层级角色
|
||||
@Data
|
||||
@Entity
|
||||
public class SysOrgTierRole {
|
||||
@Id
|
||||
@Column(length = 36)
|
||||
private String id;//主键
|
||||
|
||||
@Column(length = 64)
|
||||
private String name;//角色名称
|
||||
|
||||
private Integer ornum;//排序号
|
||||
|
||||
private String notes;//备注
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package vboot.core.module.sys.org.tier;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import vboot.core.common.entity.BaseMainEntity;
|
||||
|
||||
import javax.persistence.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
//层级树
|
||||
@Entity
|
||||
@Getter
|
||||
@Setter
|
||||
public class SysOrgTierTree extends BaseMainEntity {
|
||||
|
||||
private Integer ornum;//排序号
|
||||
|
||||
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
|
||||
@JoinColumn(name = "treid")
|
||||
@OrderBy("ornum ASC")
|
||||
private List<SysOrgTierRole> roles = new ArrayList<>();//层级角色
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
package vboot.core.module.sys.org.tier;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import vboot.core.common.api.R;
|
||||
import vboot.core.common.dao.Sqler;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("sys/org/ttree")
|
||||
public class SysOrgTierTreeApi {
|
||||
|
||||
@GetMapping
|
||||
public R get(String name) {
|
||||
Sqler sqler = new Sqler("sys_org_tier_tree");
|
||||
sqler.addLike("t.name", name);
|
||||
sqler.addSelect("t.notes");
|
||||
return R.ok(service.findPageData(sqler));
|
||||
}
|
||||
|
||||
@GetMapping("one/{id}")
|
||||
public R getOne(@PathVariable String id) {
|
||||
SysOrgTierTree main = service.findOne(id);
|
||||
return R.ok(main);
|
||||
}
|
||||
|
||||
@PostMapping
|
||||
public R post(@RequestBody SysOrgTierTree main) {
|
||||
return R.ok(service.insert(main));
|
||||
}
|
||||
|
||||
@PutMapping
|
||||
public R put(@RequestBody SysOrgTierTree main) {
|
||||
return R.ok(service.update(main));
|
||||
}
|
||||
|
||||
@DeleteMapping("{ids}")
|
||||
public R delete(@PathVariable String[] ids) {
|
||||
return R.ok(service.delete(ids));
|
||||
}
|
||||
|
||||
@Autowired
|
||||
private SysOrgTierTreeService service;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
package vboot.core.module.sys.org.tier;
|
||||
|
||||
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
|
||||
public interface SysOrgTierTreeRepo extends JpaRepository<SysOrgTierTree,String> {
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
package vboot.core.module.sys.org.tier;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import vboot.core.common.service.BaseMainService;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
|
||||
@Service
|
||||
public class SysOrgTierTreeService extends BaseMainService<SysOrgTierTree> {
|
||||
|
||||
@Autowired
|
||||
private SysOrgTierTreeRepo repo;
|
||||
|
||||
@PostConstruct
|
||||
public void initDao() {
|
||||
super.setRepo(repo);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -15,8 +15,8 @@ public class SysPortalMain extends BaseMainEntity {
|
||||
|
||||
private Integer ornum;
|
||||
|
||||
@ManyToMany
|
||||
@JoinTable(name = "sys_portal_main_viewer", joinColumns = {@JoinColumn(name = "mid")},
|
||||
inverseJoinColumns = {@JoinColumn(name = "oid")})
|
||||
private List<SysOrg> viewers;
|
||||
// @ManyToMany
|
||||
// @JoinTable(name = "sys_portal_viewer", joinColumns = {@JoinColumn(name = "mid")},
|
||||
// inverseJoinColumns = {@JoinColumn(name = "oid")})
|
||||
// private List<SysOrg> viewers;
|
||||
}
|
||||
Reference in New Issue
Block a user