|
|
package com.engine.organization.service.impl;
|
|
|
|
|
|
import cn.hutool.core.date.DateField;
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
import com.engine.core.impl.Service;
|
|
|
import com.engine.organization.entity.hrmresource.po.HrmResourcePO;
|
|
|
import com.engine.organization.entity.map.JclOrgMap;
|
|
|
import com.engine.organization.entity.scheme.po.GradePO;
|
|
|
import com.engine.organization.entity.scheme.po.LevelPO;
|
|
|
import com.engine.organization.entity.staff.po.StaffPO;
|
|
|
import com.engine.organization.mapper.jclorgmap.JclOrgMapper;
|
|
|
import com.engine.organization.mapper.resource.ResourceMapper;
|
|
|
import com.engine.organization.mapper.scheme.GradeMapper;
|
|
|
import com.engine.organization.mapper.scheme.LevelMapper;
|
|
|
import com.engine.organization.mapper.staff.StaffMapper;
|
|
|
import com.engine.organization.service.OrgChartService;
|
|
|
import com.engine.organization.util.HasRightUtil;
|
|
|
import com.engine.organization.util.OrganizationDateUtil;
|
|
|
import com.engine.organization.util.db.DBType;
|
|
|
import com.engine.organization.util.db.MapperProxyFactory;
|
|
|
import com.engine.organization.util.detach.DetachUtil;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import weaver.conn.RecordSet;
|
|
|
import weaver.general.Util;
|
|
|
import weaver.hrm.User;
|
|
|
|
|
|
import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* @className: OrgChartServiceImpl
|
|
|
* @author: dengjp
|
|
|
* @date: 2022/7/7
|
|
|
* @description: 组织架构图ServiceImpl
|
|
|
**/
|
|
|
public class OrgChartServiceImpl extends Service implements OrgChartService {
|
|
|
|
|
|
private RecordSet grs = new RecordSet();
|
|
|
|
|
|
private static final String COMPANY_RIGHT = "OrgChart:All";
|
|
|
private static final String USER_RIGHT = "OrgPerspective:All";
|
|
|
private final String level = getFieldName("职等");
|
|
|
private final String grade = getFieldName("职级");
|
|
|
|
|
|
@Override
|
|
|
public Map<String, Object> getOptionCondition(Map<String, Object> request2Map, User user) {
|
|
|
Map<String, Object> result = new HashMap<>();
|
|
|
RecordSet rs = new RecordSet();
|
|
|
|
|
|
rs.executeQuery("select id, companyname from HrmCompanyVirtual order by id");
|
|
|
List<Map<String, Object>> fclasslist = new ArrayList<>();
|
|
|
Map<String, Object> defaultItem = new HashMap<>();
|
|
|
defaultItem.put("id", "0");
|
|
|
defaultItem.put("companyname", "行政维度");
|
|
|
fclasslist.add(defaultItem);
|
|
|
while (rs.next()) {
|
|
|
Map<String, Object> item = new HashMap<>();
|
|
|
item.put("id", rs.getString("id"));
|
|
|
item.put("companyname", rs.getString("companyname"));
|
|
|
fclasslist.add(item);
|
|
|
}
|
|
|
String sql = "select id, fnumber, fname, ftype from jcl_org_map where ftype in (0, 1) ";
|
|
|
|
|
|
// 分部分权过滤
|
|
|
DetachUtil detachUtil = new DetachUtil(user);
|
|
|
if (detachUtil.isDETACH()) {
|
|
|
String jclRoleLevels = detachUtil.getJclRoleLevels();
|
|
|
if (StringUtils.isNotBlank(jclRoleLevels)) {
|
|
|
sql = "select id, fnumber, fname, ftype from jcl_org_map where (ftype = 0 or (ftype = 1 and fobjid in(" + jclRoleLevels + "))) ";
|
|
|
} else {
|
|
|
sql = "select id, fnumber, fname, ftype from jcl_org_map where ftype = 0 ";
|
|
|
}
|
|
|
}
|
|
|
rs.executeQuery(sql + " and fdateend > " + DBType.get(new RecordSet().getDBType()).currentDate() + " order by ftype , id,fdateend desc ");
|
|
|
Set<OrgSelectItem> companySet = new HashSet<>();
|
|
|
while (rs.next()) {
|
|
|
OrgSelectItem item = new OrgSelectItem();
|
|
|
item.setId(rs.getString("id"));
|
|
|
item.setFnumber(rs.getString("fnumber"));
|
|
|
item.setFname(rs.getString("fname"));
|
|
|
companySet.add(item);
|
|
|
}
|
|
|
result.put("api_status", true);
|
|
|
result.put("fclasslist", fclasslist);
|
|
|
result.put("companylist", companySet);
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
private String companyDateWhereSql(Map<String, Object> request2Map) {
|
|
|
String date = (String) request2Map.get("date"); // 数据日期
|
|
|
if (StringUtils.isBlank(date)) {
|
|
|
date = DateUtil.format(DateUtil.offset(new Date(), DateField.DAY_OF_MONTH, 1), "yyyy-MM-dd");
|
|
|
}
|
|
|
|
|
|
String fclass = (String) request2Map.get("fclass"); // 维度
|
|
|
|
|
|
|
|
|
String fisvitual = (String) request2Map.get("fisvitual"); // 是否显示虚拟组织
|
|
|
if (StringUtils.isBlank(fisvitual)) {
|
|
|
fisvitual = "0";
|
|
|
}
|
|
|
|
|
|
String whereSql = " where 1 = 1 ";
|
|
|
if (DBType.isOracle()) {
|
|
|
whereSql += " and ((fdatebegin <= to_date('" + date + "','yyyy-MM-DD') and fdateend >= to_date('" + date + "','yyyy-MM-DD')) or (fdatebegin <= to_date('" + date + "','yyyy-MM-DD') and fdateend is null )) ";
|
|
|
} else {
|
|
|
whereSql += " and ((fdatebegin <= '" + date + "' and fdateend >= '" + date + "') or (fdatebegin <= '" + date + "' and fdateend is null )) ";
|
|
|
}
|
|
|
whereSql += " and fclass = " + fclass + " ";
|
|
|
|
|
|
if ("0".equals(fisvitual)) {
|
|
|
whereSql += " and fisvitual = 0 ";
|
|
|
} else {
|
|
|
whereSql += " and fisvitual in (0, 1) ";
|
|
|
}
|
|
|
|
|
|
whereSql += " and ftype in (0 , 1 ,2) ";
|
|
|
return whereSql;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public Map<String, Object> getCompanyData(Map<String, Object> request2Map, User user) {
|
|
|
Map<String, Object> result = new HashMap<>();
|
|
|
boolean hasRight = HasRightUtil.hasRight(user, COMPANY_RIGHT, true);
|
|
|
result.put("hasRight", hasRight);
|
|
|
if (!hasRight) {
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
String root = (String) request2Map.get("root"); // 根节点
|
|
|
String level = (String) request2Map.get("level"); // 显示层级
|
|
|
if (StringUtils.isBlank(level)) {
|
|
|
level = "3";
|
|
|
}
|
|
|
String whereSql = companyDateWhereSql(request2Map);
|
|
|
|
|
|
String whereItemSql = " ";
|
|
|
if ("0".equals(root)) { // 集团的情况
|
|
|
whereItemSql += " and ftype = 0 ";
|
|
|
} else {
|
|
|
whereItemSql += " and id = '" + root + "' ";
|
|
|
}
|
|
|
|
|
|
// 获取根节点
|
|
|
RecordSet rs = new RecordSet();
|
|
|
rs.executeQuery("select id, fname, ftype, fparentid, fnumber, fobjid, fisvitual from jcl_org_map " + whereSql + whereItemSql);
|
|
|
List<Map<String, Object>> list = new ArrayList<>();
|
|
|
String id = null;
|
|
|
if (rs.next()) {
|
|
|
Map<String, Object> item = new HashMap<>();
|
|
|
id = rs.getString("id");
|
|
|
item.put("id", rs.getString("id"));
|
|
|
item.put("fname", rs.getString("fname"));
|
|
|
item.put("ftype", rs.getString("ftype"));
|
|
|
item.put("fnumber", rs.getString("fnumber"));
|
|
|
item.put("fobjid", rs.getString("fobjid"));
|
|
|
item.put("parentId", null);
|
|
|
item.put("expand", "1");
|
|
|
item.put("fisvitual", rs.getString("fisvitual"));
|
|
|
item.put("hasChildren", hasChildren(rs.getString("id"), true));
|
|
|
list.add(item);
|
|
|
}
|
|
|
|
|
|
int currentLevel = 1;
|
|
|
findCompanyItemByParantId(id, currentLevel + 1, level, rs, list, whereSql, currentLevel + 1 <= Integer.parseInt(level));
|
|
|
|
|
|
// 分部数据,构建层级关系
|
|
|
reBuildTreeList(list, root);
|
|
|
|
|
|
result.put("api_status", true);
|
|
|
result.put("data", list);
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
private void findCompanyItemByParantId(String id, int currentLevel, String level, RecordSet rs, List<Map<String, Object>> list, String whereSql, boolean expand) {
|
|
|
String sql = "select id, fname, ftype, fparentid,fobjid,fecid,fnumber,fisvitual from jcl_org_map " + whereSql;
|
|
|
DetachUtil detachUtil = new DetachUtil(user);
|
|
|
if (detachUtil.isDETACH()) {
|
|
|
if ("0".equals(id)) {
|
|
|
sql += " and ftype = 1 and fobjid in(" + detachUtil.getJclRoleLevels() + ")";
|
|
|
} else {
|
|
|
sql += " and fparentid = " + id + " and ftype !=1";
|
|
|
}
|
|
|
} else {
|
|
|
sql += " and fparentid = " + id;
|
|
|
}
|
|
|
rs.executeQuery(sql);
|
|
|
List<Map<String, Object>> currentList = new ArrayList<>();
|
|
|
while (rs.next()) {
|
|
|
Map<String, Object> item = new HashMap<>();
|
|
|
item.put("id", rs.getString("id"));
|
|
|
item.put("fname", rs.getString("fname"));
|
|
|
item.put("ftype", rs.getString("ftype"));
|
|
|
item.put("parentId", rs.getString("fparentid"));
|
|
|
item.put("fnumber", rs.getString("fnumber"));
|
|
|
item.put("fobjid", rs.getString("fobjid"));
|
|
|
item.put("fecid", rs.getString("fecid"));
|
|
|
item.put("fisvitual", rs.getString("fisvitual"));
|
|
|
item.put("expand", expand ? "1" : "0");
|
|
|
item.put("hasChildren", hasChildren(rs.getString("id"), true));
|
|
|
currentList.add(item);
|
|
|
}
|
|
|
|
|
|
list.addAll(currentList);
|
|
|
|
|
|
for (Map<String, Object> stringObjectMap : currentList) {
|
|
|
if (currentLevel + 1 <= Integer.parseInt(level)) {
|
|
|
findCompanyItemByParantId((String) stringObjectMap.get("id"), currentLevel + 1, level, rs, list, whereSql, true);
|
|
|
} else if (currentLevel == Integer.parseInt(level)) {
|
|
|
findCompanyItemByParantId((String) stringObjectMap.get("id"), currentLevel + 1, level, rs, list, whereSql, false);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
private String userWhereSql(Map<String, Object> request2Map) {
|
|
|
String date = (String) request2Map.get("date"); // 数据日期
|
|
|
if (StringUtils.isBlank(date)) {
|
|
|
date = DateUtil.format(DateUtil.offset(new Date(), DateField.DAY_OF_MONTH, 1), "yyyy-MM-dd");
|
|
|
}
|
|
|
|
|
|
String fclass = (String) request2Map.get("fclass"); // 维度
|
|
|
|
|
|
String fisvitual = (String) request2Map.get("fisvitual"); // 是否显示虚拟组织
|
|
|
if (StringUtils.isBlank(fisvitual)) {
|
|
|
fisvitual = "0";
|
|
|
}
|
|
|
|
|
|
String whereSql = " where 1 = 1 ";
|
|
|
if (DBType.isOracle()) {
|
|
|
whereSql += " and ((t.fdatebegin <= to_date('" + date + "','yyyy-MM-DD') and t.fdateend >= to_date('" + date + "','yyyy-MM-DD')) or (t.fdatebegin <= to_date('" + date + "','yyyy-MM-DD') and t.fdateend is null )) ";
|
|
|
} else {
|
|
|
whereSql += " and ((t.fdatebegin <= '" + date + "' and t.fdateend >= '" + date + "') or (t.fdatebegin <= '" + date + "' and t.fdateend is null )) ";
|
|
|
}
|
|
|
whereSql += " and t.fclass = " + fclass + " ";
|
|
|
|
|
|
if ("0".equals(fisvitual)) {
|
|
|
whereSql += " and t.fisvitual = 0 ";
|
|
|
} else {
|
|
|
whereSql += " and t.fisvitual in (0, 1) ";
|
|
|
}
|
|
|
return whereSql;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public Map<String, Object> getUserData(Map<String, Object> request2Map, User user) {
|
|
|
Map<String, Object> result = new HashMap<>();
|
|
|
boolean hasRight = HasRightUtil.hasRight(user, USER_RIGHT, true);
|
|
|
result.put("hasRight", hasRight);
|
|
|
if (!hasRight) {
|
|
|
return result;
|
|
|
}
|
|
|
String root = (String) request2Map.get("root"); // 根节点
|
|
|
String level = (String) request2Map.get("level"); // 显示层级
|
|
|
if (StringUtils.isBlank(level)) {
|
|
|
level = "3";
|
|
|
}
|
|
|
|
|
|
String whereSql = userWhereSql(request2Map);
|
|
|
|
|
|
String whereItemSql = " ";
|
|
|
if ("0".equals(root)) { // 集团的情况
|
|
|
whereItemSql += " and t.ftype = 0 ";
|
|
|
} else {
|
|
|
whereItemSql += " and t.id = '" + root + "' ";
|
|
|
}
|
|
|
|
|
|
// 获取根节点
|
|
|
RecordSet rs = new RecordSet();
|
|
|
rs.executeQuery("select t.id, t.fname, t.ftype, t.fparentid, t.fleadername,t.fobjid,t.fecid, t.fleaderimg, t.fleaderjob, t.fplan, t.fonjob, t.fnumber, t.fleader, t.fleaderlv, t.fleaderst, t.fecid, t.fisvitual from jcl_org_map t " + whereSql + whereItemSql);
|
|
|
List<Map<String, Object>> list = new ArrayList<>();
|
|
|
String id = null;
|
|
|
if (rs.next()) {
|
|
|
Map<String, Object> item = new HashMap<>();
|
|
|
id = rs.getString("id");
|
|
|
item.put("id", rs.getString("id"));
|
|
|
item.put("fname", rs.getString("fname"));
|
|
|
item.put("ftype", rs.getString("ftype"));
|
|
|
item.put("parentId", null);
|
|
|
if ("0".equals(id)) {
|
|
|
item.put("fleadername", "");
|
|
|
item.put("fleaderimg", "");
|
|
|
item.put("fleaderjob", "");
|
|
|
item.put("fleader", "");
|
|
|
} else {
|
|
|
item.put("fleadername", rs.getString("fleadername"));
|
|
|
item.put("fleaderimg", rs.getString("fleaderimg"));
|
|
|
item.put("fleaderjob", rs.getString("fleaderjob"));
|
|
|
item.put("fleader", rs.getString("fleader"));
|
|
|
}
|
|
|
item.put("fplan", rs.getString("fplan"));
|
|
|
item.put("fonjob", rs.getString("fonjob"));
|
|
|
item.put("hasChildren", hasChildren(rs.getString("id"), false));
|
|
|
item.put("expand", "1");
|
|
|
item.put("fnumber", rs.getString("fnumber"));
|
|
|
item.put("fobjid", rs.getString("fobjid"));
|
|
|
item.put("fleaderlv", convertLevel(rs.getString("fleaderlv")));
|
|
|
item.put("fleaderst", convertGrade(rs.getString("fleaderst")));
|
|
|
item.put("fecid", rs.getString("fecid"));
|
|
|
item.put("fisvitual", rs.getString("fisvitual"));
|
|
|
list.add(item);
|
|
|
}
|
|
|
|
|
|
int currentLevel = 1;
|
|
|
findUserItemByParantId(id, currentLevel + 1, level, rs, list, whereSql, currentLevel + 1 <= Integer.parseInt(level));
|
|
|
|
|
|
// 分部数据,构建层级关系
|
|
|
reBuildTreeList(list, root);
|
|
|
|
|
|
result.put("api_status", true);
|
|
|
result.put("data", list);
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public Map<String, Object> asyncUserData(Map<String, Object> request2Map, User user) {
|
|
|
String ids = (String) request2Map.get("ids");
|
|
|
String whereSql = userWhereSql(request2Map);
|
|
|
|
|
|
whereSql += " and fparentid in (" + ids + ") ";
|
|
|
|
|
|
RecordSet rs = new RecordSet();
|
|
|
rs.executeQuery("select t.id, t.fname, t.ftype, t.fparentid, t.fleadername, t.fleaderimg, t.fleaderjob, t.fplan, t.fonjob, t.fnumber, t.fleader,t.fleaderlv, t.fleaderst,t.fobjid,t.fisvitual from jcl_org_map t " + whereSql);
|
|
|
List<Map<String, Object>> currentList = new ArrayList<>();
|
|
|
while (rs.next()) {
|
|
|
Map<String, Object> item = new HashMap<>();
|
|
|
item.put("id", rs.getString("id"));
|
|
|
item.put("fname", rs.getString("fname"));
|
|
|
item.put("ftype", rs.getString("ftype"));
|
|
|
item.put("parentId", rs.getString("fparentid"));
|
|
|
item.put("fplan", rs.getString("fplan"));
|
|
|
item.put("fonjob", rs.getString("fonjob"));
|
|
|
item.put("fnumber", rs.getString("fnumber"));
|
|
|
item.put("hasChildren", hasChildren(rs.getString("id"), false));
|
|
|
if (rs.getString("ftype").equals("2")) {
|
|
|
JclOrgMap jclOrgMap = getBmfzrInfo(rs.getString("fleader"));
|
|
|
item.put("fleader", jclOrgMap.getFLeader() == null ? "" : String.valueOf(jclOrgMap.getFLeader()));
|
|
|
item.put("fleaderimg", jclOrgMap.getFLeaderImg());
|
|
|
item.put("fleadername", jclOrgMap.getFLeaderName() == null ? "" : jclOrgMap.getFLeaderName());
|
|
|
item.put("fleaderjob", jclOrgMap.getFLeaderJob());
|
|
|
item.put("fleaderlv", convertLevel(rs.getString("fleaderlv")));
|
|
|
item.put("fleaderst", convertGrade(rs.getString("fleaderst")));
|
|
|
} else {
|
|
|
item.put("fleader", rs.getString("fleader"));
|
|
|
item.put("fleaderimg", rs.getString("fleaderimg"));
|
|
|
item.put("fleadername", rs.getString("fleadername"));
|
|
|
item.put("fleaderjob", rs.getString("fleaderjob"));
|
|
|
item.put("fleaderlv", convertLevel(rs.getString("fleaderlv")));
|
|
|
item.put("fleaderst", convertGrade(rs.getString("fleaderst")));
|
|
|
}
|
|
|
item.put("fobjid", rs.getString("fobjid"));
|
|
|
item.put("fisvitual", rs.getString("fisvitual"));
|
|
|
currentList.add(item);
|
|
|
}
|
|
|
|
|
|
|
|
|
Map<String, Object> result = new HashMap<>();
|
|
|
result.put("api_status", true);
|
|
|
result.put("data", currentList);
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public Map<String, Object> asyncCompanyData(Map<String, Object> request2Map, User user) {
|
|
|
String ids = (String) request2Map.get("ids");
|
|
|
String whereSql = companyDateWhereSql(request2Map);
|
|
|
|
|
|
whereSql += " and fparentid in (" + ids + ") ";
|
|
|
|
|
|
RecordSet rs = new RecordSet();
|
|
|
rs.executeQuery("select id, fname, ftype, fparentid, fnumber,fobjid,fisvitual from jcl_org_map " + whereSql);
|
|
|
List<Map<String, Object>> currentList = new ArrayList<>();
|
|
|
while (rs.next()) {
|
|
|
Map<String, Object> item = new HashMap<>();
|
|
|
item.put("id", rs.getString("id"));
|
|
|
item.put("fname", rs.getString("fname"));
|
|
|
item.put("ftype", rs.getString("ftype"));
|
|
|
item.put("parentId", rs.getString("fparentid"));
|
|
|
item.put("fnumber", rs.getString("fnumber"));
|
|
|
item.put("fobjid", rs.getString("fobjid"));
|
|
|
item.put("fisvitual", rs.getString("fisvitual"));
|
|
|
item.put("hasChildren", hasChildren(rs.getString("id"), true));
|
|
|
currentList.add(item);
|
|
|
}
|
|
|
|
|
|
Map<String, Object> result = new HashMap<>();
|
|
|
result.put("api_status", true);
|
|
|
result.put("data", currentList);
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
//处理多个部门负责人
|
|
|
private JclOrgMap getBmfzrInfo(String bmfzr) {
|
|
|
JclOrgMap jclOrgMap = new JclOrgMap();
|
|
|
if (StringUtils.isNotBlank(bmfzr)) {
|
|
|
String[] split = bmfzr.split(",");
|
|
|
for (String s : split) {
|
|
|
jclOrgMap = MapperProxyFactory.getProxy(JclOrgMapper.class).getResInfo(level, grade,s);
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
return jclOrgMap;
|
|
|
}
|
|
|
|
|
|
private void findUserItemByParantId(String id, int currentLevel, String level, RecordSet rs, List<Map<String, Object>> list, String whereSql, boolean expand) {
|
|
|
String sql = "select t.id, t.fname, t.ftype, t.fparentid, t.fobjparentid, t.fleader, t.fleadername, t.fleaderimg, t.fleaderjob, t.fplan, t.fonjob, t.fnumber, t.fobjid, t.fecid, t.fleaderlv, t.fleaderst, t.fisvitual from jcl_org_map t " + whereSql;
|
|
|
DetachUtil detachUtil = new DetachUtil(user);
|
|
|
if (detachUtil.isDETACH()) {
|
|
|
if ("0".equals(id)) {
|
|
|
sql += " and t.ftype = 1 and t.fobjid in(" + detachUtil.getJclRoleLevels() + ")";
|
|
|
} else {
|
|
|
sql += " and t.fparentid = " + id + " and t.ftype !=1";
|
|
|
}
|
|
|
} else {
|
|
|
sql += " and t.fparentid = " + id;
|
|
|
}
|
|
|
rs.executeQuery(sql);
|
|
|
List<Map<String, Object>> currentList = new ArrayList<>();
|
|
|
while (rs.next()) {
|
|
|
Map<String, Object> item = new HashMap<>();
|
|
|
item.put("id", rs.getString("id"));
|
|
|
item.put("fname", rs.getString("fname"));
|
|
|
item.put("ftype", rs.getString("ftype"));
|
|
|
item.put("parentId", rs.getString("fparentid"));
|
|
|
item.put("fobjparentId", rs.getString("fobjparentid"));
|
|
|
item.put("fplan", rs.getString("fplan"));
|
|
|
item.put("fonjob", rs.getString("fonjob"));
|
|
|
item.put("fnumber", rs.getString("fnumber"));
|
|
|
item.put("expand", expand ? "1" : "0");
|
|
|
item.put("fobjid", rs.getString("fobjid"));
|
|
|
item.put("fecid", rs.getString("fecid"));
|
|
|
if (rs.getString("ftype").equals("2")) {
|
|
|
JclOrgMap jclOrgMap = getBmfzrInfo(rs.getString("fleader"));
|
|
|
item.put("fleader", jclOrgMap.getFLeader() == null ? "" : String.valueOf(jclOrgMap.getFLeader()));
|
|
|
item.put("fleaderimg", jclOrgMap.getFLeaderImg());
|
|
|
item.put("fleadername", jclOrgMap.getFLeaderName() == null ? "" : jclOrgMap.getFLeaderName());
|
|
|
item.put("fleaderjob", jclOrgMap.getFLeaderJob());
|
|
|
item.put("fleaderlv", convertLevel(rs.getString("fleaderlv")));
|
|
|
item.put("fleaderst", convertGrade(rs.getString("fleaderst")));
|
|
|
} else {
|
|
|
item.put("fleader", rs.getString("fleader"));
|
|
|
item.put("fleaderimg", rs.getString("fleaderimg"));
|
|
|
item.put("fleadername", rs.getString("fleadername"));
|
|
|
item.put("fleaderjob", rs.getString("fleaderjob"));
|
|
|
item.put("fleaderlv", convertLevel(rs.getString("fleaderlv")));
|
|
|
item.put("fleaderst", convertGrade(rs.getString("fleaderst")));
|
|
|
}
|
|
|
item.put("fisvitual", rs.getString("fisvitual"));
|
|
|
item.put("hasChildren", hasChildren(rs.getString("id"), false));
|
|
|
currentList.add(item);
|
|
|
}
|
|
|
|
|
|
for (Map<String, Object> stringObjectMap : currentList) {
|
|
|
if ("4".equals(stringObjectMap.get("ftype"))) { // 员工信息
|
|
|
rs.executeQuery("select id, mobile, homeaddress from hrmresource where id = ? ", stringObjectMap.get("fnumber"));
|
|
|
if (rs.next()) {
|
|
|
stringObjectMap.put("mobile", rs.getString("mobile"));
|
|
|
stringObjectMap.put("address", rs.getString("homeaddress"));
|
|
|
}
|
|
|
rs.executeQuery("select departmentname from hrmresource hrm \n" +
|
|
|
"left join hrmdepartment d\n" +
|
|
|
"on hrm.departmentid = d.id\n" +
|
|
|
"where hrm.id = ? ", stringObjectMap.get("fnumber"));
|
|
|
if (rs.next()) {
|
|
|
stringObjectMap.put("department", rs.getString("departmentname"));
|
|
|
}
|
|
|
|
|
|
}
|
|
|
if (currentLevel + 1 <= Integer.parseInt(level)) {
|
|
|
findUserItemByParantId((String) stringObjectMap.get("id"), currentLevel + 1, level, rs, list, whereSql, true);
|
|
|
} else if (currentLevel == Integer.parseInt(level)) { // 多查一层
|
|
|
findUserItemByParantId((String) stringObjectMap.get("id"), currentLevel + 1, level, rs, list, whereSql, false);
|
|
|
}
|
|
|
}
|
|
|
list.addAll(currentList);
|
|
|
}
|
|
|
|
|
|
private boolean hasChildren(String id, boolean isCompany) {
|
|
|
String whereSql = " where fparentid = " + id + " ";
|
|
|
if (isCompany) {
|
|
|
whereSql += " and ftype in (0, 1, 2) ";
|
|
|
}
|
|
|
grs.executeQuery("select count(1) as count from jcl_org_map " + whereSql);
|
|
|
String count = "0";
|
|
|
if (grs.next()) {
|
|
|
count = grs.getString("count");
|
|
|
}
|
|
|
return !"0".equals(count);
|
|
|
}
|
|
|
|
|
|
private String convertLevel(String fLeaderLv) {
|
|
|
StringBuilder jobLevelName = new StringBuilder();
|
|
|
if (StringUtils.isNotBlank(fLeaderLv)) {
|
|
|
try {
|
|
|
String[] split = fLeaderLv.split(",");
|
|
|
for (String s : split) {
|
|
|
long parseLong = Long.parseLong(s);
|
|
|
LevelPO levelByID = MapperProxyFactory.getProxy(LevelMapper.class).getLevelByID(parseLong);
|
|
|
if (null != levelByID) {
|
|
|
jobLevelName.append(levelByID.getLevelName());
|
|
|
}
|
|
|
}
|
|
|
} catch (NumberFormatException exception) {
|
|
|
jobLevelName = new StringBuilder(fLeaderLv);
|
|
|
}
|
|
|
}
|
|
|
return jobLevelName.toString();
|
|
|
}
|
|
|
|
|
|
private String convertGrade(String fLeaderSt) {
|
|
|
StringBuilder jobGradeName = new StringBuilder();
|
|
|
if (StringUtils.isNotBlank(fLeaderSt)) {
|
|
|
try {
|
|
|
String[] split = fLeaderSt.split(",");
|
|
|
for (String s : split) {
|
|
|
long parseLong = Long.parseLong(s);
|
|
|
GradePO gradeByID = MapperProxyFactory.getProxy(GradeMapper.class).getGradeByID(parseLong);
|
|
|
if (null != gradeByID) {
|
|
|
jobGradeName.append(gradeByID.getGradeName());
|
|
|
}
|
|
|
}
|
|
|
} catch (NumberFormatException exception) {
|
|
|
jobGradeName = new StringBuilder(fLeaderSt);
|
|
|
}
|
|
|
}
|
|
|
return jobGradeName.toString();
|
|
|
}
|
|
|
|
|
|
|
|
|
private void reBuildTreeList(List<Map<String, Object>> list, String root) {
|
|
|
// 分部数据,构建层级关系
|
|
|
Set<String> idSet = list.stream().filter(item -> "1".equals(Util.null2String(item.get("ftype")))).map(item -> Util.null2String(item.get("id"))).collect(Collectors.toSet());
|
|
|
list.forEach(item -> {
|
|
|
if (!root.equals(Util.null2String(item.get("id"))) && "1".equals(Util.null2String(item.get("ftype"))) && !idSet.contains(Util.null2String(item.get("parentId")))) {
|
|
|
item.put("parentId", root);
|
|
|
item.put("fobjparentId", root);
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
|
|
|
private JclOrgMapper getJclOrgMapMapper() {
|
|
|
return MapperProxyFactory.getProxy(JclOrgMapper.class);
|
|
|
}
|
|
|
@Override
|
|
|
public String synchronousData(Map<String, Object> request2Map, User user) {
|
|
|
String currentDate = OrganizationDateUtil.getFormatLocalDate(new java.util.Date());
|
|
|
java.sql.Date date = new java.sql.Date(OrganizationDateUtil.stringToDate(currentDate).getTime());
|
|
|
Calendar cal = Calendar.getInstance();
|
|
|
cal.setTime(date);
|
|
|
Calendar calendar = weaver.common.DateUtil.addDay(cal, -1);
|
|
|
java.sql.Date time = new java.sql.Date(calendar.getTime().getTime());
|
|
|
// 自下向上刷新
|
|
|
getJclOrgMapMapper().deleteAllMap(date);
|
|
|
getJclOrgMapMapper().updateAllMap(date,time);
|
|
|
//同步集团信息
|
|
|
getJclOrgMapMapper().insertComToMap();
|
|
|
//同步分部信息
|
|
|
getJclOrgMapMapper().insertSubComToMap();
|
|
|
//同步部门信息
|
|
|
getJclOrgMapMapper().insertDeptToMap(level,grade);
|
|
|
|
|
|
|
|
|
//同步岗位信息
|
|
|
// getJclOrgMapMapper().insertJobToMap();
|
|
|
// 同步部门负责人
|
|
|
getJclOrgMapMapper().insertBmfzrToMapJZ(level,grade);
|
|
|
RecordSet rs = new RecordSet();
|
|
|
rs.execute("select c.id as id,c.departmentid as departmentid from hrmdepartment a \n" +
|
|
|
"inner join hrmdepartmentdefined b on a.id=b.DEPTID\n" +
|
|
|
"inner join hrmresource c on cast(b.BMFZR as varchar(10))=cast(c.ID as varchar(10)) ");//sqlserver版
|
|
|
while (rs.next()) {
|
|
|
//同步人员信息
|
|
|
syncHrmResource(rs.getString("id"),rs.getString("departmentid"),3);
|
|
|
}
|
|
|
// getJclOrgMapMapper().insertResToMap(level,grade);
|
|
|
//清除部门合并、转移造成的脏数据
|
|
|
getJclOrgMapMapper().deleteJobNull(date);
|
|
|
//刷新在岗数、编制数(从岗位向上刷,岗位不需处理)
|
|
|
List<JclOrgMap> jclOrgMaps = getJclOrgMapMapper().getJclOrgMapByType("3",date);
|
|
|
for (JclOrgMap jclOrgMap : jclOrgMaps){
|
|
|
int id = jclOrgMap.getId();
|
|
|
countJobAndPlans("3",id,currentDate);
|
|
|
}
|
|
|
return "同步成功";
|
|
|
}
|
|
|
/**
|
|
|
* 刷新在岗、编制数
|
|
|
*/
|
|
|
void countJobAndPlans(String type,int id,String currentDate) {
|
|
|
java.sql.Date date = new java.sql.Date(OrganizationDateUtil.stringToDate(currentDate).getTime());
|
|
|
RecordSet rs = new RecordSet();
|
|
|
//处理上级
|
|
|
String sql = "select fparentid from jcl_org_map where ftype=" + type + " and id=" + id + " ";
|
|
|
String whereSql = "";
|
|
|
if (DBType.isOracle()) {
|
|
|
whereSql += " and ((fdatebegin <= to_date('" + currentDate + "','yyyy-MM-DD') and fdateend >= to_date('" + currentDate + "','yyyy-MM-DD')) or (fdatebegin <= to_date('" + currentDate + "','yyyy-MM-DD') and fdateend is null )) ";
|
|
|
} else {
|
|
|
whereSql += " and ((fdatebegin <= '" + currentDate + "' and fdateend >= '" + currentDate + "') or (fdatebegin <= '" + currentDate + "' and fdateend is null )) ";
|
|
|
}
|
|
|
|
|
|
rs.executeQuery(sql + whereSql);
|
|
|
String fparentid = null;
|
|
|
String ftype = null;
|
|
|
if (rs.next()) {
|
|
|
fparentid = rs.getString("fparentid");
|
|
|
String typeSql = "select ftype from jcl_org_map where id=" + fparentid + whereSql;
|
|
|
rs.executeQuery(typeSql + whereSql);
|
|
|
if (rs.next()) {
|
|
|
ftype = rs.getString("ftype");
|
|
|
}
|
|
|
}
|
|
|
JclOrgMap jclOrgMap = getJclOrgMapMapper().getSumPlanAndJobByFParentId(date, fparentid);
|
|
|
if (fparentid != null) {
|
|
|
getJclOrgMapMapper().updateMapById(Integer.parseInt(fparentid), jclOrgMap.getFPlan(), jclOrgMap.getFOnJob(), date);
|
|
|
if (!"-1".equals(fparentid)) {
|
|
|
countJobAndPlans(ftype, Integer.parseInt(fparentid), String.valueOf(currentDate));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
private ResourceMapper getResourceMapper() {
|
|
|
return MapperProxyFactory.getProxy(ResourceMapper.class);
|
|
|
}
|
|
|
|
|
|
private void syncHrmResource(String managerId, String deptId,int ftype) {
|
|
|
String parentField = "";
|
|
|
// 根据直接上级id、部门Id,确认该直接上级id在当前部门的下属
|
|
|
switch (ftype) {
|
|
|
case 3:
|
|
|
parentField = "a.MANAGERID +200000000";
|
|
|
break;
|
|
|
case 4:
|
|
|
parentField = "a.MANAGERID +300000000";
|
|
|
break;
|
|
|
default: break;
|
|
|
}
|
|
|
int flag = getJclOrgMapMapper().insertResToMapJZ(level, grade,parentField, managerId, deptId);
|
|
|
// 下属寻找下属,直至没有下属
|
|
|
List<HrmResourcePO> list = getResourceMapper().getHrmByManagerIdAndDeptId(managerId, deptId);
|
|
|
for (HrmResourcePO hrmResourcePO : list) {
|
|
|
List<HrmResourcePO> childList = getResourceMapper().getHrmByManagerIdAndDeptId(String.valueOf(hrmResourcePO.getId()), deptId);
|
|
|
if (childList.size() > 0) {
|
|
|
parentField = "a.MANAGERID +300000000";
|
|
|
getJclOrgMapMapper().insertResToMapJZ(level, grade,parentField, String.valueOf(hrmResourcePO.getId()), deptId);
|
|
|
for (HrmResourcePO hrmResourcePOChild : childList) {
|
|
|
syncHrmResource(String.valueOf(hrmResourcePOChild.getId()), deptId,4);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
private String getFieldName(String fieldabel) {
|
|
|
RecordSet recordSet = new RecordSet();
|
|
|
String fieldname = null;
|
|
|
recordSet.executeQuery("select fieldname from jcl_org_field where fieldlabel='" + fieldabel+"'");
|
|
|
if (recordSet.next()) {
|
|
|
fieldname = recordSet.getString("fieldname");
|
|
|
}
|
|
|
return fieldname;
|
|
|
}
|
|
|
static class OrgSelectItem {
|
|
|
private String id;
|
|
|
private String fnumber;
|
|
|
private String fname;
|
|
|
|
|
|
public String getId() {
|
|
|
return id;
|
|
|
}
|
|
|
|
|
|
public void setId(String id) {
|
|
|
this.id = id;
|
|
|
}
|
|
|
|
|
|
public String getFnumber() {
|
|
|
return fnumber;
|
|
|
}
|
|
|
|
|
|
public void setFnumber(String fnumber) {
|
|
|
this.fnumber = fnumber;
|
|
|
}
|
|
|
|
|
|
public String getFname() {
|
|
|
return fname;
|
|
|
}
|
|
|
|
|
|
public void setFname(String fname) {
|
|
|
this.fname = fname;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public boolean equals(Object obj) {
|
|
|
if (obj instanceof OrgSelectItem) {
|
|
|
OrgSelectItem item = (OrgSelectItem) obj;
|
|
|
return this.getId().equals(item.getId());
|
|
|
}
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public int hashCode() {
|
|
|
return Integer.parseInt(this.getId());
|
|
|
}
|
|
|
}
|
|
|
}
|