You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
609 lines
27 KiB
Java
609 lines
27 KiB
Java
package com.engine.sship.service.impl;
|
|
|
|
import com.engine.common.service.HrmCommonService;
|
|
import com.engine.common.service.impl.HrmCommonServiceImpl;
|
|
import com.engine.core.impl.Service;
|
|
import com.engine.sship.entity.*;
|
|
import com.engine.sship.service.OrgChartService;
|
|
import com.weaver.general.BaseBean;
|
|
import com.weaver.general.Util;
|
|
import lombok.SneakyThrows;
|
|
import org.apache.commons.collections.CollectionUtils;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import weaver.conn.RecordSet;
|
|
import weaver.hrm.company.DepartmentComInfo;
|
|
import weaver.hrm.resource.ResourceComInfo;
|
|
|
|
import java.util.*;
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
* @Author liang.cheng
|
|
* @Date 2023/9/26 5:52 PM
|
|
* @Description:
|
|
* @Version 1.0
|
|
*/
|
|
public class OrgChartServiceImpl extends Service implements OrgChartService {
|
|
|
|
private final HrmCommonService hrmCommonService = new HrmCommonServiceImpl();
|
|
@Override
|
|
public boolean selectIdsByRole(String roleId,String rolelevel) {
|
|
String roleMemberIds = hrmCommonService.getRoleMemberIds(roleId, rolelevel);
|
|
List<String> roleMemberList = Arrays.stream(roleMemberIds.split(","))
|
|
.filter(s -> !s.isEmpty())
|
|
.collect(Collectors.toList());
|
|
return roleMemberList.stream()
|
|
.anyMatch(s -> Integer.parseInt(s) == user.getUID());
|
|
}
|
|
|
|
@Override
|
|
public TreeDataVO selectResourceChart() {
|
|
BaseBean bb = new BaseBean();
|
|
String roleId = bb.getPropValue("sship", "roleId");
|
|
String rolelevel = bb.getPropValue("sship", "rolelevel");
|
|
boolean isExsit = selectIdsByRole(roleId, rolelevel);
|
|
if (isExsit || (user.getUID() == 1)) {
|
|
return getAllTreeData();
|
|
}
|
|
|
|
return getBaseTreeData();
|
|
}
|
|
|
|
@Override
|
|
public List<Integer> selectCusSiteHead() {
|
|
RecordSet rs = new RecordSet();
|
|
BaseBean bb = new BaseBean();
|
|
String fieldid = bb.getPropValue("sship", "fieldid");
|
|
String sitehead = bb.getPropValue("sship", "sitehead");
|
|
List<Integer> ids = new ArrayList<>();
|
|
rs.executeQuery("select id from cus_fielddata where "+fieldid+" = ? and scopeid = 3 and scope = 'HrmCustomFieldByInfoType'",sitehead);
|
|
while (rs.next()) {
|
|
ids.add(Util.getIntValue(rs.getString("id")));
|
|
}
|
|
return ids;
|
|
}
|
|
|
|
@SneakyThrows
|
|
@Override
|
|
public List<PersonTableVO> selectPerson(PersonTableParam personTableParam) {
|
|
List<PersonTablePO> poList;
|
|
ResourceComInfo rInfo = new ResourceComInfo();
|
|
BaseBean bb = new BaseBean();
|
|
String shareholder = bb.getPropValue("sship", "shareholder");
|
|
String committee = bb.getPropValue("sship", "committee");
|
|
switch(personTableParam.getId()){
|
|
case "S-1":
|
|
poList = selectByLevel(Integer.valueOf(shareholder));
|
|
break;
|
|
case "C-1":
|
|
poList = selectByLevel(Integer.valueOf(committee));
|
|
break;
|
|
default:
|
|
poList = selectByDeptId(personTableParam.getId());
|
|
}
|
|
|
|
return poList.stream()
|
|
.map(po -> new PersonTableVO(po.getId(), po.getLastname(), po.getWorkcode(),
|
|
po.getSex() == 0 ? "男" : "女",
|
|
po.getManagerid() != null ? rInfo.getLastname(String.valueOf(po.getManagerid())) : "",
|
|
po.getLoginid()))
|
|
.collect(Collectors.toList());
|
|
}
|
|
|
|
@Override
|
|
public TreeDataVO selectOrganizationChart(OrgTreeParam orgTreeParam) {
|
|
RecordSet rs = new RecordSet();
|
|
BaseBean bb = new BaseBean();
|
|
String virtualType = orgTreeParam.getVirtualType();
|
|
String root = orgTreeParam.getRoot();
|
|
String level = orgTreeParam.getLevel();
|
|
TreeDataVO build;
|
|
String roleId = bb.getPropValue("sship", "roleId");
|
|
String rolelevel = bb.getPropValue("sship", "rolelevel");
|
|
boolean isExsit = selectIdsByRole(roleId, rolelevel);
|
|
String id = "";
|
|
if (isExsit || (user.getUID() == 1)) {
|
|
//ShareHolder唯一
|
|
if (StringUtils.isBlank(root)) {
|
|
rs.executeQuery("select a.id,departmentmark,bmfzrid from hrmdepartmentvirtual a " +
|
|
"left join uf_xnbmfzr on a.id =xnzzid where supdepid = 0 and virtualtype = ? order by showorder", virtualType);
|
|
rs.next();
|
|
id = rs.getString("id");
|
|
} else {
|
|
rs.executeQuery("select departmentmark from hrmdepartmentvirtual where id = ? and virtualtype = ? order by showorder", root.substring(3),virtualType);
|
|
rs.next();
|
|
id = root.substring(3);
|
|
}
|
|
build = TreeDataVO.builder()
|
|
.id(id)
|
|
.label(Util.null2String(rs.getString("departmentmark"))+"("+Util.null2String(rs.getString("bmfzrid"))+")")
|
|
.build();
|
|
if (isVirtualSubDepartment(id,virtualType)) {
|
|
build.setChildrens(getVirtualSubDept(id,virtualType));
|
|
}
|
|
//level等于1
|
|
if(StringUtils.isNotBlank(level)){
|
|
if(Integer.parseInt(level)==1){
|
|
build.setChildrens(null);
|
|
}else {
|
|
build.setChildrens(setTreeStructure(build.getChildrens(),Integer.parseInt(level)));
|
|
}
|
|
}
|
|
} else {
|
|
String departmentId = "";
|
|
//获取当前部门
|
|
if(StringUtils.isBlank(root)){
|
|
rs.executeQuery("select departmentid from hrmresourcevirtual where resourceid = ? and virtualtype = ?",user.getUID(),virtualType);
|
|
rs.next();
|
|
departmentId = rs.getString("departmentid");
|
|
}else{
|
|
departmentId = root.substring(3);
|
|
}
|
|
rs.executeQuery("select departmentmark,bmfzrid from hrmdepartmentvirtual a left join uf_xnbmfzr on a.id =xnzzid where a.id = ? and virtualtype = ? order by showorder",departmentId,virtualType);
|
|
rs.next();
|
|
build = TreeDataVO.builder()
|
|
.id(departmentId)
|
|
.label(Util.null2String(rs.getString("departmentmark"))+"("+Util.null2String(rs.getString("bmfzrid"))+")")
|
|
.build();
|
|
if (isVirtualSubDepartment(departmentId,virtualType)) {
|
|
build.setChildrens(getVirtualSubDept(departmentId,virtualType));
|
|
}
|
|
//level等于1
|
|
if(StringUtils.isNotBlank(level)){
|
|
if(Integer.parseInt(level)==1){
|
|
build.setChildrens(null);
|
|
}else {
|
|
build.setChildrens(setTreeStructure(build.getChildrens(),Integer.parseInt(level)));
|
|
}
|
|
}
|
|
|
|
}
|
|
return build;
|
|
}
|
|
|
|
/**
|
|
* 根据层级修改树结构
|
|
* @param childrens
|
|
*/
|
|
public static List<ChartChildrensVO> setTreeStructure(List<ChartChildrensVO> childrens,int level) {
|
|
switch(level){
|
|
case 2:
|
|
childrens.forEach(childrensVO->childrensVO.setChildrens(null));
|
|
break;
|
|
case 3:
|
|
childrens.forEach(childrensVO->childrensVO.getChildrens().forEach(childrensVO1 -> childrensVO1.setChildrens(null)));
|
|
break;
|
|
case 4:
|
|
childrens.forEach(childrensVO->childrensVO.getChildrens().forEach(childrensVO1 ->
|
|
childrensVO1.getChildrens().forEach(childrensVO2 -> childrensVO2.setChildrens(null))));
|
|
break;
|
|
case 5:
|
|
childrens.forEach(childrensVO->childrensVO.getChildrens().forEach(childrensVO1 ->
|
|
childrensVO1.getChildrens().forEach(childrensVO2 -> childrensVO2.getChildrens().forEach(childrensVO3 ->
|
|
childrensVO3.setChildrens(null)))));
|
|
break;
|
|
case 6:
|
|
childrens.forEach(childrensVO->childrensVO.getChildrens().forEach(childrensVO1 ->
|
|
childrensVO1.getChildrens().forEach(childrensVO2 -> childrensVO2.getChildrens().forEach(childrensVO3 ->
|
|
childrensVO3.getChildrens().forEach(childrensVO4 -> childrensVO4.setChildrens(null))))));
|
|
break;
|
|
case 7:
|
|
childrens.forEach(childrensVO->childrensVO.getChildrens().forEach(childrensVO1 ->
|
|
childrensVO1.getChildrens().forEach(childrensVO2 -> childrensVO2.getChildrens().forEach(childrensVO3 ->
|
|
childrensVO3.getChildrens().forEach(childrensVO4 -> childrensVO4.getChildrens().
|
|
forEach(childrensVO5 -> childrensVO5.setChildrens(null)))))));
|
|
break;
|
|
case 8:
|
|
childrens.forEach(childrensVO->childrensVO.getChildrens().forEach(childrensVO1 ->
|
|
childrensVO1.getChildrens().forEach(childrensVO2 -> childrensVO2.getChildrens().forEach(childrensVO3 ->
|
|
childrensVO3.getChildrens().forEach(childrensVO4 -> childrensVO4.getChildrens().
|
|
forEach(childrensVO5 -> childrensVO5.getChildrens().forEach(childrensVO6 -> childrensVO6.setChildrens(null))))))));
|
|
break;
|
|
case 9:
|
|
childrens.forEach(childrensVO->childrensVO.getChildrens().forEach(childrensVO1 ->
|
|
childrensVO1.getChildrens().forEach(childrensVO2 -> childrensVO2.getChildrens().forEach(childrensVO3 ->
|
|
childrensVO3.getChildrens().forEach(childrensVO4 -> childrensVO4.getChildrens().
|
|
forEach(childrensVO5 -> childrensVO5.getChildrens().forEach(childrensVO6 ->
|
|
childrensVO6.getChildrens().forEach(childrensVO7 -> childrensVO7.setChildrens(null)))))))));
|
|
break;
|
|
case 10:
|
|
childrens.forEach(childrensVO->childrensVO.getChildrens().forEach(childrensVO1 ->
|
|
childrensVO1.getChildrens().forEach(childrensVO2 -> childrensVO2.getChildrens().forEach(childrensVO3 ->
|
|
childrensVO3.getChildrens().forEach(childrensVO4 -> childrensVO4.getChildrens().
|
|
forEach(childrensVO5 -> childrensVO5.getChildrens().forEach(childrensVO6 ->
|
|
childrensVO6.getChildrens().forEach(childrensVO7 ->
|
|
childrensVO7.getChildrens().forEach(childrensVO8 -> childrensVO8.setChildrens(null))))))))));
|
|
break;
|
|
default:
|
|
childrens.forEach(childrensVO->childrensVO.setChildrens(null));
|
|
}
|
|
return childrens;
|
|
}
|
|
|
|
/**
|
|
* 遍历n叉树最大深度
|
|
* @param root
|
|
*/
|
|
public static int maxDepth(ChartChildrensVO root) {
|
|
if(CollectionUtils.isEmpty(root.getChildrens())){
|
|
return 0;
|
|
}
|
|
int num = 0;
|
|
if(!CollectionUtils.isEmpty(root.getChildrens())){
|
|
for (int i = 0; i < root.getChildrens().size(); i++) {
|
|
num = Math.max(num, 1 + maxDepth(root.getChildrens().get(i)));
|
|
}
|
|
}
|
|
return num;
|
|
}
|
|
|
|
private List<ChartChildrensVO> getVirtualSubDept(String supdepid,String virtualType) {
|
|
RecordSet rs = new RecordSet();
|
|
List<ChartChildrensVO> voList = new ArrayList<>();
|
|
rs.executeQuery("select a.id,departmentmark,bmfzrid from hrmdepartmentvirtual a left join uf_xnbmfzr on a.id =xnzzid where supdepid <> '' and supdepid = ? and virtualtype = ? order by showorder",supdepid,virtualType);
|
|
while (rs.next()) {
|
|
String id = Util.null2String(rs.getString("id"));
|
|
ChartChildrensVO build = ChartChildrensVO.builder()
|
|
.pid(supdepid)
|
|
.id(id)
|
|
.label(Util.null2String(rs.getString("departmentmark"))+"("+Util.null2String(rs.getString("bmfzrid"))+")")
|
|
.build();
|
|
if (isVirtualSubDepartment(id,virtualType)) {
|
|
build.setChildrens(getVirtualSubDept(id,virtualType));
|
|
}
|
|
voList.add(build);
|
|
}
|
|
return voList;
|
|
}
|
|
|
|
private List<ChartChildrensVO> getVirtualSub(String supdepid,String virtualType) {
|
|
RecordSet rs = new RecordSet();
|
|
List<ChartChildrensVO> voList = new ArrayList<>();
|
|
rs.executeQuery("select id,departmentmark from hrmdepartmentvirtual where supdepid <> '' and supdepid = ? and virtualtype = ? order by showorder", supdepid, virtualType);
|
|
while (rs.next()) {
|
|
String id = Util.null2String(rs.getString("id"));
|
|
ChartChildrensVO build = ChartChildrensVO.builder()
|
|
.pid(supdepid)
|
|
.id(id)
|
|
.label(Util.null2String(rs.getString("departmentmark")))
|
|
.build();
|
|
if (isVirtualSubDepartment(id, virtualType)) {
|
|
build.setChildrens(getVirtualSub(id, virtualType));
|
|
}
|
|
voList.add(build);
|
|
}
|
|
return voList;
|
|
}
|
|
private List<DropTreeDataVO> getVirtualSubDeptData(String supdepid,String virtualType) {
|
|
RecordSet rs = new RecordSet();
|
|
List<DropTreeDataVO> voList = new ArrayList<>();
|
|
rs.executeQuery("select id,departmentmark from hrmdepartmentvirtual where supdepid <> '' and supdepid = ? and virtualtype = ? order by showorder",supdepid,virtualType);
|
|
while (rs.next()) {
|
|
String id = Util.null2String(rs.getString("id"));
|
|
DropTreeDataVO build = DropTreeDataVO.builder()
|
|
.value(getRandomData()+id)
|
|
.label(Util.null2String(rs.getString("departmentmark")))
|
|
.build();
|
|
if (isVirtualSubDepartment(id,virtualType)) {
|
|
build.setChildren(getVirtualSubDeptData(id,virtualType));
|
|
}
|
|
voList.add(build);
|
|
}
|
|
return voList;
|
|
}
|
|
|
|
private String getRandomData() {
|
|
String name="";//先定义空字符串
|
|
for (int i=0;i<3;i++){
|
|
char n=(char)(new Random().nextInt(26)+97) ;
|
|
name += n;//name=name+n;
|
|
}
|
|
return name;
|
|
}
|
|
|
|
|
|
@Override
|
|
public boolean isVirtualSubDepartment(String supdepid,String virtualType) {
|
|
RecordSet rs = new RecordSet();
|
|
boolean isSupdepid = false;
|
|
rs.executeQuery("select count(1) from hrmdepartmentvirtual where supdepid <> '' and supdepid = ? and virtualtype = ? ",supdepid,virtualType);
|
|
if (rs.next()) {
|
|
isSupdepid = rs.getInt(1) > 0;
|
|
}
|
|
return isSupdepid;
|
|
}
|
|
|
|
@SneakyThrows
|
|
@Override
|
|
public List<PersonTableVO> selectVirtualPerson(PersonTableParam personTableParam) {
|
|
RecordSet rs = new RecordSet();
|
|
List<Integer> idList = new ArrayList<>();
|
|
ResourceComInfo rInfo = new ResourceComInfo();
|
|
List<PersonTableVO> voList = new ArrayList<>();
|
|
List<PersonTablePO> poList = new ArrayList<>();
|
|
rs.executeQuery("select resourceid from hrmresourcevirtual where departmentid = ?",personTableParam.getId());
|
|
while (rs.next()) {
|
|
idList.add(Util.getIntValue(rs.getString("resourceid")));
|
|
}
|
|
if (CollectionUtils.isNotEmpty(idList)) {
|
|
rs.executeQuery("select id,lastname,workcode,sex,managerid,loginid from hrmresource where status < 4 and id in ("+ StringUtils.join(idList,",")+")");
|
|
while (rs.next()) {
|
|
poList.add(
|
|
PersonTablePO.builder()
|
|
.id(Util.getIntValue(rs.getString("id")))
|
|
.lastname(Util.null2String(rs.getString("lastname")))
|
|
.workcode(Util.null2String(rs.getString("workcode")))
|
|
.sex(Util.getIntValue(rs.getString("sex")))
|
|
.managerid(Util.getIntValue(rs.getString("managerid")))
|
|
.loginid(Util.null2String(rs.getString("loginid")))
|
|
.build()
|
|
);
|
|
}
|
|
voList = poList.stream()
|
|
.map(po -> new PersonTableVO(po.getId(), po.getLastname(), po.getWorkcode(),
|
|
po.getSex() == 0 ? "男" : "女",
|
|
po.getManagerid() != null ? rInfo.getLastname(String.valueOf(po.getManagerid())) : "",
|
|
po.getLoginid()))
|
|
.collect(Collectors.toList());
|
|
}
|
|
|
|
return voList;
|
|
}
|
|
|
|
@Override
|
|
public List<SelectVO> selectVirtualTop() {
|
|
List<SelectVO> voList = new ArrayList<>();
|
|
RecordSet rs = new RecordSet();
|
|
rs.executeQuery("select id,companyname from hrmcompanyvirtual");
|
|
while (rs.next()) {
|
|
voList.add(SelectVO.builder()
|
|
.value(Util.null2String(rs.getString("id")))
|
|
.label(Util.null2String(rs.getString("companyname"))).build());
|
|
}
|
|
return voList;
|
|
}
|
|
|
|
@Override
|
|
public List<DropTreeDataVO> selectVirtualTopTwo(String virtualType) {
|
|
RecordSet rs = new RecordSet();
|
|
BaseBean bb = new BaseBean();
|
|
List<DropTreeDataVO> dataVOS = new ArrayList<>();
|
|
DropTreeDataVO build;
|
|
String roleId = bb.getPropValue("sship", "roleId");
|
|
String rolelevel = bb.getPropValue("sship", "rolelevel");
|
|
boolean isExsit = selectIdsByRole(roleId, rolelevel);
|
|
if (isExsit || (user.getUID() == 1)) {
|
|
//ShareHolder唯一
|
|
rs.executeQuery("select id,departmentmark from hrmdepartmentvirtual where supdepid = 0 and virtualtype = ? order by showorder",virtualType);
|
|
rs.next();
|
|
String id = Util.null2String(rs.getString("id"));
|
|
build = DropTreeDataVO.builder()
|
|
.value(getRandomData()+id)
|
|
.label(Util.null2String(rs.getString("departmentmark")))
|
|
.build();
|
|
if (isVirtualSubDepartment(id,virtualType)) {
|
|
build.setChildren(getVirtualSubDeptData(id,virtualType));
|
|
}
|
|
dataVOS.add(build);
|
|
|
|
} else {
|
|
//获取当前部门
|
|
rs.executeQuery("select departmentid from hrmresourcevirtual where resourceid = ? and virtualtype = ?",user.getUID(),virtualType);
|
|
rs.next();
|
|
String departmentId = Util.null2String(rs.getString("departmentid"));
|
|
rs.executeQuery("select departmentmark from hrmdepartmentvirtual where id = ? and virtualtype = ? order by showorder",departmentId,virtualType);
|
|
rs.next();
|
|
build = DropTreeDataVO.builder()
|
|
.value(getRandomData()+departmentId)
|
|
.label(Util.null2String(rs.getString("departmentmark")))
|
|
.build();
|
|
if (isVirtualSubDepartment(departmentId,virtualType)) {
|
|
build.setChildren(getVirtualSubDeptData(departmentId,virtualType));
|
|
}
|
|
dataVOS.add(build);
|
|
|
|
}
|
|
return dataVOS;
|
|
}
|
|
|
|
@Override
|
|
public List<SelectVO> selectVirtualTopThree(VirtualTopParam virtualTopParam) {
|
|
RecordSet rs = new RecordSet();
|
|
List<SelectVO> voList = assembleSelectVOList();
|
|
TreeDataVO build;
|
|
int num = 1;
|
|
List<Integer> list = new ArrayList<>();
|
|
list.add(num);
|
|
rs.executeQuery("select departmentmark from hrmdepartmentvirtual where id = ? and virtualtype = ? order by showorder",virtualTopParam.getId(),virtualTopParam.getVirtualType());
|
|
rs.next();
|
|
build = TreeDataVO.builder()
|
|
.id(virtualTopParam.getId())
|
|
.label(Util.null2String(rs.getString("departmentmark")))
|
|
.build();
|
|
if (isVirtualSubDepartment(virtualTopParam.getId(),virtualTopParam.getVirtualType())) {
|
|
build.setChildrens(getVirtualSub(virtualTopParam.getId(),virtualTopParam.getVirtualType()));
|
|
}
|
|
if(null!=build.getChildrens()&&build.getChildrens().size()>0){
|
|
for (ChartChildrensVO children : build.getChildrens()) {
|
|
num = maxDepth(children)+1;
|
|
list.add(num);
|
|
}
|
|
build.setNum(Collections.max(list)+1);
|
|
}else{
|
|
build.setNum(num);
|
|
}
|
|
// 判断是否满足删除条件
|
|
for (int i = voList.size() - 1; i >= 0; i--) {
|
|
if(Integer.parseInt(voList.get(i).getValue())>build.getNum()){
|
|
voList.remove(i);
|
|
}
|
|
}
|
|
//MAP.entrySet().removeIf(entry -> Integer.parseInt(entry.getKey()) > build.getNum());
|
|
return voList;
|
|
}
|
|
|
|
private static List<SelectVO> assembleSelectVOList() {
|
|
List<SelectVO> voList = new ArrayList<>();
|
|
voList.add(SelectVO.builder().value("1").label("一级").build());
|
|
voList.add(SelectVO.builder().value("2").label("二级").build());
|
|
voList.add(SelectVO.builder().value("3").label("三级").build());
|
|
voList.add(SelectVO.builder().value("4").label("四级").build());
|
|
voList.add(SelectVO.builder().value("5").label("五级").build());
|
|
voList.add(SelectVO.builder().value("6").label("六级").build());
|
|
voList.add(SelectVO.builder().value("7").label("七级").build());
|
|
voList.add(SelectVO.builder().value("8").label("八级").build());
|
|
voList.add(SelectVO.builder().value("9").label("九级").build());
|
|
voList.add(SelectVO.builder().value("10").label("十级").build());
|
|
return voList;
|
|
}
|
|
|
|
|
|
private List<PersonTablePO> selectByLevel(Integer level) {
|
|
RecordSet rs = new RecordSet();
|
|
List<PersonTablePO> poList = new ArrayList<>();
|
|
BaseBean bb = new BaseBean();
|
|
String fieldid = bb.getPropValue("sship", "fieldid");
|
|
rs.executeQuery("select h.id,h.lastname,h.workcode,h.sex,h.managerid,h.loginid from hrmresource h\n" +
|
|
" left join cus_fielddata c on h.id = c.id\n" +
|
|
" where c.scopeid = 3 and c.scope = 'HrmCustomFieldByInfoType' and c."+fieldid+" = ?",level);
|
|
while (rs.next()) {
|
|
poList.add(
|
|
PersonTablePO.builder()
|
|
.id(Util.getIntValue(rs.getString("id")))
|
|
.lastname(Util.null2String(rs.getString("lastname")))
|
|
.workcode(Util.null2String(rs.getString("workcode")))
|
|
.sex(Util.getIntValue(rs.getString("sex")))
|
|
.managerid(Util.getIntValue(rs.getString("managerid")))
|
|
.loginid(Util.null2String(rs.getString("loginid")))
|
|
.build()
|
|
);
|
|
}
|
|
return poList;
|
|
}
|
|
|
|
private List<PersonTablePO> selectByDeptId(String id) {
|
|
RecordSet rs = new RecordSet();
|
|
List<PersonTablePO> poList = new ArrayList<>();
|
|
rs.executeQuery("select id,lastname,workcode,sex,managerid,loginid from hrmresource where status < 4 and departmentid = ?",id);
|
|
while (rs.next()) {
|
|
poList.add(
|
|
PersonTablePO.builder()
|
|
.id(Util.getIntValue(rs.getString("id")))
|
|
.lastname(Util.null2String(rs.getString("lastname")))
|
|
.workcode(Util.null2String(rs.getString("workcode")))
|
|
.sex(Util.getIntValue(rs.getString("sex")))
|
|
.managerid(Util.getIntValue(rs.getString("managerid")))
|
|
.loginid(Util.null2String(rs.getString("loginid")))
|
|
.build()
|
|
);
|
|
}
|
|
return poList;
|
|
}
|
|
|
|
/**
|
|
* 获取指定组织树
|
|
* @return
|
|
*/
|
|
@SneakyThrows
|
|
private TreeDataVO getBaseTreeData() {
|
|
int uid = user.getUID();
|
|
DepartmentComInfo dInfo = new DepartmentComInfo();
|
|
ResourceComInfo rInfo = new ResourceComInfo();
|
|
String departmentId = rInfo.getDepartmentID(String.valueOf(uid));
|
|
TreeDataVO build = TreeDataVO.builder()
|
|
.id(departmentId)
|
|
.label(dInfo.getDepartmentName(departmentId))
|
|
.build();
|
|
boolean manager = hrmCommonService.isManager(uid);
|
|
if (manager) {
|
|
build.setChildrens(recursionDepartment(uid));
|
|
}
|
|
return build;
|
|
}
|
|
|
|
/**
|
|
* 获取全量组织树
|
|
* @return
|
|
*/
|
|
private TreeDataVO getAllTreeData() {
|
|
//1.股东及委员会层级指定
|
|
ChartChildrensVO committee = ChartChildrensVO.builder().id("C-1")
|
|
.pid("S-1")
|
|
.label("Committee")
|
|
.childrens(getSiteHead())
|
|
.build();
|
|
List<ChartChildrensVO> committeeList = Collections.singletonList(committee);
|
|
|
|
return TreeDataVO.builder().id("S-1")
|
|
.label("Shareholder")
|
|
.childrens(committeeList)
|
|
.build();
|
|
}
|
|
|
|
@SneakyThrows
|
|
private List<ChartChildrensVO> getSiteHead() {
|
|
List<Integer> idList = selectCusSiteHead();
|
|
List<ChartChildrensVO> siteHeadList = new ArrayList<>();
|
|
DepartmentComInfo dInfo = new DepartmentComInfo();
|
|
ResourceComInfo rInfo = new ResourceComInfo();
|
|
idList.forEach(item -> {
|
|
String departmentId = rInfo.getDepartmentID(String.valueOf(item));
|
|
ChartChildrensVO build = ChartChildrensVO.builder()
|
|
.id(departmentId)
|
|
.pid("C-1")
|
|
.label(dInfo.getDepartmentmark(departmentId))
|
|
.build();
|
|
boolean manager = hrmCommonService.isManager(item);
|
|
if (manager) {
|
|
build.setChildrens(recursionDepartment(item));
|
|
}
|
|
siteHeadList.add(build);
|
|
});
|
|
|
|
|
|
return siteHeadList;
|
|
}
|
|
|
|
/**
|
|
* 递归获取
|
|
* @param id
|
|
* @return
|
|
*/
|
|
@SneakyThrows
|
|
private List<ChartChildrensVO> recursionDepartment(Integer id) {
|
|
List<ChartChildrensVO> vos = new ArrayList<>();
|
|
DepartmentComInfo dInfo = new DepartmentComInfo();
|
|
ResourceComInfo rInfo = new ResourceComInfo();
|
|
String underling = hrmCommonService.getUnderling(id);
|
|
String localId = rInfo.getDepartmentID(String.valueOf(id));
|
|
//获取直接下属
|
|
List<String> underList = Arrays.stream(underling.split(","))
|
|
.filter(s -> !s.isEmpty())
|
|
.collect(Collectors.toList());
|
|
|
|
for (String item : underList) {
|
|
String departmentId = rInfo.getDepartmentID(String.valueOf(item));
|
|
//过滤同部门和子部门
|
|
boolean exists = vos.stream()
|
|
.anyMatch(e -> e.getId().equals(departmentId));
|
|
if (departmentId.equals(localId) || exists){
|
|
continue;
|
|
}
|
|
ChartChildrensVO build = ChartChildrensVO.builder()
|
|
.id(departmentId)
|
|
.pid(item)
|
|
.label(dInfo.getDepartmentmark(departmentId))
|
|
.build();
|
|
boolean manager = hrmCommonService.isManager(Integer.valueOf(item));
|
|
if (manager) {
|
|
build.setChildrens(recursionDepartment(Integer.valueOf(item)));
|
|
}
|
|
vos.add(build);
|
|
}
|
|
|
|
|
|
return vos;
|
|
}
|
|
}
|