package com.engine.organization.service.impl; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.organization.entity.chart.ChartPO; import com.engine.organization.entity.chart.CompanyTreePO; import com.engine.organization.entity.chart.TreeSelect; import com.engine.organization.mapper.hrmresource.SystemDataMapper; import com.engine.organization.mapper.jclorgmap.JclOrgMapper; import com.engine.organization.service.ChartService; import com.engine.organization.service.OrgChartService; import com.engine.organization.util.HasRightUtil; import com.engine.organization.util.OrganizationAssert; import com.engine.organization.util.OrganizationDateUtil; import com.engine.organization.util.db.DBType; import com.engine.organization.util.db.MapperProxyFactory; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import weaver.conn.RecordSet; import weaver.conn.RecordSetTrans; import weaver.general.Util; import weaver.hrm.User; import weaver.hrm.company.DepartmentComInfo; import weaver.hrm.company.SubCompanyComInfo; import weaver.hrm.resource.ResourceComInfo; import java.time.LocalDate; import java.util.*; import java.util.stream.Collectors; /** * @author:dxfeng * @createTime: 2023/06/29 * @version: 1.0 */ public class ChartServiceImpl extends Service implements ChartService { private static final String COMPANY_RIGHT = "OrgChart:All"; public String COMPANY_TABLE = ""; public String SUB_COMPANY_TABLE = ""; public String SUB_COMPANY_DEFINED_TABLE = ""; public String DEPARTMENT_TABLE = ""; public String DEPARTMENT_DEFINED_TABLE = ""; public String SUB_COMPANY_ID = "''"; public String DEPARTMENT_ID = "''"; /** * 显示虚拟组织 */ boolean showVirtual = false; /** * 是否已创建虚拟组织字段 */ boolean hasVirtualFields; private JclOrgMapper getJclOrgMapMapper() { return MapperProxyFactory.getProxy(JclOrgMapper.class,true); } private OrgChartService getOrgChartService(User user) { return ServiceUtil.getService(OrgChartServiceImpl.class, user); } /** * 是否实际组织维度 */ boolean isRealDimension; /** * 是否即时数据 */ boolean isRealTime; @Override public Map getCompanyData(Map params) { Map result = new HashMap<>(); boolean hasRight = HasRightUtil.hasRight(user, COMPANY_RIGHT, true); result.put("hasRight", hasRight); if (!hasRight) { return result; } // 根结点 String root = Util.null2String(params.get("root")); root = StringUtils.isBlank(root) ? "0" : root; // 维度 String dimension = Util.null2String(params.get("fclass")); dimension = StringUtils.isBlank(dimension) ? "0" : dimension; // 是否展示虚拟组织 String isVirtual = Util.null2String(params.get("fisvitual")); showVirtual = "1".equals(isVirtual); String depth = Util.null2String(params.get("level")); //版本id String id = Util.null2String(params.get("id")); // 初始化表名 initTableNameByClass(dimension, id); RecordSet rs = new RecordSet(); List dataList = new ArrayList<>(); String sql = ""; ChartPO topChartPO = null; //查询当前实际数据 if (isRealTime) { sql = getRealTimeTopSql(root, dimension); } else { sql = getLastTimeTopSql(root, dimension, id); } rs.executeQuery(sql); // 封装顶部节点 if (rs.next()) { topChartPO = new ChartPO(); topChartPO.setFtype(rs.getString("type")); topChartPO.setFobjid(rs.getString("id")); topChartPO.setFname(rs.getString("name")); topChartPO.setParentId(null); topChartPO.setExpand("1"); topChartPO.setFisvitual(rs.getString("isvitual")); topChartPO.setHasChildren(getHasChildren(topChartPO.getFtype(), topChartPO.getFobjid()).toString()); dataList.add(topChartPO); } // 向下查询数据 if (null != topChartPO) { findChildData(topChartPO, dataList, Integer.parseInt(depth), id); } result.put("api_status", true); result.put("data", dataList); return result; } @Override public Map asyncCompanyData(Map params) { // 维度 String dimension = Util.null2String(params.get("fclass")); dimension = StringUtils.isBlank(dimension) ? "0" : dimension; // 是否展示虚拟组织 String isVirtual = Util.null2String(params.get("fisvitual")); showVirtual = "1".equals(isVirtual); //版本id String versionId = Util.null2String(params.get("id")); // 初始化表名 initTableNameByClass(dimension, versionId); String ids = (String) params.get("ids"); List dataList = new ArrayList<>(); if (StringUtils.isNotBlank(ids)) { RecordSet rs = new RecordSet(); String[] split = ids.split(","); for (String s : split) { //TODO 查询当前实际数据 if (s.contains("_")) { String fObjId = s.split("_")[1]; if (s.startsWith("s")) { if (isRealTime) { rs.executeQuery(getRealTimeChildSql("", "1", fObjId)); } else { rs.executeQuery(getLastTimeChildSql("", "1", fObjId, versionId)); } } else if (s.startsWith("d")) { if (isRealTime) { rs.executeQuery(getRealTimeChildSql("", "2", fObjId)); } else { rs.executeQuery(getLastTimeChildSql("", "2", fObjId, versionId)); } } while (rs.next()) { ChartPO chartPO = new ChartPO(); chartPO.setFtype(rs.getString("type")); chartPO.setFobjid(rs.getString("id")); chartPO.setFname(rs.getString("name")); chartPO.setParentId(s); chartPO.setExpand("0"); chartPO.setFisvitual(rs.getString("isvitual")); chartPO.setHasChildren(getHasChildren(chartPO.getFtype(), chartPO.getFobjid()).toString()); dataList.add(chartPO); } } } } Map result = new HashMap<>(); result.put("api_status", true); result.put("data", dataList); return result; } @Override public Map getDepartmentDetail(Map params) { String rootId = Util.null2String(params.get("rootId")); // 维度 String dimension = Util.null2String(params.get("fclass")); dimension = StringUtils.isBlank(dimension) ? "0" : dimension; // 是否显示岗位 String showJobStr = Util.null2String(params.get("showJob")); boolean showJob = "1".equals(showJobStr); //版本id String versionId = Util.null2String(params.get("id")); OrganizationAssert.isFalse(StringUtils.isBlank(rootId) || !rootId.startsWith("d_"), "数据有误,未查询到对应数据"); String departmentId = rootId.split("_")[1]; String detauleType = Util.null2String(params.get("detauleType")); if (!"chart".equals(detauleType)) { // 展示列表模块 return ServiceUtil.getService(HrmResourceServiceImpl.class, user).chartResourceList(Integer.parseInt(departmentId), versionId, dimension); } // 初始化表名 initTableNameByClass(dimension, versionId); List dataList = new ArrayList<>(); List jobTitleList = new ArrayList<>(); int departmentOnJob = 0; int resourceNum; RecordSet rs = new RecordSet(); // TODO 查询当前实际的数据 String sql; if (isRealTime) { // 查询部门本身 if (hasVirtualFields) { sql = "select a.id,a.departmentname as name,b.bmfzr,b.bmlx as isvitual from " + DEPARTMENT_TABLE + " a left join hrmdepartmentdefined b on a.id = b.deptid where a.id = '" + departmentId + "'"; } else { sql = "select a.id,a.departmentname as name,b.bmfzr from " + DEPARTMENT_TABLE + " a left join hrmdepartmentdefined b on a.id = b.deptid where a.id = '" + departmentId + "'"; } } else { if (hasVirtualFields) { sql = "select " + DEPARTMENT_ID + " as id,a.departmentname as name,fleader as bmfzr,isvirtual as isvitual from " + DEPARTMENT_TABLE + " a where a." + DEPARTMENT_ID + " = '" + departmentId + "' and versionid = " + versionId; } else { sql = "select " + DEPARTMENT_ID + " as id,a.departmentname as name from " + DEPARTMENT_TABLE + " a where a." + DEPARTMENT_ID + " = '" + departmentId + "' and versionid = " + versionId; } } rs.executeQuery(sql); ChartPO departmentChartPO = new ChartPO(); if (rs.next()) { String fLeader = Util.null2String(rs.getString("bmfzr")); departmentChartPO.setFtype("2"); departmentChartPO.setFobjid(departmentId); departmentChartPO.setId(rootId); departmentChartPO.setFname(rs.getString("name")); // 岗位处理后的ID departmentChartPO.setExpand("1"); departmentChartPO.setFisvitual(rs.getString("isvitual")); // 部门负责人 departmentChartPO.setFleader(getDepartmentLeader(fLeader)); dataList.add(departmentChartPO); } if (showJob) { // 查询部门下的岗位 if (isRealTime) { sql = "select a.id,a.jobtitlename as name from hrmjobtitles a inner join jcl_org_job b on a.id = b.ec_jobtitle where b.ec_department = '" + departmentId + "'"; } else { sql = "select jobid as id ,jobname as name from jcl_chart_job where departmentid = '" + departmentId + "' and versionid = " + versionId; } rs.executeQuery(sql); while (rs.next()) { ChartPO chartPO = new ChartPO(); chartPO.setFtype("3"); chartPO.setFobjid(rs.getString("id")); chartPO.setId(departmentId + "_" + chartPO.getFobjid()); chartPO.setFname(rs.getString("name")); // 岗位处理后的ID chartPO.setParentId(rootId); chartPO.setExpand("1"); chartPO.setHasChildren("1"); jobTitleList.add(chartPO); } // 遍历岗位、查询对应岗位下的人员 if (isRealTime) { if (isRealDimension) { sql = "select a.id,a.lastname as name ,a.belongto ,a.companyworkyear from hrmresource a where a.status < 4 and a.departmentid = ? and a.jobtitle = ?"; } else { sql = "select a.id,a.lastname as name ,a.belongto ,a.companyworkyear from hrmresource a inner join hrmresourcevirtual b on a.id = b.resourceid where a.status < 4 and b.departmentid = ? and a.jobtitle = ?"; } } else { sql = "select a.resourceid as id,a.lastname as name ,a.belongto ,a.companyworkyear from jcl_chart_resource a where a.status < 4 and a.departmentid = ? and a.jobtitleid = ? and versionid = " + versionId; } for (ChartPO jobTitlePO : jobTitleList) { resourceNum = 0; rs.executeQuery(sql, departmentId, jobTitlePO.getFobjid()); String parentId = departmentId + "_" + jobTitlePO.getFobjid(); while (rs.next()) { ChartPO chartPO = getResourceChartPO(rs.getString("id"), rs.getString("name"), parentId, rs.getString("belongto"), rs.getString("companyworkyear")); resourceNum++; dataList.add(chartPO); } jobTitlePO.setFonjob(resourceNum); departmentOnJob += resourceNum; dataList.add(jobTitlePO); } departmentChartPO.setHasChildren(CollectionUtils.isNotEmpty(jobTitleList) ? "1" : "0"); } else { // 直接查询岗位下的人员 if (isRealTime) { if (isRealDimension) { sql = "select a.id,a.lastname as name ,a.belongto ,a.companyworkyear from hrmresource a where a.status < 4 and a.departmentid = ? "; } else { sql = "select a.id,a.lastname as name ,a.belongto ,a.companyworkyear from hrmresource a inner join hrmresourcevirtual b on a.id = b.resourceid where a.status < 4 and b.departmentid = ? "; } } else { sql = "select a.resourceid as id,a.lastname as name ,a.belongto ,a.companyworkyear from jcl_chart_resource a where a.status < 4 and a.departmentid = ? and versionid = " + versionId; } rs.executeQuery(sql, departmentId); while (rs.next()) { ChartPO chartPO = getResourceChartPO(rs.getString("id"), rs.getString("name"), rootId, rs.getString("belongto"), rs.getString("companyworkyear")); dataList.add(chartPO); departmentOnJob++; } } departmentChartPO.setFonjob(departmentOnJob); Map result = new HashMap<>(); result.put("api_status", true); result.put("data", dataList); return result; } @Override public String selectVersionDate(String id) { RecordSet rs = new RecordSet(); rs.executeQuery("select recorddate from jcl_org_chartversion where id = ?", id); rs.next(); return rs.getString("recorddate"); } /** * 构建人员图谱元素 * * @param id 人员ID * @param name 人员名称 * @param parentId 父级ID * @param belongTo 是否次账号 * @param companyWorkYear 司龄 * @return */ private ChartPO getResourceChartPO(String id, String name, String parentId, String belongTo, String companyWorkYear) { ChartPO chartPO = new ChartPO(); chartPO.setFtype("4"); chartPO.setFobjid(id); chartPO.setId(chartPO.getFobjid()); chartPO.setFname(name); // 岗位处理后的ID chartPO.setParentId(parentId); chartPO.setExpand("0"); chartPO.setHasChildren("0"); chartPO.setBelongto(Util.null2String(belongTo)); chartPO.setCompanyWorkYear(companyWorkYear); try { chartPO.setFleaderimg(new ResourceComInfo().getMessagerUrls(chartPO.getId())); } catch (Exception e) { throw new RuntimeException(e); } return chartPO; } /** * 获取历史顶部元素sql * * @param root * @param dimension 维度ID * @param versionId * @return */ private String getLastTimeTopSql(String root, String dimension, String versionId) { if ("0".equals(root)) { //查询集团维度历史版本 if (isRealDimension) { //组织维度 return "select id,companyname as name,'0' as type from " + COMPANY_TABLE; } else { //查询其他维度集团版本信息 return "select companyvirtualid as id,companyname as name,'0' as type from " + COMPANY_TABLE + " where " + " versionid = " + versionId + " and companyvirtualid = " + dimension; } } else { if (hasVirtualFields) { if (showVirtual) { return "select " + SUB_COMPANY_ID + " as id,subcompanyname as name,'1' as type,isvirtual as isvitual from " + SUB_COMPANY_TABLE + " where versionid = " + versionId + " and subcompanyid = " + root; } else { return "select " + SUB_COMPANY_ID + " as id,subcompanyname as name,'1' as type,isvirtual as isvitual from " + SUB_COMPANY_TABLE + " where versionid = " + versionId + " and subcompanyid = " + root + " and (isvirtual is null or isvirtual != '1')"; } } else { return "select " + SUB_COMPANY_ID + " as id,subcompanyname as name,'1' as type from " + SUB_COMPANY_TABLE + " where versionid = " + versionId + " and subcompanyid = " + root; } } } @Override public Map versionRecord(Map params, User user) { RecordSet rs = new RecordSet(); // 维度 String dimension = Util.null2String(params.get("fclass")); dimension = StringUtils.isBlank(dimension) ? "0" : dimension; //描述 String description = Util.null2String(params.get("description")); //当前日期 String currentDate = OrganizationDateUtil.getFormatLocalDateTime(new Date()); //当前用户 String currentUser = String.valueOf(user.getUID()); //版本记录表数据存储 synchronized (this) { getOrgChartService(user).insertChartVersion(Integer.valueOf(dimension), description); String versionId = ""; String createDate = OrganizationDateUtil.getFormatLocalDate(LocalDate.now()); rs.executeQuery("select id from JCL_ORG_CHARTVERSION where fclass = ? and createtime = ?", dimension, createDate); if (rs.next()) { versionId = Util.null2String(rs.getString("id")); } RecordSetTrans recordSetTrans = new RecordSetTrans(); try { recordSetTrans.setAutoCommit(false); if ("0".equals(dimension)) { //实体维度 trueDimension(recordSetTrans, versionId, currentUser, currentDate); } else { virtualDimension(recordSetTrans, versionId, currentUser, currentDate, dimension); } recordSetTrans.commit(); } catch (Exception e) { recordSetTrans.rollback(); e.printStackTrace(); } } Map result = new HashMap<>(); result.put("api_status", true); return result; } @Override public Map getDepartmentTree(Map params) { Map result = new HashMap<>(2); RecordSet rs = new RecordSet(); List departmentTree = new ArrayList<>(); String subCompany = Util.null2String(params.get("subcompany")); String dimension = Util.null2String(params.get("fclass")); String versionId = Util.null2String(params.get("id")); if (StringUtils.isBlank(subCompany)) { subCompany = "0"; } String sql = getDepartmentTreeSql(versionId, dimension, subCompany); rs.executeQuery(sql); while (rs.next()) { departmentTree.add(CompanyTreePO.builder().id(rs.getString("id")).pId(rs.getString("pId")).disabled(!rs.getString("id").startsWith("d")).value(rs.getString("value")).title(rs.getString("title")).isLeaf(judgeTreeLeaf(versionId, dimension, rs.getString("id"))).build()); } result.put("departmentTree", departmentTree); result.put("api_status", true); return result; } @Override public Map getMovingTree(Map params) { RecordSet rs = new RecordSet(); rs.executeQuery("select id,companyname from hrmcompany"); TreeSelect companyTree = null; List expandedKeys = new ArrayList<>(); String showCanceled = Util.null2String(params.get("showCanceled")); String expandedKeyStr = Util.null2String(params.get("expandedKeys")); if(rs.next()){ companyTree = TreeSelect.builder().key(rs.getString("id")).title(rs.getString("companyname")).type(TreeSelect.COMPANY).showCanceled(showCanceled).build(); expandedKeys.add(companyTree.getKey()); } // 所有需展开节点,同时需查询父级部门、分部ID addParentTreeId(expandedKeys, expandedKeyStr); Map result = new HashMap<>(3); result.put("movingTree", Collections.singletonList(companyTree)); result.put("expandedKeys", expandedKeys); result.put("api_status", true); return result; } @Override public Map getFullSelectTree(Map params) { RecordSet rs = new RecordSet(); rs.executeQuery("select id,companyname from hrmcompany"); TreeSelect companyTree = null; List expandedKeys = new ArrayList<>(); String showCanceled = Util.null2String(params.get("showCanceled")); if(rs.next()){ companyTree = TreeSelect.builder().key(rs.getString("id")).title(rs.getString("companyname")).type(TreeSelect.COMPANY).showCanceled(showCanceled).build(); expandedKeys = companyTree.getChildren().stream().filter(item -> CollectionUtils.isNotEmpty(item.getChildren())).map(TreeSelect::getKey).collect(Collectors.toList()); expandedKeys.add(companyTree.getKey()); } disableTreeItem(Collections.singletonList(companyTree),TreeSelect.DEPARTMENT); Map result = new HashMap<>(3); result.put("selectTree", companyTree); result.put("expandedKeys", expandedKeys); result.put("api_status", true); return result; } /** * 添加树结构所有上级节点 * * @param expandedKeys 完整的上级ID集合 * @param expandedKeyStr 需要展开的树ID */ private void addParentTreeId(List expandedKeys,String expandedKeyStr){ if(StringUtils.isNotBlank(expandedKeyStr)) { String[] split = expandedKeyStr.split(","); for (String s : split) { try { // 上级分部ID String subcompanyid1 = new DepartmentComInfo().getSubcompanyid1(s); String allSupCompany = new SubCompanyComInfo().getAllSupCompany(subcompanyid1); String[] array = allSupCompany.split(","); for (String supCompany : array) { if (StringUtils.isBlank(supCompany)) { continue; } expandedKeys.add("s" + supCompany); } expandedKeys.add("s" + subcompanyid1); // 上级部门ID String allSupDepartment = new DepartmentComInfo().getAllSupDepartment(s); array = allSupDepartment.split(","); for (String supDepartment : array) { if (StringUtils.isBlank(supDepartment)) { continue; } expandedKeys.add("d" + supDepartment); } expandedKeys.add("d" + s); } catch (Exception e) { throw new RuntimeException(e); } } } } /** * 树节点是否禁用 * * @param companyTreeList TreeSelect组件数据集合 */ private void disableTreeItem(List companyTreeList, String enableTreeType) { if (CollectionUtils.isNotEmpty(companyTreeList)) { for (TreeSelect treeSelect : companyTreeList) { treeSelect.setDisabled(!enableTreeType.equals(treeSelect.getType())); List children = treeSelect.getChildren(); if (CollectionUtils.isNotEmpty(children)) { disableTreeItem(children, enableTreeType); } } } } private void trueDimension(RecordSetTrans recordSetTrans,String versionId,String currentUser,String currentDate){ RecordSet rs = new RecordSet(); rs.execute("delete from jcl_chart_subcompany where versionid = "+versionId); rs.execute("delete from jcl_chart_department where versionid = "+versionId); rs.execute("delete from jcl_chart_job where versionid = "+versionId); rs.execute("delete from jcl_chart_resource where versionid = "+versionId); String subCompanyQuerySql;//分部查询数据sql String deptQuerySql;//部门查询数据sql //判断是否有虚拟组织字段 boolean virtualFlag = isHasVirtualFields(); if (virtualFlag) { subCompanyQuerySql = "select a.id as subcompanyid,\n" + " a.subcompanyname,\n" + " a.subcompanydesc,\n" + " a.companyid as company,\n" + " a.SUPSUBCOMID as supsubcompanyid,\n" + " b.subcompanyname as supsubcompany,\n" + " a.canceled,\n" + " a.subcompanycode,\n" + " a.limitusers,\n" + " a.tlevel,\n" + " c.fblx as isvirtual\n" + " from hrmsubcompany a\n" + " left join hrmsubcompany b on a.supsubcomid = b.id\n" + " left join hrmsubcompanydefined c on a.id = c.subcomid "; deptQuerySql = "select a.id as departmentid, a.departmentmark, a.departmentname, a.subcompanyid1 as subcompanyid, " + "b.SUBCOMPANYNAME as subcompany,a.supdepid as supdepartmentid,c.departmentname as supdepartment," + "a.canceled,a.departmentcode,a.coadjutant,a.tlevel,d.bmlx as isvirtual,a.bmfzr as fleader " + "from hrmdepartment a left join hrmsubcompany b on a.subcompanyid1 = b.id " + "left join hrmdepartment c on a.supdepid = c.id " + "left join hrmdepartmentdefined d on a.id=d.deptid"; }else{ subCompanyQuerySql = "select a.id as subcompanyid,\n" + " a.subcompanyname,\n" + " a.subcompanydesc,\n" + " a.companyid as company,\n" + " a.supsubcomid as supsubcompanyid,\n" + " b.subcompanyname as supsubcompany,\n" + " a.canceled,\n" + " a.subcompanycode,\n" + " a.limitusers,\n" + " a.tlevel\n" + " from hrmsubcompany a\n" + " left join hrmsubcompany b on a.supsubcomid = b.id"; deptQuerySql = "select a.id as departmentid,\n" + " a.departmentmark,\n" + " a.departmentname,\n" + " a.subcompanyid1 as subcompanyid,\n" + " b.SUBCOMPANYNAME as subcompany,\n" + " a.supdepid as supdepartmentid,\n" + " c.departmentname as supdepartment,\n" + " a.canceled,\n" + " a.departmentcode,\n" + " a.coadjutant,\n" + " a.tlevel,\n" + " a.bmfzr as fleader\n" + " from hrmdepartment a\n" + " left join hrmsubcompany b on a.subcompanyid1 = b.id\n" + " left join hrmdepartment c on a.supdepid = c.id"; } List insertList = new ArrayList<>(); List> insertParamList = new ArrayList<>(); //当前分部版本存储 rs.executeQuery(subCompanyQuerySql); while (rs.next()) { insertList = new ArrayList<>(); insertList.add(currentUser); insertList.add(StringUtils.isBlank(rs.getString("subcompanyid")) ? null : rs.getInt("subcompanyid")); insertList.add(rs.getString("subcompanyname")); insertList.add(rs.getString("subcompanydesc")); insertList.add(rs.getString("company")); insertList.add(StringUtils.isBlank(rs.getString("supsubcompanyid")) ? null : rs.getInt("supsubcompanyid")); insertList.add(rs.getString("supsubcompany")); insertList.add(StringUtils.isBlank(rs.getString("canceled")) ? null : rs.getInt("canceled")); insertList.add(rs.getString("subcompanycode")); insertList.add(StringUtils.isBlank(rs.getString("limitusers")) ? null : rs.getInt("limitusers")); insertList.add(StringUtils.isBlank(rs.getString("tlevel")) ? null : rs.getInt("tlevel")); insertList.add(currentDate); insertList.add(virtualFlag ? Util.getIntValue(rs.getString("isvirtual"),0) : 0); insertList.add(StringUtils.isBlank(versionId) ? null : Util.getIntValue(versionId)); insertParamList.add(insertList); } String insertSubSql = "insert into jcl_chart_subcompany(creater, subcompanyid, subcompanyname, subcompanydesc, company,\n" + " supsubcompanyid, supsubcompany, canceled, subcompanycode, limitusers,\n" + " tlevel, versiondate, isvirtual,versionId) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; insertData(recordSetTrans,insertSubSql,insertParamList); //当前部门版本存储 rs.executeQuery(deptQuerySql); insertParamList = new ArrayList<>(); while (rs.next()){ insertList = new ArrayList<>(); insertList.add(currentUser); insertList.add(StringUtils.isBlank(rs.getString("departmentid")) ? null : rs.getInt("departmentid")); insertList.add(rs.getString("departmentmark")); insertList.add(rs.getString("departmentname")); insertList.add(StringUtils.isBlank(rs.getString("subcompanyid")) ? null : rs.getInt("subcompanyid")); insertList.add(rs.getString("subcompany")); insertList.add(StringUtils.isBlank(rs.getString("supdepartmentid")) ? null : rs.getInt("supdepartmentid")); insertList.add(rs.getString("supdepartment")); insertList.add(rs.getInt("canceled")); insertList.add(rs.getString("departmentcode")); insertList.add(rs.getString("coadjutant")); // insertList.add(rs.getInt("tlevel")); insertList.add(rs.getString("fleader")); insertList.add(currentDate); insertList.add(virtualFlag ? Util.getIntValue(rs.getString("isvirtual"),0) : 0); insertList.add(StringUtils.isBlank(versionId) ? null : Util.getIntValue(versionId)); insertParamList.add(insertList); } String insertDeptSql = "insert into jcl_chart_department(creater, departmentid, departmentmark, departmentname, subcompanyid,\n" + " subcompany, supdepartmentid, supdepartment, canceled, departmentcode,\n" + " coadjutant, fleader,versiondate, isvirtual,versionid) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; insertData(recordSetTrans,insertDeptSql,insertParamList); //当前岗位版本存储 rs.executeQuery("select b.id as jobid,b.JOBTITLENAME as jobname,a.ec_department as departmentid," + "c.departmentname as department,a.ec_company as subcompanyid,d.subcompanyname as subcompany," + "b.jobresponsibility,a.forbidden_tag as canceled,a.job_no as jobcode,a.description " + "from jcl_org_job a inner join hrmjobtitles b on a.ec_jobtitle = b.id " + "left join hrmdepartment c on a.ec_department=c.id " + "left join hrmsubcompany d on a.ec_company=d.id"); insertParamList = new ArrayList<>(); while (rs.next()) { insertList = new ArrayList<>(); insertList.add(StringUtils.isBlank(rs.getString("jobid"))?null:rs.getString("jobid")); insertList.add(currentUser); insertList.add(rs.getString("jobname")); insertList.add(rs.getString("departmentid")); insertList.add(rs.getString("department")); insertList.add(rs.getString("subcompanyid")); insertList.add(rs.getString("subcompany")); insertList.add(rs.getString("jobresponsibility")); insertList.add(StringUtils.isBlank(rs.getString("canceled")) ? null : rs.getInt("canceled")); insertList.add(rs.getString("jobcode")); insertList.add(rs.getString("description")); insertList.add(currentDate); insertList.add(StringUtils.isBlank(versionId) ? null : Util.getIntValue(versionId)); insertParamList.add(insertList); } String insertJobSql = "insert into jcl_chart_job(jobid,creater,jobname,departmentid,department,subcompanyid," + "subcompany,jobresponsibility,canceled,jobcode,description,versiondate,versionid)values(?,?,?,?,?,?,?,?,?,?,?,?,?)"; insertData(recordSetTrans,insertJobSql,insertParamList); //当前人员版本存储 rs.executeQuery("select a.id as resourceid,workyear,usekind,managerstr,status,sex,accounttype,belongto," + "loginid,maritalstatus,a.telephone,mobile,mobilecall,email,b.locationname,resourcetype,startdate," + "enddate,d.id as jobtitleid,d.JOBTITLENAME as jobtitle,joblevel,seclevel,departmentid,e.departmentname as department," + "a.subcompanyid1 as subcompanyid,f.subcompanyname as subcompany,a.costcenterid as costcenter," + "a.managerid as manager,a.assistantid as assistant,workcode,classification,policy," + "degree,a.lastname,a.companyworkyear from hrmresource a " + "left join hrmlocations b on a.locationid = b.id " + "left join hrmjobtitles d on a.jobtitle = d.id " + "left join hrmdepartment e on a.departmentid = e.id " + "left join hrmsubcompany f on a.subcompanyid1=f.id"); insertParamList = new ArrayList<>(); while (rs.next()) { insertList = new ArrayList<>(); insertList.add(StringUtils.isBlank(rs.getString("resourceid")) ? null : rs.getInt("resourceid")); insertList.add(currentUser); insertList.add(StringUtils.isBlank(rs.getString("workyear")) ? null : rs.getString("workyear")); insertList.add(rs.getString("usekind")); insertList.add(rs.getString("managerstr")); insertList.add(StringUtils.isBlank(rs.getString("status")) ? null : rs.getInt("status")); insertList.add(rs.getString("sex")); insertList.add(StringUtils.isBlank(rs.getString("accounttype")) ? null : rs.getInt("accounttype")); insertList.add(StringUtils.isBlank(rs.getString("belongto")) ? null : rs.getInt("belongto")); insertList.add(rs.getString("loginid")); insertList.add(rs.getString("maritalstatus")); insertList.add(rs.getString("telephone")); insertList.add(rs.getString("mobile")); insertList.add(rs.getString("mobilecall")); insertList.add(rs.getString("email")); insertList.add(rs.getString("locationname")); insertList.add(rs.getString("resourcetype")); insertList.add(rs.getString("startdate")); insertList.add(rs.getString("enddate")); insertList.add(StringUtils.isBlank(rs.getString("jobtitleid")) ? null : rs.getInt("jobtitleid")); insertList.add(rs.getString("jobtitle")); insertList.add(StringUtils.isBlank(rs.getString("joblevel")) ? null : rs.getInt("joblevel")); insertList.add(StringUtils.isBlank(rs.getString("seclevel")) ? null : rs.getInt("seclevel")); insertList.add(StringUtils.isBlank(rs.getString("departmentid")) ? null : rs.getInt("departmentid")); insertList.add(rs.getString("department")); insertList.add(StringUtils.isBlank(rs.getString("subcompanyid")) ? null : rs.getInt("subcompanyid")); insertList.add(rs.getString("subcompany")); insertList.add(rs.getString("costcenter")); insertList.add(StringUtils.isBlank(rs.getString("manager")) ? null : rs.getInt("manager")); insertList.add(StringUtils.isBlank(rs.getString("assistant")) ? null : rs.getInt("assistant")); insertList.add(rs.getString("workcode")); insertList.add(rs.getString("classification")); insertList.add(currentDate); insertList.add(rs.getString("policy")); insertList.add(rs.getString("degree")); insertList.add(StringUtils.isBlank(versionId) ? null : Util.getIntValue(versionId)); insertList.add(rs.getString("lastname")); insertList.add(StringUtils.isBlank(rs.getString("companyworkyear")) ? null : rs.getString("companyworkyear")); insertParamList.add(insertList); } String insertResourceSql = "insert into jcl_chart_resource(resourceid, creater, workyear, usekind, managerstr," + "status, sex, accounttype,belongto, loginid, maritalstatus, telephone, mobile, mobilecall, email," + "locationname, resourcetype, startdate, enddate, jobtitleid, jobtitle, joblevel,seclevel, departmentid," + "department, subcompanyid, subcompany, costcenter,manager, assistant, workcode, classification, " + "versiondate, policy, degree,versionid,lastname,companyworkyear) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?," + "?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; insertData(recordSetTrans,insertResourceSql,insertParamList); } private void virtualDimension(RecordSetTrans recordSetTrans,String versionId,String currentUser,String currentDate,String fclass){ RecordSet rs = new RecordSet(); List insertList; List> insertParamList = new ArrayList<>(); rs.execute("delete from jcl_chart_companyvirtual where versionid = "+versionId); rs.execute("delete from jcl_chart_subcompanyvirtual where versionid = "+versionId); rs.execute("delete from jcl_chart_departmentvirtual where versionid = "+versionId); rs.execute("delete from jcl_chart_resource where versionid = "+versionId); //虚拟总部存储 rs.executeQuery("select id as companyvirtualid,companyname,companycode,companydesc,showorder,canceled," + "virtualtype,virtualtypedesc from hrmcompanyvirtual where id=?",fclass); while (rs.next()){ insertList = new ArrayList<>(); insertList.add(StringUtils.isBlank(rs.getString("companyvirtualid")) ? null : rs.getInt("companyvirtualid")); insertList.add(currentUser); insertList.add(rs.getString("companyname")); insertList.add(rs.getString("companycode")); insertList.add(rs.getString("companydesc")); insertList.add(StringUtils.isBlank(rs.getString("showorder")) ? null : rs.getInt("showorder")); insertList.add(StringUtils.isBlank(rs.getString("canceled")) ? null : rs.getInt("canceled")); insertList.add(rs.getString("virtualtype")); insertList.add(rs.getString("virtualtypedesc")); insertList.add(currentDate); insertList.add(StringUtils.isBlank(versionId) ? null : Util.getIntValue(versionId)); insertParamList.add(insertList); } String insertVirtualComSql = "insert into jcl_chart_companyvirtual(companyvirtualid,creater,companyname,companycode,companydesc,showorder,\n" + "canceled,virtualtype,virtualtypedesc,versiondate,versionid) values(?,?,?,?,?,?,?,?,?,?,?)"; insertData(recordSetTrans,insertVirtualComSql,insertParamList); //虚拟分部版本存储 rs.executeQuery("select a.id as subcompanyvirtualid,a.subcompanyname,a.subcompanycode,a.subcompanydesc," + "b.subcompanyname as supsubcompany,a.supsubcomid,c.companyname as company,a.companyid,a.canceled," + "a.virtualtypeid as virtualtype,a.tlevel,a.showorder from hrmsubcompanyvirtual a " + "left join hrmsubcompanyvirtual b on a.supsubcomid = b.id\n" + "left join hrmcompanyvirtual c on a.companyid = c.id where a.companyid=?",fclass); insertParamList = new ArrayList<>(); while (rs.next()) { insertList = new ArrayList<>(); insertList.add(StringUtils.isBlank(rs.getString("subcompanyvirtualid")) ? null : rs.getInt("subcompanyvirtualid")); insertList.add(currentUser); insertList.add(rs.getString("subcompanyname")); insertList.add(rs.getString("subcompanycode")); insertList.add(rs.getString("subcompanydesc")); insertList.add(rs.getString("supsubcompany")); insertList.add(StringUtils.isBlank(rs.getString("supsubcomid")) ? null : rs.getInt("supsubcomid")); insertList.add(rs.getString("company")); insertList.add(StringUtils.isBlank(rs.getString("companyid")) ? null : rs.getInt("companyid")); insertList.add(StringUtils.isBlank(rs.getString("canceled")) ? null : rs.getInt("canceled")); insertList.add(rs.getString("virtualtype")); insertList.add(rs.getString("tlevel")); insertList.add(StringUtils.isBlank(rs.getString("showorder")) ? null : rs.getInt("showorder")); insertList.add(currentDate); insertList.add(StringUtils.isBlank(versionId) ? null : Util.getIntValue(versionId)); insertParamList.add(insertList); } String insertVirtualSubComSql = "insert into jcl_chart_subcompanyvirtual(subcompanyvirtualid, creater, " + "subcompanyname, subcompanycode,subcompanydesc, supsubcompany, supsubcompanyid, company, companyid," + "canceled, virtualtype, tlevel, showorder, versiondate,versionid) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; insertData(recordSetTrans,insertVirtualSubComSql,insertParamList); //虚拟部门版本存储 rs.executeQuery("select a.id as departmentvirtualid,a.departmentname,a.departmentcode,a.departmentmark," + "b.DEPARTMENTNAME as supdeptment,b.SUPDEPID as supdepid,a.allsupdepid,c.SUBCOMPANYNAME as subcompany," + "a.SUBCOMPANYID1 as subcompanyid,a.canceled,a.virtualtype,a.tlevel,a.showorder from hrmdepartmentvirtual a " + "left join hrmdepartmentvirtual b on a.SUPDEPID = b.id " + "left join hrmsubcompanyvirtual c on a.SUBCOMPANYID1 = c.id where a.virtualtype = ?",fclass); insertParamList = new ArrayList<>(); while (rs.next()){ insertList = new ArrayList<>(); insertList.add(StringUtils.isBlank(rs.getString("departmentvirtualid")) ? null : rs.getInt("departmentvirtualid")); insertList.add(currentUser); insertList.add(rs.getString("departmentname")); insertList.add(rs.getString("departmentcode")); insertList.add(rs.getString("departmentmark")); insertList.add(rs.getString("supdeptment")); insertList.add(StringUtils.isBlank(rs.getString("supdepid")) ? null : rs.getInt("supdepid")); insertList.add(StringUtils.isBlank(rs.getString("allsupdepid")) ? null : rs.getInt("allsupdepid")); insertList.add(rs.getString("subcompany")); insertList.add(StringUtils.isBlank(rs.getString("subcompanyid")) ? null : rs.getInt("subcompanyid")); insertList.add(StringUtils.isBlank(rs.getString("canceled")) ? null : rs.getInt("canceled")); insertList.add(rs.getString("virtualtype")); insertList.add(rs.getString("tlevel")); insertList.add(StringUtils.isBlank(rs.getString("showorder")) ? null : rs.getInt("showorder")); insertList.add(currentDate); insertList.add(StringUtils.isBlank(versionId) ? null : Util.getIntValue(versionId)); insertParamList.add(insertList); } String insertVirtualDeptSql = "insert into jcl_chart_departmentvirtual(departmentvirtualid, creater, " + "departmentname, departmentcode,departmentmark, supdeptment, supdepid, allsupdepid, subcompany, " + "subcompanyid, canceled, virtualtype, tlevel, showorder, versiondate,versionid) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; insertData(recordSetTrans,insertVirtualDeptSql,insertParamList); //虚拟人员版本存储 rs.executeQuery("select resourceid,workyear,usekind,a.managerstr,status,sex,accounttype,belongto,loginid," + "maritalstatus,b.telephone,mobile,mobilecall,email,c.locationname,resourcetype,startdate,enddate," + "d.id as jobtitleid,d.JOBTITLENAME as jobtitle,joblevel,seclevel,e.id as departmentid,e.departmentname as department," + "f.id as subcompanyid,f.subcompanyname as subcompany,b.costcenterid as costcenter," + "b.managerid as manager,b.assistantid as assistant,workcode,classification,policy,degree,b.lastname,b.companyworkyear," + "a.virtualtype from hrmresourcevirtual a \n" + "left join hrmresource b on a.RESOURCEID=b.ID\n" + "left join hrmlocations c on b.locationid=c.id\n" + "left join hrmjobtitles d on b.jobtitle=d.id\n" + "left join hrmdepartmentvirtual e on a.DEPARTMENTID=e.id\n" + "left join hrmsubcompanyvirtual f on a.SUBCOMPANYID=f.id where a.virtualtype=?",fclass); insertParamList = new ArrayList<>(); while (rs.next()) { insertList = new ArrayList<>(); insertList.add(StringUtils.isBlank(rs.getString("resourceid")) ? null : rs.getInt("resourceid")); insertList.add(currentUser); insertList.add(StringUtils.isBlank(rs.getString("workyear")) ? null : rs.getString("workyear")); insertList.add(rs.getString("usekind")); insertList.add(rs.getString("managerstr")); insertList.add(StringUtils.isBlank(rs.getString("status")) ? null : rs.getInt("status")); insertList.add(rs.getString("sex")); insertList.add(StringUtils.isBlank(rs.getString("accounttype")) ? null : rs.getInt("accounttype")); insertList.add(StringUtils.isBlank(rs.getString("belongto")) ? null : rs.getInt("belongto")); insertList.add(rs.getString("loginid")); insertList.add(rs.getString("maritalstatus")); insertList.add(rs.getString("telephone")); insertList.add(rs.getString("mobile")); insertList.add(rs.getString("mobilecall")); insertList.add(rs.getString("email")); insertList.add(rs.getString("locationname")); insertList.add(rs.getString("resourcetype")); insertList.add(rs.getString("startdate")); insertList.add(rs.getString("enddate")); insertList.add(StringUtils.isBlank(rs.getString("jobtitleid")) ? null : rs.getInt("jobtitleid")); insertList.add(rs.getString("jobtitle")); insertList.add(StringUtils.isBlank(rs.getString("joblevel")) ? null : rs.getInt("joblevel")); insertList.add(StringUtils.isBlank(rs.getString("seclevel")) ? null : rs.getInt("seclevel")); insertList.add(StringUtils.isBlank(rs.getString("departmentid")) ? null : rs.getInt("departmentid")); insertList.add(rs.getString("department")); insertList.add(StringUtils.isBlank(rs.getString("subcompanyid")) ? null : rs.getInt("subcompanyid")); insertList.add(rs.getString("subcompany")); insertList.add(rs.getString("costcenter")); insertList.add(StringUtils.isBlank(rs.getString("manager")) ? null : rs.getInt("manager")); insertList.add(StringUtils.isBlank(rs.getString("assistant")) ? null : rs.getInt("assistant")); insertList.add(rs.getString("workcode")); insertList.add(rs.getString("classification")); insertList.add(currentDate); insertList.add(rs.getString("policy")); insertList.add(rs.getString("degree")); insertList.add(StringUtils.isBlank(versionId) ? null : Util.getIntValue(versionId)); insertList.add(rs.getString("lastname")); insertList.add(StringUtils.isBlank(rs.getString("companyworkyear")) ? null : rs.getString("companyworkyear")); insertParamList.add(insertList); } String insertVirtualHrmSql = "insert into jcl_chart_resource(resourceid, creater, workyear, usekind, managerstr," + "status, sex, accounttype,belongto, loginid, maritalstatus, telephone, mobile, mobilecall, email," + "locationname, resourcetype, startdate, enddate, jobtitleid, jobtitle, joblevel,seclevel, departmentid," + "department, subcompanyid, subcompany, costcenter,manager, assistant, workcode, classification, " + "versiondate, policy, degree,versionid,lastname,companyworkyear) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?," + "?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; // while (rs.next()) { // insertList = new ArrayList<>(); // insertList.add(StringUtils.isBlank(rs.getString("resourceid")) ? null : rs.getInt("resourceid")); // insertList.add(StringUtils.isBlank(rs.getString("managerid")) ? null : rs.getInt("managerid")); // insertList.add(StringUtils.isBlank(rs.getString("subcompanyid")) ? null : rs.getInt("subcompanyid")); // insertList.add(StringUtils.isBlank(rs.getString("departmentid")) ? null : rs.getInt("departmentid")); // insertList.add(rs.getString("managerstr")); // //insertList.add(rs.getString("virtualtype")); // insertList.add(currentDate); // insertList.add(StringUtils.isBlank(versionId) ? null : Util.getIntValue(versionId)); // insertParamList.add(insertList); // } // String insertVirtualHrmSql = "insert into jcl_chart_resource(resourceid,MANAGER,subcompanyid," + // "departmentid,managerstr," + // //"virtualtype," + // "versiondate,versionid) values (?,?,?,?,?,?,?)"; insertData(recordSetTrans,insertVirtualHrmSql,insertParamList); } private void insertData(RecordSetTrans recordSetTrans,String insertSql,List> insertParamList) { try { recordSetTrans.executeBatchSql(insertSql,insertParamList); } catch (Exception e) { recordSetTrans.rollback(); e.printStackTrace(); } } private boolean isHasVirtualFields() { RecordSet rs = new RecordSet(); boolean flag = false; rs.executeQuery("select count(1) as num from hrm_formfield where (GROUPID =6 and FIELDNAME = 'fblx') or (GROUPID =7 and FIELDNAME = 'bmlx')"); if (rs.next()) { String num = rs.getString("num"); flag = "2".equals(num); } return flag; } /** * 查询实时数据,顶级元素SQL * * @param root 顶级元素ID * @param dimension 维度ID * @return 查询SQL */ private String getRealTimeTopSql(String root, String dimension) { if ("0".equals(root)) { // 查询集团数据 if (isRealDimension) { // 查询实际集团表 return "select id,companyname as name,'0' as type from " + COMPANY_TABLE; } else { // 查询其他维度集团信息 return "select id,companyname as name,'0' as type from " + COMPANY_TABLE + " where id = '" + dimension + "'"; } } else { if (hasVirtualFields) { if (showVirtual) { return "select a.id,a.subcompanyname as name,'1' as type ,b.fblx as isvitual from " + SUB_COMPANY_TABLE + " a left join " + SUB_COMPANY_DEFINED_TABLE + " b on a.id = b.subcomid where a.id = '" + root + "'"; } else { return "select a.id,a.subcompanyname as name,'1' as type ,b.fblx as isvitual from " + SUB_COMPANY_TABLE + " a left join " + SUB_COMPANY_DEFINED_TABLE + " b on a.id = b.subcomid where a.id = '" + root + "' and (b.fblx is null or b.fblx!='1')"; } } else { return "select id,subcompanyname as name,'1' as type from " + SUB_COMPANY_TABLE + " where id = '" + root + "'"; } } } /** * 查询实时数据,子元素SQL * * @param sql 查询SQL * @param fType 上级元素类型 * @param fObjId 上级元素ID * @return 查询SQL */ private String getRealTimeChildSql(String sql, String fType, String fObjId) { if (StringUtils.isNotBlank(fType)) { switch (fType) { case "0": if (hasVirtualFields) { if (showVirtual) { sql = "select a.id,a.subcompanyname as name,'1' as type ,b.fblx as isvitual from " + SUB_COMPANY_TABLE + " a left join " + SUB_COMPANY_DEFINED_TABLE + " b on a.id = b.subcomid where (a.canceled is null or a.canceled != '1') and (a.supsubcomid is null or a.supsubcomid = '0') and a.companyid = '" + fObjId + "'"; } else { sql = "select a.id,a.subcompanyname as name,'1' as type ,b.fblx as isvitual from " + SUB_COMPANY_TABLE + " a left join " + SUB_COMPANY_DEFINED_TABLE + " b on a.id = b.subcomid where (a.canceled is null or a.canceled != '1') and (a.supsubcomid is null or a.supsubcomid = '0') and (b.fblx is null or b.fblx != '1') and a.companyid = '" + fObjId + "'"; } } else { sql = "select a.id,a.subcompanyname as name,'1' as type from " + SUB_COMPANY_TABLE + " a where (a.canceled is null or a.canceled != '1') and (a.supsubcomid is null or a.supsubcomid = '0') and a.companyid = '" + fObjId + "'"; } break; case "1": if (hasVirtualFields) { if (showVirtual) { sql = "select a.id,a.subcompanyname as name,'1' as type ,b.fblx as isvitual from " + SUB_COMPANY_TABLE + " a left join " + SUB_COMPANY_DEFINED_TABLE + " b on a.id = b.subcomid where (a.canceled is null or a.canceled != '1') and a.supsubcomid = '" + fObjId + "'" + " union select a.id,a.departmentname as name,'2' as type ,b.bmlx as isvitual from " + DEPARTMENT_TABLE + " a left join " + DEPARTMENT_DEFINED_TABLE + " b on a.id = b.deptid where (a.canceled is null or a.canceled != '1') and (a.supdepid is null or a.supdepid = '0') and subcompanyid1 = '" + fObjId + "'"; } else { sql = "select a.id,a.subcompanyname as name,'1' as type ,b.fblx as isvitual from " + SUB_COMPANY_TABLE + " a left join " + SUB_COMPANY_DEFINED_TABLE + " b on a.id = b.subcomid where (a.canceled is null or a.canceled != '1') and (b.fblx is null or b.fblx != '1') and a.supsubcomid = '" + fObjId + "'" + " union select a.id,a.departmentname as name,'2' as type ,b.bmlx as isvitual from " + DEPARTMENT_TABLE + " a left join " + DEPARTMENT_DEFINED_TABLE + " b on a.id = b.deptid where (a.canceled is null or a.canceled != '1') and (a.supdepid is null or a.supdepid = '0') and (b.bmlx is null or b.bmlx != '1') and subcompanyid1 = '" + fObjId + "'"; } } else { sql = "select a.id,a.subcompanyname as name,'1' as type from " + SUB_COMPANY_TABLE + " a where (canceled is null or canceled != '1') and supsubcomid = '" + fObjId + "'" + " union select a.id,a.departmentname as name,'2' as type from " + DEPARTMENT_TABLE + " a where (canceled is null or canceled != '1') and (supdepid is null or supdepid = '0') and subcompanyid1 = '" + fObjId + "'"; } break; case "2": if (hasVirtualFields) { if (showVirtual) { sql = "select a.id,a.departmentname as name,'2' as type ,b.bmlx as isvitual from " + DEPARTMENT_TABLE + " a left join " + DEPARTMENT_DEFINED_TABLE + " b on a.id = b.deptid where (a.canceled is null or a.canceled != '1') and supdepid = '" + fObjId + "'"; } else { sql = "select a.id,a.departmentname as name,'2' as type ,b.bmlx as isvitual from " + DEPARTMENT_TABLE + " a left join hrmdepartmentdefined b on a.id = b.deptid where (canceled is null or canceled != '1') and (b.bmlx is null or b.bmlx != '1') and a.supdepid = '" + fObjId + "'"; } } else { sql = "select a.id,a.departmentname as name,'2' as type from " + DEPARTMENT_TABLE + " a where (canceled is null or canceled != '1') and supdepid = '" + fObjId + "'"; } break; default: break; } } return sql; } /** * 查询历史数据,子元素SQL * * @param sql 查询SQL * @param fType 上级元素类型 * @param fObjId 上级元素ID * @return 查询SQL */ private String getLastTimeChildSql(String sql, String fType, String fObjId, String versionId) { if (StringUtils.isNotBlank(fType)) { switch (fType) { case "0": if (hasVirtualFields) { if (showVirtual) { sql = "select " + SUB_COMPANY_ID + " as id,a.subcompanyname as name,'1' as type ,isvirtual as isvitual from " + SUB_COMPANY_TABLE + " a where (a.canceled is null or a.canceled != '1') and (a.supsubcompanyid is null or a.supsubcompanyid = '0') and versionid = " + versionId; } else { sql = "select " + SUB_COMPANY_ID + " as id,a.subcompanyname as name,'1' as type ,isvirtual as isvitual from " + SUB_COMPANY_TABLE + " a where (a.canceled is null or a.canceled != '1') and (a.supsubcompanyid is null or a.supsubcompanyid = '0') and (isvirtual is null or isvirtual != '1') and versionid = " + versionId; } } else { sql = "select " + SUB_COMPANY_ID + " as id,a.subcompanyname as name,'1' as type from " + SUB_COMPANY_TABLE + " a where (a.canceled is null or a.canceled != '1') and (a.supsubcompanyid is null or a.supsubcompanyid = '0') and versionid = " + versionId; } if (!isRealDimension) { sql += " and companyid = " + fObjId; } break; case "1": if (hasVirtualFields) { if (showVirtual) { sql = "select " + SUB_COMPANY_ID + " as id,a.subcompanyname as name,'1' as type ,isvirtual as isvitual from " + SUB_COMPANY_TABLE + " a where (a.canceled is null or a.canceled != '1') and a.supsubcompanyid = '" + fObjId + "' and versionid = " + versionId + " union select " + DEPARTMENT_ID + " as id,a.departmentname as name,'2' as type ,isvirtual as isvitual from " + DEPARTMENT_TABLE + " a where (a.canceled is null or a.canceled != '1') and (a.supdepartmentid is null or a.supdepartmentid = '0') and subcompanyid = '" + fObjId + "' and versionid = " + versionId; } else { sql = "select " + SUB_COMPANY_ID + " as id,a.subcompanyname as name,'1' as type ,isvirtual as isvitual from " + SUB_COMPANY_TABLE + " a where (a.canceled is null or a.canceled != '1') and (isvirtual is null or isvirtual != '1') and a.supsubcompanyid = '" + fObjId + "' and versionid = " + versionId + " union select " + DEPARTMENT_ID + " as id,a.departmentname as name,'2' as type ,isvirtual as isvitual from " + DEPARTMENT_TABLE + " a where (a.canceled is null or a.canceled != '1') and (a.supdepartmentid is null or a.supdepartmentid = '0') and (isvirtual is null or isvirtual != '1') and subcompanyid = '" + fObjId + "' and versionid = " + versionId; } } else { sql = "select " + SUB_COMPANY_ID + " as id,a.subcompanyname as name,'1' as type from " + SUB_COMPANY_TABLE + " a where (canceled is null or canceled != '1') and supsubcompanyid = '" + fObjId + "' and versionid = " + versionId + " union select " + DEPARTMENT_ID + " as id,a.departmentname as name,'2' as type from " + DEPARTMENT_TABLE + " a where (canceled is null or canceled != '1') and (supdepid is null or supdepid = '0') and subcompanyid = '" + fObjId + "' and versionid = " + versionId; } break; case "2": if (hasVirtualFields) { if (showVirtual) { sql = "select " + DEPARTMENT_ID + " as id,a.departmentname as name,'2' as type ,isvirtual as isvitual from " + DEPARTMENT_TABLE + " a where (a.canceled is null or a.canceled != '1') and supdepartmentid = '" + fObjId + "' and versionid = " + versionId; } else { sql = "select " + DEPARTMENT_ID + " as id,a.departmentname as name,'2' as type ,isvirtual as isvitual from " + DEPARTMENT_TABLE + " a where (canceled is null or canceled != '1') and (isvirtual is null or isvirtual != '1') and a.supdepartmentid = '" + fObjId + "' and versionid = " + versionId; } } else { sql = "select " + DEPARTMENT_ID + " as id,a.departmentname as name,'2' as type from " + DEPARTMENT_TABLE + " a where (canceled is null or canceled != '1') and supdepid = '" + fObjId + "' and versionid = " + versionId; } break; default: break; } } return sql; } /** * 查询实时数据,子节点元素 * * @param topChartPO 父级元素 * @param dataList 所有元素集合 * @param selectDepth 所选部门层级 */ private void findChildData(ChartPO topChartPO, List dataList, Integer selectDepth, String versionId) { String fType = topChartPO.getFtype(); String fObjId = topChartPO.getFobjid(); String sql = ""; if (isRealTime) { sql = getRealTimeChildSql(sql, fType, fObjId); } else { sql = getLastTimeChildSql(sql, fType, fObjId, versionId); } if (StringUtils.isNotBlank(sql)) { List currentList = new ArrayList<>(); RecordSet recordSet = new RecordSet(); recordSet.executeQuery(sql); while (recordSet.next()) { ChartPO chartPO = new ChartPO(); chartPO.setFtype(recordSet.getString("type")); chartPO.setFobjid(recordSet.getString("id")); chartPO.setFname(recordSet.getString("name")); chartPO.setParentId(topChartPO.getId()); chartPO.setFisvitual(recordSet.getString("isvitual")); chartPO.setHasChildren(getHasChildren(chartPO.getFtype(), chartPO.getFobjid()).toString()); chartPO.setDepartmentDepth(getDepartmentDepth(chartPO, topChartPO)); // 小于、等于所选层级元素展开 chartPO.setExpand(inDepth(selectDepth, chartPO.getDepartmentDepth()) ? "1" : "0"); currentList.add(chartPO); } for (ChartPO chartPO : currentList) { if (inDepth(selectDepth, chartPO.getDepartmentDepth())) { findChildData(chartPO, dataList, selectDepth, versionId); } } dataList.addAll(currentList); } } /** * 根据维度初始化表名 * * @param dimension 所选维度 */ public void initTableNameByClass(String dimension, String id) { isRealDimension = StringUtils.isBlank(dimension) || "0".equals(dimension); isRealTime = StringUtils.isBlank(id) || "0".equals(id); if (isRealTime) { if (isRealDimension) { COMPANY_TABLE = "hrmcompany"; SUB_COMPANY_TABLE = "hrmsubcompany"; SUB_COMPANY_DEFINED_TABLE = "hrmsubcompanydefined"; DEPARTMENT_TABLE = "hrmdepartment"; DEPARTMENT_DEFINED_TABLE = "hrmdepartmentdefined"; RecordSet rs = new RecordSet(); rs.executeQuery("select count(1) as num from hrm_formfield where (GROUPID =6 and FIELDNAME = 'fblx') or (GROUPID =7 and FIELDNAME = 'bmlx')"); if (rs.next()) { String num = rs.getString("num"); hasVirtualFields = "2".equals(num); } else { hasVirtualFields = false; } } else { COMPANY_TABLE = "hrmcompanyvirtual"; SUB_COMPANY_TABLE = "hrmsubcompanyvirtual"; DEPARTMENT_TABLE = "hrmdepartmentvirtual"; // 其他维度,无虚拟组织 hasVirtualFields = false; } } else { if (isRealDimension) { COMPANY_TABLE = "hrmcompany"; SUB_COMPANY_TABLE = "jcl_chart_subcompany"; DEPARTMENT_TABLE = "jcl_chart_department"; SUB_COMPANY_ID = "subcompanyid"; DEPARTMENT_ID = "departmentid"; hasVirtualFields = true; } else { COMPANY_TABLE = "jcl_chart_companyvirtual"; SUB_COMPANY_TABLE = "jcl_chart_subcompanyvirtual"; DEPARTMENT_TABLE = "jcl_chart_departmentvirtual"; SUB_COMPANY_ID = "subcompanyvirtualid"; DEPARTMENT_ID = "departmentvirtualid"; // 其他维度,无虚拟组织 hasVirtualFields = false; } } } /** * 判断是否有子元素 * * @param fType 元素类型 * @param fObjId 元素ID * @return boolean 包含子元素:true,不包含子元素:false */ private Boolean getHasChildren(String fType, String fObjId) { //String sql = ""; //if (StringUtils.isNotBlank(fType)) { // switch (fType) { // case "0": // sql = "select id from " + SUB_COMPANY_TABLE + " where (supsubcomid is null or supsubcomid = '0') and companyid = '" + fObjId + "'"; // break; // case "1": // if (hasVirtualFields && !showVirtual) { // sql = "select a.id from " + SUB_COMPANY_TABLE + " a left join " + SUB_COMPANY_DEFINED_TABLE + " b on a.id = b.subcomid where (a.canceled is null or a.canceled != '1') and (b.fblx is null or b.fblx != '1') and a.supsubcomid = '" + fObjId + "' union select a.id from " + DEPARTMENT_TABLE + " a left join " + DEPARTMENT_DEFINED_TABLE + " b on a.id = b.deptid where (a.canceled is null or a.canceled != '1') and (a.supdepid is null or a.supdepid = '0') and (b.bmlx is null or b.bmlx != '1') and subcompanyid1 = '" + fObjId + "'"; // } else { // sql = "select id from " + SUB_COMPANY_TABLE + " where (canceled is null or canceled != '1') and supsubcomid = '" + fObjId + "' union select id from " + DEPARTMENT_TABLE + " where (canceled is null or canceled != '1') and (supdepid is null or supdepid = '0') and subcompanyid1 = '" + fObjId + "'"; // } // break; // case "2": // if (hasVirtualFields && !showVirtual) { // sql = "select a.id from " + DEPARTMENT_TABLE + " a left join hrmdepartmentdefined b on a.id = b.deptid where (canceled is null or canceled != '1') and (b.bmlx is null or b.bmlx != '1') and a.supdepid = '" + fObjId + "'"; // } else { // sql = "select id from " + DEPARTMENT_TABLE + " where (canceled is null or canceled != '1') and supdepid = '" + fObjId + "'"; // } // break; // default: // break; // } //} //if (StringUtils.isNotBlank(sql)) { // RecordSet rs = new RecordSet(); // rs.executeQuery(sql); // return rs.next(); //} return false; } /** * 获取部门负责人 * * @param ids 部门负责人ID * @return 人员名称 */ private String getDepartmentLeader(String ids) { if (!isRealTime) { return ids; } if (StringUtils.isBlank(ids)) { return ""; } List leaderList = new ArrayList<>(); String[] split = ids.split(","); for (String s : split) { String lastName = MapperProxyFactory.getProxy(SystemDataMapper.class).getScHrmResourceNameById(s); if (StringUtils.isNotBlank(lastName)) { leaderList.add(lastName); } } return StringUtils.join(leaderList, ","); } /** * 当前元素是否在展开层级内 * * @param selectDepth 所选部门层级 * @param currentDepth 当前部门层级 */ private boolean inDepth(Integer selectDepth, Integer currentDepth) { if (selectDepth == 1) { return true; } return currentDepth < selectDepth + 1; } /** * 获取当前部门层级 * * @param chartPO 当前元素 * @param parentChart 上级元素 */ private Integer getDepartmentDepth(ChartPO chartPO, ChartPO parentChart) { if ("2".equals(chartPO.getFtype())) { if ("1".equals(parentChart.getFtype())) { return 2; } return parentChart.getDepartmentDepth() + 1; } return 0; } /** * 获取部门树下拉框SQL * * @param versionId 版本ID * @param dimension 维度 * @param subCompany 上级Id * @return SQL */ private String getDepartmentTreeSql(String versionId, String dimension, String subCompany) { // 是否展示当前数据 boolean isSearchCurrent = StringUtils.isBlank(versionId) || "0".equals(versionId); boolean isCurrentDimension = StringUtils.isNotBlank(dimension) && !"0".equals(dimension); boolean isDepartment = subCompany.startsWith("d"); String sql; DBType dbType = DBType.get(new RecordSet().getDBType()); if (isDepartment) { subCompany = subCompany.replace("d", ""); if (isSearchCurrent) { sql = "select " + dbType.concat("d", "id") + "as id, id as value, departmentname as title, " + dbType.concat("d", "supdepid") + " as pId from hrmdepartment where (canceled is null or canceled != '1') and " + dbType.ifNull("supdepid", "0") + " = " + subCompany; if (isCurrentDimension) { sql = "select " + dbType.concat("d", "id") + "as id, id as value, departmentname as title, " + dbType.concat("d", "supdepid") + " as pId from hrmdepartmentvirtual where (canceled is null or canceled != '1') and " + dbType.ifNull("supdepid", "0") + " = " + subCompany; } sql += " order by showorder,id "; } else { sql = "select " + dbType.concat("d", "departmentid") + "as id, departmentid as value, departmentname as title, " + dbType.concat("d", "supdepartmentid") + " as pId from jcl_chart_department where (canceled is null or canceled != '1') and " + dbType.ifNull("supdepartmentid", "0") + " = " + subCompany; if (isCurrentDimension) { sql = "select " + dbType.concat("d", "departmentvirtualid") + "as id, departmentvirtualid as value, departmentname as title, " + dbType.concat("d", "supdepid") + " as pId from jcl_chart_departmentvirtual where (canceled is null or canceled != '1') and " + dbType.ifNull("supdepid", "0") + " = " + subCompany; } // 添加时间轴条件 sql += " and versionid = " + versionId; } } else { if (isSearchCurrent) { sql = "select id as id, id as value, subcompanyname as title, supsubcomid as pId, showorder from hrmsubcompany where (canceled is null or canceled != '1') and " + dbType.ifNull("supsubcomid", "0") + " = " + subCompany + " union select " + dbType.concat("d", "id") + "as id, id as value, departmentname as title, subcompanyid1 as pId, showorder from hrmdepartment where (canceled is null or canceled != '1') and (supdepid is null or supdepid =0) and " + dbType.ifNull("subcompanyid1", "0") + " = " + subCompany; if (isCurrentDimension) { sql = "select id as id, id as value, subcompanyname as title, supsubcomid as pId from hrmsubcompanyvirtual where (canceled is null or canceled != '1') and " + dbType.ifNull("supsubcomid", "0") + " = " + subCompany + " and companyid = '" + dimension + "' " + " union select " + dbType.concat("d", "id") + "as id, id as value, departmentname as title, subcompanyid1 as pId from hrmdepartmentvirtual where (canceled is null or canceled != '1') and (supdepid is null or supdepid =0) and" + dbType.ifNull("subcompanyid1", "0") + " = " + subCompany; } sql += " order by showorder,id "; } else { sql = "select subcompanyid as id, subcompanyid as value, subcompanyname as title, supsubcompanyid as pId from jcl_chart_subcompany where (canceled is null or canceled != '1') and " + dbType.ifNull("supsubcompanyid", "0") + " = " + subCompany + " union select " + dbType.concat("d", "subcompanyid") + "as id, subcompanyid as value, departmentname as title, subcompanyid as pId from jcl_chart_department where (canceled is null or canceled != '1') and (supdepartmentid is null or supdepartmentid =0) and " + dbType.ifNull("subcompanyid", "0") + " = " + subCompany; if (isCurrentDimension) { sql = "select subcompanyvirtualid as id, subcompanyvirtualid as value, subcompanyname as title, supsubcompanyid as pId from jcl_chart_subcompanyvirtual where (canceled is null or canceled != '1') and " + dbType.ifNull("supsubcompanyid", "0") + " = " + subCompany + " and companyid = '" + dimension + "' " + " union select " + dbType.concat("d", "departmentvirtualid") + "as id, departmentvirtualid as value, departmentname as title, subcompanyid as pId from jcl_chart_departmentvirtual where (canceled is null or canceled != '1') and (supdepid is null or supdepid =0) and" + dbType.ifNull("subcompanyid", "0") + " = " + subCompany; } // 添加时间轴条件 sql += " and versionid = " + versionId; } } return sql; } /** * 判断树是否为叶子节点 * * @param sql 查询下级元素SQL * @param treeId 当前元素ID * @return */ /** * 判断树是否为叶子节点 * @param versionId 版本ID * @param dimension 维度 * @param subCompany 上级元素ID * @return */ private boolean judgeTreeLeaf(String versionId, String dimension, String subCompany) { RecordSet recordSet = new RecordSet(); String sql = getDepartmentTreeSql(versionId, dimension, subCompany); recordSet.executeQuery(sql); return !recordSet.next(); } }