From a665b9f1e0f0a5b96e748aa797e5a67a87e469c3 Mon Sep 17 00:00:00 2001 From: wxz Date: Tue, 3 Aug 2021 15:56:01 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9A=E6=8A=A5=E4=BA=8B-?= =?UTF-8?q?=E5=8F=AF=E4=B8=8A=E6=8A=A5=E7=9A=84=E7=9B=AE=E6=A0=87=E7=BA=A7?= =?UTF-8?q?=E5=88=AB=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/epmet/enums/OrgLevelEnums.java | 66 +++++++++++++++++++ .../dto/form/ResiEventTargetLevelFormDTO.java | 18 +++++ .../dto/result/ResiEventNpcResultDTO.java | 2 + .../result/ResiEventTargetLevelResultDTO.java | 31 +++++++++ .../epmet/controller/ResiEventController.java | 38 +++++++++-- .../com/epmet/service/ResiEventService.java | 10 +++ .../service/impl/ResiEventServiceImpl.java | 60 +++++++++++++++-- 7 files changed, 213 insertions(+), 12 deletions(-) create mode 100644 epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/enums/OrgLevelEnums.java create mode 100644 epmet-module/resi-home/resi-home-client/src/main/java/com/epmet/dto/form/ResiEventTargetLevelFormDTO.java create mode 100644 epmet-module/resi-home/resi-home-client/src/main/java/com/epmet/dto/result/ResiEventTargetLevelResultDTO.java diff --git a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/enums/OrgLevelEnums.java b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/enums/OrgLevelEnums.java new file mode 100644 index 0000000000..00107ec8f5 --- /dev/null +++ b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/enums/OrgLevelEnums.java @@ -0,0 +1,66 @@ +package com.epmet.enums; + +import lombok.extern.slf4j.Slf4j; + +import java.util.Optional; + +/** + * @Description 入职级别枚举 + * @author wxz + * @date 2021.08.03 14:29:01 +*/ +@Slf4j +public enum OrgLevelEnums { + + GRID("grid", "网格"), + COMMUNITY("community", "社区"), + STREET("street", "街道"), + DISTRICT("district", "区"), + CITY("city", "市"), + PROVINCE("province", "省"), + + DEPARTMENT("department", "部门"), + ; + + private String level; + private String levelName; + + OrgLevelEnums(String level, String levelName) { + this.level = level; + this.levelName = levelName; + } + + /** + * @Description 级别枚举对象 + * @return + * @author wxz + * @date 2021.08.03 14:46 + */ + public static OrgLevelEnums getLevelObject(String level) { + for (OrgLevelEnums l :OrgLevelEnums.values()) { + if (l.getLevel().equals(level)) { + return l; + } + } + return null; + } + + /** + * @Description 级别中文名称 + * @return + * @author wxz + * @date 2021.08.03 14:47 + */ + public static String getLevelName(String level) { + OrgLevelEnums levelObject = getLevelObject(level); + return levelObject == null ? null : levelObject.getLevelName(); + } + + public String getLevel() { + return level; + } + + public String getLevelName() { + return levelName; + } +} diff --git a/epmet-module/resi-home/resi-home-client/src/main/java/com/epmet/dto/form/ResiEventTargetLevelFormDTO.java b/epmet-module/resi-home/resi-home-client/src/main/java/com/epmet/dto/form/ResiEventTargetLevelFormDTO.java new file mode 100644 index 0000000000..62dfcf4327 --- /dev/null +++ b/epmet-module/resi-home/resi-home-client/src/main/java/com/epmet/dto/form/ResiEventTargetLevelFormDTO.java @@ -0,0 +1,18 @@ +package com.epmet.dto.form; + +import lombok.Data; + +import javax.validation.constraints.NotBlank; + +/** + * @Description 群众直报-上报目标级别查询 + * @author wxz + * @date 2021.08.03 13:47:23 +*/ +@Data +public class ResiEventTargetLevelFormDTO { + + @NotBlank(message = "网格ID不能为空") + private String gridId; + +} diff --git a/epmet-module/resi-home/resi-home-client/src/main/java/com/epmet/dto/result/ResiEventNpcResultDTO.java b/epmet-module/resi-home/resi-home-client/src/main/java/com/epmet/dto/result/ResiEventNpcResultDTO.java index 6f285807ce..4208f28751 100644 --- a/epmet-module/resi-home/resi-home-client/src/main/java/com/epmet/dto/result/ResiEventNpcResultDTO.java +++ b/epmet-module/resi-home/resi-home-client/src/main/java/com/epmet/dto/result/ResiEventNpcResultDTO.java @@ -25,4 +25,6 @@ public class ResiEventNpcResultDTO { private String headImgUrl; private String agencyId; + + private String pids; } diff --git a/epmet-module/resi-home/resi-home-client/src/main/java/com/epmet/dto/result/ResiEventTargetLevelResultDTO.java b/epmet-module/resi-home/resi-home-client/src/main/java/com/epmet/dto/result/ResiEventTargetLevelResultDTO.java new file mode 100644 index 0000000000..7a2b3ce29b --- /dev/null +++ b/epmet-module/resi-home/resi-home-client/src/main/java/com/epmet/dto/result/ResiEventTargetLevelResultDTO.java @@ -0,0 +1,31 @@ +package com.epmet.dto.result; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Description 群众直报目标层级Result + * @author wxz + * @date 2021.08.03 13:43:58 +*/ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class ResiEventTargetLevelResultDTO implements Comparable { + + private String orgLevel; + private String levelName; + private String orgId; + private String orgPid; + private String orgPids; + + //排序索引,用于排序 + private Integer index; + + @Override + public int compareTo(Object o) { + ResiEventTargetLevelResultDTO df = (ResiEventTargetLevelResultDTO) o; + return this.index.compareTo(df.getIndex()); + } +} diff --git a/epmet-module/resi-home/resi-home-server/src/main/java/com/epmet/controller/ResiEventController.java b/epmet-module/resi-home/resi-home-server/src/main/java/com/epmet/controller/ResiEventController.java index fd316f0475..b594e42921 100644 --- a/epmet-module/resi-home/resi-home-server/src/main/java/com/epmet/controller/ResiEventController.java +++ b/epmet-module/resi-home/resi-home-server/src/main/java/com/epmet/controller/ResiEventController.java @@ -3,7 +3,9 @@ package com.epmet.controller; import com.epmet.commons.tools.utils.Result; import com.epmet.commons.tools.validator.ValidatorUtils; import com.epmet.dto.form.ResiEventNpcListFormDTO; +import com.epmet.dto.form.ResiEventTargetLevelFormDTO; import com.epmet.dto.result.ResiEventNpcResultDTO; +import com.epmet.dto.result.ResiEventTargetLevelResultDTO; import com.epmet.service.ResiEventService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; @@ -11,13 +13,16 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import javax.validation.constraints.NotBlank; +import java.util.HashMap; import java.util.List; +import java.util.TreeSet; /** - * @Description 群众直报/报事controller * @author wxz + * @Description 群众直报/报事controller * @date 2021.08.02 09:58:40 -*/ + */ @RestController @RequestMapping("resi-event") public class ResiEventController { @@ -26,17 +31,38 @@ public class ResiEventController { private ResiEventService resiEventService; /** - * @Description 查询人大代表列表 * @return + * @Description 查询人大代表列表 * @author wxz * @date 2021.08.03 09:17 - */ + */ @PostMapping("/npc-list-ingrid") - public Result> listNpc(@RequestBody ResiEventNpcListFormDTO input) { + public Result>> listNpc(@RequestBody ResiEventNpcListFormDTO input) { ValidatorUtils.validateEntity(input); String gridId = input.getGridId(); List npcs = resiEventService.listNpcByGrid(gridId); - return new Result>().ok(npcs); + + HashMap> wrapper = new HashMap<>(); + wrapper.put("reportTargets", npcs); + return new Result>>().ok(wrapper); + } + + /** + * @return + * @Description 查询上报目标列表 + * @author wxz + * @date 2021.08.03 13:47 + */ + @PostMapping("/report-target-level-list") + public Result listReportTargetLevels(@RequestBody ResiEventTargetLevelFormDTO input) { + ValidatorUtils.validateEntity(input); + String gridId = input.getGridId(); + TreeSet targetList = resiEventService.listReportTargetLevels(gridId); + + HashMap> warpper = new HashMap<>(); + warpper.put("reportTargets", targetList); + + return new Result().ok(warpper); } } diff --git a/epmet-module/resi-home/resi-home-server/src/main/java/com/epmet/service/ResiEventService.java b/epmet-module/resi-home/resi-home-server/src/main/java/com/epmet/service/ResiEventService.java index ec30ef44e8..b23d04a476 100644 --- a/epmet-module/resi-home/resi-home-server/src/main/java/com/epmet/service/ResiEventService.java +++ b/epmet-module/resi-home/resi-home-server/src/main/java/com/epmet/service/ResiEventService.java @@ -1,8 +1,10 @@ package com.epmet.service; import com.epmet.dto.result.ResiEventNpcResultDTO; +import com.epmet.dto.result.ResiEventTargetLevelResultDTO; import java.util.List; +import java.util.TreeSet; /** * @Description 报事service @@ -17,4 +19,12 @@ public interface ResiEventService { * @date 2021.08.03 09:29 */ List listNpcByGrid(String gridId); + + /** + * @Description 查询上报目标列表 + * @return + * @author wxz + * @date 2021.08.03 13:50 + */ + TreeSet listReportTargetLevels(String gridId); } diff --git a/epmet-module/resi-home/resi-home-server/src/main/java/com/epmet/service/impl/ResiEventServiceImpl.java b/epmet-module/resi-home/resi-home-server/src/main/java/com/epmet/service/impl/ResiEventServiceImpl.java index b1871afb51..713d821588 100644 --- a/epmet-module/resi-home/resi-home-server/src/main/java/com/epmet/service/impl/ResiEventServiceImpl.java +++ b/epmet-module/resi-home/resi-home-server/src/main/java/com/epmet/service/impl/ResiEventServiceImpl.java @@ -1,22 +1,25 @@ package com.epmet.service.impl; import com.epmet.commons.tools.constant.ServiceConstant; -import com.epmet.commons.tools.exception.EpmetErrorCode; +import com.epmet.commons.tools.exception.RenException; import com.epmet.commons.tools.feign.ResultDataResolver; import com.epmet.commons.tools.utils.Result; import com.epmet.constant.BadgeConstant; +import com.epmet.constant.OrgInfoConstant; import com.epmet.dto.form.ListUserByBadgeFormDTO; -import com.epmet.dto.result.GridInfoResultDTO; -import com.epmet.dto.result.ListUserByBadgeResultDTO; -import com.epmet.dto.result.ResiEventNpcResultDTO; +import com.epmet.dto.form.OrgInfoFormDTO; +import com.epmet.dto.result.*; +import com.epmet.enums.OrgLevelEnums; import com.epmet.feign.EpmetUserOpenFeignClient; import com.epmet.feign.GovOrgOpenFeignClient; import com.epmet.service.ResiEventService; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; +import java.util.stream.Stream; /** * @author wxz @@ -39,6 +42,7 @@ public class ResiEventServiceImpl implements ResiEventService, ResultDataResolve Result gridInfoResult = govOrgOpenFeignClient.queryGridInfo(gridId); GridInfoResultDTO gridInfoData = getResultDataOrThrowsException(gridInfoResult, ServiceConstant.GOV_ORG_SERVER, null, null); String parentAgencyId = gridInfoData.getParentAgencyId(); + String pids = gridInfoData.getPids(); //查询人大代表列表 ListUserByBadgeFormDTO npcForm = new ListUserByBadgeFormDTO(gridId, BadgeConstant.BADGE_KEY_NPC); @@ -46,9 +50,53 @@ public class ResiEventServiceImpl implements ResiEventService, ResultDataResolve List npcData = getResultDataOrThrowsException(npcResult, ServiceConstant.EPMET_USER_SERVER, null, null); List npcResultList = npcData.stream() - .map(npc -> new ResiEventNpcResultDTO(npc.getUserId(), gridId, "人大代表-".concat(npc.getRealName()), npc.getHeadImgUrl(), parentAgencyId)) + .map(npc -> new ResiEventNpcResultDTO(npc.getUserId(), gridId, "人大代表-".concat(npc.getRealName()), npc.getHeadImgUrl(), parentAgencyId, pids)) .collect(Collectors.toList()); return npcResultList; } + + /** + * @Description 此处会调用org上游接口批量获取父级组织信息,由于上游接口排序不可控,因此此处需要使用TreeSet做排序 + * @return + * @author wxz + * @date 2021.08.03 15:51 + */ + @Override + public TreeSet listReportTargetLevels(String gridId) { + TreeSet targetLevels = new TreeSet<>(); + + Result gridInfoResult = govOrgOpenFeignClient.queryGridInfo(gridId); + GridInfoResultDTO gridInfoData = getResultDataOrThrowsException(gridInfoResult, ServiceConstant.GOV_ORG_SERVER, null, null); + String pidsPath = gridInfoData.getPids(); + List parentOrgIds = Arrays.asList(pidsPath.split(":")); + // 翻转列表 + Collections.reverse(parentOrgIds); + + // 一.网格信息(只有一条,但是为了适应接口,组装成了列表) + List currentGridId = Arrays.asList(gridId); + Result> currentGridInfoResult = govOrgOpenFeignClient.selectOrgInfo(new OrgInfoFormDTO(OrgInfoConstant.GRID, currentGridId)); + List currentGridInfos = getResultDataOrThrowsException(currentGridInfoResult, ServiceConstant.GOV_ORG_SERVER, null, null); + OrgInfoResultDTO currentGridInfo = currentGridInfos.get(0); + + // 因为上游接口的值对应问题,这里只好做一个适配,拼接起来,希望上游代码不要再改了... + String pids = currentGridInfo.getPids().concat(":").concat(currentGridInfo.getAgencyId()); + // 父ID列表的index排序字段是从0开始,网格要排在他们前面,则网格的index为-1 + targetLevels.add(new ResiEventTargetLevelResultDTO(OrgLevelEnums.GRID.getLevel(), OrgLevelEnums.GRID.getLevelName(), currentGridInfo.getOrgId(), currentGridInfo.getAgencyId(), pids, -1)); + + // 二.父级组织信息 + Result> parentOrgInfoResult = govOrgOpenFeignClient.selectOrgInfo(new OrgInfoFormDTO(OrgInfoConstant.AGENCY, parentOrgIds)); + List parentOrgInfos = getResultDataOrThrowsException(parentOrgInfoResult, ServiceConstant.GOV_ORG_SERVER, null, null); + parentOrgInfos.forEach(porg -> { + String levelName = OrgLevelEnums.getLevelName(porg.getLevel()); + if (StringUtils.isBlank(levelName)) { + throw new RenException(String.format("根据级别%s没有找到对应的组织级别枚举", porg.getLevel())); + } + //parentOrgIds.indexOf(porg.getOrgId()为当前orgId在pids中的位置,得到之后,赋值给index字段,treeset会利用这个字段进行排序 + ResiEventTargetLevelResultDTO pLevel = new ResiEventTargetLevelResultDTO(porg.getLevel(), levelName, porg.getOrgId(), porg.getPid(), porg.getPids(), parentOrgIds.indexOf(porg.getOrgId())); + targetLevels.add(pLevel); + }); + + return targetLevels; + } }