From 5a2625d9fc85ea8755a83faf5b5f5997d07ae751 Mon Sep 17 00:00:00 2001 From: sunyuchao Date: Fri, 5 Jun 2020 12:40:39 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=9A=E5=BB=BA=E5=A3=B0=E9=9F=B3-=E6=94=BF?= =?UTF-8?q?=E5=BA=9C=E7=AB=AF-=E5=8F=AF=E4=B8=8B=E7=BA=BF=E7=BD=91?= =?UTF-8?q?=E6=A0=BC=E5=88=97=E8=A1=A8=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/result/ArticleGridResultDTO.java | 5 +- .../impl/CustomerAgencyServiceImpl.java | 7 +- .../dto/form/PublishGridListFormDTO.java | 4 + .../epmet/controller/ArticleController.java | 1 + .../service/impl/ArticleServiceImpl.java | 148 ++++++++++++++++-- .../epmet/feign/EpmetUserOpenFeignClient.java | 50 ++++++ .../epmet/feign/EpmetUserSelfFeignClient.java | 18 --- .../EpmetUserOpenFeignClientFallback.java | 31 ++++ .../EpmetUserSelfFeignClientFallBack.java | 10 -- 9 files changed, 225 insertions(+), 49 deletions(-) diff --git a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/ArticleGridResultDTO.java b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/ArticleGridResultDTO.java index 8ab4f95bec..923872f31e 100644 --- a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/ArticleGridResultDTO.java +++ b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/result/ArticleGridResultDTO.java @@ -20,6 +20,7 @@ package com.epmet.dto.result; import lombok.Data; import java.io.Serializable; +import java.util.ArrayList; import java.util.List; @@ -44,11 +45,11 @@ public class ArticleGridResultDTO implements Serializable { /** * 当前机关的下属网格列表 */ - private List gridList; + private List gridList = new ArrayList<>(); /** * 当前组织的所有下级组织信息(递归) */ - private List subAgencyGridList; + private List subAgencyGridList = new ArrayList<>(); /** * 上级组织机构ID */ diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/CustomerAgencyServiceImpl.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/CustomerAgencyServiceImpl.java index bebb36025d..3a9e12778d 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/CustomerAgencyServiceImpl.java +++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/CustomerAgencyServiceImpl.java @@ -35,6 +35,7 @@ import com.epmet.dto.result.*; import com.epmet.entity.CustomerAgencyEntity; import com.epmet.entity.CustomerGridEntity; import com.epmet.feign.EpmetUserFeignClient; +import com.epmet.feign.EpmetUserOpenFeignClient; import com.epmet.feign.EpmetUserSelfFeignClient; import com.epmet.feign.OperCrmFeignClient; import com.epmet.redis.CustomerAgencyRedis; @@ -77,7 +78,7 @@ public class CustomerAgencyServiceImpl extends BaseServiceImpl page(Map params) { @@ -652,7 +653,7 @@ public class CustomerAgencyServiceImpl extends BaseServiceImpl> listResult = epmetUserSelfFeignClient.getCustomerStaffRoleList(formDTO); + Result> listResult = epmetUserOpenFeignClient.getCustomerStaffRoleList(formDTO); if (null == listResult.getData() || listResult.getData().size() < NumConstant.ONE) { return returnDTO; } @@ -746,7 +747,7 @@ public class CustomerAgencyServiceImpl extends BaseServiceImpl> listResult = epmetUserSelfFeignClient.getCustomerStaffRoleList(formDTO); + Result> listResult = epmetUserOpenFeignClient.getCustomerStaffRoleList(formDTO); if (null == listResult.getData() || listResult.getData().size() < NumConstant.ONE) { return returnDTO; } diff --git a/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/form/PublishGridListFormDTO.java b/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/form/PublishGridListFormDTO.java index 4d16716083..3186b08037 100644 --- a/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/form/PublishGridListFormDTO.java +++ b/epmet-module/gov-voice/gov-voice-client/src/main/java/com/epmet/dto/form/PublishGridListFormDTO.java @@ -22,4 +22,8 @@ public class PublishGridListFormDTO implements Serializable { */ @NotBlank(message = "文章id不能为空", groups = {PublishGridListFormDTO.AddUserInternalGroup.class}) private String articleId; + /** + * token中人员Id + */ + private String staffId; } diff --git a/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/controller/ArticleController.java b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/controller/ArticleController.java index bb1013913f..abf1f0965b 100644 --- a/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/controller/ArticleController.java +++ b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/controller/ArticleController.java @@ -330,6 +330,7 @@ public class ArticleController { **/ @PostMapping("publishgridlist") public Result publishGridList(@LoginUser TokenDto tokenDTO, @RequestBody PublishGridListFormDTO formDTO) { + formDTO.setStaffId(tokenDTO.getUserId()); ValidatorUtils.validateEntity(formDTO, PublishGridListFormDTO.AddUserInternalGroup.class); return new Result().ok(articleService.publishGridList(formDTO)); } diff --git a/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/service/impl/ArticleServiceImpl.java b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/service/impl/ArticleServiceImpl.java index b5e4cb2a44..845c8b38d7 100644 --- a/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/service/impl/ArticleServiceImpl.java +++ b/epmet-module/gov-voice/gov-voice-server/src/main/java/com/epmet/service/impl/ArticleServiceImpl.java @@ -45,8 +45,7 @@ import com.epmet.dto.feign.GovOrgSelfFeignClient; import com.epmet.dto.form.*; import com.epmet.dto.result.*; import com.epmet.entity.*; -import com.epmet.feign.EpmetUserClientFeignClient; -import com.epmet.feign.EpmetUserSelfFeignClient; +import com.epmet.feign.EpmetUserOpenFeignClient; import com.epmet.redis.ArticleRedis; import com.epmet.service.ArticleOperateRecordService; import com.epmet.service.ArticlePublishRangeService; @@ -57,6 +56,7 @@ import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.jsoup.helper.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -88,7 +88,7 @@ public class ArticleServiceImpl extends BaseServiceImpl loginUserDetails = epmetUserClientFeignClient.getLoginUserDetails(detailsFormDTO); + Result loginUserDetails = epmetUserOpenFeignClient.getLoginUserDetails(detailsFormDTO); if (loginUserDetails == null || loginUserDetails.getData() == null){ log.warn("saveOrUpdateContent getloginUserDetails return null"); throw new RenException(EpmetErrorCode.SERVER_ERROR.getCode(),EpmetErrorCode.SERVER_ERROR.getMsg()); @@ -536,7 +534,7 @@ public class ArticleServiceImpl extends BaseServiceImpl resultStaff = epmetUserSelfFeignClient.getCustomerStaff(formDTO.getStaffId()); + Result resultStaff = epmetUserOpenFeignClient.getCustomerStaff(formDTO.getStaffId()); if (null == resultStaff.getData()) { throw new RenException(ArticleConstant.SELECT_STAFF_EXCEPTION); } @@ -558,12 +556,12 @@ public class ArticleServiceImpl extends BaseServiceImpl resultList; - List roles = epmetUserSelfFeignClient.getStaffRoles(tokenDto.getUserId()).getData(); + List roles = epmetUserOpenFeignClient.getStaffRoles(tokenDto.getUserId()).getData(); LoginUserDetailsFormDTO loginUserDetailsFormDTO = new LoginUserDetailsFormDTO(); loginUserDetailsFormDTO.setApp(tokenDto.getApp()); loginUserDetailsFormDTO.setClient(tokenDto.getClient()); loginUserDetailsFormDTO.setUserId(tokenDto.getUserId()); - LoginUserDetailsResultDTO userInfo = epmetUserSelfFeignClient.getLoginUserDetails(loginUserDetailsFormDTO).getData(); + LoginUserDetailsResultDTO userInfo = epmetUserOpenFeignClient.getLoginUserDetails(loginUserDetailsFormDTO).getData(); String staffLevel = ""; for (CustomerStaffRoleResultDTO role : roles) { //党建负责人 @@ -595,7 +593,7 @@ public class ArticleServiceImpl extends BaseServiceImpl resultList = baseDao.selectOfflineList(userInfo.getGridIdList()); PageInfo pageInfo = new PageInfo<>(resultList); return new PageData<>(resultList, pageInfo.getTotal()); @@ -650,19 +648,137 @@ public class ArticleServiceImpl extends BaseServiceImpl rangeEntityList = articlePublishRangeDao.selectByArticleId(rangeEntity); - if(null==rangeEntityList||rangeEntityList.size() gridIdList = rangeEntityList.stream().map(ArticlePublishRangeEntity::getGridId).collect(Collectors.toList()); - formDTO.setGridIdList(gridIdList);*/ - - return null; + //2:查询当前工作人员的所属组织,以此作为根节点的起始位置 + LoginUserDetailsFormDTO loginUserDetailsFormDTO = new LoginUserDetailsFormDTO(); + loginUserDetailsFormDTO.setApp("gov"); + loginUserDetailsFormDTO.setClient("wxmp"); + loginUserDetailsFormDTO.setUserId(formDTO.getStaffId()); + Result resultDTOResult = epmetUserOpenFeignClient.getLoginUserDetails(loginUserDetailsFormDTO); + String agencyId = resultDTOResult.getData().getOrgIdPath(); + //存放树的每一个节点对象,用于将同一节点下的网格列表合并(主键:agencyId 值:节点对象) + Map map = new HashMap<>(); + //3:循环可下线网格列表,根据pids组织每一个树节点对象信息 + for (ArticlePublishRangeEntity range : rangeEntityList) { + //当前网格的所有机关id + String gridPids = range.getPids() + ":" + range.getAgencyId(); + //当前网格的所有机关名称 + String gridAgencyNames = range.getAllParentName() + "-" + range.getAgencyGridName().substring(NumConstant.ZERO, range.getAgencyGridName().lastIndexOf("-")); + String[] pids = gridPids.split(":"); + String[] names = gridAgencyNames.split("-"); + //倒序遍历 + for (int i = (pids.length - NumConstant.ONE); i >= NumConstant.ZERO; i--) { + //遍历到当前人员所属组织的上一级组织时停止遍历 + if (i + NumConstant.ONE < pids.length && agencyId.equals(pids[i + NumConstant.ONE])) { + break; + } + if (null == map.get(pids[i])) { + ArticleGridResultDTO dto = new ArticleGridResultDTO(); + dto.setAgencyId(pids[i]); + dto.setAgencyName(names[i]); + //根节点没有上级id的值 + if (i > NumConstant.ZERO) { + dto.setPid(pids[i - NumConstant.ONE]); + } + if (pids.length - NumConstant.ONE == i) { + List gridList = new ArrayList<>(); + AgencyGridListResultDTO gridDto = new AgencyGridListResultDTO(); + gridDto.setGridId(range.getGridId()); + gridDto.setGridName(range.getAgencyGridName().substring(range.getAgencyGridName().lastIndexOf("-") + NumConstant.ONE)); + gridList.add(gridDto); + dto.setGridList(gridList); + } + map.put(pids[i], dto); + } else { + if (pids.length - NumConstant.ONE == i) { + ArticleGridResultDTO dto1 = map.get(pids[i]); + List gridList = dto1.getGridList(); + AgencyGridListResultDTO gridDto = new AgencyGridListResultDTO(); + gridDto.setGridId(range.getGridId()); + gridDto.setGridName(range.getAgencyGridName().substring(range.getAgencyGridName().lastIndexOf("-") + NumConstant.ONE)); + gridList.add(gridDto); + dto1.setGridList(gridList); + map.put(pids[i], dto1); + } + } + } + } + //去除map中所有的节点对象,将list转成tree结构 + List resultDTOList = map.values().stream().collect(Collectors.toList()); + List list = agencyGridListToTree(resultDTOList); + return list.get(NumConstant.ZERO); } + /** + * @Author sun + * @Description 可下线网格列表-将list转为Tree结构 + */ + private List agencyGridListToTree(List resultDTOList) { + //根节点集合(pid为空) + List listParentRecord = new ArrayList<>(); + //非根节点集合(pid不为空) + List listNotParentRecord = new ArrayList<>(); + //1:遍历resultDTOList 保存所有数据的agencyId 用于判断是不是根节点 + //agencyId + Map agencyIdMap = new HashMap<>(); + //每一个agencyId对应的节点对象信息 + Map allRecordMap = new HashMap(); + for (ArticleGridResultDTO dto : resultDTOList) { + agencyIdMap.put(dto.getAgencyId(), dto.getAgencyId()); + allRecordMap.put(dto.getAgencyId(), dto); + } + //2:遍历resultDTOList 找出所有的根节点和非根节点(pid是否为空) + if (resultDTOList != null && resultDTOList.size() > NumConstant.ZERO) { + for (ArticleGridResultDTO record : resultDTOList) { + //为空且存在 + if (StringUtil.isBlank(record.getPid()) || !agencyIdMap.containsKey(record.getPid())) { + listParentRecord.add(record); + } else { + listNotParentRecord.add(record); + } + } + } + //3:遍历根节点,递归获取所有子节点并添加到对应下级 + for (ArticleGridResultDTO dto : listParentRecord) { + //添加所有子级 + List subList = getSubTreeNodeList(listNotParentRecord, dto.getAgencyId()); + dto.setSubAgencyGridList(subList); + } + return listParentRecord; + } + /** + * @Author sun + * @Description 可下线网格列表-将list转为Tree结构-递归查询每一个根节点的下级节点集合 + */ + private List getSubTreeNodeList(List listNotParentRecord, String agencyId) { + List subParentRecordList = new ArrayList<>(); + List subNotParentRecordList = new ArrayList<>(); + //1:遍历tmpList,找出所有的根节点和非根节点 + if (listNotParentRecord != null && listNotParentRecord.size() > NumConstant.ZERO) { + for (ArticleGridResultDTO record : listNotParentRecord) { + // 对比找出父节点 + if (record.getPid().equals(agencyId)) { + subParentRecordList.add(record); + } else { + subNotParentRecordList.add(record); + } + } + } + //2:层层递归添加下级查询子节点 + for (ArticleGridResultDTO record : subParentRecordList) { + //添加子节点 + List subList = getSubTreeNodeList(subNotParentRecordList, record.getAgencyId()); + record.setSubAgencyGridList(subList); + } + return subParentRecordList; + } + /** * @Description 根绝文章Id查询出文章的内容、封面等相关信息,如果居民端传入的网格Id不在该文章的发布范围内,则返回NULL * @param articleDetailFormDTO diff --git a/epmet-user/epmet-user-client/src/main/java/com/epmet/feign/EpmetUserOpenFeignClient.java b/epmet-user/epmet-user-client/src/main/java/com/epmet/feign/EpmetUserOpenFeignClient.java index 8c0f822655..93c756c76a 100644 --- a/epmet-user/epmet-user-client/src/main/java/com/epmet/feign/EpmetUserOpenFeignClient.java +++ b/epmet-user/epmet-user-client/src/main/java/com/epmet/feign/EpmetUserOpenFeignClient.java @@ -1,9 +1,21 @@ package com.epmet.feign; +import com.epmet.commons.tools.utils.Result; +import com.epmet.dto.CustomerStaffDTO; +import com.epmet.dto.form.CustomerStaffRoleListFormDTO; +import com.epmet.dto.form.LoginUserDetailsFormDTO; +import com.epmet.dto.result.CustomerStaffRoleListResultDTO; +import com.epmet.dto.result.CustomerStaffRoleResultDTO; +import com.epmet.dto.result.LoginUserDetailsResultDTO; import org.springframework.cloud.openfeign.FeignClient; import com.epmet.commons.tools.constant.ServiceConstant; import com.epmet.feign.fallback.EpmetUserOpenFeignClientFallback; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +import java.util.List; /** * 本服务对外开放的API,其他服务通过引用此client调用该服务 @@ -13,4 +25,42 @@ import com.epmet.feign.fallback.EpmetUserOpenFeignClientFallback; */ @FeignClient(name = ServiceConstant.EPMET_USER_SERVER, fallback = EpmetUserOpenFeignClientFallback.class) public interface EpmetUserOpenFeignClient { + + /** + * 从缓存中查询已登录用户的基本信息以及角色等相关信息 + * + * @return + */ + @PostMapping("/epmetuser/user/loginuserdetails") + Result getLoginUserDetails(@RequestBody LoginUserDetailsFormDTO dto); + + /** + * @param formDTO + * @return + * @Author sun + * @Description 根据客户Id和staffId查询一个员工在指定客户下的角色列表 + **/ + @PostMapping("/epmetuser/staffrole/getcustomerstaffrolelist") + Result> getCustomerStaffRoleList(@RequestBody CustomerStaffRoleListFormDTO formDTO); + + /** + * 根据staffId查询人员拥有的所有角色信息 + * + * @param staffId + * @return com.epmet.commons.tools.utils.Result> + * @author zhaoqifeng + * @date 2020/6/2 16:11 + */ + @PostMapping("/epmetuser/staffrole/staffroles/{staffId}") + Result> getStaffRoles(@PathVariable String staffId); + + /** + * @param staffId + * @return + * @Author sun + * @Description 根据staffId查询工作人员基本信息 + **/ + @PostMapping("/epmetuser/customerstaff/getcustomerstaff/{staffId}") + Result getCustomerStaff(@PathVariable("staffId") String staffId); + } diff --git a/epmet-user/epmet-user-client/src/main/java/com/epmet/feign/EpmetUserSelfFeignClient.java b/epmet-user/epmet-user-client/src/main/java/com/epmet/feign/EpmetUserSelfFeignClient.java index ddbf87f49c..8d1d933de2 100644 --- a/epmet-user/epmet-user-client/src/main/java/com/epmet/feign/EpmetUserSelfFeignClient.java +++ b/epmet-user/epmet-user-client/src/main/java/com/epmet/feign/EpmetUserSelfFeignClient.java @@ -25,24 +25,6 @@ import java.util.List; @FeignClient(name = ServiceConstant.EPMET_USER_SERVER, fallback = EpmetUserSelfFeignClientFallBack.class) public interface EpmetUserSelfFeignClient { - /** - * @param formDTO - * @return - * @Author sun - * @Description 根据客户Id和staffId查询一个员工在指定客户下的角色列表 - **/ - @PostMapping("/epmetuser/staffrole/getcustomerstaffrolelist") - Result> getCustomerStaffRoleList(@RequestBody CustomerStaffRoleListFormDTO formDTO); - - /** - * @param staffId - * @return - * @Author sun - * @Description 根据staffId查询工作人员基本信息 - **/ - @PostMapping("/epmetuser/customerstaff/getcustomerstaff/{staffId}") - Result getCustomerStaff(@PathVariable("staffId") String staffId); - /** * 从缓存中查询已登录用户的基本信息以及角色等相关信息 * diff --git a/epmet-user/epmet-user-client/src/main/java/com/epmet/feign/fallback/EpmetUserOpenFeignClientFallback.java b/epmet-user/epmet-user-client/src/main/java/com/epmet/feign/fallback/EpmetUserOpenFeignClientFallback.java index 817c48f7e6..58b4543d2d 100644 --- a/epmet-user/epmet-user-client/src/main/java/com/epmet/feign/fallback/EpmetUserOpenFeignClientFallback.java +++ b/epmet-user/epmet-user-client/src/main/java/com/epmet/feign/fallback/EpmetUserOpenFeignClientFallback.java @@ -1,8 +1,19 @@ package com.epmet.feign.fallback; +import com.epmet.commons.tools.constant.ServiceConstant; +import com.epmet.commons.tools.utils.ModuleUtils; +import com.epmet.commons.tools.utils.Result; +import com.epmet.dto.CustomerStaffDTO; +import com.epmet.dto.form.CustomerStaffRoleListFormDTO; +import com.epmet.dto.form.LoginUserDetailsFormDTO; +import com.epmet.dto.result.CustomerStaffRoleListResultDTO; +import com.epmet.dto.result.CustomerStaffRoleResultDTO; +import com.epmet.dto.result.LoginUserDetailsResultDTO; import com.epmet.feign.EpmetUserOpenFeignClient; import org.springframework.stereotype.Component; +import java.util.List; + /** * 本服务对外开放的API,其他服务通过引用此client调用该服务 * @@ -11,4 +22,24 @@ import org.springframework.stereotype.Component; */ @Component public class EpmetUserOpenFeignClientFallback implements EpmetUserOpenFeignClient { + + @Override + public Result getLoginUserDetails(LoginUserDetailsFormDTO dto) { + return ModuleUtils.feignConError(ServiceConstant.EPMET_USER_SERVER, "getLoginUserDetails", dto); + } + + @Override + public Result> getCustomerStaffRoleList(CustomerStaffRoleListFormDTO formDTO) { + return ModuleUtils.feignConError(ServiceConstant.EPMET_USER_SERVER, "getCustomerStaffRoleList", formDTO); + } + + @Override + public Result> getStaffRoles(String staffId) { + return ModuleUtils.feignConError(ServiceConstant.EPMET_USER_SERVER, "getStaffRoles", staffId); + } + + @Override + public Result getCustomerStaff(String staffId) { + return ModuleUtils.feignConError(ServiceConstant.EPMET_USER_SERVER, "getCustomerStaff", staffId); + } } diff --git a/epmet-user/epmet-user-client/src/main/java/com/epmet/feign/fallback/EpmetUserSelfFeignClientFallBack.java b/epmet-user/epmet-user-client/src/main/java/com/epmet/feign/fallback/EpmetUserSelfFeignClientFallBack.java index ec30a52fc5..5b6c8abb57 100644 --- a/epmet-user/epmet-user-client/src/main/java/com/epmet/feign/fallback/EpmetUserSelfFeignClientFallBack.java +++ b/epmet-user/epmet-user-client/src/main/java/com/epmet/feign/fallback/EpmetUserSelfFeignClientFallBack.java @@ -23,16 +23,6 @@ import java.util.List; @Component public class EpmetUserSelfFeignClientFallBack implements EpmetUserSelfFeignClient { - @Override - public Result> getCustomerStaffRoleList(CustomerStaffRoleListFormDTO formDTO) { - return ModuleUtils.feignConError(ServiceConstant.EPMET_USER_SERVER, "getCustomerStaffRoleList", formDTO); - } - - @Override - public Result getCustomerStaff(String staffId) { - return ModuleUtils.feignConError(ServiceConstant.EPMET_USER_SERVER, "getCustomerStaff", staffId); - } - @Override public Result getLoginUserDetails(LoginUserDetailsFormDTO dto) { return ModuleUtils.feignConError(ServiceConstant.EPMET_USER_SERVER, "getLoginUserDetails", dto);