Commit 76328738 authored by xixinzhao's avatar xixinzhao

新增树接口

parent 93e99161
package com.yeejoin.amos.boot.module.common.api.enums;
public enum UserRolesEnum {
ADMIN("admin","机场单位"),
AIRPORTUNIT("AIRPORTUNIT","机场单位");
private String code;
private String name;
UserRolesEnum(String code, String name){
this.code = code;
this.name = name;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
......@@ -63,4 +63,9 @@ public interface OrgUsrMapper extends BaseMapper<OrgUsr> {
List< Map<String,Object>> getparent();
List< OrgUsrExcelDto> exportToExcel();
/**
* 查询单位基本信息列表和单位下所有的重点部位数量。
*/
List<OrgUsrTreeDto> getCompanyAndKeySite(Long companyId);
}
......@@ -8,8 +8,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yeejoin.amos.boot.module.common.api.dto.*;
import com.yeejoin.amos.boot.module.common.api.entity.DynamicFormInstance;
import com.yeejoin.amos.boot.module.common.api.entity.OrgUsr;
import com.yeejoin.amos.feign.privilege.model.AgencyUserModel;
/**
......@@ -176,4 +175,20 @@ public interface IOrgUsrService {
List< Map<String,Object>> getparent();
List< OrgUsrExcelDto> exportToExcel();
/**
* 根据登陆人获取公司部门人员树
*/
List<OrgMenuDto> companyUserTreeByUser (AgencyUserModel user);
/**
* 根据登陆人获取公司部门树
*/
List<OrgMenuDto> companyTreeByUser(AgencyUserModel user);
/**
* 根据登陆人获取公司列表(关联重点部位)
*/
List<OrgUsrTreeDto> companyListByUser(AgencyUserModel user);
}
......@@ -335,5 +335,49 @@ LEFT JOIN (
on b.instance_id=a.sequence_nbr where a.biz_org_name is not null
</select>
<select id="getCompanyAndKeySite" resultType="com.yeejoin.amos.boot.module.common.api.dto.OrgUsrTreeDto" >
SELECT
company_sur.sequence_nbr as sequenceNbr,
company_sur.biz_org_name as bizOrgName ,
company_sur.parent_id as parentId,
company_sur.biz_org_type as bizOrgType,
-- cb.field_value_label,
CASE
WHEN keysite_sur.num IS NULL THEN
0
ELSE
keysite_sur.num
END AS num
FROM
(
SELECT
company.sequence_nbr,
company.parent_id,
company.biz_org_name,
company.biz_org_type
FROM
cb_org_usr company
WHERE
(company.biz_org_type = 'COMPANY' OR company.biz_org_type = 'DEPARTMENT')
AND company.is_delete = FALSE
<if test="companyId != null and companyId != ''">
AND biz_org_code LIKE CONCAT((SELECT biz_org_code FROM cb_org_usr WHERE sequence_nbr = #{companyId}),'%')
</if>
) company_sur
LEFT JOIN (
SELECT
keysite.belong_id,
COUNT(keysite.belong_id) as num
FROM
cb_key_site keysite
WHERE
keysite.is_delete = FALSE
GROUP BY
keysite.belong_id
) keysite_sur ON company_sur.sequence_nbr = keysite_sur.belong_id
-- LEFT JOIN cb_dynamic_form_instance as cb ON company_sur.sequence_nbr = cb.instance_id where field_code = 'companyNature'
</select>
</mapper>
......@@ -7,6 +7,8 @@ import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import com.yeejoin.amos.boot.module.common.api.dto.*;
import com.yeejoin.amos.feign.privilege.model.AgencyUserModel;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.elasticsearch.core.SearchHits;
......@@ -318,9 +320,54 @@ public class OrgUsrController extends BaseController {
public ResponseModel<List<ESOrgUsrDto>> selectByIddata(HttpServletRequest request, String name) throws Exception {
return ResponseHelper.buildResponse(eSOrgUsrService.queryByKeys(name));
}
/**
*
* 获取单位部门树
* @param
* @return
*/
@TycloudOperation(needAuth = false, ApiLevel = UserType.AGENCY)
@RequestMapping(value = "/companyTreeByUser", method = RequestMethod.GET)
@ApiOperation(httpMethod = "GET", value = "根据登陆人获取单位部门树", notes = "根据登陆人获取单位部门树")
public ResponseModel< List<OrgMenuDto>>selectCompanyTreeByUser() throws Exception {
// 获取登陆人角色
AgencyUserModel user = getUserInfo();
List<OrgMenuDto> menus = iOrgUsrService.companyTreeByUser(user);
return ResponseHelper.buildResponse(menus);
}
/**
*
* 获取单位部门树
* @param
* @return
*/
@TycloudOperation(needAuth = false, ApiLevel = UserType.AGENCY)
@RequestMapping(value = "/companyUserTreeByUser", method = RequestMethod.GET)
@ApiOperation(httpMethod = "GET", value = "根据登陆人获取单位部门用户树", notes = "根据登陆人获取单位部门用户树")
public ResponseModel< List<OrgMenuDto>>companyUserTreeByUser() {
// 获取登陆人角色
AgencyUserModel user = getUserInfo();
List<OrgMenuDto> menus = iOrgUsrService.companyUserTreeByUser(user);
return ResponseHelper.buildResponse(menus);
}
/**
*
* 获取单位列表
* @param
* @return
*/
@TycloudOperation(needAuth = false, ApiLevel = UserType.AGENCY)
@RequestMapping(value = "/companyListByUser", method = RequestMethod.GET)
@ApiOperation(httpMethod = "GET", value = "根据登陆人获取单位列表", notes = "根据登陆人获取单位列表")
public ResponseModel< List<OrgUsrTreeDto>> companyListByUser() {
// 获取登陆人角色
AgencyUserModel user = getUserInfo();
List<OrgUsrTreeDto> menus = iOrgUsrService.companyListByUser(user);
return ResponseHelper.buildResponse(menus);
}
}
\ No newline at end of file
......@@ -11,11 +11,13 @@ import com.yeejoin.amos.boot.module.common.api.entity.DynamicFormColumn;
import com.yeejoin.amos.boot.module.common.api.entity.DynamicFormInstance;
import com.yeejoin.amos.boot.module.common.api.entity.OrgUsr;
import com.yeejoin.amos.boot.module.common.api.enums.OrgPersonEnum;
import com.yeejoin.amos.boot.module.common.api.enums.UserRolesEnum;
import com.yeejoin.amos.boot.module.common.api.feign.SupervisionFeign;
import com.yeejoin.amos.boot.module.common.api.mapper.OrgUsrMapper;
import com.yeejoin.amos.boot.module.common.api.service.IOrgUsrService;
import com.yeejoin.amos.feign.privilege.Privilege;
import com.yeejoin.amos.feign.privilege.model.AgencyUserModel;
import com.yeejoin.amos.feign.privilege.model.RoleModel;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -27,13 +29,7 @@ import org.typroject.tyboot.core.rdbms.service.BaseService;
import javax.annotation.Resource;
import java.lang.reflect.Method;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.*;
import java.util.stream.Collectors;
/**
......@@ -1010,7 +1006,221 @@ public class OrgUsrServiceImpl extends BaseService<OrgUsrDto, OrgUsr, OrgUsrMapp
wrapper.eq(OrgUsr::getIsDelete, false);
return this.baseMapper.selectList(wrapper);
}
@Override
public List<OrgMenuDto> companyUserTreeByUser (AgencyUserModel user) {
LambdaQueryWrapper<OrgUsr> wrapper= new LambdaQueryWrapper<OrgUsr>();
wrapper.eq(OrgUsr::getIsDelete, false);
List<OrgUsr> companyDepartmentMsgList = this.baseMapper.selectList(wrapper);
return gettTreeByUser(user, companyDepartmentMsgList);
}
@Override
public List<OrgMenuDto> companyTreeByUser(AgencyUserModel user) {
List<OrgUsr> companyDepartmentMsgList = selectCompanyDepartmentMsg();
return gettTreeByUser(user, companyDepartmentMsgList);
};
@Override
public List<OrgUsrTreeDto> companyListByUser(AgencyUserModel user) {
List<OrgUsrTreeDto> list = new ArrayList<>();
// 需要角色为机场单位或管理员,其余角色返回空
String code = UserRolesEnum.AIRPORTUNIT.getCode();
String codeAdmin = UserRolesEnum.ADMIN.getCode();
String roles = getRoles(user, code);
if (!StringUtils.isEmpty(roles)) {
List<OrgUsrTreeDto> companyList = this.baseMapper.getCompanyAndKeySite(null);
if (roles.equals(codeAdmin)) {
// 返回全部单位列表
return companyAndKeySiteList(companyList);
} else if (roles.equals(code)) {
// } else {
// 人员与多个部门/公司关联
List<OrgUsr> orgUsrList = orgUsrList(user);
if (ObjectUtils.isEmpty(orgUsrList)) {
return list;
}
Set<Long> set = new HashSet<>();
orgUsrList.forEach(orgUsr -> {
Long parent = ObjectUtils.isEmpty(orgUsr.getParentId()) ? 0L : Long.parseLong(orgUsr.getParentId());
if (set.add(parent)) {
Long companyIdByDto = getCompanyIdByDto(parent, companyList);
List<OrgUsrTreeDto> orgUsrTreeDtoList = this.baseMapper.getCompanyAndKeySite(companyIdByDto);
list.addAll(companyAndKeySiteList(orgUsrTreeDtoList));
}
});
// 返回所在用户单位列表
return list.stream().distinct().collect(Collectors.toList());
}
}
return list;
}
/**
* 获取登陆人所在公司
*/
private Long getCompanyIdByDto (Long parentId, List<OrgUsrTreeDto> companyDepartmentMsgList) {
Long pid = null;
for (OrgUsrTreeDto orgUsr : companyDepartmentMsgList) {
if (orgUsr.getSequenceNbr().equals(parentId)) {
if (orgUsr.getBizOrgType().equals(OrgPersonEnum.公司.getKey()) && ObjectUtils.isEmpty(orgUsr.getParentId())) {
return orgUsr.getSequenceNbr();
} else {
pid = getCompanyIdByDto(Long.parseLong(orgUsr.getParentId()),companyDepartmentMsgList);
}
}
}
return pid;
}
/**
* 查询单位列表
*/
private List<OrgUsrTreeDto> companyAndKeySiteList (List<OrgUsrTreeDto> companyList) {
List<OrgUsrTreeDto> list = new ArrayList<>();
if (ObjectUtils.isEmpty(companyList)) {
return list;
}
Map<Long, OrgUsrTreeDto> map = new HashMap<>(companyList.size());
companyList.forEach(e -> map.put(e.getSequenceNbr(), e));
Set<? extends Map.Entry<Long, ? extends OrgUsrTreeDto>> entries = map.entrySet();
entries.parallelStream().forEach(entry -> {
OrgUsrTreeDto value = entry.getValue();
if (!ObjectUtils.isEmpty(value)) {
Long parent = ObjectUtils.isEmpty(value.getParentId()) ? 0L : Long.parseLong(value.getParentId());
OrgUsrTreeDto orgUsrTreeDto = map.get(parent);
if (!ObjectUtils.isEmpty(orgUsrTreeDto)) {
int num = orgUsrTreeDto.getNum() + value.getNum();
orgUsrTreeDto.setNum(num);
} else {
if (value.getBizOrgType().equals(OrgPersonEnum.公司.getKey())) {
list.add(value);
}
}
}
});
return list;
}
/**
* 获取树
*/
private List<OrgMenuDto> gettTreeByUser (AgencyUserModel user, List<OrgUsr> list) {
List<OrgMenuDto> treeList = new ArrayList<>();
// 需要角色为机场单位或管理员,其余角色返回空
String code = UserRolesEnum.AIRPORTUNIT.getCode();
String codeAdmin = UserRolesEnum.ADMIN.getCode();
String roles = getRoles(user, code);
if (!StringUtils.isEmpty(roles)) {
// treeList = getDepartmentTreeByUser(user,list);
if (roles.equals(codeAdmin)) {
// 返回全量树
treeList = buildTreeParallel(list);
} else if (roles.equals(code)) {
// 获取当前用户所在部门树
treeList = getDepartmentTreeByUser(user,list);
}
}
return treeList;
}
/**
* 根基登陆人获取指定角色/最高角色,默认最高角色
*/
private String getRoles(AgencyUserModel user, String code) {
String type = null;
Map<Long, List<RoleModel>> orgRolesMap = user.getOrgRoles();
if (ObjectUtils.isEmpty(orgRolesMap)) {
return null;
}
for (Long key : orgRolesMap.keySet()) {
if (!ObjectUtils.isEmpty(orgRolesMap.get(key))) {
for (RoleModel roleModel: orgRolesMap.get(key)) {
String roleType = roleModel.getRoleType();
if (roleType.equals(code)) {
type = code;
}
if (roleType.equals(UserRolesEnum.ADMIN.getCode())) {
return roleType;
}
}
}
}
return type;
}
/**
* 获取当前用户所在部门/用户树
*/
private List<OrgMenuDto> getDepartmentTreeByUser (AgencyUserModel user,List<OrgUsr> companyDepartmentMsgList) {
List<OrgMenuDto> list = new ArrayList<>();
if (ObjectUtils.isEmpty(companyDepartmentMsgList)) {
return list;
}
// 1.获取当前登陆用户关联人员
List<OrgUsr> orgUsrList = orgUsrList(user);
if (ObjectUtils.isEmpty(orgUsrList)) {
return list;
}
// 2.查询人员所属部门
List<OrgMenuDto> treeList = buildTreeParallel(companyDepartmentMsgList);
Set<Long> set = new HashSet<>();
orgUsrList.forEach(orgUsr -> {
Long parentId = Long.parseLong(orgUsr.getParentId());
getTreeChildre(list, treeList, parentId, set, companyDepartmentMsgList);
});
return list;
}
/**
* 获取登陆人关联账号
*/
private List<OrgUsr> orgUsrList (AgencyUserModel user) {
String userId = user.getUserId();
LambdaQueryWrapper<OrgUsr> wrapper= new LambdaQueryWrapper<>();
wrapper.eq(OrgUsr::getIsDelete,false);
wrapper.eq(OrgUsr::getAmosOrgId,userId);
wrapper.eq(OrgUsr::getBizOrgType,OrgPersonEnum.人员.getKey());
List<OrgUsr> orgUsrList = this.baseMapper.selectList(wrapper);
return orgUsrList;
}
/**
* 组装树
*/
private void getTreeChildre (List<OrgMenuDto> list, List<OrgMenuDto> treeList, Long parentId, Set<Long> set, List<OrgUsr> companyDepartmentMsgList) {
if (ObjectUtils.isEmpty(treeList) && ObjectUtils.isEmpty(companyDepartmentMsgList)) {
return;
}
// 获取登陆人所在公司
Long pid = getCompanyId(parentId, companyDepartmentMsgList);
if (set.add(pid)) {
List<OrgMenuDto> list1 = treeList.stream().filter(orgMenuDto -> orgMenuDto.getKey().equals(pid)).collect(Collectors.toList());
list.addAll(list1);
}
}
/**
* 获取登陆人所在公司
*/
private Long getCompanyId (Long parentId, List<OrgUsr> companyDepartmentMsgList) {
Long pid = null;
for (OrgUsr orgUsr : companyDepartmentMsgList) {
if (orgUsr.getSequenceNbr().equals(parentId)) {
if (orgUsr.getBizOrgType().equals(OrgPersonEnum.公司.getKey()) && ObjectUtils.isEmpty(orgUsr.getParentId())) {
return orgUsr.getSequenceNbr();
} else {
pid = getCompanyId(Long.parseLong(orgUsr.getParentId()),companyDepartmentMsgList);
}
}
}
return pid;
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment