diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/enums/KongCunCustomerEnvEnum.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/enums/KongCunCustomerEnvEnum.java deleted file mode 100644 index d56cd7615a..0000000000 --- a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/enums/KongCunCustomerEnvEnum.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.epmet.commons.tools.enums; - -import com.epmet.commons.tools.utils.SpringContextUtils; -import org.springframework.core.env.Environment; - -/** - * 系统环境变量枚举类 - * dev|test|prod - * - * @author jianjun liu - * @date 2020-07-03 11:14 - **/ -public enum KongCunCustomerEnvEnum { - /** - * 环境变量枚举 - */ - DEV("dev", "开发环境", "613cc61a6b8ce4c70d21bd413dac72cc"), - TEST("test", "体验环境", "b272625617e53620b2b3cbc65d1ecbbb"), - PROD("prod", "生产环境", "6f203e30de1a65aab7e69c058826cd80"), - UN_KNOWN("prod", "生产环境", "6f203e30de1a65aab7e69c058826cd80") - ; - - private String code; - private String name; - private String customerId; - - - - KongCunCustomerEnvEnum(String code, String name, String customerId) { - this.code = code; - this.name = name; - this.customerId = customerId; - } - - public static KongCunCustomerEnvEnum getEnum(String code) { - KongCunCustomerEnvEnum[] values = KongCunCustomerEnvEnum.values(); - for (KongCunCustomerEnvEnum value : values) { - if (value.getCode().equals(code)) { - return value; - } - } - return KongCunCustomerEnvEnum.UN_KNOWN; - } - - public static KongCunCustomerEnvEnum getCurrentEnv(){ - try { - Environment environment = SpringContextUtils.getBean(Environment.class); - String[] activeProfiles = environment.getActiveProfiles(); - if (activeProfiles.length > 0) { - return getEnum(activeProfiles[0]); - } - } catch (Exception e) { - e.printStackTrace(); - } - return KongCunCustomerEnvEnum.UN_KNOWN; - } - - - public String getCode() { - return code; - } - - public String getName() { - return name; - } - - public String getCustomerId(){ - return customerId; - } -} diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/enums/OrgLevelEnum.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/enums/OrgLevelEnum.java index 3462ad772b..97087745d0 100644 --- a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/enums/OrgLevelEnum.java +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/enums/OrgLevelEnum.java @@ -1,7 +1,9 @@ package com.epmet.commons.tools.enums; +import com.epmet.commons.tools.constant.StrConstant; import com.epmet.commons.tools.exception.EpmetErrorCode; import com.epmet.commons.tools.exception.RenException; +import org.apache.commons.lang3.StringUtils; /** * 组织级别枚举类 @@ -42,6 +44,37 @@ public enum OrgLevelEnum { throw new RenException(EpmetErrorCode.INTERNAL_VALIDATE_ERROR.getCode()); } + /** + * desc: 获取下一等级的组织级别 + * + * @param parentAgencyLevel + * @return java.lang.String + * @author LiuJanJun + * @date 2021/8/5 1:57 下午 + * todo 加上数字 根据数据返回 + */ + public static String getSubOrgLevel(String parentAgencyLevel) { + String level = StrConstant.EPMETY_STR; + if (StringUtils.isBlank(parentAgencyLevel)) { + return level; + } + OrgLevelEnum anEnum = OrgLevelEnum.getEnum(parentAgencyLevel); + switch (anEnum){ + case PROVINCE: + return OrgLevelEnum.CITY.getCode(); + case CITY: + return OrgLevelEnum.DISTRICT.getCode(); + case DISTRICT: + return OrgLevelEnum.STREET.getCode(); + case STREET: + return OrgLevelEnum.COMMUNITY.getCode(); + case COMMUNITY: + return OrgLevelEnum.GRID.getCode(); + default: + return level; + } + } + diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/exception/EpmetErrorCode.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/exception/EpmetErrorCode.java index 3966217c18..96558433fc 100644 --- a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/exception/EpmetErrorCode.java +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/exception/EpmetErrorCode.java @@ -100,6 +100,7 @@ public enum EpmetErrorCode { CAN_NOT_REPLY_RESI_EVENT_GOV(8605,"办结、立项处理后不可回复"), CAN_NOT_REPLY_RESI_EVENT_SELF(8606,"当前事件待处理,不可回复"), RESI_EVENT_CAN_NOT_CLOSE_CASE(8607,"事件尚未处理,请处理完成后进行办结"), + RESI_EVENT_SHIFT_PROJECT(8608,"事件已立项,请勿重复操作"), // 爱心互助 居民端 NOT_IN_THE_SIGN_IN_RANGE(8510, "您还未进入指定的签到范围~"), diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/TreeAreaCodeNode.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/TreeAreaCodeNode.java new file mode 100644 index 0000000000..2f70659219 --- /dev/null +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/TreeAreaCodeNode.java @@ -0,0 +1,38 @@ +/** + * Copyright (c) 2018 人人开源 All rights reserved. + * + * https://www.renren.io + * + * 版权所有,侵权必究! + */ + +package com.epmet.commons.tools.utils; + +import lombok.Data; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +/** + * 树节点,所有需要实现树节点的,都需要继承该类 + * + * @author Mark sunlightcs@gmail.com + * @since 1.0.0 + */ +@Data +public class TreeAreaCodeNode extends TreeStringNode implements Serializable { + private static final long serialVersionUID = 1L; + /** + * 主键 + */ + private String areaCode; + /** + * 上级ID + */ + private String parentAreaCode; + /** + * 子节点列表 + */ + private List children = new ArrayList<>(); +} diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/TreeUtils.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/TreeUtils.java index 4272d9cfc6..c321fea717 100644 --- a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/TreeUtils.java +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/TreeUtils.java @@ -131,4 +131,32 @@ public class TreeUtils { return result; } + /** + * 构建树节点 + */ + public static List buildTreeByAreaCode(List treeNodes) { + List result = new ArrayList<>(); + + //list转map + Map nodeMap = new LinkedHashMap<>(treeNodes.size()); + for(T treeNode : treeNodes){ + nodeMap.put(treeNode.getAreaCode(), treeNode); + } + + for(T node : nodeMap.values()) { + T parent = nodeMap.get(node.getParentAreaCode()); + if(parent != null && !(node.getAreaCode().equals(parent.getAreaCode()))){ + if (parent.getChildren() == null){ + parent.setChildren(new ArrayList()); + } + parent.getChildren().add(node); + continue; + } + + result.add(node); + } + + return result; + } + } diff --git a/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/datastats/result/BaseStatsDataResultDTO.java b/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/datastats/result/BaseStatsDataResultDTO.java new file mode 100644 index 0000000000..1381870afa --- /dev/null +++ b/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/datastats/result/BaseStatsDataResultDTO.java @@ -0,0 +1,26 @@ +package com.epmet.dataaggre.dto.datastats.result; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @Description 基础数据-组织各种数据汇总-接口返参 + * @Auth sun + */ +@Data +public class BaseStatsDataResultDTO implements Serializable { + private static final long serialVersionUID = -771436069527114021L; + + private Integer topicTotal; + private Integer topicIncr; + private Integer issueTotal; + private Integer issueIncr; + private Integer projectTotal; + private Integer projectIncr; + private Integer closedProjectTotal; + private Integer closedProjectIncr; + + + +} diff --git a/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/datastats/result/TotalAndIncrResultDTO.java b/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/datastats/result/TotalAndIncrResultDTO.java new file mode 100644 index 0000000000..59ce8a4aa1 --- /dev/null +++ b/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/datastats/result/TotalAndIncrResultDTO.java @@ -0,0 +1,19 @@ +package com.epmet.dataaggre.dto.datastats.result; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @Description 基础数据-组织各种数据汇总-接口返参 + * @Auth sun + */ +@Data +public class TotalAndIncrResultDTO implements Serializable { + + private static final long serialVersionUID = -6624315950853255235L; + private Integer total; + private Integer incr; + private Integer total2; + private Integer incr2; +} diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/controller/pub/PubController.java b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/controller/pub/PubController.java new file mode 100644 index 0000000000..60bb5474c8 --- /dev/null +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/controller/pub/PubController.java @@ -0,0 +1,41 @@ +package com.epmet.dataaggre.controller.pub; + +import com.epmet.commons.tools.utils.Result; +import com.epmet.commons.tools.validator.ValidatorUtils; +import com.epmet.dataaggre.dto.app.form.AppFootBarFormDTO; +import com.epmet.dataaggre.dto.datastats.form.AgenctBasicDataFormDTO; +import com.epmet.dataaggre.dto.datastats.result.BaseStatsDataResultDTO; +import com.epmet.dataaggre.service.datastats.DataStatsService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 小程序相关配置,可以放在这,目前只放了footbar + * + * @author yinzuomei@elink-cn.com + * @date 2021/7/27 18:36 + */ +@RestController +@RequestMapping("pub") +public class PubController { + @Autowired + private DataStatsService dataStatsService; + + /** + * 查询 话题 议题 项目数 + * + * @param formDTO + * @return com.epmet.dataaggre.dto.app.result.AppFootBarResultDTO + * @author yinzuomei + * @date 2021/7/27 18:59 + */ + @PostMapping("baseDataAgg") + public Result getBaseStatsData(@RequestBody AgenctBasicDataFormDTO formDTO){ + ValidatorUtils.validateEntity(formDTO,AppFootBarFormDTO.AddUserInternalGroup.class); + BaseStatsDataResultDTO resultDTO=dataStatsService.getBaseStatsData(formDTO); + return new Result().ok(resultDTO); + } +} diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/datastats/DataStatsDao.java b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/datastats/DataStatsDao.java index d157058b2e..0ae15cd019 100644 --- a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/datastats/DataStatsDao.java +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/datastats/DataStatsDao.java @@ -33,7 +33,7 @@ import java.util.List; /** * @Author sun - * @Description 数据统计服务 + * @Description 数据统计服务 */ @Mapper public interface DataStatsDao { @@ -178,50 +178,54 @@ public interface DataStatsDao { /** * 查询组织党员先锋详情 - * @author zhaoqifeng - * @date 2021/5/18 14:40 + * * @param agencyId * @return com.epmet.dataaggre.dto.datastats.result.PartyMemberVanguardDetailResultDTO + * @author zhaoqifeng + * @date 2021/5/18 14:40 */ PartyMemberVanguardDetailResultDTO selectAgencyVanguardDetail(@Param("agencyId") String agencyId); /** * 查询网格党员先锋详情 - * @author zhaoqifeng - * @date 2021/5/18 14:40 + * * @param grid * @return com.epmet.dataaggre.dto.datastats.result.PartyMemberVanguardDetailResultDTO + * @author zhaoqifeng + * @date 2021/5/18 14:40 */ PartyMemberVanguardDetailResultDTO selectGridVanguardDetail(@Param("grid") String grid); /** * 查询组织党员先锋排行 - * @author zhaoqifeng - * @date 2021/5/18 15:02 + * * @param agencyId * @return java.util.List + * @author zhaoqifeng + * @date 2021/5/18 15:02 */ List selectAgencyVanguardRank(@Param("agencyId") String agencyId); /** * 查询网格党员先锋排行 - * @author zhaoqifeng - * @date 2021/5/18 15:03 + * * @param agencyId * @return java.util.List + * @author zhaoqifeng + * @date 2021/5/18 15:03 */ List selectGridVanguardRank(@Param("agencyId") String agencyId); - List branchConAnalysis(@Param("customerId")String customerId, - @Param("orgId")String orgId, - @Param("orgType")String orgType, - @Param("dateId")String dateId, - @Param("parentCode")String parentCode); + List branchConAnalysis(@Param("customerId") String customerId, + @Param("orgId") String orgId, + @Param("orgType") String orgType, + @Param("dateId") String dateId, + @Param("parentCode") String parentCode); - List querySubAnalysisByCode(@Param("customerId")String customerId, - @Param("pid")String pid, - @Param("dateId")String dateId, - @Param("categoryCode")String categoryCode); + List querySubAnalysisByCode(@Param("customerId") String customerId, + @Param("pid") String pid, + @Param("dateId") String dateId, + @Param("categoryCode") String categoryCode); List selectGroupActRankDetail(@Param("customerId") String customerId, @Param("dateId") String dateId, @@ -246,11 +250,27 @@ public interface DataStatsDao { /** * 根据组织Id查询事件治理指数 - * @author zhaoqifeng - * @date 2021/6/25 15:08 + * * @param agencyIds * @param dateId * @return com.epmet.dataaggre.entity.datastats.FactAgencyGovernDailyEntity + * @author zhaoqifeng + * @date 2021/6/25 15:08 */ List getAgencyGovernDaily(@Param("agencyIds") List agencyIds, @Param("dateId") String dateId); -} \ No newline at end of file + + /** + * desc: 根据组织Id和时间获取 话题总数及增量 + * + * @param agencyList + * @param dateId + * @return com.epmet.dataaggre.dto.datastats.result.TotalAndIncrResultDTO + * @author LiuJanJun + * @date 2021/8/5 3:59 下午 + */ + TotalAndIncrResultDTO getAgencySumTopic(@Param("agencyList") List agencyList, @Param("dateId") String dateId); + + TotalAndIncrResultDTO getAgencySumIssue(@Param("agencyList") List agencyList, @Param("dateId") String dateId); + + TotalAndIncrResultDTO getAgencySumProject(@Param("agencyList") List agencyList, @Param("dateId") String dateId); +} diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/datastats/DataStatsService.java b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/datastats/DataStatsService.java index 36ec2943db..2fb47aab0d 100644 --- a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/datastats/DataStatsService.java +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/datastats/DataStatsService.java @@ -7,7 +7,6 @@ import com.epmet.dataaggre.dto.govorg.result.GridMemberDataAnalysisResultDTO; import com.epmet.dataaggre.dto.resigroup.ActCategoryDictDTO; import com.epmet.dataaggre.dto.resigroup.result.GroupActRankDetailDTO; -import java.security.PrivateKey; import java.util.List; /** @@ -182,4 +181,7 @@ public interface DataStatsService { * @date 2021.07.05 16:05 */ GridMemberDataAnalysisResultDTO getGridMemberIssueProjectStats(String staffId); + + BaseStatsDataResultDTO getBaseStatsData(AgenctBasicDataFormDTO formDTO); + } diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/datastats/impl/DataStatsServiceImpl.java b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/datastats/impl/DataStatsServiceImpl.java index bfa9a29710..32848cc717 100644 --- a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/datastats/impl/DataStatsServiceImpl.java +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/datastats/impl/DataStatsServiceImpl.java @@ -1,6 +1,5 @@ package com.epmet.dataaggre.service.datastats.impl; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.epmet.commons.dynamic.datasource.annotation.DataSource; import com.epmet.commons.tools.constant.NumConstant; import com.epmet.commons.tools.utils.DateUtils; @@ -11,20 +10,18 @@ import com.epmet.dataaggre.dao.datastats.FactGridMemberStatisticsDailyDao; import com.epmet.dataaggre.dto.datastats.FactGroupActDailyDTO; import com.epmet.dataaggre.dto.datastats.form.*; import com.epmet.dataaggre.dto.datastats.result.*; -import com.epmet.dataaggre.dto.govorg.result.GridMemberDataAnalysisResultDTO; import com.epmet.dataaggre.dto.evaluationindex.ScreenCustomerAgencyDTO; import com.epmet.dataaggre.dto.evaluationindex.ScreenCustomerGridDTO; import com.epmet.dataaggre.dto.evaluationindex.ScreenGovernRankDataDailyDTO; +import com.epmet.dataaggre.dto.govorg.result.GridMemberDataAnalysisResultDTO; import com.epmet.dataaggre.dto.resigroup.ActCategoryDictDTO; import com.epmet.dataaggre.dto.resigroup.result.GroupActRankDetailDTO; import com.epmet.dataaggre.entity.datastats.DimAgencyEntity; -import com.epmet.dataaggre.entity.datastats.DimGridEntity; -import com.epmet.dataaggre.entity.datastats.FactGridMemberStatisticsDailyEntity; import com.epmet.dataaggre.entity.datastats.FactAgencyGovernDailyEntity; import com.epmet.dataaggre.service.datastats.DataStatsService; import com.epmet.dataaggre.service.evaluationindex.EvaluationIndexService; -import com.github.pagehelper.PageHelper; import com.epmet.dataaggre.service.opercrm.CustomerRelation; +import com.github.pagehelper.PageHelper; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; @@ -1428,6 +1425,49 @@ public class DataStatsServiceImpl implements DataStatsService { public GridMemberDataAnalysisResultDTO getGridMemberIssueProjectStats(String staffId) { return factGridMemberStatisticsDailyDao.getGridMemberIssueProjectStats( staffId); } + + @Override + public BaseStatsDataResultDTO getBaseStatsData(AgenctBasicDataFormDTO formDTO) { + //入参有日期的则按具体时间执行,没有的则按当前时间前一天执行 + if (StringUtils.isBlank(formDTO.getDateId())) { + Date yesterday = DateUtils.addDateDays(new Date(), -1); + SimpleDateFormat format = new SimpleDateFormat(DateUtils.DATE_PATTERN_YYYYMMDD); + formDTO.setDateId(format.format(yesterday)); + } + BaseStatsDataResultDTO result = new BaseStatsDataResultDTO(); + result.setTopicTotal(0); + result.setTopicIncr(0); + + result.setIssueTotal(0); + result.setIssueIncr(0); + result.setProjectTotal(0); + result.setProjectIncr(0); + result.setClosedProjectTotal(0); + result.setClosedProjectIncr(0); + + + //0.根据组织Id查询是否存在子客户,存在的按areaCode查询当前客户之外的客户组织列表 + List agencyList = indexService.getAgencyIdsByAgencyId(formDTO.getAgencyId()); + agencyList.add(formDTO.getAgencyId()); + TotalAndIncrResultDTO sum = dataStatsDao.getAgencySumTopic(agencyList, formDTO.getDateId()); + if (sum == null){ + return result; + } + result.setTopicIncr(sum.getIncr()); + result.setTopicTotal(sum.getTotal()); + + sum = dataStatsDao.getAgencySumIssue(agencyList,formDTO.getDateId()); + result.setIssueIncr(sum.getIncr()); + result.setIssueTotal(sum.getTotal()); + + sum = dataStatsDao.getAgencySumProject(agencyList,formDTO.getDateId()); + result.setProjectIncr(sum.getIncr()); + result.setProjectTotal(sum.getTotal()); + result.setClosedProjectIncr(sum.getIncr2()); + result.setClosedProjectTotal(sum.getTotal2()); + return result; + } + private String getPercentage(Integer countInt, Integer totalInt) { if (NumConstant.ZERO == totalInt) { return "0%"; diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/evaluationindex/impl/EvaluationIndexServiceImpl.java b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/evaluationindex/impl/EvaluationIndexServiceImpl.java index fc9e6b8ba6..8f682b1e43 100644 --- a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/evaluationindex/impl/EvaluationIndexServiceImpl.java +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/evaluationindex/impl/EvaluationIndexServiceImpl.java @@ -1,9 +1,7 @@ package com.epmet.dataaggre.service.evaluationindex.impl; import com.epmet.commons.dynamic.datasource.annotation.DataSource; -import com.epmet.commons.tools.utils.DateUtils; import com.epmet.dataaggre.constant.DataSourceConstant; -import com.epmet.dataaggre.dao.datastats.DataStatsDao; import com.epmet.dataaggre.dao.evaluationindex.EvaluationIndexDao; import com.epmet.dataaggre.dto.datastats.form.GovrnRatioFormDTO; import com.epmet.dataaggre.dto.datastats.result.GovrnRatioResultDTO; @@ -14,13 +12,10 @@ import com.epmet.dataaggre.service.evaluationindex.EvaluationIndexService; import com.epmet.dataaggre.service.opercrm.CustomerRelation; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.text.SimpleDateFormat; import java.util.ArrayList; -import java.util.Date; import java.util.List; /** @@ -114,6 +109,9 @@ public class EvaluationIndexServiceImpl implements EvaluationIndexService { public List getAgencyIdsByAgencyId(String agencyId) { //1.查询agencyId对应组织信息 ScreenCustomerAgencyDTO dto = evaluationIndexDao.getByAgencyId(agencyId); + if (dto == null){ + return new ArrayList<>(); + } //2.判断客户是否存在子客户 List list = customerRelation.haveSubCustomer(dto.getCustomerId()); if (!CollectionUtils.isNotEmpty(list)) { diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/datastats/DatsStatsDao.xml b/epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/datastats/DatsStatsDao.xml index 7b4361e463..c1d88ccc8e 100644 --- a/epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/datastats/DatsStatsDao.xml +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/datastats/DatsStatsDao.xml @@ -685,5 +685,47 @@ AGENCY_ID = #{agencyId} + + + diff --git a/epmet-module/data-report/data-report-client/src/main/java/com/epmet/dto/form/govOrg/OrgTreeFormDTO.java b/epmet-module/data-report/data-report-client/src/main/java/com/epmet/dto/form/govOrg/OrgTreeFormDTO.java new file mode 100644 index 0000000000..0eae55ef84 --- /dev/null +++ b/epmet-module/data-report/data-report-client/src/main/java/com/epmet/dto/form/govOrg/OrgTreeFormDTO.java @@ -0,0 +1,22 @@ +package com.epmet.dto.form.govOrg; + +import lombok.Data; + +import java.io.Serializable; + +/** + * 各机关注册用户数入参DTO + * + * @author yinzuomei@elink-cn.com + * @date 2020/6/22 12:47 + */ +@Data +public class OrgTreeFormDTO implements Serializable { + + + private static final long serialVersionUID = 6649155066499141632L; + + private String mobile; + + private String customerId; +} diff --git a/epmet-module/data-report/data-report-client/src/main/java/com/epmet/dto/result/govOrg/OrgTreeNode.java b/epmet-module/data-report/data-report-client/src/main/java/com/epmet/dto/result/govOrg/OrgTreeNode.java new file mode 100644 index 0000000000..4989cc8bd1 --- /dev/null +++ b/epmet-module/data-report/data-report-client/src/main/java/com/epmet/dto/result/govOrg/OrgTreeNode.java @@ -0,0 +1,18 @@ +package com.epmet.dto.result.govOrg; + +import com.epmet.commons.tools.utils.TreeAreaCodeNode; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +@Data +public class OrgTreeNode extends TreeAreaCodeNode { + private String id; + private String pid; + private String orgId; + private String orgName; + private String level; + + private List children=new ArrayList<>(); +} diff --git a/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/controller/screen/AgencyController.java b/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/controller/screen/AgencyController.java index 6c71a15009..f393b43c59 100644 --- a/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/controller/screen/AgencyController.java +++ b/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/controller/screen/AgencyController.java @@ -8,9 +8,11 @@ import com.epmet.datareport.service.evaluationindex.screen.AgencyService; import com.epmet.dto.form.AddAreaCodeDictFormDTO; import com.epmet.dto.form.AgencyDetailMulticFormDTO; import com.epmet.dto.form.AreaCodeDictFormDTO; +import com.epmet.dto.form.govOrg.OrgTreeFormDTO; import com.epmet.dto.result.AgencyDetailMulticResultDTO; import com.epmet.dto.result.AreaCodeDictResultDTO; import com.epmet.dto.result.commonservice.AddAreaCodeDictResultDTO; +import com.epmet.dto.result.govOrg.OrgTreeNode; import com.epmet.dto.result.plugins.AgencyNodeDTO; import com.epmet.evaluationindex.screen.dto.form.CompartmentByBizTypeFormDTO; import com.epmet.evaluationindex.screen.dto.form.CompartmentFormDTO; @@ -129,4 +131,17 @@ public class AgencyController { ValidatorUtils.validateEntity(formDTO, AgencyDetailMulticFormDTO.AddUserInternalGroup.class); return new Result().ok(agencyService.queryAgencyDetailMultiC(formDTO)); } + + /** + * desc: 获取组织树 含所有直线上级 但不含部门和网格 目前 + * + * @param formDTO + * @return com.epmet.commons.tools.utils.Result + * @author LiuJanJun + * @date 2021/8/3 5:17 下午 + */ + @PostMapping("getStaffAgencyTree") + public Result getStaffAgencyTree(@RequestBody OrgTreeFormDTO formDTO) { + return new Result().ok(agencyService.getStaffAgencyTree(formDTO)); + } } diff --git a/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/dao/evaluationindex/screen/ScreenCustomerAgencyDao.java b/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/dao/evaluationindex/screen/ScreenCustomerAgencyDao.java index 1750090754..5883d352e7 100644 --- a/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/dao/evaluationindex/screen/ScreenCustomerAgencyDao.java +++ b/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/dao/evaluationindex/screen/ScreenCustomerAgencyDao.java @@ -115,7 +115,7 @@ public interface ScreenCustomerAgencyDao { CompartmentResultDTO getAgencyInfoByAegncyId(@Param("agencyId") String agencyId); /** - * @Description 查询组织的下级组织ID + * @Description 查询组织的下级组织ID * @Param agencyId * @author zxc * @date 2020/10/28 10:33 上午 @@ -135,7 +135,7 @@ public interface ScreenCustomerAgencyDao { * @description 根据areaCode查询组织机构 * @Date 2021/2/4 21:51 **/ - List queryStaffAgencyTree(@Param("areaCode")String areaCode); + List queryStaffAgencyTree(@Param("areaCode") String areaCode); /** * @param areaCode @@ -144,7 +144,7 @@ public interface ScreenCustomerAgencyDao { * @description 查找组织下的部门 * @Date 2021/2/4 21:51 **/ - List selectDeptList(@Param("areaCode") String areaCode,@Param("agencyId") String agencyId); + List selectDeptList(@Param("areaCode") String areaCode, @Param("agencyId") String agencyId); /** * @param areaCode @@ -153,27 +153,27 @@ public interface ScreenCustomerAgencyDao { * @description 查找组织下的网格 * @Date 2021/2/4 21:52 **/ - List selectGridList(@Param("areaCode") String areaCode,@Param("agencyId") String agencyId); + List selectGridList(@Param("areaCode") String areaCode, @Param("agencyId") String agencyId); /** - * @return java.util.List * @param areaCode * @param agencyId + * @return java.util.List * @author yinzuomei * @description 下一级组织+直属网格 * @Date 2021/5/10 14:02 **/ - List getNextAgencyIds(@Param("areaCode")String areaCode,@Param("agencyId")String agencyId); + List getNextAgencyIds(@Param("areaCode") String areaCode, @Param("agencyId") String agencyId); - List selectSubAgencyIds(@Param("areaCode")String areaCode, @Param("agencyId")String agencyId); + List selectSubAgencyIds(@Param("areaCode") String areaCode, @Param("agencyId") String agencyId); /** - * @Description 根据agencyId查询网格 + * @Description 根据agencyId查询网格 * @Param agencyId * @author zxc * @date 2021/6/8 1:27 下午 */ - List selectGrid(@Param("agencyId")String agencyId,@Param("areaCode")String areaCode); + List selectGrid(@Param("agencyId") String agencyId, @Param("areaCode") String areaCode); /** * 查询当前组织的下一级组织,可根据areaCode查询,也可根据pid查询 @@ -191,13 +191,13 @@ public interface ScreenCustomerAgencyDao { * @param parentAgencyId * @return java.util.List */ - List selectGridDTOList(@Param("areaCode") String areaCode, @Param("parentAgencyId") String parentAgencyId,@Param("allCustomerIds") List allCustomerIds); + List selectGridDTOList(@Param("areaCode") String areaCode, @Param("parentAgencyId") String parentAgencyId, @Param("allCustomerIds") List allCustomerIds); - List selectPAgencyById(@Param("listStr")List pidList); + List selectPAgencyById(@Param("listStr") List pidList); /** - * @return com.epmet.dto.result.ScreenCustomerAgencyDTO * @param customerId + * @return com.epmet.dto.result.ScreenCustomerAgencyDTO * @author yinzuomei * @description 根据客户id,返回当前客户下的跟组织信息 * @Date 2021/6/24 17:43 @@ -205,4 +205,15 @@ public interface ScreenCustomerAgencyDao { ScreenCustomerAgencyDTO selectCustomerRootAgency(String customerId); ScreenCustomerAgencyDTO selectByAreaCode(String areaCode); + + /** + * desc: 根据pids 或者 areaCode 获取所有下级组织 + * + * @param pids + * @param areaCode + * @return java.util.List + * @author LiuJanJun + * @date 2021/8/5 11:01 上午 + */ + List selectAllSubAgencyList(@Param("pids") String pids, @Param("areaCode") String areaCode); } diff --git a/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/service/evaluationindex/screen/AgencyService.java b/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/service/evaluationindex/screen/AgencyService.java index aa142bed95..284241e296 100644 --- a/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/service/evaluationindex/screen/AgencyService.java +++ b/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/service/evaluationindex/screen/AgencyService.java @@ -5,10 +5,12 @@ import com.epmet.dto.ScreenCustomerGridDTO; import com.epmet.dto.form.AddAreaCodeDictFormDTO; import com.epmet.dto.form.AgencyDetailMulticFormDTO; import com.epmet.dto.form.AreaCodeDictFormDTO; +import com.epmet.dto.form.govOrg.OrgTreeFormDTO; import com.epmet.dto.result.AgencyDetailMulticResultDTO; import com.epmet.dto.result.AreaCodeDictResultDTO; import com.epmet.dto.result.ScreenCustomerAgencyDTO; import com.epmet.dto.result.commonservice.AddAreaCodeDictResultDTO; +import com.epmet.dto.result.govOrg.OrgTreeNode; import com.epmet.dto.result.plugins.AgencyNodeDTO; import com.epmet.evaluationindex.screen.dto.form.CompartmentByBizTypeFormDTO; import com.epmet.evaluationindex.screen.dto.form.CompartmentFormDTO; @@ -104,4 +106,14 @@ public interface AgencyService { * @return com.epmet.dto.result.AgencyDetailMulticResultDTO */ AgencyDetailMulticResultDTO queryAgencyDetailMultiC(AgencyDetailMulticFormDTO formDTO); + + /** + * desc: 获取工作人员组织树 含所有直线上级组织 不含网格及部门 + * + * @param mobile + * @return com.epmet.dto.result.plugins.AgencyNodeDTO + * @author LiuJanJun + * @date 2021/8/3 5:03 下午 + */ + OrgTreeNode getStaffAgencyTree(OrgTreeFormDTO mobile); } diff --git a/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/service/evaluationindex/screen/impl/AgencyServiceImpl.java b/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/service/evaluationindex/screen/impl/AgencyServiceImpl.java index c6dc8deba2..95bb28a38e 100644 --- a/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/service/evaluationindex/screen/impl/AgencyServiceImpl.java +++ b/epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/service/evaluationindex/screen/impl/AgencyServiceImpl.java @@ -2,28 +2,35 @@ package com.epmet.datareport.service.evaluationindex.screen.impl; import com.alibaba.fastjson.JSON; import com.epmet.commons.dynamic.datasource.annotation.DataSource; -import com.epmet.commons.tools.constant.Constant; import com.epmet.commons.tools.constant.NumConstant; import com.epmet.commons.tools.constant.StrConstant; +import com.epmet.commons.tools.enums.OrgLevelEnum; +import com.epmet.commons.tools.exception.EpmetErrorCode; import com.epmet.commons.tools.exception.RenException; import com.epmet.commons.tools.utils.AgencyTreeUtils; import com.epmet.commons.tools.utils.ConvertUtils; import com.epmet.commons.tools.utils.Result; +import com.epmet.commons.tools.utils.TreeUtils; import com.epmet.constant.DataSourceConstant; import com.epmet.datareport.dao.evaluationindex.screen.ScreenCustomerAgencyDao; import com.epmet.datareport.dao.evaluationindex.screen.ScreenCustomerGridDao; import com.epmet.datareport.redis.DataReportRedis; import com.epmet.datareport.service.evaluationindex.screen.AgencyService; import com.epmet.dto.AgencyInfoDTO; +import com.epmet.dto.CustomerAgencyDTO; +import com.epmet.dto.CustomerStaffDTO; import com.epmet.dto.ScreenCustomerGridDTO; import com.epmet.dto.form.AddAreaCodeDictFormDTO; import com.epmet.dto.form.AgencyDetailMulticFormDTO; import com.epmet.dto.form.AreaCodeDictFormDTO; +import com.epmet.dto.form.CustomerStaffFormDTO; +import com.epmet.dto.form.govOrg.OrgTreeFormDTO; import com.epmet.dto.result.AgencyDetailMulticResultDTO; import com.epmet.dto.result.AreaCodeDictResultDTO; import com.epmet.dto.result.ParentListResultDTO; import com.epmet.dto.result.ScreenCustomerAgencyDTO; import com.epmet.dto.result.commonservice.AddAreaCodeDictResultDTO; +import com.epmet.dto.result.govOrg.OrgTreeNode; import com.epmet.dto.result.plugins.AgencyNodeDTO; import com.epmet.evaluationindex.screen.constant.ScreenConstant; import com.epmet.evaluationindex.screen.dto.form.CompartmentByBizTypeFormDTO; @@ -33,6 +40,7 @@ import com.epmet.evaluationindex.screen.dto.result.AgencyDistributionResultDTO; import com.epmet.evaluationindex.screen.dto.result.CompartmentResultDTO; import com.epmet.evaluationindex.screen.dto.result.TreeResultDTO; import com.epmet.feign.EpmetCommonServiceOpenFeignClient; +import com.epmet.feign.EpmetUserOpenFeignClient; import com.epmet.feign.GovOrgOpenFeignClient; import com.epmet.feign.OperCrmOpenFeignClient; import lombok.extern.slf4j.Slf4j; @@ -42,10 +50,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; +import java.util.*; /** * 组织相关api @@ -70,6 +75,8 @@ public class AgencyServiceImpl implements AgencyService { private OperCrmOpenFeignClient operCrmOpenFeignClient; @Autowired private DataReportRedis dataReportRedis; + @Autowired + private EpmetUserOpenFeignClient userOpenFeignClient; /** * @Description 1、组织机构树 @@ -438,7 +445,7 @@ public class AgencyServiceImpl implements AgencyService { log.info("多客户版本parentList、level要重新赋值;agencysResultDTO.getParentAreaCode()="+agencysResultDTO.getParentAreaCode()); ScreenCustomerAgencyDTO parentAgency=screenCustomerAgencyDao.selectByAreaCode(agencysResultDTO.getParentAreaCode()); if (null != parentAgency) { - agencysResultDTO.setLevel(getAgencyLevelMultiC(parentAgency)); + agencysResultDTO.setLevel(OrgLevelEnum.getSubOrgLevel(parentAgency.getLevel())); List temp = getParentListMultic(parentList, parentAgency, formDTO.getCustomerId(), agencysResultDTO.getRootAgencyId()); agencysResultDTO.setParentList(temp); } @@ -468,6 +475,94 @@ public class AgencyServiceImpl implements AgencyService { return agencysResultDTO; } + @Override + public OrgTreeNode getStaffAgencyTree(OrgTreeFormDTO formDTO) { + //todo 获取客户的所有组织 然后遍历剔除 再构建出一颗树 咋样 + //获取工作人员信息 + CustomerStaffFormDTO staffParam = new CustomerStaffFormDTO(); + staffParam.setMobile(formDTO.getMobile()); + staffParam.setCustomerId(formDTO.getCustomerId()); + Result staffInfoResult = userOpenFeignClient.getCustomerStaffInfo(staffParam); + if (!staffInfoResult.success()){ + throw new RenException(staffInfoResult.getCode(),staffInfoResult.getInternalMsg()); + } + //获取工作人员组织信息 + Result agencyByStaff = govOrgOpenFeignClient.getAgencyByStaff(staffInfoResult.getData().getUserId()); + if (!agencyByStaff.success() || agencyByStaff.getData()== null || StringUtils.isBlank(agencyByStaff.getData().getId()) ){ + throw new RenException(staffInfoResult.getCode(),staffInfoResult.getMsg()); + } + CustomerAgencyDTO staffAgencyDTO = agencyByStaff.getData(); + log.debug("getStaffAgencyTree查询当前工作人员组织信息为:{}",JSON.toJSONString(staffAgencyDTO)); + + //4、如果当前客户不存在子客户则areaCode置为空 + Result> crmRes=operCrmOpenFeignClient.getAllSubCustomerIds(formDTO.getCustomerId()); + if (!crmRes.success()){ + throw new RenException(EpmetErrorCode.SERVER_ERROR.getCode()); + } + List nodes = new ArrayList<>(); + //单客户 + if (CollectionUtils.isEmpty(crmRes.getData())){ + //todo 暂不处理 有时间再说 + }else { + ScreenCustomerAgencyDTO parentAgencyDTO = null; + String parentAreaCode = staffAgencyDTO.getParentAreaCode(); + List nodeList = new ArrayList<>(); + + /*ScreenCustomerAgencyDTO currentAgency = new ScreenCustomerAgencyDTO(); + currentAgency.setCustomerId(staffAgencyDTO.getCustomerId()); + currentAgency.setAgencyId(staffAgencyDTO.getId()); + currentAgency.setAgencyName(staffAgencyDTO.getOrganizationName()); + currentAgency.setLevel(staffAgencyDTO.getLevel()); + currentAgency.setAreaCode(staffAgencyDTO.getAreaCode()); + currentAgency.setParentAreaCode(staffAgencyDTO.getParentAreaCode()); + currentAgency.setPid(staffAgencyDTO.getPid()); + currentAgency.setPids(staffAgencyDTO.getPids()); + + convertOrgTreeNode(nodeList, currentAgency);*/ + //多客户 获取所有直线上级 + do { + parentAgencyDTO = screenCustomerAgencyDao.selectByAreaCode(parentAreaCode); + if (parentAgencyDTO == null){ + break; + } + convertOrgTreeNode(nodeList, parentAgencyDTO); + if (parentAgencyDTO.getPid() == null || NumConstant.ZERO_STR.equals(parentAgencyDTO.getPid())){ + break; + } + parentAreaCode = parentAgencyDTO.getAreaCode(); + } while (true); + log.debug("getStaffAgencyTree查询所有上级为:{}",JSON.toJSONString(nodeList)); + //多客户 获取所有下级 + List agencyNodeDTOS = screenCustomerAgencyDao.selectAllSubAgencyList(null,staffAgencyDTO.getAreaCode()); + //孔村降级处理 且移除掉 党总支级别 + String KONG_CUN_AGENCY_ID = "1234085031077498881"; + Iterator iterator = agencyNodeDTOS.iterator(); + while (iterator.hasNext()){ + ScreenCustomerAgencyDTO e = iterator.next(); + if (e.getPids().contains(KONG_CUN_AGENCY_ID)){ + if (OrgLevelEnum.STREET.getCode().equals(e.getLevel())){ + iterator.remove(); + } + if (KONG_CUN_AGENCY_ID.equals(e.getAgencyId())){ + e.setLevel(OrgLevelEnum.getSubOrgLevel(e.getLevel())); + } + } + convertOrgTreeNode(nodeList, e); + } + nodes = TreeUtils.buildTreeByAreaCode(nodeList); + } + log.debug("getStaffAgencyTree查询所有上级树结构为:{}",JSON.toJSONString(nodes)); + //只有一个根节点的树 所以返回一个 + return nodes.get(0); + } + + private void convertOrgTreeNode(List nodeList, ScreenCustomerAgencyDTO currentAgency) { + OrgTreeNode orgTreeNode = ConvertUtils.sourceToTarget(currentAgency, OrgTreeNode.class); + orgTreeNode.setOrgId(currentAgency.getAgencyId()); + orgTreeNode.setOrgName(currentAgency.getAgencyName()); + nodeList.add(orgTreeNode); + } + private List getParentListMultic(List resList, ScreenCustomerAgencyDTO firstParent, String currentUserCustomerId, String rootAgencyId) { ParentListResultDTO resultDTO = new ParentListResultDTO(); resultDTO.setId(firstParent.getAgencyId()); @@ -491,20 +586,4 @@ public class AgencyServiceImpl implements AgencyService { } } } - - private String getAgencyLevelMultiC(ScreenCustomerAgencyDTO parentAgency) { - String level=StrConstant.EPMETY_STR; - if(null!=parentAgency){ - if(Constant.PROVINCE.equals(parentAgency.getLevel())){ - return Constant.CITY; - }else if(Constant.CITY.equals(parentAgency.getLevel())){ - return Constant.DISTRICT; - }else if(Constant.DISTRICT.equals(parentAgency.getLevel())){ - return Constant.STREET; - }else if(Constant.STREET.equals(parentAgency.getLevel())){ - return Constant.COMMUNITY; - } - } - return level; - } } diff --git a/epmet-module/data-report/data-report-server/src/main/resources/logback-spring.xml b/epmet-module/data-report/data-report-server/src/main/resources/logback-spring.xml index 9cda990ac0..34664cd623 100644 --- a/epmet-module/data-report/data-report-server/src/main/resources/logback-spring.xml +++ b/epmet-module/data-report/data-report-server/src/main/resources/logback-spring.xml @@ -142,7 +142,7 @@ - + diff --git a/epmet-module/data-report/data-report-server/src/main/resources/mapper/screen/ScreenCustomerAgencyDao.xml b/epmet-module/data-report/data-report-server/src/main/resources/mapper/screen/ScreenCustomerAgencyDao.xml index 0d940865f0..f0e65a8bd1 100644 --- a/epmet-module/data-report/data-report-server/src/main/resources/mapper/screen/ScreenCustomerAgencyDao.xml +++ b/epmet-module/data-report/data-report-server/src/main/resources/mapper/screen/ScreenCustomerAgencyDao.xml @@ -433,4 +433,21 @@ AND sca.AREA_CODE = #{areaCode} limit 1 + diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/impl/FactAgencyGovernDailyServiceImpl.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/impl/FactAgencyGovernDailyServiceImpl.java index c2ebfd43e6..f766873cea 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/impl/FactAgencyGovernDailyServiceImpl.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/impl/FactAgencyGovernDailyServiceImpl.java @@ -279,6 +279,7 @@ public class FactAgencyGovernDailyServiceImpl extends BaseServiceImpl subOrgs; -} diff --git a/epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/form/EventListFormDTO.java b/epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/form/EventListFormDTO.java index 699c6ada63..e4632b7f33 100644 --- a/epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/form/EventListFormDTO.java +++ b/epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/form/EventListFormDTO.java @@ -26,4 +26,7 @@ public class EventListFormDTO implements Serializable { @NotBlank(message = "",groups = EventListForm.class) private String orgId; + + private Integer pageNo; + private Integer pageSize; } diff --git a/epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/form/EventShiftProjectDTO.java b/epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/form/EventShiftProjectDTO.java new file mode 100644 index 0000000000..b5ef015258 --- /dev/null +++ b/epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/form/EventShiftProjectDTO.java @@ -0,0 +1,23 @@ +package com.epmet.dto.form; + +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 事件立项,入参 + * + * @author yinzuomei@elink-cn.com + * @date 2021/8/5 16:15 + */ +@Data +public class EventShiftProjectDTO implements Serializable { + private static final long serialVersionUID = 5519721673862754305L; + //转项目的人 + private String userId; + private String eventId; + private String projectId; + private Date shiftProjectTime; + private String userAgencyId; +} diff --git a/epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/form/EventToProjectFormDTO.java b/epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/form/EventToProjectFormDTO.java new file mode 100644 index 0000000000..758b7acbbb --- /dev/null +++ b/epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/form/EventToProjectFormDTO.java @@ -0,0 +1,96 @@ +package com.epmet.dto.form; + +import com.epmet.commons.tools.validator.group.CustomerClientShowGroup; +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; +import java.io.Serializable; +import java.util.List; + +/** + * 事件-里项目 + * + * @author yinzuomei@elink-cn.com + * @date 2021/8/5 15:19 + */ +@Data +public class EventToProjectFormDTO implements Serializable { + private static final long serialVersionUID = 3392008990676159012L; + + public interface AddUserInternalGroup { + } + + public interface ApprovalCategory extends CustomerClientShowGroup { + } + + /** + * 事件id + */ + @NotBlank(message = "事件id不能为空", groups = AddUserInternalGroup.class) + private String eventId; + + /** + * 项目方案 1000 + */ + @Length(min = 1, max = 1000, message = "项目方案1000字", groups = {ApprovalCategory.class}) + private String publicReply; + /** + * 内部备注 1000 + */ + @Length(min = 1, max = 1000, message = "内部备注1000字", groups = {ApprovalCategory.class}) + private String internalRemark; + + /** + * 吹哨勾选的工作人员信息集合,不可为空 + */ + @Valid + private List staffList; + /** + * 项目所选分类集合,不可为空 + */ + @Valid + private List categoryList; + /** + * 项目所选标签集合 + */ + private List tagList; + + @Length(min = 1, max = 20, message = "项目标题不能超过20位", groups = {ApprovalCategory.class}) + private String title; + + /** + * 公开答复对应文件集合 + */ + private List publicFile; + /** + * 内部备注对应文件集合 + */ + private List internalFile; + + //定位地址[立项项目指的项目发生位置,议题转的项目指的话题发生位置] + private String locateAddress; + //定位经度 + private String locateLongitude; + //定位纬度 + private String locateDimension; + + + + //以下参数从token中获取 + /** + * 当前用户id + */ + @NotBlank(message = "userId不能为空",groups = AddUserInternalGroup.class) + private String userId; + + /** + * 当前客户id + */ + @NotBlank(message = "customerId不能为空",groups = AddUserInternalGroup.class) + private String customerId; + + private String app; + private String client; +} diff --git a/epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/result/EventDetailResultDTO.java b/epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/result/EventDetailResultDTO.java index e5997ab62f..18295391c5 100644 --- a/epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/result/EventDetailResultDTO.java +++ b/epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/result/EventDetailResultDTO.java @@ -66,6 +66,11 @@ public class EventDetailResultDTO implements Serializable { */ private List eventPerson; + /** + * 被提到的组织 + */ + private List eventOrg; + /** * 报事人名字 */ diff --git a/epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/result/EventToProjectResultDTO.java b/epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/result/EventToProjectResultDTO.java new file mode 100644 index 0000000000..f17f2e6f34 --- /dev/null +++ b/epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/result/EventToProjectResultDTO.java @@ -0,0 +1,17 @@ +package com.epmet.dto.result; + +import lombok.Data; + +import java.io.Serializable; + +/** + * 描述一下 + * + * @author yinzuomei@elink-cn.com + * @date 2021/8/5 15:36 + */ +@Data +public class EventToProjectResultDTO implements Serializable { + private static final long serialVersionUID = -7544325891712303124L; + private String projectId; +} diff --git a/epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/result/MyReportedResultDTO.java b/epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/result/MyReportedResultDTO.java index 32209d0249..d2df7d7a66 100644 --- a/epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/result/MyReportedResultDTO.java +++ b/epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/result/MyReportedResultDTO.java @@ -52,4 +52,14 @@ public class MyReportedResultDTO implements Serializable { */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") private Date showTime; + + /** + * true:显示回复;false:不显示回复按钮 + */ + private String replyButtonFlag; + + /** + * 事件是否被阅读过;1已读;针对报事人待处理列表 + */ + private Boolean readFlag; } diff --git a/epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/result/NewEventsResultDTO.java b/epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/result/NewEventsResultDTO.java index 77f4eb4d68..8035108f6a 100644 --- a/epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/result/NewEventsResultDTO.java +++ b/epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/result/NewEventsResultDTO.java @@ -29,4 +29,6 @@ public class NewEventsResultDTO implements Serializable { * 事件图片 */ private List eventImgs; + + private String eventId; } diff --git a/epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/result/UserMentionResultDTO.java b/epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/result/UserMentionResultDTO.java index 95ac2e2527..48bb9583ba 100644 --- a/epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/result/UserMentionResultDTO.java +++ b/epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/result/UserMentionResultDTO.java @@ -52,4 +52,10 @@ public class UserMentionResultDTO implements Serializable { */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") private Date showTime; + + /** + * true:显示回复;false:不显示回复按钮 + */ + private String replyButtonFlag; + } diff --git a/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/constant/ProjectConstant.java b/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/constant/ProjectConstant.java index 43c87b57b5..b5acf5b2e7 100644 --- a/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/constant/ProjectConstant.java +++ b/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/constant/ProjectConstant.java @@ -14,6 +14,8 @@ public interface ProjectConstant { * 项目来源-组织(项目立项) */ String AGENCY = "agency"; + + String RESI_EVENT="resi_event"; /** * 状态-待处理 */ diff --git a/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/controller/ProjectTraceController.java b/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/controller/ProjectTraceController.java index a91cc3513b..b3053bbd93 100644 --- a/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/controller/ProjectTraceController.java +++ b/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/controller/ProjectTraceController.java @@ -362,5 +362,23 @@ public class ProjectTraceController { return new Result(); } + /** + * 事件-立项 + * + * @param tokenDto + * @param formDTO + * @return com.epmet.commons.tools.utils.Result + * @author yinzuomei + * @date 2021/8/5 15:37 + */ + @PostMapping("eventToProject") + public Result eventToProject(@LoginUser TokenDto tokenDto,@RequestBody EventToProjectFormDTO formDTO){ + formDTO.setCustomerId(tokenDto.getCustomerId()); + formDTO.setUserId(tokenDto.getUserId()); + formDTO.setApp(tokenDto.getApp()); + formDTO.setClient(tokenDto.getClient()); + ValidatorUtils.validateEntity(formDTO,EventToProjectFormDTO.ApprovalCategory.class,EventToProjectFormDTO.AddUserInternalGroup.class); + return new Result().ok(projectTraceService.eventToProject(formDTO)); + } } diff --git a/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/dao/ResiEventMentionDao.java b/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/dao/ResiEventMentionDao.java index 15062a1385..76aaeb9162 100644 --- a/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/dao/ResiEventMentionDao.java +++ b/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/dao/ResiEventMentionDao.java @@ -65,4 +65,6 @@ public interface ResiEventMentionDao extends BaseDao { * @date 2021/8/4 17:41 */ int updateRedDotShow(@Param("resiEventId") String resiEventId,@Param("excludeUserId")String excludeUserId); + + ResiEventMentionEntity selectUser(@Param("eventId") String eventId, @Param("userId")String userId); } \ No newline at end of file diff --git a/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/ProjectTraceService.java b/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/ProjectTraceService.java index d3d2cc3f3b..620f9577fc 100644 --- a/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/ProjectTraceService.java +++ b/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/ProjectTraceService.java @@ -173,4 +173,14 @@ public interface ProjectTraceService { * @Description 项目立项 **/ void projectApproval(ProjectApprovalFormDTO formDTO); + + /** + * 事件立项 + * + * @param formDTO + * @return com.epmet.dto.result.EventToProjectResultDTO + * @author yinzuomei + * @date 2021/8/5 15:38 + */ + EventToProjectResultDTO eventToProject(EventToProjectFormDTO formDTO); } diff --git a/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/ResiEventService.java b/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/ResiEventService.java index 64a6c5e6a7..6822dfe4fa 100644 --- a/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/ResiEventService.java +++ b/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/ResiEventService.java @@ -108,4 +108,15 @@ public interface ResiEventService extends BaseService { */ void closeResiEvent(CloseResiEventFormDTO formDTO); + /** + * 事件立项:更新立项标志、增加操作日志、更新(报事人、被艾特的人)红点 + * + * @param eventShiftProjectDTO + * @return void + * @author yinzuomei + * @date 2021/8/5 16:17 + */ + void shiftProject(EventShiftProjectDTO eventShiftProjectDTO); + + ResiEventEntity getById(String eventId); } \ No newline at end of file diff --git a/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectTraceServiceImpl.java b/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectTraceServiceImpl.java index 0d1c537388..676b3bdc56 100644 --- a/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectTraceServiceImpl.java +++ b/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectTraceServiceImpl.java @@ -22,7 +22,6 @@ import com.epmet.constant.UserMessageConstant; import com.epmet.dao.ProjectOrgRelationDao; import com.epmet.dao.ProjectProcessAttachmentDao; import com.epmet.dao.ProjectProcessDao; -import com.epmet.dto.CustomerStaffDTO; import com.epmet.dto.IssueProjectCategoryDictDTO; import com.epmet.dto.IssueProjectTagDictDTO; import com.epmet.dto.ProjectStaffDTO; @@ -93,6 +92,8 @@ public class ProjectTraceServiceImpl implements ProjectTraceS private EpmetMessageOpenFeignClient epmetMessageOpenFeignClient; @Autowired private LoginUserUtil loginUserUtil; + @Autowired + private ResiEventService resiEventService; @Override public List getPendProjectList(TokenDto tokenDto, ProjectListFromDTO fromDTO) { @@ -615,5 +616,354 @@ public class ProjectTraceServiceImpl implements ProjectTraceS return epmetMessageOpenFeignClient.sendWxSubscribeMessage(msgList); } + /** + * 事件立项 + * + * @param formDTO + * @return com.epmet.dto.result.EventToProjectResultDTO + * @author yinzuomei + * @date 2021/8/5 15:38 + */ + @Override + public EventToProjectResultDTO eventToProject(EventToProjectFormDTO formDTO) { + //事件已经立项,不能重复操作 + ResiEventEntity resiEventEntity=resiEventService.getById(formDTO.getEventId()); + if(null==resiEventEntity||resiEventEntity.getShiftProject()){ + throw new RenException(EpmetErrorCode.RESI_EVENT_SHIFT_PROJECT.getCode(),EpmetErrorCode.RESI_EVENT_SHIFT_PROJECT.getMsg()); + } + List staffList = formDTO.getStaffList(); + //1.文字内容安全校验 + List list = new ArrayList<>(); + list.add(formDTO.getTitle());list.add(formDTO.getPublicReply());list.add(formDTO.getPublicReply());list.add(formDTO.getInternalRemark()); + safetyCheck(list); + //2.数据准备 + //2-1获取当前工作人员基本信息 + LoginUserDetailsResultDTO loginUser=queryLoginUserInfo(formDTO); + + //2-2.调用gov-org服务,获取所有勾选人员以及议题数据对应的组织信息、部门信息、网格信息用于对处理部门和ORG_ID_PATH字段的赋值使用 + AgencyDeptGridResultDTO agencyDeptGrid = getAgencyDeptGridRes(formDTO.getStaffList(),loginUser.getAgencyId()); + + //2-3.调用issue服务,查询分类、标签数据信息 + CategoryTagResultDTO categoryTagResultDTO=queryCategoryTagRes(formDTO); + List categoryList = categoryTagResultDTO.getCategoryList(); + List tagList = categoryTagResultDTO.getTagList(); + + //2-4.批量查询被勾选工作人员基础信息 + List staffInfoList=queryStaffListRes(formDTO.getStaffList(),formDTO.getUserId()); + + //3.封装保存业务数据 + //3-1.项目主表新增数据 + ProjectEntity projectEntity = new ProjectEntity(); + projectEntity.setCustomerId(formDTO.getCustomerId()); + // 立项人的所属组织id + projectEntity.setAgencyId(loginUser.getAgencyId()); + // 项目来源新增:resi_event + projectEntity.setOrigin(ProjectConstant.RESI_EVENT); + projectEntity.setOriginId(formDTO.getEventId()); + projectEntity.setTitle(formDTO.getTitle()); + projectEntity.setBackGround(formDTO.getPublicReply()); + projectEntity.setStatus(ProjectConstant.PENDING); + projectEntity.setOrgIdPath(loginUser.getOrgIdPath()); + projectEntity.setLocateAddress(null == formDTO.getLocateAddress() ? "" : formDTO.getLocateAddress()); + projectEntity.setLocateLongitude(null == formDTO.getLocateLongitude() ? "" : formDTO.getLocateLongitude()); + projectEntity.setLocateDimension(null == formDTO.getLocateDimension() ? "" : formDTO.getLocateDimension()); + projectService.insert(projectEntity); + + //3-2.项目进展表新增第一个节点数据 + ProjectProcessEntity processEntity = new ProjectProcessEntity(); + processEntity.setProjectId(projectEntity.getId()); + processEntity.setCustomerId(formDTO.getCustomerId()); + processEntity.setStaffId(formDTO.getUserId()); + processEntity.setOperation(ProjectConstant.OPERATION_CREATED); + processEntity.setOperationName(ProjectConstant.OPERATION_PROJECT_APPROVAL); + processEntity.setPublicReply(formDTO.getPublicReply()); + processEntity.setInternalRemark(formDTO.getInternalRemark()); + agencyDeptGrid.getAgencyList().forEach(agency -> { + if (loginUser.getAgencyId().equals(agency.getId())) { + processEntity.setDepartmentName(agency.getOrganizationName()); + processEntity.setAgencyId(agency.getId()); + if(org.apache.commons.lang3.StringUtils.isBlank(agency.getPids()) || org.apache.commons.lang3.StringUtils.equals(NumConstant.ZERO_STR,agency.getPids().trim()) || "".equals(agency.getPids().trim())){ + processEntity.setOrgIdPath(agency.getId()); + }else{ + processEntity.setOrgIdPath(agency.getPids().concat(":").concat(agency.getId())); + } + } + }); + projectProcessService.insert(processEntity); + + //3-3.项目人员表批量新增数据 + List entityList = new ArrayList<>(); + staffList.forEach(ts -> { + ProjectStaffEntity entity = ConvertUtils.sourceToTarget(ts, ProjectStaffEntity.class); + entity.setOrgId(ts.getAgencyId()); + entity.setProjectId(projectEntity.getId()); + entity.setProcessId(processEntity.getId()); + entity.setIsHandle(ProjectConstant.UNHANDLED); + agencyDeptGrid.getAgencyList().forEach(agency -> { + if (ts.getAgencyId().equals(agency.getId())) { + entity.setCustomerId(agency.getCustomerId()); + entity.setOrgIdPath(("".equals(agency.getPids()) ? "" : agency.getPids() + ":") + agency.getId()); + entity.setDepartmentName(agency.getOrganizationName()); + } + }); + if (org.apache.commons.lang3.StringUtils.isNotBlank(ts.getDepartmentId())) { + agencyDeptGrid.getDeptList().forEach(dept -> { + if (ts.getDepartmentId().equals(dept.getId())) { + entity.setDepartmentName(entity.getDepartmentName() + "-" + dept.getDepartmentName()); + } + }); + } + if (org.apache.commons.lang3.StringUtils.isNotBlank(ts.getGridId())) { + agencyDeptGrid.getGridList().forEach(grid -> { + if (ts.getGridId().equals(grid.getId())) { + entity.setDepartmentName(entity.getDepartmentName() + "-" + grid.getGridName()); + } + }); + } + entityList.add(entity); + }); + projectStaffService.insertBatch(entityList); + + //3-4.项目附件表新增数据 + if ((null != formDTO.getPublicFile() && formDTO.getPublicFile().size() > NumConstant.ZERO) + || (null != formDTO.getInternalFile() && formDTO.getInternalFile().size() > NumConstant.ZERO)) { + projectService.saveFile(formDTO.getPublicFile(), formDTO.getInternalFile(), formDTO.getCustomerId(), projectEntity.getId(), processEntity.getId()); + } + + //3-5.项目分类表新增数据 + if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(formDTO.getCategoryList())) { + List categoryEntityList = new ArrayList<>(); + formDTO.getCategoryList().forEach(item -> { + categoryList.forEach(ca->{ + if(item.getId().equals(ca.getId())){ + ProjectCategoryEntity entity = new ProjectCategoryEntity(); + entity.setCustomerId(formDTO.getCustomerId()); + entity.setProjectId(projectEntity.getId()); + entity.setCategoryId(item.getId()); + entity.setCategoryPids(ca.getPids()); + entity.setCategoryCode(ca.getCategoryCode()); + categoryEntityList.add(entity); + } + }); + }); + projectCategoryService.insertBatch(categoryEntityList); + } + + //3-6.项目标签表新增数据 + if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(formDTO.getTagList())) { + List tagEntityList = new ArrayList<>(); + formDTO.getTagList().forEach(item -> { + tagList.forEach(ta->{ + if(item.getId().equals(ta.getId())){ + ProjectTagsEntity entity = new ProjectTagsEntity(); + entity.setCustomerId(formDTO.getCustomerId()); + entity.setProjectId(projectEntity.getId()); + entity.setTagId(item.getId()); + entity.setTagName(ta.getTagName()); + tagEntityList.add(entity); + } + }); + }); + projectTagsService.insertBatch(tagEntityList); + } + + //3-7:初始化机关-项目时间关联数据 + Date current = new Date(); + List projectStaffIds = entityList.stream().map(ProjectStaffEntity::getId).distinct().collect(Collectors.toList()); + if(!org.apache.commons.collections4.CollectionUtils.isEmpty(projectStaffIds)){ + List container = new LinkedList<>(); + projectStaffIds.forEach(o -> { + ProjectOrgRelationEntity period = new ProjectOrgRelationEntity(); + period.setProjectStaffId(o); + period.setInformedDate(current); + period.setSourceOperation(ProjectConstant.OPERATION_CREATED); + period.setCreatedBy(formDTO.getUserId()); + container.add(period); + }); + relationDao.insertBatch(container); + } + + //4.推送站内信、微信、短信消息 + //4-1.调用epmet-message服务,给工作端勾选的工作人员发送消息 + if (!shiftProjectMessage(formDTO.getStaffList(),formDTO.getCustomerId(),formDTO.getTitle()).success()) { + throw new RenException("事件转为项目,推送站内信失败"); + } + + //4-2.以及政府端调用epmet-message服务,给工作端工作人员推送微信订阅消息 + if (!wxmpShiftProjectMessage(formDTO.getStaffList(),formDTO.getCustomerId(),formDTO.getTitle()).success()) { + logger.error("事件转为项目,推送微信订阅消息失败!"); + } + + //4-3.吹哨短信消息 + List smsList = new ArrayList<>(); + staffList.forEach(staff -> { + staffInfoList.forEach(st->{ + if(staff.getStaffId().equals(st.getStaffId())){ + ProjectSendMsgFormDTO sms = new ProjectSendMsgFormDTO(); + sms.setCustomerId(st.getCustomerId()); + sms.setMobile(st.getMobile()); + sms.setAliyunTemplateCode(SmsTemplateConstant.PROJECT_TRANSFER); + sms.setParameterKey("send_msg"); + smsList.add(sms); + } + }); + }); + Result result = epmetMessageOpenFeignClient.projectSendMsg(smsList); + if (!result.success()) { + logger.error("项目吹哨,发送手机短信失败" + JSON.toJSONString(result)); + } + + //项目实时统计消息 + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + String mqMsgBrief = String.format("创建了\"%s\"的项目", formDTO.getTitle()); + ProjectChangedMQMsg mqMsg = new ProjectChangedMQMsg(projectEntity.getCustomerId(), ProjectConstant.OPERATION_CREATED, + projectEntity.getId(), + formDTO.getUserId(), + new Date(), + mqMsgBrief, + IpUtils.getIpAddr(request), + loginUserUtil.getLoginUserApp(), + loginUserUtil.getLoginUserClient()); + boolean msgResult = SendMqMsgUtil.build().openFeignClient(epmetMessageOpenFeignClient).sendProjectChangedMqMsg(mqMsg); + if (!msgResult) { + log.error("项目实时统计消息发送失败"); + } + + // 报事人、被艾特的人显示红点 + EventShiftProjectDTO eventShiftProjectDTO=new EventShiftProjectDTO(); + eventShiftProjectDTO.setEventId(formDTO.getEventId()); + eventShiftProjectDTO.setProjectId(projectEntity.getId()); + eventShiftProjectDTO.setShiftProjectTime(projectEntity.getCreatedTime()); + eventShiftProjectDTO.setUserId(formDTO.getUserId()); + eventShiftProjectDTO.setUserAgencyId(projectEntity.getAgencyId()); + resiEventService.shiftProject(eventShiftProjectDTO); + EventToProjectResultDTO resultDTO=new EventToProjectResultDTO(); + resultDTO.setProjectId(projectEntity.getId()); + return resultDTO; + } + + private List queryStaffListRes(List staffList,String currentUserId) { + List staffIdList = staffList.stream().map(TickStaffFormDTO::getStaffId).collect(Collectors.toList()); + staffIdList.add(currentUserId); + staffIdList = new ArrayList(new LinkedHashSet<>(staffIdList)); + Result resultStaff = epmetUserOpenFeignClient.getCustomerStaffList(staffIdList); + if (!resultStaff.success() || null == resultStaff.getData()) { + throw new RenException("项目立项,调用user服务获取被勾选工作人员基本信息失败"); + } + return resultStaff.getData().getStaffList(); + } + + private CategoryTagResultDTO queryCategoryTagRes(EventToProjectFormDTO formDTO) { + CategoryTagListFormDTO categoryTag = new CategoryTagListFormDTO(); + List categoryIdList = formDTO.getCategoryList().stream().map(CategoryOrTagFormDTO::getId).collect(Collectors.toList()); + List tagIdList = formDTO.getTagList().stream().map(CategoryOrTagFormDTO::getId).collect(Collectors.toList()); + categoryTag.setCustomerId(formDTO.getCustomerId()); + categoryTag.setCategoryIdList(categoryIdList); + categoryTag.setTagIdList(tagIdList); + Result resultDTOResult = govIssueOpenFeignClient.getCategoryTagList(categoryTag); + if (!resultDTOResult.success()) { + throw new RenException("项目立项,调用issue服务查询分类、标签基础信息失败"); + } + return resultDTOResult.getData(); + } + + private AgencyDeptGridResultDTO getAgencyDeptGridRes(List staffList, String userAgencyId) { + List agencyIdList = staffList.stream().map(TickStaffFormDTO::getAgencyId).collect(Collectors.toList()); + agencyIdList.add(userAgencyId); + agencyIdList = new ArrayList(new LinkedHashSet<>(agencyIdList)); + agencyIdList.removeAll(Collections.singleton("")); + List deptIdList = staffList.stream().map(TickStaffFormDTO::getDepartmentId).collect(Collectors.toList()); + deptIdList = new ArrayList(new LinkedHashSet<>(deptIdList)); + deptIdList.removeAll(Collections.singleton("")); + List gridIdList = staffList.stream().map(TickStaffFormDTO::getGridId).collect(Collectors.toList()); + gridIdList = new ArrayList(new LinkedHashSet<>(gridIdList)); + gridIdList.removeAll(Collections.singleton("")); + AgencyDeptGridFormDTO agencyDeptGridFormDTO = new AgencyDeptGridFormDTO(); + agencyDeptGridFormDTO.setAgencyIdList(agencyIdList); + agencyDeptGridFormDTO.setDeptIdList(deptIdList); + agencyDeptGridFormDTO.setGridIdList(gridIdList); + Result resultDTO = govOrgFeignClient.getAgencyDeptGridList(agencyDeptGridFormDTO); + if (!resultDTO.success() || null == resultDTO.getData()) { + throw new RenException(ProjectConstant.SELECT_GOV_ORG_EXCEPTION); + } + return resultDTO.getData(); + } + + /** + * 获取当前工作人员的基本信息 + * + * @param formDTO + * @return com.epmet.dto.result.LoginUserDetailsResultDTO + * @author yinzuomei + * @date 2021/8/5 15:42 + */ + private LoginUserDetailsResultDTO queryLoginUserInfo(EventToProjectFormDTO formDTO) { + //2.数据准备,查询需要用到的数据 + //2-1.获取token用户所属组织信息 + LoginUserDetailsFormDTO dto = new LoginUserDetailsFormDTO(); + dto.setApp(formDTO.getApp()); + dto.setClient(formDTO.getClient()); + dto.setUserId(formDTO.getUserId()); + Result resultDto = epmetUserOpenFeignClient.getLoginUserDetails(dto); + if (!resultDto.success() || StringUtils.isEmpty(resultDto.getData().getAgencyId())) { + throw new RenException(String.format("事件立项调用user服务查询用户数据失败,userId->", formDTO.getUserId())); + } + return resultDto.getData(); + } + + /** + * @Description 项目立项给勾选的工作人员推送站内信消息 + * @author yinzuomei + */ + private Result shiftProjectMessage(List staffList,String customerId,String title) { + List msgList = new ArrayList<>(); + //1.创建项目工作人员消息对象 + String projectStaffMessage = String.format(UserMessageConstant.PROJECT_RESOLVED_MSG, title); + //所选人员如果即在部门下又在网格下则只发一条消息 + Map map = new HashMap<>(); + staffList.forEach(staff->{ + if(!map.containsKey(staff.getStaffId())){ + UserMessageFormDTO msg = new UserMessageFormDTO(); + msg.setCustomerId(customerId); + msg.setGridId("*"); + msg.setApp(AppClientConstant.APP_GOV); + msg.setTitle(UserMessageConstant.PROJECT_TITLE); + msg.setMessageContent(projectStaffMessage); + msg.setReadFlag(ReadFlagConstant.UN_READ); + msg.setUserId(staff.getStaffId()); + msgList.add(msg); + map.put(staff.getStaffId(),staff.getStaffId()); + } + }); + return epmetMessageOpenFeignClient.saveUserMessageList(msgList); + } + + /** + * @Description 项目立项给勾选的工作人员推送微信订阅消息 + * @author yinzuomei + */ + private Result wxmpShiftProjectMessage(List staffList,String customerId,String title) { + List msgList = new ArrayList<>(); + //1.创建项目工作人员消息对象 + String projectStaffMessage = String.format(UserMessageConstant.PROJECT_RESOLVED_MSG, title); + //所选人员如果即在部门下又在网格下则只发一条消息 + Map map = new HashMap<>(); + staffList.forEach(staff->{ + if(!map.containsKey(staff.getStaffId())){ + WxSubscribeMessageFormDTO msg = new WxSubscribeMessageFormDTO(); + msg.setCustomerId(customerId); + msg.setClientType(AppClientConstant.APP_GOV); + msg.setUserId(staff.getStaffId()); + msg.setBehaviorType("项目消息"); + msg.setMessageContent(projectStaffMessage); + msg.setMessageTime(new Date()); + msg.setGridId("*"); + msgList.add(msg); + map.put(staff.getStaffId(),staff.getStaffId()); + } + }); + logger.info("事件立项,推送微信订阅消息"); + return epmetMessageOpenFeignClient.sendWxSubscribeMessage(msgList); + } } diff --git a/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ResiEventServiceImpl.java b/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ResiEventServiceImpl.java index 4e2452c6c2..b588736e20 100644 --- a/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ResiEventServiceImpl.java +++ b/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ResiEventServiceImpl.java @@ -101,6 +101,7 @@ public class ResiEventServiceImpl extends BaseServiceImpl eventList(EventListFormDTO formDTO) { + PageHelper.startPage(formDTO.getPageNo(),formDTO.getPageSize()); List result = baseDao.eventUnDisposedList(formDTO.getOrgId(), formDTO.getEventType()); if (!CollectionUtils.isEmpty(result)){ return result; @@ -120,8 +121,9 @@ public class ResiEventServiceImpl extends BaseServiceImpl data = orgResult.getData(); - data.addAll(dto.getEventPerson()); - dto.setEventPerson(data); + dto.setEventOrg(data); // 更改已读状态 报事人的红点:resi_event,艾特人的:resi_event_mention,所代表的组织的:resi_event_report_org if (tokenDto.getApp().equals(EventConstant.TYPE_RESI)){ baseDao.updateResiEvent(tokenDto.getUserId(),formDTO.getEventId()); @@ -297,8 +298,8 @@ public class ResiEventServiceImpl extends BaseServiceImpl result = PageHelper.startPage(formDTO.getPageNo(), formDTO.getPageSize()).doSelectPageInfo(() -> baseDao.queryMyReported(formDTO.getUserId(), formDTO.getStatusCondition())); + result.getList().forEach(resultDTO->{ + if(EventConstant.EVENT_STATUS_CLOSED_CASE.equals(resultDTO.getStatus())){ + // 已办结的不显示回复按钮 + resultDTO.setReplyButtonFlag("false"); + }else{ + // 处理中的事件 + if(resultDTO.getReadFlag()){ + // 被别人看过了就显示回复 + resultDTO.setReplyButtonFlag("true"); + }else{ + //别人没看过 + resultDTO.setReplyButtonFlag("false"); + } + } + }); return result.getList(); } @@ -492,6 +508,14 @@ public class ResiEventServiceImpl extends BaseServiceImpl result = PageHelper.startPage(formDTO.getPageNo(), formDTO.getPageSize()).doSelectPageInfo(() -> resiEventMentionDao.selectMentionList(formDTO.getUserId(), formDTO.getReadFlag())); + result.getList().forEach(dto->{ + if(dto.getShiftProject()||dto.getStatus().equals(EventConstant.EVENT_STATUS_CLOSED_CASE)){ + // 立项和办结了不能回复哈。 + dto.setReplyButtonFlag("false"); + }else{ + dto.setReplyButtonFlag("true"); + } + }); return result.getList(); } @@ -558,5 +582,42 @@ public class ResiEventServiceImpl extends BaseServiceImpl AND ro.ORG_READ = 'un_read' ORDER BY re.CREATED_TIME @@ -51,6 +52,7 @@ + @@ -70,7 +72,8 @@ re.`STATUS`, re.SHIFT_PROJECT, re.LATEST_OPERATED_TIME, - rea.ATTACHMENT_URL as img_url + rea.ATTACHMENT_URL as img_url, + re.READ_FLAG from resi_event re left join resi_event_attachment rea on(re.id=rea.RESI_EVENT_ID @@ -157,6 +160,7 @@ + @@ -165,7 +169,8 @@ SELECT IFNULL(re.EVENT_CONTENT,'') AS eventContent, DATE_FORMAT(re.CREATED_TIME,'%Y-%m-%d %H:%i') AS eventTime, - IFNULL(ea.ATTACHMENT_URL,'') AS img + IFNULL(ea.ATTACHMENT_URL,'') AS img, + re.id as eventId FROM resi_event_report_org ro LEFT JOIN resi_event re ON (re.ID = ro.RESI_EVENT_ID AND re.DEL_FLAG = '0') LEFT JOIN resi_event_attachment ea ON (ea.RESI_EVENT_ID = ro.RESI_EVENT_ID AND ea.DEL_FLAG = '0' AND diff --git a/epmet-module/gov-project/gov-project-server/src/main/resources/mapper/ResiEventMentionDao.xml b/epmet-module/gov-project/gov-project-server/src/main/resources/mapper/ResiEventMentionDao.xml index 88a62a2f2a..28548eaad9 100644 --- a/epmet-module/gov-project/gov-project-server/src/main/resources/mapper/ResiEventMentionDao.xml +++ b/epmet-module/gov-project/gov-project-server/src/main/resources/mapper/ResiEventMentionDao.xml @@ -78,4 +78,11 @@ AND DEL_FLAG = '0' + + \ No newline at end of file diff --git a/epmet-module/gov-project/gov-project-server/src/main/resources/mapper/ResiEventReportOrgDao.xml b/epmet-module/gov-project/gov-project-server/src/main/resources/mapper/ResiEventReportOrgDao.xml index 7291f346c2..e4dd9e7553 100644 --- a/epmet-module/gov-project/gov-project-server/src/main/resources/mapper/ResiEventReportOrgDao.xml +++ b/epmet-module/gov-project/gov-project-server/src/main/resources/mapper/ResiEventReportOrgDao.xml @@ -6,7 +6,7 @@ UPDATE resi_event_report_org - SET READ_FLAG = 'read', + SET ORG_READ = 'read', UPDATED_BY = #{userId}, UPDATED_TIME = NOW() WHERE