package com.engine.organization.service.impl; import cn.hutool.core.collection.CollectionUtil; import com.engine.core.impl.Service; import com.engine.organization.entity.chart.ChartPO; import com.engine.organization.entity.chart.DetailConditionVO; import com.engine.organization.entity.chart.ResourceListColumns; import com.engine.organization.entity.chart.params.ModeHrmResourceParam; import com.engine.organization.entity.hrmresource.po.ResourceChartPO; import com.engine.organization.entity.hrmresource.vo.ResourceChartVO; import com.engine.organization.mapper.hrmresource.SystemDataMapper; import com.engine.organization.service.ModeHrmResourceService; import com.engine.organization.util.db.MapperProxyFactory; import com.weaver.general.BaseBean; import lombok.SneakyThrows; import org.apache.commons.lang3.StringUtils; import weaver.conn.RecordSet; import weaver.general.Util; import weaver.hrm.company.DepartmentComInfo; import weaver.hrm.company.SubCompanyComInfo; import weaver.hrm.resource.ResourceComInfo; import java.util.*; import java.util.stream.Collectors; /** * @Author liang.cheng * @Date 2024/4/24 2:01 PM * @Description: uf_zsygrzbdd 正式员工档案 uf_qlwbrydngljmb 外部人员档案 * @Version 1.0 */ public class ModeHrmResourceServiceImpl extends Service implements ModeHrmResourceService { @Override public Map chartResourceList(ModeHrmResourceParam param) { Map dataMap = new HashMap<>(4); List resourceListColumns = getTableColumns(); List allSupDepartment = getAllSupDepartment(param.getDepartmentId()); List resourceChartVOS = new ArrayList<>(); if ("0".equals(param.getVersionId())) { List resourceChartNb = new ArrayList<>(selectNbPerson(allSupDepartment,param.getNbValue(),param.getDeptLevel(),param.getDepartmentId())); resourceChartVOS.addAll(convertToVO(resourceChartNb,"1")); List resourceChartWb = new ArrayList<>(selectWbPerson(allSupDepartment,param.getWbValue())); resourceChartVOS.addAll(convertToVO(resourceChartWb,"2")); }else { //历史版本 List results = new ArrayList<>(); if (StringUtils.isNotEmpty(param.getNbValue())) { results.addAll(Arrays.asList(param.getNbValue().split(","))); } if (StringUtils.isNotEmpty(param.getWbValue())) { results.addAll(Arrays.asList(param.getWbValue().split(","))); } resourceChartVOS = selectPersonHt(allSupDepartment,results,param.getVersionId()); } dataMap.put("columns", resourceListColumns); dataMap.put("dataSource", resourceChartVOS); return dataMap; } /** * 历史版本列表 * @param allSupDepartment * @param versionId * @return */ private List selectPersonHt(Collection allSupDepartment,List result,String versionId) { //历史版本 List resourceChartVOS = new ArrayList<>(); if (CollectionUtil.isEmpty(result)){ return resourceChartVOS; } String workType = result.stream() .map(s -> "'" + s + "'") .collect(Collectors.joining(",")); RecordSet rs = new RecordSet(); String join = CollectionUtil.join(allSupDepartment, ","); rs.executeQuery("select id,workcode,lastname,sex,subcompany,department,jobtitle,mobile,usekind,status,versionid \n" + "from jcl_chart_resource where status < 4 and versionid = "+versionId+" and departmentid in ("+join+") and usekind in ("+workType+")"); while (rs.next()) { ResourceChartVO build = ResourceChartVO.builder() .id((long) Util.getIntValue(rs.getString("id"))) .workCode(Util.null2String(rs.getString("workcode"))) .lastName(Util.null2String(rs.getString("lastname"))) .sex("1".equals(Util.null2String(rs.getString("sex"))) ? "女" : "男") .subcompanyName(Util.null2String(rs.getString("subcompany"))) .departmentName(Util.null2String(rs.getString("department"))) .jobTitle(Util.null2String(rs.getString("jobtitle"))) .mobile(Util.null2String(rs.getString("mobile"))) .build(); resourceChartVOS.add(build); } return resourceChartVOS; } @Override public Map chartResourceChart(ModeHrmResourceParam param) { List dataList = new ArrayList<>(); String departmentId = param.getDepartmentId(); RecordSet rs = new RecordSet(); rs.executeQuery("select a.id,a.departmentname as name,b.bmfzr\n" + "from hrmdepartment a left join hrmdepartmentdefined b on a.id = b.deptid \n" + "where a.id = ?",param.getDepartmentId()); //部门 ChartPO departmentChartPO = new ChartPO(); if (rs.next()) { String fLeader = Util.null2String(rs.getString("bmfzr")); departmentChartPO.setFtype("2"); departmentChartPO.setFobjid(departmentId); departmentChartPO.setExpand("1"); departmentChartPO.setId("d_"+departmentId); departmentChartPO.setFname(rs.getString("name")); departmentChartPO.setFleader(getDepartmentLeader(fLeader)); try { departmentChartPO.setFleaderimg(new ResourceComInfo().getMessagerUrls(fLeader)); } catch (Exception e) { throw new RuntimeException(e); } } //人员 List allSupDepartment = getAllSupDepartment(param.getDepartmentId()); List resourceChartNb = new ArrayList<>(selectNbPerson(allSupDepartment,param.getNbValue(),param.getDeptLevel(),param.getDepartmentId())); List resourceChartVOS = convertToVO(resourceChartNb,"1"); List resourceChartWb = new ArrayList<>(selectWbPerson(allSupDepartment,param.getWbValue())); resourceChartVOS.addAll(convertToVO(resourceChartWb,"2")); resourceChartVOS.forEach(item -> { ChartPO chartPO = getResourceChartPO(item,departmentChartPO.getId()); dataList.add(chartPO); }); departmentChartPO.setFonjob(resourceChartVOS.size()); dataList.add(departmentChartPO); Map result = new HashMap<>(4); result.put("api_status", true); result.put("data", dataList); return result; } @Override public int selcetPersonCount(String departmentIds) { RecordSet rs = new RecordSet(); int totalCount = 0; rs.executeQuery("select count(1) as total_count from uf_zsygrzbdd where zt = 1 and bm in ("+departmentIds+")"); if (rs.next()) { totalCount = Util.getIntValue(rs.getString("total_count")); } rs.executeQuery("select count(1) as total_count from uf_qlwbrydngljmb where zt < 4 and bmbz in ("+departmentIds+")"); if (rs.next()) { totalCount += Util.getIntValue(rs.getString("total_count")); } return totalCount; } @Override public Map getDeptDetailCondition() { RecordSet rs = new RecordSet(); List nbCondition = new ArrayList<>(); List nbValue = new ArrayList<>(); List wbCondition = new ArrayList<>(); List wbValue = new ArrayList<>(); //内部职工 rs.executeQuery("select mc,bh from uf_ygxz where sfqy = 0 and syfw = 0 and sfxsss = 1"); while (rs.next()) { String mc = Util.null2String(rs.getString("mc")); String bh = Util.null2String(rs.getString("bh")); nbCondition.add(DetailConditionVO.builder().label(mc).value(bh).build()); nbValue.add(bh); } //外部人员 rs.executeQuery("select mc,bh from uf_ygxz where sfqy = 0 and syfw = 1 and sfxsss = 1"); while (rs.next()) { String mc = Util.null2String(rs.getString("mc")); String bh = Util.null2String(rs.getString("bh")); wbCondition.add(DetailConditionVO.builder().label(mc).value(bh).build()); wbValue.add(bh); } Map datas = new HashMap<>(4); datas.put("nbCondition",nbCondition); datas.put("nbValue",nbValue); datas.put("wbCondition",wbCondition); datas.put("wbValue",wbValue); return datas; } /** * 正式员工 * @param allSupDepartment * @return */ private List selectNbPerson(Collection allSupDepartment,String workType,String depetLevel,String departmentId) { List resourceChartPOS = new ArrayList<>(); if (StringUtils.isEmpty(workType)){ return resourceChartPOS; } List result = Arrays.asList(workType.split(",")); workType = result.stream() .map(s -> "'" + s + "'") .collect(Collectors.joining(",")); BaseBean bb = new BaseBean(); String modeId = bb.getPropValue("hrmOrganization", "nbmodeId"); String formId = bb.getPropValue("hrmOrganization", "nbformId"); String customid = bb.getPropValue("hrmOrganization", "nbcustomid"); RecordSet rs = new RecordSet(); String join = CollectionUtil.join(allSupDepartment, ","); String sql = "select id,gh,xm,xb,bm,ks,gw,sjhm,ygxz from uf_zsygrzbdd where zt = 1 and zgzt = 1 and bm = "+departmentId+" and ygxz in ("+workType+")"; //非一级部门情况下使用科室字段 if (!"0".equals(depetLevel)) { sql = "select id,gh,xm,xb,bm,ks,gw,sjhm,ygxz from uf_zsygrzbdd where zt = 1 and zgzt = 1 and ks in ("+join+") and ygxz in ("+workType+")"; } rs.executeQuery(sql); while (rs.next()) { int bm = Util.getIntValue(rs.getString("bm")); int ks = Util.getIntValue(rs.getString("ks")); int id = Util.getIntValue(rs.getString("id")); ResourceChartPO build = ResourceChartPO.builder() .id((long) id) .workCode(Util.null2String(rs.getString("gh"))) .lastName(Util.null2String(rs.getString("xm"))) .sex(Util.null2String(rs.getString("xb"))) .departmentId(ks != -1 ? ks : bm) .deptType(ks != -1 ? 1 : 0) .jobBrowser(Util.null2String(rs.getString("gw"))) .mobile(Util.null2String(rs.getString("sjhm"))) .pcUrl(String.format("/spa/cube/index.html#/main/cube/card?type=0&modeId={}&formId={}&billid={}&opentype=0&customid={}&viewfrom=fromsearchlist",modeId,formId,id,customid)) .personType(Util.null2String(rs.getString("ygxz"))) .build(); resourceChartPOS.add(build); } return resourceChartPOS; } /** * 外部员工 * @param allSupDepartment * @return */ private List selectWbPerson(Collection allSupDepartment,String workType) { List resourceChartPOS = new ArrayList<>(); if (StringUtils.isEmpty(workType)){ return resourceChartPOS; } List result = Arrays.asList(workType.split(",")); workType = result.stream() .map(s -> "'" + s + "'") .collect(Collectors.joining(",")); BaseBean bb = new BaseBean(); String modeId = bb.getPropValue("hrmOrganization", "wbmodeId"); String formId = bb.getPropValue("hrmOrganization", "wbformId"); String customid = bb.getPropValue("hrmOrganization", "wbcustomid"); RecordSet rs = new RecordSet(); String join = CollectionUtil.join(allSupDepartment, ","); rs.executeQuery("select id,gh,xm,xb,bmbz,gw,lxfs,ks,ygxz from uf_qlwbrydngljmb where zt < 4 and ks in ("+join+") and ygxz in ("+workType+")"); while (rs.next()) { int id = Util.getIntValue(rs.getString("id")); ResourceChartPO build = ResourceChartPO.builder() .id((long) id) .workCode(Util.null2String(rs.getString("gh"))) .lastName(Util.null2String(rs.getString("xm"))) .sex(Util.null2String(rs.getString("xb"))) .departmentId(Util.getIntValue(rs.getString("ks"))) .deptType(1) .jobBrowser(Util.null2String(rs.getString("gw"))) .mobile(Util.null2String(rs.getString("lxfs"))) .pcUrl(String.format("/spa/cube/index.html#/main/cube/card?type=0&modeId={}&formId={}&billid={}&opentype=0&customid={}&viewfrom=fromsearchlist",modeId,formId,id,customid)) .personType(Util.null2String(rs.getString("ygxz"))) .build(); resourceChartPOS.add(build); } return resourceChartPOS; } /** * 列表表头 * @return */ private List getTableColumns() { List list = new ArrayList<>(); list.add(ResourceListColumns.builder().title("序号").dataIndex("id").key("id").build()); list.add(ResourceListColumns.builder().title("工号").dataIndex("workCode").key("workCode").build()); list.add(ResourceListColumns.builder().title("姓名").dataIndex("lastName").key("lastName").build()); list.add(ResourceListColumns.builder().title("性别").dataIndex("sex").key("sex").build()); list.add(ResourceListColumns.builder().title("部门").dataIndex("departmentName").key("departmentName").build()); list.add(ResourceListColumns.builder().title("分部").dataIndex("subcompanyName").key("subcompanyName").build()); list.add(ResourceListColumns.builder().title("岗位").dataIndex("jobTitle").key("jobTitle").build()); list.add(ResourceListColumns.builder().title("手机号").dataIndex("mobile").key("mobile").build()); return list; } /** * 获取所有子部门和当前部门集合 * @param departmentId * @return */ @SneakyThrows private List getAllSupDepartment(String departmentId){ DepartmentComInfo departmentComInfo = new DepartmentComInfo(); ArrayList subList = new ArrayList(); departmentComInfo.getAllChildDeptByDepId(subList, departmentId); subList.add(departmentId); return subList; } /** * 转换 * @param resourceChartPOS * @return */ @SneakyThrows private List convertToVO(List resourceChartPOS,String type) { List resourceChartVOS = new ArrayList<>(); DepartmentComInfo departmentComInfo = new DepartmentComInfo(); SubCompanyComInfo subCompanyComInfo = new SubCompanyComInfo(); for (ResourceChartPO item : resourceChartPOS) { ResourceChartVO resourceChartVO = new ResourceChartVO(); String departmentId =String.valueOf(item.getDepartmentId()); String subCompanyname = subCompanyComInfo.getSubCompanyname(departmentComInfo.getSubcompanyid1(departmentId)); resourceChartVO.setId(item.getId()); resourceChartVO.setWorkCode(item.getWorkCode()); resourceChartVO.setLastName(item.getLastName()); resourceChartVO.setSex("1".equals(item.getSex()) ? "女" : "男"); resourceChartVO.setDepartmentName(departmentComInfo.getDepartmentName(departmentId)); resourceChartVO.setSubcompanyName(subCompanyname); resourceChartVO.setJobTitle(getJobBrowserName(item.getJobBrowser(),type)); resourceChartVO.setStatus(item.getStatus()); resourceChartVO.setMobile(item.getMobile()); resourceChartVO.setDeptType(item.getDeptType()); resourceChartVO.setPcUrl(item.getPcUrl()); resourceChartVO.setPersonType(item.getPersonType()); resourceChartVOS.add(resourceChartVO); } return resourceChartVOS; } /** * 自定义岗位名称 * @param code * @param code * @return */ private String getJobBrowserName(String code,String type){ String gwmc; RecordSet rs = new RecordSet(); if ("1".equals(type)) { rs.executeQuery("select gwmc from uf_zsyggwbd where id = ?",code); rs.next(); gwmc = Util.null2String(rs.getString("gwmc")); }else { rs.executeQuery("select gwmc from uf_gwmc where gwbm = ?",code); rs.next(); gwmc = Util.null2String(rs.getString("gwmc")); } return gwmc; } /** * 获取部门负责人 * * @param ids 部门负责人ID * @return 人员名称 */ private String getDepartmentLeader(String 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); try { ResourceComInfo resourceComInfo = new ResourceComInfo(); String lastName = resourceComInfo.getLastname(s); if (StringUtils.isNotBlank(lastName)) { leaderList.add(lastName); } } catch (Exception e) { e.printStackTrace(); } } return StringUtils.join(leaderList, ","); } /** * 构建人员图谱元素 * @param item * @return */ private ChartPO getResourceChartPO(ResourceChartVO item,String parentId) { ChartPO chartPO = new ChartPO(); chartPO.setFtype("4"); chartPO.setFobjid(String.valueOf(item.getId())); chartPO.setId(chartPO.getFobjid()); chartPO.setFname(item.getLastName()); chartPO.setParentId(parentId); chartPO.setLocalDeptName(item.getDepartmentName()); chartPO.setJobTitle(item.getJobTitle()); chartPO.setExpand("1"); chartPO.setHasChildren("false"); chartPO.setDeptType(item.getDeptType()); chartPO.setPcUrl(item.getPcUrl()); chartPO.setPersonType(item.getPersonType()); try { String resourceId = getResourceIdByWorkCode(item.getWorkCode()); chartPO.setFleaderimg(new ResourceComInfo().getMessagerUrls(resourceId)); } catch (Exception e) { throw new RuntimeException(e); } return chartPO; } /** * 获取人员id * @param workCode * @return */ private String getResourceIdByWorkCode(String workCode) { RecordSet rs = new RecordSet(); rs.executeQuery("select id from hrmresource where workcode = ?",workCode); rs.next(); return Util.null2String(rs.getString("id")); } public Map chartResourceChartHt(ModeHrmResourceParam param) { List dataList = new ArrayList<>(); String departmentId = param.getDepartmentId(); RecordSet rs = new RecordSet(); rs.executeQuery("select departmentid,departmentname,fleader from jcl_chart_department where departmentid = ? and versionid = ?",param.getDepartmentId(),param.getVersionId()); //部门 ChartPO departmentChartPO = new ChartPO(); if (rs.next()) { String fLeader = Util.null2String(rs.getString("fleader")); departmentChartPO.setFtype("2"); departmentChartPO.setFobjid(departmentId); departmentChartPO.setExpand("1"); departmentChartPO.setId("d_"+departmentId); departmentChartPO.setFname(rs.getString("departmentname")); departmentChartPO.setFleader(getDepartmentLeader(fLeader)); try { departmentChartPO.setFleaderimg(new ResourceComInfo().getMessagerUrls(fLeader)); } catch (Exception e) { throw new RuntimeException(e); } } //人员 List allSupDepartment = getAllSupDepartment(param.getDepartmentId()); List results = new ArrayList<>(); if (StringUtils.isNotEmpty(param.getNbValue())) { results.addAll(Arrays.asList(param.getNbValue().split(","))); } if (StringUtils.isNotEmpty(param.getWbValue())) { results.addAll(Arrays.asList(param.getWbValue().split(","))); } List resourceChartVOS = selectPersonHt(allSupDepartment, results, param.getVersionId()); resourceChartVOS.forEach(item -> { ChartPO chartPO = getResourceChartPO(item,departmentChartPO.getId()); dataList.add(chartPO); }); departmentChartPO.setFonjob(resourceChartVOS.size()); dataList.add(departmentChartPO); Map result = new HashMap<>(4); result.put("api_status", true); result.put("data", dataList); return result; } }