weaver-hrm-organization/src/com/engine/organization/service/impl/ModeHrmResourceServiceImpl....

472 lines
19 KiB
Java
Raw Normal View History

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 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<String, Object> chartResourceList(ModeHrmResourceParam param) {
Map<String, Object> dataMap = new HashMap<>(4);
List<ResourceListColumns> resourceListColumns = getTableColumns();
List<Integer> allSupDepartment = getAllSupDepartment(param.getDepartmentId());
List<ResourceChartVO> resourceChartVOS = new ArrayList<>();
if ("0".equals(param.getVersionId())) {
List<ResourceChartPO> resourceChartNb = new ArrayList<>(selectNbPerson(allSupDepartment,param.getNbValue()));
resourceChartVOS.addAll(convertToVO(resourceChartNb,"1"));
List<ResourceChartPO> resourceChartWb = new ArrayList<>(selectWbPerson(allSupDepartment,param.getWbValue()));
resourceChartVOS.addAll(convertToVO(resourceChartWb,"2"));
}else {
//历史版本
List<String> 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<ResourceChartVO> selectPersonHt(Collection<Integer> allSupDepartment,List<String> result,String versionId) {
//历史版本
List<ResourceChartVO> 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<String, Object> chartResourceChart(ModeHrmResourceParam param) {
List<ChartPO> 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<Integer> allSupDepartment = getAllSupDepartment(param.getDepartmentId());
List<ResourceChartPO> resourceChartNb = new ArrayList<>(selectNbPerson(allSupDepartment,param.getNbValue()));
List<ResourceChartVO> resourceChartVOS = convertToVO(resourceChartNb,"1");
List<ResourceChartPO> 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<String, Object> 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 < 4 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<String, Object> getDeptDetailCondition() {
RecordSet rs = new RecordSet();
List<DetailConditionVO> nbCondition = new ArrayList<>();
List<String> nbValue = new ArrayList<>();
List<DetailConditionVO> wbCondition = new ArrayList<>();
//内部职工
rs.executeQuery("select mc,bh from uf_ygxz where sfqy = 0 and syfw = 0");
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");
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());
}
Map<String,Object> datas = new HashMap<>(4);
datas.put("nbCondition",nbCondition);
datas.put("nbValue",nbValue);
datas.put("wbCondition",wbCondition);
return datas;
}
/**
* 正式员工
* @param allSupDepartment
* @return
*/
private List<ResourceChartPO> selectNbPerson(Collection<Integer> allSupDepartment,String workType) {
List<ResourceChartPO> resourceChartPOS = new ArrayList<>();
if (StringUtils.isEmpty(workType)){
return resourceChartPOS;
}
List<String> result = Arrays.asList(workType.split(","));
workType = result.stream()
.map(s -> "'" + s + "'")
.collect(Collectors.joining(","));
RecordSet rs = new RecordSet();
String join = CollectionUtil.join(allSupDepartment, ",");
rs.executeQuery("select id,gh,xm,xb,bm,gw,sjhm from uf_zsygrzbdd where zt < 4 and bm in ("+join+") and ygxz in ("+workType+")");
while (rs.next()) {
ResourceChartPO build = ResourceChartPO.builder()
.id((long) Util.getIntValue(rs.getString("id")))
.workCode(Util.null2String(rs.getString("gh")))
.lastName(Util.null2String(rs.getString("xm")))
.sex(Util.null2String(rs.getString("xb")))
.departmentId(Util.getIntValue(rs.getString("bm")))
.jobBrowser(Util.null2String(rs.getString("gw")))
.mobile(Util.null2String(rs.getString("sjhm")))
.build();
resourceChartPOS.add(build);
}
return resourceChartPOS;
}
/**
* 外部员工
* @param allSupDepartment
* @return
*/
private List<ResourceChartPO> selectWbPerson(Collection<Integer> allSupDepartment,String workType) {
List<ResourceChartPO> resourceChartPOS = new ArrayList<>();
if (StringUtils.isEmpty(workType)){
return resourceChartPOS;
}
List<String> result = Arrays.asList(workType.split(","));
workType = result.stream()
.map(s -> "'" + s + "'")
.collect(Collectors.joining(","));
RecordSet rs = new RecordSet();
String join = CollectionUtil.join(allSupDepartment, ",");
rs.executeQuery("select id,gh,xm,xb,bmbz,gw,lxfs from uf_qlwbrydngljmb where zt < 4 and bmbz in ("+join+") and ygxz in ("+workType+")");
while (rs.next()) {
ResourceChartPO build = ResourceChartPO.builder()
.id((long) Util.getIntValue(rs.getString("id")))
.workCode(Util.null2String(rs.getString("gh")))
.lastName(Util.null2String(rs.getString("xm")))
.sex(Util.null2String(rs.getString("xb")))
.departmentId(Util.getIntValue(rs.getString("bmbz")))
.jobBrowser(Util.null2String(rs.getString("gw")))
.mobile(Util.null2String(rs.getString("lxfs")))
.build();
resourceChartPOS.add(build);
}
return resourceChartPOS;
}
/**
* 列表表头
* @return
*/
private List<ResourceListColumns> getTableColumns() {
List<ResourceListColumns> 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<Integer> 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<ResourceChartVO> convertToVO(List<ResourceChartPO> resourceChartPOS,String type) {
List<ResourceChartVO> 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());
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<String> 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 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");
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<String, Object> chartResourceChartHt(ModeHrmResourceParam param) {
List<ChartPO> 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(fLeader);
try {
departmentChartPO.setFleaderimg(new ResourceComInfo().getMessagerUrls(fLeader));
} catch (Exception e) {
throw new RuntimeException(e);
}
}
//人员
List<Integer> allSupDepartment = getAllSupDepartment(param.getDepartmentId());
List<String> 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<ResourceChartVO> 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<String, Object> result = new HashMap<>(4);
result.put("api_status", true);
result.put("data", dataList);
return result;
}
}