diff --git a/src/com/engine/jhsecond/entity/vo/OrganizationChartVo.java b/src/com/engine/jhsecond/entity/vo/OrganizationChartVo.java index 41edddd..b0cecb4 100644 --- a/src/com/engine/jhsecond/entity/vo/OrganizationChartVo.java +++ b/src/com/engine/jhsecond/entity/vo/OrganizationChartVo.java @@ -33,8 +33,20 @@ public class OrganizationChartVo { private String halfType; + /** + * 是否延长线 + */ + private String addLine; + + /** + * 0关联 1未关联 + */ + private Integer show; + private Integer pId; + private Integer orderId; + private List children; diff --git a/src/com/engine/jhsecond/entity/vo/PersonInfoVo.java b/src/com/engine/jhsecond/entity/vo/PersonInfoVo.java new file mode 100644 index 0000000..03d6c39 --- /dev/null +++ b/src/com/engine/jhsecond/entity/vo/PersonInfoVo.java @@ -0,0 +1,24 @@ +package com.engine.jhsecond.entity.vo; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Author liang.cheng + * @Date 2024/7/29 4:57 PM + * @Description: + * @Version 1.0 + */ + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class PersonInfoVo { + + private String lastName; + + private String photoUrl; +} diff --git a/src/com/engine/jhsecond/service/OrganizationChartService.java b/src/com/engine/jhsecond/service/OrganizationChartService.java index cddf890d..6889619 100644 --- a/src/com/engine/jhsecond/service/OrganizationChartService.java +++ b/src/com/engine/jhsecond/service/OrganizationChartService.java @@ -19,4 +19,13 @@ public interface OrganizationChartService { * @return: java.util.Map */ Map selectData(Map params); + + /** + * @Description: 组织架构图数据(建模) + * @Author: liang.cheng + * @Date: 2024/7/29 1:55 PM + * @param: [request2Map] + * @return: java.util.Map + */ + Map selectChart(Map request2Map); } diff --git a/src/com/engine/jhsecond/service/impl/OrganizationChartServiceImpl.java b/src/com/engine/jhsecond/service/impl/OrganizationChartServiceImpl.java index a6dd122..418cb68 100644 --- a/src/com/engine/jhsecond/service/impl/OrganizationChartServiceImpl.java +++ b/src/com/engine/jhsecond/service/impl/OrganizationChartServiceImpl.java @@ -2,6 +2,7 @@ package com.engine.jhsecond.service.impl; import com.engine.core.impl.Service; import com.engine.jhsecond.entity.vo.OrganizationChartVo; +import com.engine.jhsecond.entity.vo.PersonInfoVo; import com.engine.jhsecond.service.OrganizationChartService; import weaver.conn.RecordSet; import weaver.general.BaseBean; @@ -9,10 +10,7 @@ import weaver.general.Util; import weaver.hrm.company.DepartmentComInfo; import weaver.hrm.job.JobTitlesComInfo; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; /** @@ -36,7 +34,7 @@ public class OrganizationChartServiceImpl extends Service implements Organizatio String superId = bb.getPropValue("jhsecond", "superId"); String halfNodeId = bb.getPropValue("jhsecond", "halfNodeId"); - //1.获取当前有效人员数据 todo 正式去除分部参数 + //1.获取当前有效人员数据 rs.executeQuery("select a.id,a.departmentid,a.lastname,a.jobtitle,a.resourceimageid,b."+superId+",b."+halfNodeId+" from " + " hrmresource a left join cus_fielddata b on a.id = b.id and b.scopeid = 3 where status < 4"); @@ -71,7 +69,59 @@ public class OrganizationChartServiceImpl extends Service implements Organizatio //4.递归处理 buildHierarchy(voList,parentNode); + data.put("result",parentNode); + data.put("halfResult",filteredList); + + return data; + } + + @Override + public Map selectChart(Map request2Map) { + BaseBean bb = new BaseBean(); + RecordSet rs = new RecordSet(); + Map data = new HashMap<>(4); + + String topId = bb.getPropValue("jhsecond", "topId"); + String halfId = bb.getPropValue("jhsecond", "halfId"); + String jobId = bb.getPropValue("jhsecond", "jobId"); + + //1.获取建模组织架构图数据 + rs.executeQuery("select a.gwszbm,a.zzjggw,b.zzjgtgw,a.zzjggwsj,a.sfbj,a.gjsx,a.sfycx from uf_zzjgdygx a left join uf_zzjggw b on a.zzjggw = b.id"); + List voList = new ArrayList<>(); + while (rs.next()) { + PersonInfoVo personInfoVo = selectPersonInfo(Util.null2String(rs.getString("zzjggw")), jobId); + OrganizationChartVo build = OrganizationChartVo.builder() + .id(Util.getIntValue(rs.getString("zzjggw"))) + .deptName(Util.null2String(rs.getString("gwszbm"))) + .lastName(personInfoVo.getLastName()) + .jobName(Util.null2String(rs.getString("zzjgtgw"))) + .photoUrl(personInfoVo.getPhotoUrl()) + .pId(Util.getIntValue(rs.getString("zzjggwsj"))) + .orderId(Util.getIntValue(rs.getString("gjsx"),999)) + .addLine("0".equals(Util.null2String(rs.getString("sfycx"))) ? "true" : "false") + .type("0".equals(Util.null2String(rs.getString("sfbj"))) ? "tag" : "") + .show(personInfoVo.getLastName() == null ? 1 : 0) + .build(); + voList.add(build); + } + + //2.筛选出顶部节点 + OrganizationChartVo parentNode = voList.stream() + .filter(vo -> vo.getId() == Integer.parseInt(topId)) + .findFirst() + .orElse(null); + + //3.设置半节点存在下级属性值并获取下级 + voList.stream() + .filter(vo -> vo.getId() == Integer.parseInt(halfId)) + .forEach(vo -> vo.setHalfType("true")); + List filteredList = voList.stream() + .filter(vo -> vo.getPId() != null && vo.getPId() == Integer.parseInt(halfId)) + .collect(Collectors.toList()); + + //4.递归处理 + buildHierarchyChart(voList,parentNode); data.put("result",parentNode); data.put("halfResult",filteredList); @@ -79,6 +129,39 @@ public class OrganizationChartServiceImpl extends Service implements Organizatio return data; } + private void buildHierarchyChart(List list, OrganizationChartVo parentNode) { + List children = list.stream() + .filter(vo -> vo.getPId().equals(parentNode.getId())) + .collect(Collectors.toList()); + + //排序处理 + children = children.stream() + .sorted(Comparator.comparingInt(OrganizationChartVo::getOrderId)) + .collect(Collectors.toList()); + + for (OrganizationChartVo child : children) { + buildHierarchyChart(list, child); + } + + parentNode.setChildren(children); + } + + private PersonInfoVo selectPersonInfo(String zzjggw, String jobId) { + + PersonInfoVo personInfo = new PersonInfoVo(); + RecordSet rs = new RecordSet(); + //rs.getDBType().equals("") + rs.executeQuery("select a.id,a."+jobId+",b.lastname,b.resourceimageid from cus_fielddata a left join hrmresource b on a.id = b.id \n" + + " and a.scopeid = 3 where b.status < 4 and a."+jobId+" = ?",zzjggw); + if (rs.next()) { + personInfo.setLastName(Util.null2String(rs.getString("lastname"))); + personInfo.setPhotoUrl(getPhotoUrl(Util.null2String(rs.getString("resourceimageid")))); + } + + return personInfo; + + } + /** * 递归处理 * @param list @@ -96,6 +179,8 @@ public class OrganizationChartServiceImpl extends Service implements Organizatio parentNode.setChildren(children); } + + /** * 部门名称 * @param departmentId diff --git a/src/com/engine/jhsecond/web/OrganizationChartAction.java b/src/com/engine/jhsecond/web/OrganizationChartAction.java index f36978a..d5f3f19 100644 --- a/src/com/engine/jhsecond/web/OrganizationChartAction.java +++ b/src/com/engine/jhsecond/web/OrganizationChartAction.java @@ -45,7 +45,24 @@ public class OrganizationChartAction { return mapper.writeValueAsString(apidatas); } catch (Exception e) { apidatas.put("api_status", false); - return ""; + return apidatas.toString(); + } + } + + @GET + @Path("/selectChart") + @Produces(MediaType.APPLICATION_JSON) + public String selectChart(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = new HashMap<>(4); + try { + User user = HrmUserVarify.getUser(request, response); + apidatas = getOrganizationChartService(user).selectChart(ParamUtil.request2Map(request)); + apidatas.put("api_status", true); + ObjectMapper mapper = new ObjectMapper(); + return mapper.writeValueAsString(apidatas); + } catch (Exception e) { + apidatas.put("api_status", false); + return apidatas.toString(); } } }