From 28884f06a904a736ce7a81463374b1675317db0f Mon Sep 17 00:00:00 2001 From: dxfeng Date: Fri, 26 Jul 2024 11:31:23 +0800 Subject: [PATCH] =?UTF-8?q?=E6=99=B6=E4=BC=98=E7=BB=84=E7=BB=87=E6=9E=B6?= =?UTF-8?q?=E6=9E=84=E5=9B=BE=E9=87=8D=E5=86=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../organization/entity/jingyou/JyChart.java | 188 +++++++++++++ .../entity/jingyou/JyCompanyChart.java | 9 + .../entity/jingyou/JyDepartmentChart.java | 9 + .../entity/jingyou/JyJobChart.java | 9 + .../entity/jingyou/JyOrgSelectItem.java | 50 ++++ .../entity/jingyou/JyResourceChart.java | 9 + .../entity/jingyou/JySubCompanyChart.java | 9 + .../service/impl/JyChartServiceImpl.java | 262 ++++++++++++++++++ .../service/impl/OrgChartServiceImpl.java | 17 ++ 9 files changed, 562 insertions(+) create mode 100644 src/com/engine/organization/entity/jingyou/JyChart.java create mode 100644 src/com/engine/organization/entity/jingyou/JyCompanyChart.java create mode 100644 src/com/engine/organization/entity/jingyou/JyDepartmentChart.java create mode 100644 src/com/engine/organization/entity/jingyou/JyJobChart.java create mode 100644 src/com/engine/organization/entity/jingyou/JyOrgSelectItem.java create mode 100644 src/com/engine/organization/entity/jingyou/JyResourceChart.java create mode 100644 src/com/engine/organization/entity/jingyou/JySubCompanyChart.java create mode 100644 src/com/engine/organization/service/impl/JyChartServiceImpl.java diff --git a/src/com/engine/organization/entity/jingyou/JyChart.java b/src/com/engine/organization/entity/jingyou/JyChart.java new file mode 100644 index 00000000..94342a3e --- /dev/null +++ b/src/com/engine/organization/entity/jingyou/JyChart.java @@ -0,0 +1,188 @@ +package com.engine.organization.entity.jingyou; + +import java.util.Objects; + +/** + * @author:dxfeng + * @createTime: 2024/07/19 + * @version: 1.0 + */ +public class JyChart { + private String id; + private String fname; + private String ftype; + private String parentId; + private String fnumber; + private String fobjid; + private String fecid; + private String fisvitual; + private String expand; + private boolean hasChildren; + + private String fleadername; + private String fleaderimg; + private String fleaderjob; + private String fleader; + private String fplan; + private String fonjob; + private String fleaderlv; + private String fleaderst; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getFname() { + return fname; + } + + public void setFname(String fname) { + this.fname = fname; + } + + public String getFtype() { + return ftype; + } + + public void setFtype(String ftype) { + this.ftype = ftype; + } + + public String getParentId() { + return parentId; + } + + public void setParentId(String parentId) { + this.parentId = parentId; + } + + public String getFnumber() { + return fnumber; + } + + public void setFnumber(String fnumber) { + this.fnumber = fnumber; + } + + public String getFobjid() { + return fobjid; + } + + public void setFobjid(String fobjid) { + this.fobjid = fobjid; + } + + public String getFecid() { + return fecid; + } + + public void setFecid(String fecid) { + this.fecid = fecid; + } + + public String getFisvitual() { + return fisvitual; + } + + public void setFisvitual(String fisvitual) { + this.fisvitual = fisvitual; + } + + public String getExpand() { + return expand; + } + + public void setExpand(String expand) { + this.expand = expand; + } + + public boolean isHasChildren() { + // 都置为true + return true; + } + + public void setHasChildren(boolean hasChildren) { + this.hasChildren = hasChildren; + } + + public String getFleadername() { + return fleadername; + } + + public void setFleadername(String fleadername) { + this.fleadername = fleadername; + } + + public String getFleaderimg() { + return fleaderimg; + } + + public void setFleaderimg(String fleaderimg) { + this.fleaderimg = fleaderimg; + } + + public String getFleaderjob() { + return fleaderjob; + } + + public void setFleaderjob(String fleaderjob) { + this.fleaderjob = fleaderjob; + } + + public String getFleader() { + return fleader; + } + + public void setFleader(String fleader) { + this.fleader = fleader; + } + + public String getFplan() { + return fplan; + } + + public void setFplan(String fplan) { + this.fplan = fplan; + } + + public String getFonjob() { + return fonjob; + } + + public void setFonjob(String fonjob) { + this.fonjob = fonjob; + } + + public String getFleaderlv() { + return fleaderlv; + } + + public void setFleaderlv(String fleaderlv) { + this.fleaderlv = fleaderlv; + } + + public String getFleaderst() { + return fleaderst; + } + + public void setFleaderst(String fleaderst) { + this.fleaderst = fleaderst; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + JyChart jyChart = (JyChart) o; + return id.equals(jyChart.id); + } + + @Override + public int hashCode() { + return Objects.hash(id); + } +} diff --git a/src/com/engine/organization/entity/jingyou/JyCompanyChart.java b/src/com/engine/organization/entity/jingyou/JyCompanyChart.java new file mode 100644 index 00000000..6b9e8513 --- /dev/null +++ b/src/com/engine/organization/entity/jingyou/JyCompanyChart.java @@ -0,0 +1,9 @@ +package com.engine.organization.entity.jingyou; + +/** + * @author:dxfeng + * @createTime: 2024/07/19 + * @version: 1.0 + */ +public class JyCompanyChart extends JyChart{ +} diff --git a/src/com/engine/organization/entity/jingyou/JyDepartmentChart.java b/src/com/engine/organization/entity/jingyou/JyDepartmentChart.java new file mode 100644 index 00000000..1d9efc2a --- /dev/null +++ b/src/com/engine/organization/entity/jingyou/JyDepartmentChart.java @@ -0,0 +1,9 @@ +package com.engine.organization.entity.jingyou; + +/** + * @author:dxfeng + * @createTime: 2024/07/19 + * @version: 1.0 + */ +public class JyDepartmentChart extends JyChart{ +} diff --git a/src/com/engine/organization/entity/jingyou/JyJobChart.java b/src/com/engine/organization/entity/jingyou/JyJobChart.java new file mode 100644 index 00000000..6509a5c1 --- /dev/null +++ b/src/com/engine/organization/entity/jingyou/JyJobChart.java @@ -0,0 +1,9 @@ +package com.engine.organization.entity.jingyou; + +/** + * @author:dxfeng + * @createTime: 2024/07/19 + * @version: 1.0 + */ +public class JyJobChart extends JyChart{ +} diff --git a/src/com/engine/organization/entity/jingyou/JyOrgSelectItem.java b/src/com/engine/organization/entity/jingyou/JyOrgSelectItem.java new file mode 100644 index 00000000..42d4319a --- /dev/null +++ b/src/com/engine/organization/entity/jingyou/JyOrgSelectItem.java @@ -0,0 +1,50 @@ +package com.engine.organization.entity.jingyou; + +/** + * @author:dxfeng + * @createTime: 2024/07/19 + * @version: 1.0 + */ +public class JyOrgSelectItem { + 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 JyOrgSelectItem) { + JyOrgSelectItem item = (JyOrgSelectItem) obj; + return this.getId().equals(item.getId()); + } + return false; + } + + @Override + public int hashCode() { + return this.getId().hashCode(); + } +} diff --git a/src/com/engine/organization/entity/jingyou/JyResourceChart.java b/src/com/engine/organization/entity/jingyou/JyResourceChart.java new file mode 100644 index 00000000..f45ae713 --- /dev/null +++ b/src/com/engine/organization/entity/jingyou/JyResourceChart.java @@ -0,0 +1,9 @@ +package com.engine.organization.entity.jingyou; + +/** + * @author:dxfeng + * @createTime: 2024/07/19 + * @version: 1.0 + */ +public class JyResourceChart extends JyChart{ +} diff --git a/src/com/engine/organization/entity/jingyou/JySubCompanyChart.java b/src/com/engine/organization/entity/jingyou/JySubCompanyChart.java new file mode 100644 index 00000000..77ed43e7 --- /dev/null +++ b/src/com/engine/organization/entity/jingyou/JySubCompanyChart.java @@ -0,0 +1,9 @@ +package com.engine.organization.entity.jingyou; + +/** + * @author:dxfeng + * @createTime: 2024/07/19 + * @version: 1.0 + */ +public class JySubCompanyChart extends JyChart{ +} diff --git a/src/com/engine/organization/service/impl/JyChartServiceImpl.java b/src/com/engine/organization/service/impl/JyChartServiceImpl.java new file mode 100644 index 00000000..3b0551b0 --- /dev/null +++ b/src/com/engine/organization/service/impl/JyChartServiceImpl.java @@ -0,0 +1,262 @@ +package com.engine.organization.service.impl; + +import cn.hutool.core.convert.Convert; +import com.engine.core.impl.Service; +import com.engine.organization.entity.jingyou.JyChart; +import com.engine.organization.entity.jingyou.JyOrgSelectItem; +import com.engine.organization.util.HasRightUtil; +import org.apache.commons.lang3.StringUtils; +import weaver.conn.RecordSet; +import weaver.hrm.User; + +import java.util.*; + +/** + * @className: OrgChartServiceImpl + * @author: dengjp + * @date: 2022/7/7 + * @description: 组织架构图ServiceImpl + **/ +public class JyChartServiceImpl extends Service { + + private RecordSet grs = new RecordSet(); + + private static final String COMPANY_RIGHT = "OrgChart:All"; + private static final String USER_RIGHT = "OrgPerspective:All"; + RecordSet rs = new RecordSet(); + + public Map getOptionCondition(Map request2Map, User user) { + Map result = new HashMap<>(); + + rs.executeQuery("select id, companyname from HrmCompanyVirtual order by id"); + List> fclasslist = new ArrayList<>(); + Map defaultItem = new HashMap<>(); + defaultItem.put("id", "0"); + defaultItem.put("companyname", "行政维度"); + fclasslist.add(defaultItem); + while (rs.next()) { + Map item = new HashMap<>(); + item.put("id", rs.getString("id")); + item.put("companyname", rs.getString("companyname")); + fclasslist.add(item); + } + // 集团数据 + String sql = "select concat('c_',id) as id, companyname as fname from hrmcompany"; + rs.executeQuery(sql); + Set companySet = new HashSet<>(); + while (rs.next()) { + JyOrgSelectItem item = new JyOrgSelectItem(); + item.setId("0"); + //item.setFnumber(rs.getString("fnumber")); + item.setFname(rs.getString("fname")); + companySet.add(item); + } + + + // 分部数据 + sql = "select concat('s_',id) as id,subcompanyname as fname, subcompanycode as fnumber from hrmsubcompany where ifnull(canceled,'0')='0' order by showorder ,showOrderOfTree"; + rs.executeQuery(sql); + while (rs.next()) { + JyOrgSelectItem item = new JyOrgSelectItem(); + 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; + } + + + public Map getCompanyData(Map request2Map, User user) { + Map 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"); + int currentLevel = Convert.toInt(level, 3); + + // 维度 + String fclass = (String) request2Map.get("fclass"); + + // 当前维度 + boolean currentDimension = "0".equals(fclass); + + + String fisvitual = (String) request2Map.get("fisvitual"); // 是否显示虚拟组织 + if (StringUtils.isBlank(fisvitual)) { + fisvitual = "0"; + } + + + Set chartList = new LinkedHashSet<>(); + if (currentDimension) { + if ("0".equals(root)) { + // 集团 + rs.executeQuery("select * from hrmcompany"); + if (rs.next()) { + JyChart item = new JyChart(); + item.setId("0"); + item.setFname(rs.getString("companyname")); + item.setFtype("0"); + item.setFnumber(rs.getString("companycode")); + item.setFobjid(rs.getString("id")); + item.setFisvitual("0"); + item.setExpand("1"); + chartList.add(item); + buildSubCompanyData(item.getFobjid(), "0", item.getId(), currentLevel, chartList); + } + } else if (root.startsWith("s_")) { + // 分部 + String chartId = getChartId(root); + rs.executeQuery("select * from hrmsubcompany where id = ?", chartId); + if (rs.next()) { + JyChart item = new JyChart(); + item.setId("s_" + rs.getString("id")); + item.setFname(rs.getString("subcompanyname")); + item.setFtype("1"); + item.setFnumber(rs.getString("subcompanycode")); + item.setFobjid(rs.getString("id")); + item.setFisvitual("0"); + item.setExpand("1"); + chartList.add(item); + buildSubCompanyData(rs.getString("companyid"), item.getFobjid(), item.getId(), currentLevel, chartList); + buildDepartmentData(item.getFobjid(), "0", item.getId(), currentLevel, chartList); + } + } + } + + + result.put("api_status", true); + result.put("data", chartList); + return result; + } + + public Map asyncCompanyData(Map request2Map, User user) { + String ids = (String) request2Map.get("ids"); + Set chartList = new LinkedHashSet<>(); + if (StringUtils.isNotBlank(ids)) { + String[] splitIds = ids.split(","); + for (String splitId : splitIds) { + if (splitId.startsWith("s_")) { + // 分部 + String chartId = getChartId(splitId); + rs.executeQuery("select * from hrmsubcompany where id = ?", chartId); + if (rs.next()) { + JyChart item = new JyChart(); + item.setId("s_" + rs.getString("id")); + item.setParentId(splitId); + item.setFname(rs.getString("subcompanyname")); + item.setFtype("1"); + item.setFnumber(rs.getString("subcompanycode")); + item.setFobjid(rs.getString("id")); + item.setFisvitual("0"); + item.setExpand("0"); + chartList.add(item); + buildSubCompanyData(rs.getString("companyid"), item.getFobjid(), item.getId(), 0, chartList); + buildDepartmentData(item.getFobjid(), "0", item.getId(), 0, chartList); + } + } else if (splitId.startsWith("d_")) { + // 分部 + String chartId = getChartId(splitId); + rs.executeQuery("select * from hrmdepartment where id = ?", chartId); + if (rs.next()) { + JyChart jyChart = new JyChart(); + jyChart.setId("d_" + rs.getString("id")); + jyChart.setParentId(splitId); + jyChart.setFname(rs.getString("departmentmark")); + jyChart.setFtype("2"); + jyChart.setFnumber(rs.getString("departmentcode")); + jyChart.setFobjid(rs.getString("id")); + jyChart.setFisvitual("0"); + jyChart.setExpand("0"); + chartList.add(jyChart); + String subCompanyId = rs.getString("subcompanyid1"); + buildDepartmentData(subCompanyId, jyChart.getFobjid(), jyChart.getId(), 0, chartList); + } + } + } + } + + Map result = new HashMap<>(); + result.put("api_status", true); + result.put("data", chartList); + return result; + } + + void buildSubCompanyData(String companyId, String parentId, String chartPid, int currentLevel, Set chartList) { + if (currentLevel < 0) { + return; + } + rs.executeQuery("select * from hrmsubcompany where companyid = " + companyId + " and ifnull(supsubcomid,0) = " + parentId + " and ifnull(canceled,0) = 0 order by showorder ,showOrderOfTree"); + List subCompanyList = new ArrayList<>(); + while (rs.next()) { + JyChart item = new JyChart(); + item.setId("s_" + rs.getString("id")); + item.setParentId(chartPid); + item.setFname(rs.getString("subcompanyname")); + item.setFtype("1"); + item.setFnumber(rs.getString("subcompanycode")); + item.setFobjid(rs.getString("id")); + item.setFisvitual("0"); + item.setExpand(currentLevel > 0 ? "1" : "0"); + chartList.add(item); + subCompanyList.add(item); + } + chartList.addAll(subCompanyList); + + for (JyChart jyChart : subCompanyList) { + buildSubCompanyData(companyId, jyChart.getFobjid(), jyChart.getId(), currentLevel - 1, chartList); + buildDepartmentData(jyChart.getFobjid(), "0", jyChart.getId(), currentLevel - 1, chartList); + } + + + } + + void buildDepartmentData(String subCompanyId, String parentId, String chartPid, int currentLevel, Set chartList) { + if (currentLevel < 0) { + return; + } + rs.executeQuery("select * from hrmdepartment where subcompanyid1 = " + subCompanyId + " and ifnull(supdepid,0) = " + parentId + " and ifnull(canceled,0) = 0 order by showorder ,showorderoftree"); + List departmentList = new ArrayList<>(); + while (rs.next()) { + JyChart item = new JyChart(); + item.setId("d_" + rs.getString("id")); + item.setParentId(chartPid); + item.setFname(rs.getString("departmentmark")); + item.setFtype("2"); + item.setFnumber(rs.getString("departmentcode")); + item.setFobjid(rs.getString("id")); + item.setFisvitual("0"); + item.setExpand(currentLevel > 0 ? "1" : "0"); + chartList.add(item); + departmentList.add(item); + } + chartList.addAll(departmentList); + for (JyChart jyChart : departmentList) { + buildDepartmentData(subCompanyId, jyChart.getFobjid(), jyChart.getId(), currentLevel - 1, chartList); + } + + + } + + + private String getChartId(String id) { + if (StringUtils.isNotBlank(id)) { + String[] split = id.split("_"); + if (split.length == 2) { + return split[1]; + } + } + return ""; + } + +} diff --git a/src/com/engine/organization/service/impl/OrgChartServiceImpl.java b/src/com/engine/organization/service/impl/OrgChartServiceImpl.java index fb00978d..1db745e0 100644 --- a/src/com/engine/organization/service/impl/OrgChartServiceImpl.java +++ b/src/com/engine/organization/service/impl/OrgChartServiceImpl.java @@ -2,6 +2,7 @@ package com.engine.organization.service.impl; import cn.hutool.core.date.DateField; import cn.hutool.core.date.DateUtil; +import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.organization.entity.scheme.po.GradePO; import com.engine.organization.entity.scheme.po.LevelPO; @@ -32,8 +33,18 @@ public class OrgChartServiceImpl extends Service implements OrgChartService { private static final String COMPANY_RIGHT = "OrgChart:All"; private static final String USER_RIGHT = "OrgPerspective:All"; + boolean isCustom = true; + + private JyChartServiceImpl getJyChartService(User user) { + return ServiceUtil.getService(JyChartServiceImpl.class, user); + } + @Override public Map getOptionCondition(Map request2Map, User user) { + if(isCustom){ + return getJyChartService(user).getOptionCondition(request2Map, user); + } + Map result = new HashMap<>(); RecordSet rs = new RecordSet(); @@ -100,6 +111,9 @@ public class OrgChartServiceImpl extends Service implements OrgChartService { @Override public Map getCompanyData(Map request2Map, User user) { + if(isCustom){ + return getJyChartService(user).getCompanyData(request2Map, user); + } Map result = new HashMap<>(); boolean hasRight = HasRightUtil.hasRight(user, COMPANY_RIGHT, true); result.put("hasRight", hasRight); @@ -326,6 +340,9 @@ public class OrgChartServiceImpl extends Service implements OrgChartService { @Override public Map asyncCompanyData(Map request2Map, User user) { + if(true){ + return getJyChartService(user).asyncCompanyData(request2Map, user); + } String ids = (String) request2Map.get("ids"); String whereSql = companyDateWhereSql(request2Map);