diff --git a/src/com/engine/organization/mapper/comp/CompMapper.xml b/src/com/engine/organization/mapper/comp/CompMapper.xml index 03a49d57..1dde7855 100644 --- a/src/com/engine/organization/mapper/comp/CompMapper.xml +++ b/src/com/engine/organization/mapper/comp/CompMapper.xml @@ -19,9 +19,7 @@ - t - . - id + t.id , t.subCompanyName , t.subCompanyDesc , t.companyId diff --git a/src/com/engine/organization/mapper/jclorgmap/JclOrgMapper.java b/src/com/engine/organization/mapper/jclorgmap/JclOrgMapper.java index 9d8e7a9f..b88e637f 100644 --- a/src/com/engine/organization/mapper/jclorgmap/JclOrgMapper.java +++ b/src/com/engine/organization/mapper/jclorgmap/JclOrgMapper.java @@ -40,7 +40,7 @@ public interface JclOrgMapper { int insertDeptToMap(@Param("level") String level, @Param("grade") String grade); - int insertSubComToMap(); + int insertSubComToMap(@Param("compLeader") String compLeader); int insertComToMap(); @@ -48,4 +48,5 @@ public interface JclOrgMapper { JclOrgMap getResInfo(@Param("level") String level, @Param("grade") String grade, @Param("id") String id); + List getChildInfoById(@Param("id") String id, @Param("ftype") String ftype, @Param("currentDate") Date currentDate); } diff --git a/src/com/engine/organization/mapper/jclorgmap/JclOrgMapper.xml b/src/com/engine/organization/mapper/jclorgmap/JclOrgMapper.xml index ddb14133..51298983 100644 --- a/src/com/engine/organization/mapper/jclorgmap/JclOrgMapper.xml +++ b/src/com/engine/organization/mapper/jclorgmap/JclOrgMapper.xml @@ -269,9 +269,11 @@ (id,ftype,fobjid,uuid,fclass,fclassname,fnumber,fname,fleader,fleaderimg, fleadername,fleaderjobid,fleaderjob,fleaderlv,fleaderst,fparentid,fobjparentid, fplan,fonjob,fisvitual,fdatebegin,fdateend) - select a.id,1,a.id,a.uuid,0,'行政维度', '',a.subcompanyname,null,'', - '',NULL,'','','',isnull(a.supsubcomid,0),isnull(a.supsubcomid,0), + select a.id,1,a.id,a.uuid,0,'行政维度', '',a.subcompanyname,b.${compLeader},'', + c.lastname,NULL,'','','',isnull(a.supsubcomid,0),isnull(a.supsubcomid,0), 0,0,0,convert(varchar(100),getDate(),23),'2099-12-31' from hrmsubcompany as a + left join hrmsubcompanydefined b on a.id=b.SUBCOMID + left join hrmresource as c on b.${compLeader}=c.ID where isnull(a.canceled,0) <> 1 @@ -279,9 +281,11 @@ (id,ftype,fobjid,uuid,fclass,fclassname,fnumber,fname,fleader,fleaderimg, fleadername,fleaderjobid,fleaderjob,fleaderlv,fleaderst,fparentid,fobjparentid, fplan,fonjob,fisvitual,fdatebegin,fdateend) - select a.id,1,a.id,a.uuid,0,'行政维度', '',a.subcompanyname,null,'', - '',NULL,'','','',ifnull(a.supsubcomid,0),ifnull(a.supsubcomid,0), + select a.id,1,a.id,a.uuid,0,'行政维度', '',a.subcompanyname,b.${compLeader},'', + c.lastname,NULL,'','','',ifnull(a.supsubcomid,0),ifnull(a.supsubcomid,0), 0,0,0,NOW(),'2099-12-31' from hrmsubcompany as a + left join hrmsubcompanydefined b on a.id=b.SUBCOMID + left join hrmresource as c on b.${compLeader}=c.ID where IFNULL(a.canceled,0) <> 1 @@ -289,9 +293,11 @@ (id,ftype,fobjid,uuid,fclass,fclassname,fnumber,fname,fleader,fleaderimg, fleadername,fleaderjobid,fleaderjob,fleaderlv,fleaderst,fparentid,fobjparentid, fplan,fonjob,fisvitual,fdatebegin,fdateend) - select a.id,1,a.id,a.uuid,0,'行政维度', '',a.subcompanyname,null,'', - '',NULL,'','','',nvl(a.supsubcomid,0),nvl(a.supsubcomid,0), + select a.id,1,a.id,a.uuid,0,'行政维度', '',a.subcompanyname,b.${compLeader},'', + c.lastname,NULL,'','','',nvl(a.supsubcomid,0),nvl(a.supsubcomid,0), 0,0,0,TO_DATE(to_char(SYSDATE,'yyyy-MM-dd'),'yyyy-MM-dd'), TO_DATE('2099-12-31','yyyy-MM-dd') from hrmsubcompany a + left join hrmsubcompanydefined b on a.id=b.SUBCOMID + left join hrmresource as c on b.${compLeader}=c.ID where nvl(a.canceled,0) <> 1 @@ -331,4 +337,10 @@ left join jcl_org_grade f on d.${grade}=f.id where a.id=#{id} + \ No newline at end of file diff --git a/src/com/engine/organization/service/impl/HrmResourceServiceImpl.java b/src/com/engine/organization/service/impl/HrmResourceServiceImpl.java index dc334a94..596cee33 100644 --- a/src/com/engine/organization/service/impl/HrmResourceServiceImpl.java +++ b/src/com/engine/organization/service/impl/HrmResourceServiceImpl.java @@ -56,9 +56,11 @@ import org.json.JSONException; import org.json.JSONObject; import weaver.common.DateUtil; import weaver.conn.RecordSet; +import weaver.general.BaseBean; import weaver.general.StringUtil; import weaver.general.Util; import weaver.hrm.definedfield.HrmFieldManager; +import weaver.system.License; import java.math.BigDecimal; import java.math.RoundingMode; @@ -122,6 +124,9 @@ public class HrmResourceServiceImpl extends Service implements HrmResourceServic // 是否 boolean searchJobTitle = false; + // 配置文件禁用分部 + //private String disableComp = new BaseBean().getPropValue("hrmOrganization", "disableComp"); + private static final List disableCompList = findChildComp(new BaseBean().getPropValue("hrmOrganization", "disableComp"),new ArrayList<>()); @Override public Map getSearchTree(SearchTreeParams params) { @@ -132,10 +137,15 @@ public class HrmResourceServiceImpl extends Service implements HrmResourceServic return SearchTreeUtil.getSearchTree(type, treeList); } + @Override public Map listPage(Map params) { + OrganizationWeaTable table = new OrganizationWeaTable<>(user, HrmResourceVO.class); String sqlWhere = buildSqlWhere(params); + // 去除配置文件指定分部数据 + String disableComps = StringUtils.join(disableCompList.stream().distinct().collect(Collectors.toList()),","); + sqlWhere = StringUtils.isNotBlank(sqlWhere) ? sqlWhere+" and t.SUBCOMPANYID1 not in ("+disableComps+")" : sqlWhere; table.setSqlwhere(sqlWhere); List weaTableColumnList = new ArrayList<>(); JclOrgCustomTemplatePO jclOrgCustomTemplatePO = MapperProxyFactory.getProxy(JclOrgCustomTemplateMapper.class).queryIsusedTemp("1", String.valueOf(user.getUID())); @@ -179,24 +189,8 @@ public class HrmResourceServiceImpl extends Service implements HrmResourceServic weaTableColumnList.add(weaTableColumn); } } -// if (StringUtils.isNotBlank(columns)) { -// String[] tmp = columns.split(","); -// for (int i = 0; i < tmp.length; i++) { -// String scopeId = tmp[i].split("_")[0]; -// String fieldName = tmp[i].substring(tmp[i].lastIndexOf("_") + 1); -// WeaTableColumn weaTableColumn = new WeaTableColumn(); -// weaTableColumn.setText(getHrmResourceMapper().queryLabelName(fieldName, scopeId)); -// weaTableColumn.setColumn(buildTableSql(tmp[i]).replace(".", "_")); -// weaTableColumn.setDisplay(WeaBoolAttr.TRUE); -// weaTableColumn.setTransmethod("com.engine.organization.transmethod.HrmResourceTransMethod.getFieldTrueValue"); -// String param = tmp[i]; -// weaTableColumn.setOtherpara(param); -// weaTableColumnList.add(weaTableColumn); -// } -// } // 增加id字段,跳转人员卡片 WeaTableColumn weaTableColumn = new WeaTableColumn(); -// weaTableColumn.setText("id"); weaTableColumn.setColumn("id"); weaTableColumn.setDisplay(WeaBoolAttr.FALSE); @@ -210,6 +204,17 @@ public class HrmResourceServiceImpl extends Service implements HrmResourceServic return new HashMap<>(result.getResultMap()); } + private static List findChildComp(String compId,List list) { + RecordSet rs = new RecordSet(); + rs.executeQuery("select id,subcompanyname from hrmsubcompany where supsubcomid=" + compId); + list.add(compId); + while (rs.next()) { + list.add(rs.getString("id")); + findChildComp(rs.getString("id"),list); + } + return list; + } + @Override public Map getSaveForm() { Map apiDatas = new HashMap<>(); @@ -729,8 +734,6 @@ public class HrmResourceServiceImpl extends Service implements HrmResourceServic departmentsByIds.addAll(departmentsById); } } - - if (CollectionUtils.isNotEmpty(departmentsByIds)) { filterDeparts.addAll(departmentsByIds); } @@ -761,6 +764,14 @@ public class HrmResourceServiceImpl extends Service implements HrmResourceServic for (CompPO compPO : filterComps) { buildParentComps(compPO, builderComps, allMaps); } + // 去掉外部组织 + Iterator iterator = builderComps.iterator(); + while (iterator.hasNext()){ + CompPO compPO = (CompPO) iterator.next(); + if (disableCompList.contains(String.valueOf(compPO.getId()))){ + iterator.remove(); + } + } return SearchTreeUtil.builderTreeMode(CompBO.buildSetToSearchTree(builderComps), searchTrees); } diff --git a/src/com/engine/organization/service/impl/OrgChartServiceImpl.java b/src/com/engine/organization/service/impl/OrgChartServiceImpl.java index 63590b1e..d133cb2b 100644 --- a/src/com/engine/organization/service/impl/OrgChartServiceImpl.java +++ b/src/com/engine/organization/service/impl/OrgChartServiceImpl.java @@ -19,8 +19,10 @@ 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.BaseBean; import weaver.general.Util; import weaver.hrm.User; +import weaver.wechat.util.Utils; import java.util.*; import java.util.stream.Collectors; @@ -39,6 +41,10 @@ public class OrgChartServiceImpl extends Service implements OrgChartService { private static final String USER_RIGHT = "OrgPerspective:All"; private final String level = getFieldName("职等"); private final String grade = getFieldName("职级"); + // 配置文件禁用分部 + private static final String disableComp = new BaseBean().getPropValue("hrmOrganization", "disableComp"); + // 读取配置文件中分部负责人对应字段 + private static final String compLeader = new BaseBean().getPropValue("hrmOrganization", "compLeader"); @Override public Map getOptionCondition(Map request2Map, User user) { @@ -124,11 +130,14 @@ public class OrgChartServiceImpl extends Service implements OrgChartService { if (!hasRight) { return result; } - String root = (String) request2Map.get("root"); // 根节点 String level = (String) request2Map.get("level"); // 显示层级 + String outKey = (String) request2Map.get("outkey");// 显示外部机构: 0不显示、1显示 + if (StringUtils.isBlank(outKey)){ + outKey = "0"; + } if (StringUtils.isBlank(level)) { - level = "3"; + level = "0"; } String whereSql = companyDateWhereSql(request2Map); @@ -141,7 +150,7 @@ public class OrgChartServiceImpl extends Service implements OrgChartService { // 获取根节点 RecordSet rs = new RecordSet(); - rs.executeQuery("select id, fname, ftype, fparentid, fnumber, fobjid, fisvitual from jcl_org_map " + whereSql + whereItemSql); + rs.executeQuery("select id, fname, ftype, fparentid, fleader, fleadername, fnumber, fobjid, fisvitual from jcl_org_map " + whereSql + whereItemSql); List> list = new ArrayList<>(); String id = null; if (rs.next()) { @@ -156,10 +165,21 @@ public class OrgChartServiceImpl extends Service implements OrgChartService { item.put("expand", "1"); item.put("fisvitual", rs.getString("fisvitual")); item.put("hasChildren", hasChildren(rs.getString("id"), true)); + item.put("fleadername", Utils.null2String(rs.getString("fleadername"))); + item.put("fleader", Utils.null2String(rs.getString("fleader"))); + if (rs.getString("ftype").equals("1")) { + item.put("empNum", computeComOrDeptNums(rs.getString("ftype"), rs.getString("fobjid"), hasChildren(rs.getString("id"), true))); + } list.add(item); } int currentLevel = 1; + if (outKey.equals("0")) { + whereSql = whereSql + " and id !=" + disableComp; + } + if ("0".equals(level)){ + level = "4"; + } findCompanyItemByParantId(id, currentLevel + 1, level, rs, list, whereSql, currentLevel + 1 <= Integer.parseInt(level)); // 分部数据,构建层级关系 @@ -171,7 +191,7 @@ public class OrgChartServiceImpl extends Service implements OrgChartService { } private void findCompanyItemByParantId(String id, int currentLevel, String level, RecordSet rs, List> list, String whereSql, boolean expand) { - String sql = "select id, fname, ftype, fparentid,fobjid,fecid,fnumber,fisvitual from jcl_org_map " + whereSql; + String sql = "select id, fname, ftype, fparentid, fleader, fleadername, fnumber, fobjid, fisvitual from jcl_org_map " + whereSql; DetachUtil detachUtil = new DetachUtil(user); if (detachUtil.isDETACH()) { if ("0".equals(id)) { @@ -196,6 +216,17 @@ public class OrgChartServiceImpl extends Service implements OrgChartService { item.put("fisvitual", rs.getString("fisvitual")); item.put("expand", expand ? "1" : "0"); item.put("hasChildren", hasChildren(rs.getString("id"), true)); + item.put("empNum", computeComOrDeptNums(rs.getString("ftype"), rs.getString("fobjid"), hasChildren(rs.getString("id"), true))); + if (rs.getString("ftype").equals("2")) { + JclOrgMap jclOrgMap = getBmfzrInfo(rs.getString("fleader")); + item.put("fleadername", jclOrgMap.getFLeaderName() == null ? "" : jclOrgMap.getFLeaderName()); + }else{ + item.put("fleadername", Utils.null2String(rs.getString("fleadername"))); + } + item.put("fleader", Utils.null2String(rs.getString("fleader"))); + if (Integer.parseInt(level) > 3){ + level = String.valueOf(hasChildren(rs.getString("id"),true) ? Integer.parseInt(level)+1 : Integer.parseInt(level)); + } currentList.add(item); } @@ -250,6 +281,10 @@ public class OrgChartServiceImpl extends Service implements OrgChartService { } String root = (String) request2Map.get("root"); // 根节点 String level = (String) request2Map.get("level"); // 显示层级 + String outKey = (String) request2Map.get("outkey");// 显示外部机构: 0不显示、1显示 + if (StringUtils.isBlank(outKey)){ + outKey = "0"; + } if (StringUtils.isBlank(level)) { level = "3"; } @@ -298,7 +333,9 @@ public class OrgChartServiceImpl extends Service implements OrgChartService { item.put("fisvitual", rs.getString("fisvitual")); list.add(item); } - + if (outKey.equals("0")) { + whereSql = whereSql + " and id !=" + disableComp; + } int currentLevel = 1; findUserItemByParantId(id, currentLevel + 1, level, rs, list, whereSql, currentLevel + 1 <= Integer.parseInt(level)); @@ -366,7 +403,7 @@ public class OrgChartServiceImpl extends Service implements OrgChartService { whereSql += " and fparentid in (" + ids + ") "; RecordSet rs = new RecordSet(); - rs.executeQuery("select id, fname, ftype, fparentid, fnumber,fobjid,fisvitual from jcl_org_map " + whereSql); + rs.executeQuery("select id, fname, ftype, fparentid, fleader, fleadername, fnumber,fobjid,fisvitual from jcl_org_map " + whereSql); List> currentList = new ArrayList<>(); while (rs.next()) { Map item = new HashMap<>(); @@ -378,6 +415,9 @@ public class OrgChartServiceImpl extends Service implements OrgChartService { item.put("fobjid", rs.getString("fobjid")); item.put("fisvitual", rs.getString("fisvitual")); item.put("hasChildren", hasChildren(rs.getString("id"), true)); + item.put("empNum", computeComOrDeptNums(rs.getString("ftype"), rs.getString("fobjid"), hasChildren(rs.getString("id"), true))); + item.put("fleadername", rs.getString("fleadername")); + item.put("fleader", rs.getString("fleader")); currentList.add(item); } @@ -486,6 +526,48 @@ public class OrgChartServiceImpl extends Service implements OrgChartService { return !"0".equals(count); } + // 计算分部、部门人数 + private Integer computeComOrDeptNums( String ftype, String fobjid, boolean hasChildren) { + int nums = 0; + String id = null; + RecordSet recordSet = new RecordSet(); + if (ftype.equals("2")) { + id = String.valueOf(100000000 + Integer.parseInt(fobjid)); + String deptSql = "select count(1) as deptNums from hrmdepartment a " + + "inner join hrmresource b on a.id = b.departmentid and b.status<4 " + + "where a.id="; + recordSet.executeQuery(deptSql + fobjid); + while (recordSet.next()) { + nums = nums + Integer.parseInt(recordSet.getString("deptNums")); + } + } else if (ftype.equals("1")) { + id = fobjid; + String comSql = "select count(1) as deptNums from hrmsubcompany a " + + "inner join hrmresource b on a.id = b.subcompanyid1 and b.status<4 " + + "where a.id="; + recordSet.executeQuery(comSql + fobjid); + while (recordSet.next()) { + nums = nums + Integer.parseInt(recordSet.getString("deptNums")); + } + } else { + return 0; + } + // 查询下级(判断是否具有下级部门、分部) + String currentDate = OrganizationDateUtil.getFormatLocalDate(new java.util.Date()); + java.sql.Date date = new java.sql.Date(OrganizationDateUtil.stringToDate(currentDate).getTime()); + List jclOrgMapList = getJclOrgMapMapper().getChildInfoById(id, ftype, date); + if (jclOrgMapList.size() > 0) { + for (JclOrgMap jclOrgMap : jclOrgMapList) { + String newType = Utils.null2String(jclOrgMap.getFType()); + String childId = Utils.null2String(jclOrgMap.getFObjId()); + if (newType.equals(ftype)) { + nums = nums + computeComOrDeptNums(newType, childId, hasChildren(String.valueOf(jclOrgMap.getId()),false)); + } + } + } + return nums; + } + private String convertLevel(String fLeaderLv) { StringBuilder jobLevelName = new StringBuilder(); if (StringUtils.isNotBlank(fLeaderLv)) { @@ -557,7 +639,7 @@ public class OrgChartServiceImpl extends Service implements OrgChartService { //同步部门信息 getJclOrgMapMapper().insertDeptToMap(level,grade); //同步分部信息 - getJclOrgMapMapper().insertSubComToMap(); + getJclOrgMapMapper().insertSubComToMap(compLeader); //同步集团信息 getJclOrgMapMapper().insertComToMap(); //清除部门合并、转移造成的脏数据