Browse Source

Merge branch 'dev_group_code' of http://git.elinkit.com.cn:7070/r/epmet-cloud into dev_group_code

dev_shibei_match
jianjun 5 years ago
parent
commit
e0c3492869
  1. 2
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/exception/EpmetErrorCode.java
  2. 8
      epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/exception/RenException.java
  3. 4
      epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/project/result/ProjectLatestOperationResultDTO.java
  4. 22
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/ScreenExtractDailyController.java
  5. 10
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/extract/FactOriginGroupMainDailyDao.java
  6. 11
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/project/ProjectProcessDao.java
  7. 2
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/FactOriginGroupMainDailyService.java
  8. 7
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/impl/FactOriginGroupMainDailyServiceImpl.java
  9. 24
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/impl/GroupExtractServiceImpl.java
  10. 15
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/impl/ProjectExtractServiceImpl.java
  11. 14
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/toscreen/impl/PublicPartExtractServiceImpl.java
  12. 2
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/toscreen/impl/ScreenExtractServiceImpl.java
  13. 73
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/toscreen/impl/ScreenGrassrootsGovernDataAbsorptionServiceImpl.java
  14. 2
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/ScreenDifficultyDataService.java
  15. 7
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/impl/ScreenDifficultyDataServiceImpl.java
  16. 15
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/project/ProjectProcessService.java
  17. 25
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/project/impl/ProjectProcessServiceImpl.java
  18. 21
      epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/extract/FactOriginGroupMainDailyDao.xml
  19. 22
      epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/extract/FactOriginProjectMainDailyDao.xml
  20. 22
      epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/project/ProjectProcessDao.xml
  21. 5
      epmet-module/epmet-oss/epmet-oss-client/src/main/java/com/epmet/feign/OssFeignClient.java
  22. 19
      epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/AccessTokenDTO.java
  23. 53
      epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/utils/ThirdUtils.java
  24. 2
      epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/form/IssueShiftedFromTopicFormDTO.java
  25. 2
      epmet-module/oper-crm/oper-crm-server/src/main/java/com/epmet/feign/OperCustomizeFeignClient.java
  26. 16
      epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/constant/GroupStateConstant.java
  27. 5
      epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/group/ResiGroupDTO.java
  28. 5
      epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/group/result/GroupSummarizeResultDTO.java
  29. 5
      epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/invitation/GroupInvitationDTO.java
  30. 2
      epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/member/GroupMemeberOperationDTO.java
  31. 2
      epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/member/ResiGroupMemberDTO.java
  32. 27
      epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/member/form/EditAuditSwitchFormDTO.java
  33. 20
      epmet-module/resi-group/resi-group-server/pom.xml
  34. 49
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/config/AsyncConfig.java
  35. 2
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/controller/ResiGroupCodeController.java
  36. 21
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/controller/ResiGroupController.java
  37. 5
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/entity/ResiGroupEntity.java
  38. 4
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/service/ResiGroupCodeService.java
  39. 11
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/service/ResiGroupService.java
  40. 153
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/service/impl/ResiGroupCodeServiceImpl.java
  41. 24
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/service/impl/ResiGroupServiceImpl.java
  42. 5
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/invitation/entity/GroupInvitationEntity.java
  43. 11
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/invitation/service/GroupInvitationService.java
  44. 63
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/invitation/service/impl/GroupInvitationServiceImpl.java
  45. 2
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/member/entity/GroupMemeberOperationEntity.java
  46. 2
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/member/entity/ResiGroupMemberEntity.java
  47. 2
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/member/service/impl/ResiGroupMemberServiceImpl.java
  48. 25
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/properties/ThreadProperties.java
  49. 10
      epmet-module/resi-group/resi-group-server/src/main/resources/bootstrap.yml
  50. 9
      epmet-module/resi-group/resi-group-server/src/main/resources/db/migration/V0.0.5__group_audit_switch.sql
  51. 3
      epmet-module/resi-group/resi-group-server/src/main/resources/mapper/group/ResiGroupDao.xml
  52. 3
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/CustomerStaffServiceImpl.java

2
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/exception/EpmetErrorCode.java

@ -47,7 +47,7 @@ public enum EpmetErrorCode {
IDCARDNO_ALREADY_EXITS(8109,"系统已存在相同身份证号码,请重新输入"),
IDCARDNO_ERROR(8110,"身份证号格式错误,请重新输入"),
CANNOT_DELETE_PARTY_MEMBER(8111,"该用户已注册党员,不允许删除"),
GROUP_LEADER_CAN_EDIT_GROUP_INFO(8112,"只有组长才可以修改小组信息"),
GROUP_LEADER_CAN_EDIT_GROUP_INFO(8112,"只有组长才可以操作"),
INVITE_NEW_MEMBER(8113,"只有讨论中的小组才可以邀请新成员"),
ACT_TITLE_SCAN_FAILED(8114,"活动标题审核失败,请重新编辑"),
ACT_REQ_SCAN_FAILED(8115,"活动报名条件审核失败,请重新编辑"),

8
epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/exception/RenException.java

@ -19,6 +19,12 @@ import org.apache.commons.lang3.StringUtils;
* @since 1.0.0
*/
public class RenException extends RuntimeException {
public enum MessageMode {
//code_内部信息_外部信息
CODE_INTERNAL_EXTERNAL
}
private static final long serialVersionUID = 1L;
private int code;
/**
@ -47,7 +53,7 @@ public class RenException extends RuntimeException {
}
}
public RenException(int code, String internalMsg, String msg) {
public RenException(int code, String internalMsg, String msg, MessageMode mode) {
this(code, internalMsg);
this.msg = msg;
}

4
epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/project/result/ProjectLatestOperationResultDTO.java

@ -17,4 +17,8 @@ public class ProjectLatestOperationResultDTO implements Serializable {
private String projectId;
private String operationName;
private Integer costTime;
private String title;
}

22
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/ScreenExtractDailyController.java

@ -1,23 +1,33 @@
package com.epmet.controller;
import com.alibaba.fastjson.JSON;
import com.epmet.commons.tools.utils.Result;
import com.epmet.dto.extract.form.ExtractOriginFormDTO;
import com.epmet.dto.extract.form.ExtractScreenFormDTO;
import com.epmet.service.evaluationindex.extract.toscreen.ScreenExtractService;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import lombok.extern.slf4j.Slf4j;
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;
import java.util.concurrent.*;
/**
* @Author zxc
* @DateTime 2020/9/24 9:42 上午
*/
@Slf4j
@RestController
@RequestMapping("screenextract")
public class ScreenExtractDailyController {
ThreadFactory namedThreadFactory = new ThreadFactoryBuilder()
.setNameFormat("ScreenExtractDailyController-pool-%d").build();
ExecutorService threadPool = new ThreadPoolExecutor(1, 1,
10L, TimeUnit.MINUTES,
new LinkedBlockingQueue<>(500), namedThreadFactory, new ThreadPoolExecutor.CallerRunsPolicy());
@Autowired
private ScreenExtractService screenExtractService;
@ -29,7 +39,15 @@ public class ScreenExtractDailyController {
*/
@PostMapping("extractdailyall")
public Result screenExtractDaily(@RequestBody ExtractOriginFormDTO extractOriginFormDTO) {
screenExtractService.extractDailyAll(extractOriginFormDTO);
threadPool.submit(() -> {
log.info("screenExtractDaily start,param:{}", JSON.toJSONString(extractOriginFormDTO));
try {
screenExtractService.extractDailyAll(extractOriginFormDTO);
log.info("screenExtractDaily end");
} catch (Exception e) {
log.error("screenExtractDaily exception", e);
}
});
return new Result();
}

10
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/extract/FactOriginGroupMainDailyDao.java

@ -79,6 +79,16 @@ public interface FactOriginGroupMainDailyDao extends BaseDao<FactOriginGroupMain
**/
void deleteBatchMemberByCustomerId(@Param("customerId") String customerId, @Param("dimId") String dimId, @Param("dateType") String dateType);
/**
* @Description 删除指定组Id的成员
* @param customerId
* @param groups
* @return void
* @author wangc
* @date 2020.11.16 11:15
*/
void deleteMemberByGroupList(@Param("customerId") String customerId,@Param("groups") List<String> groups);
/**
* @param customerId
* @return

11
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/project/ProjectProcessDao.java

@ -153,15 +153,4 @@ public interface ProjectProcessDao extends BaseDao<ProjectProcessEntity> {
* @date 2020.09.28 14:45
*/
List<ProjectLatestOperationResultDTO> selectLatestOperation(@Param("list") List<String> list,@Param("customerId") String customerId);
/**
* @Description 查找项目标题
* @param list
* @return java.util.List<com.epmet.dto.project.result.ProjectLatestOperationResultDTO>
* @author wangc
* @date 2020.09.28 14:45
*/
List<ProjectLatestOperationResultDTO> selectProjectTitle(@Param("list") List<String> list,@Param("customerId") String customerId);
}

2
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/FactOriginGroupMainDailyService.java

@ -64,7 +64,7 @@ public interface FactOriginGroupMainDailyService extends BaseService<FactOriginG
* @author wangc
* @date 2020.09.23 16:30
**/
boolean insertExtractedData(boolean isFirst, String customerId, String dateId, List<FactOriginGroupMainDailyDTO> originGroupData, List<ExtractGroupMemberActionRecordResultDTO> memberList);
boolean insertExtractedData(boolean isFirst, String customerId, String dateId, List<FactOriginGroupMainDailyDTO> originGroupData, List<ExtractGroupMemberActionRecordResultDTO> memberList, List<String> missing);
/**
* @param customerId

7
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/impl/FactOriginGroupMainDailyServiceImpl.java

@ -84,7 +84,7 @@ public class FactOriginGroupMainDailyServiceImpl extends BaseServiceImpl<FactOri
**/
@Override
@Transactional(rollbackFor = Exception.class)
public boolean insertExtractedData(boolean isFirst, String customerId, String dateId,List<FactOriginGroupMainDailyDTO> originGroupData, List<ExtractGroupMemberActionRecordResultDTO> memberList) {
public boolean insertExtractedData(boolean isFirst, String customerId, String dateId,List<FactOriginGroupMainDailyDTO> originGroupData, List<ExtractGroupMemberActionRecordResultDTO> memberList,List<String> missing) {
if (isFirst) {
//isFirst
baseDao.deleteBatchMemberByCustomerId(customerId,null,null);
@ -95,8 +95,13 @@ public class FactOriginGroupMainDailyServiceImpl extends BaseServiceImpl<FactOri
}
//删除要插入的组主表数据
baseDao.deleteBatchByGroupId(customerId,originGroupData.stream().map(FactOriginGroupMainDailyDTO :: getId).distinct().collect(Collectors.toList()));
baseDao.insertBatchMain(originGroupData);
baseDao.insertBatchMembers(memberList);
if(!CollectionUtils.isEmpty(missing)){
baseDao.deleteBatchByGroupId(customerId,missing);
baseDao.deleteMemberByGroupList(customerId,missing);
}
return true;
}

24
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/impl/GroupExtractServiceImpl.java

@ -23,10 +23,7 @@ import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
@ -91,11 +88,21 @@ public class GroupExtractServiceImpl implements GroupExtractService {
List<ExtractGroupMemberActionRecordResultDTO> memberList = new LinkedList<>();
if (!CollectionUtils.isEmpty(originGroupData)) {
List<GridAttributesResultDTO> gridList = dimGridService.getGridAttributes(param.getCustomerId(),originGroupData.stream().map(FactOriginGroupMainDailyDTO::getGridId).distinct().collect(Collectors.toList()));
List<String> missingGroups = new LinkedList<>();
if (!CollectionUtils.isEmpty(gridList)) {
Map<String, GridAttributesResultDTO> gridMap =
gridList.stream().collect(Collectors.toMap(GridAttributesResultDTO::getGridId, Function.identity(), (key1, key2) -> key2));
if (!CollectionUtils.isEmpty(originGroupData)) {
for(Iterator<FactOriginGroupMainDailyDTO> iter = originGroupData.iterator();
iter.hasNext();){
FactOriginGroupMainDailyDTO pointer = iter.next();
if(null == gridMap.get(pointer.getGridId())){
missingGroups.add(pointer.getId());
iter.remove();
}
}
originGroupData.forEach(group -> {
GridAttributesResultDTO attr = gridMap.get(group.getGridId());
if (null != attr) {
@ -141,14 +148,15 @@ public class GroupExtractServiceImpl implements GroupExtractService {
}
});
}
factOriginGroupMainDailyService.insertExtractedData(
count <= NumConstant.ZERO ? true : false,
param.getCustomerId(),
param.getDateId(),
originGroupData,
memberList
memberList,
missingGroups
);

15
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/impl/ProjectExtractServiceImpl.java

@ -16,7 +16,6 @@ import com.epmet.dto.issue.IssueDTO;
import com.epmet.dto.party.PartyMemberDTO;
import com.epmet.dto.project.FinishOrgDTO;
import com.epmet.dto.project.ProcessInfoDTO;
import com.epmet.dto.project.ProjectOrgRelationDTO;
import com.epmet.dto.project.result.ProjectOrgPeriodResultDTO;
import com.epmet.dto.result.WorkDayResultDTO;
import com.epmet.dto.topic.ResiTopicDTO;
@ -42,8 +41,10 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collector;
import java.util.ArrayList;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
import java.util.stream.Collectors;
/**
@ -123,6 +124,7 @@ public class ProjectExtractServiceImpl implements ProjectExtractService {
}
//获取项目信息
List<ProjectDTO> projectList = projectService.getProjectInfo(customerId, dateString);
factOriginProjectMainDailyService.deleteByDate(customerId, dateString);
if (!CollectionUtils.isEmpty(projectList)) {
//提取议题ID
List<String> issueIds = projectList.stream().map(ProjectDTO::getOriginId).collect(Collectors.toList());
@ -193,7 +195,6 @@ public class ProjectExtractServiceImpl implements ProjectExtractService {
}));
//插入数据
if (!list.isEmpty()) {
factOriginProjectMainDailyService.deleteByDate(customerId, dateString);
factOriginProjectMainDailyService.insertBatch(list);
}
}
@ -368,8 +369,8 @@ public class ProjectExtractServiceImpl implements ProjectExtractService {
path =path.substring(NumConstant.ZERO,path.length() - NumConstant.ONE);
}
entity.setPids(path);
}else{
log.warn("【data-statistical】业务数据抽取模块,ProjectExtractServiceImpl.saveOriginProjectDaily:查询出的项目节点发起人所属的orgIdPath不正确,agencyId->{},orgIdPath->{}",process.getAgencyId(),process.getPids());
} else {
log.warn("【data-statistical】业务数据抽取模块,ProjectExtractServiceImpl.saveOriginProjectDaily:查询出的项目节点发起人所属的orgIdPath不正确,agencyId->{},orgIdPath->{}", process.getAgencyId(), process.getPids());
entity.setPid(NumConstant.ZERO_STR);
entity.setPids("");
}
@ -378,8 +379,8 @@ public class ProjectExtractServiceImpl implements ProjectExtractService {
return entity;
}).collect(Collectors.toList()));
factOriginProjectLogDailyService.deleteByDate(customerId, dateString);
if (!logList.isEmpty()) {
factOriginProjectLogDailyService.deleteByDate(customerId, dateString);
factOriginProjectLogDailyService.insertBatch(logList);
}

14
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/toscreen/impl/PublicPartExtractServiceImpl.java

@ -112,14 +112,18 @@ public class PublicPartExtractServiceImpl implements PublicPartExtractService {
return;
}
Map<String, GridUserCountResultDTO> userCountMap = userCountList.stream().collect(Collectors.toMap(GridUserCountResultDTO::getOrgId, o -> o));
issueTotal.forEach(issue -> {
for (FactIssueGridMonthlyEntity issue : issueTotal) {
String gridId = issue.getGridId();
ScreenUserJoinEntity entity = insertMap.get(gridId);
if (entity == null) {
log.warn("gridId:{} is not exist in dimGrid,monthId:{},gridId:{}", formDTO.getCustomerId(), formDTO.getMonthId(), gridId);
continue;
}
entity.setJoinTotal(issue.getIssueIncr());
GridUserCountResultDTO user = userCountMap.get(gridId);
if (user == null) {
log.warn("gridId:{} is not exist in issue,customerId:{},monthId:{},gridId:{}", JSON.toJSONString(issue), formDTO.getCustomerId(), formDTO.getMonthId(), gridId);
return;
continue;
}
//百人人均议题:统计周期内总的议题数/(注册用户数/100)
log.debug("issue:{}", JSON.toJSONString(issue));
@ -129,7 +133,7 @@ public class PublicPartExtractServiceImpl implements PublicPartExtractService {
.divide(new BigDecimal(NumConstant.ONE_HUNDRED)), 4, BigDecimal.ROUND_HALF_UP);
entity.setAvgIssue(avgIssueCount);
}
});
}
//获取该月 表决的人数
@ -153,6 +157,10 @@ public class PublicPartExtractServiceImpl implements PublicPartExtractService {
for (Map.Entry<String, List<IssueVoteUserCountResultDTO>> entry : voteMap.entrySet()) {
String gridId = entry.getKey();
ScreenUserJoinEntity entity = insertMap.get(gridId);
if (entity == null) {
log.warn("gridId:{} is not exist in dimGrid,monthId:{},gridId:{}", formDTO.getCustomerId(), formDTO.getMonthId(), gridId);
continue;
}
List<IssueVoteUserCountResultDTO> issueList = entry.getValue();
BigDecimal bigDecimal = new BigDecimal(0);
BigDecimal votedByIssueCount = new BigDecimal(issueList.get(0).getIssueCount());

2
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/toscreen/impl/ScreenExtractServiceImpl.java

@ -243,7 +243,7 @@ public class ScreenExtractServiceImpl implements ScreenExtractService {
param.setDateId(monthId);
screenGrassrootsGovernDataAbsorptionService.userScoreDataHub(param);
}catch(Exception e){
log.error("大屏热心市民/党员得分数据写入失败,参数为:{}",JSON.toJSONString(formDTO));
log.error("大屏热心市民/党员得分数据写入失败,参数为:{}" + JSON.toJSONString(formDTO), e);
}
//此方法保持在最后即可 计算指标分数 todo 优化 手动创建线程池 控制任务数量
ExecutorService pool = Executors.newSingleThreadExecutor();

73
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/toscreen/impl/ScreenGrassrootsGovernDataAbsorptionServiceImpl.java

@ -1,9 +1,11 @@
package com.epmet.service.evaluationindex.extract.toscreen.impl;
import com.alibaba.fastjson.JSON;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.constant.StrConstant;
import com.epmet.commons.tools.utils.DateUtils;
import com.epmet.dto.org.GridInfoDTO;
import com.epmet.dto.project.result.ProjectLatestOperationResultDTO;
import com.epmet.dto.screen.form.ProjectSourceMapFormDTO;
import com.epmet.dto.screen.form.ScreenCentralZoneDataFormDTO;
import com.epmet.entity.evaluationindex.screen.ScreenDifficultyDataEntity;
@ -21,16 +23,13 @@ import com.epmet.service.project.ProjectService;
import com.epmet.service.topic.TopicService;
import com.epmet.service.user.UserService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
@ -79,8 +78,7 @@ public class ScreenGrassrootsGovernDataAbsorptionServiceImpl implements ScreenGr
//2.查询出客户下网格的相关信息
List<GridInfoDTO> gridList = customerGridService.queryGridInfoList(param.getCustomerId());
Map<String,GridInfoDTO> gridMap = new HashMap<>();
gridList.forEach(grid -> {gridMap.put(grid.getGridId(),grid);});
Map<String,GridInfoDTO> gridMap = gridList.stream().collect(Collectors.toMap(GridInfoDTO :: getGridId,a -> a,(o, n) -> o));
//3.查询出客户下用户的累计积分(累计值,没有时间概念,否则需要查询积分明细计算出评价周期末的得分)
Map<String,Integer> pointMap = userPointService.getUserPointMap(param.getCustomerId());
@ -91,16 +89,22 @@ public class ScreenGrassrootsGovernDataAbsorptionServiceImpl implements ScreenGr
dateId = DateUtils.getBeforeNMonth(NumConstant.ONE);
}else{
String dateType = DateUtils.identifyTimeDimension(dateId);
if(StringUtils.isEmpty(dateType) || !org.apache.commons.lang3.StringUtils.equalsAny(dateType,"date","month")){
if (StringUtils.isEmpty(dateType) || !StringUtils.equalsAny(dateType, "date", "month")) {
dateId = DateUtils.getBeforeNMonth(NumConstant.ONE);
}else if(org.apache.commons.lang3.StringUtils.equals(dateType,"date")){
dateId = dateId.substring(NumConstant.ZERO,dateId.length() - NumConstant.TWO);
} else if (StringUtils.equals(dateType, "date")) {
dateId = dateId.substring(NumConstant.ZERO, dateId.length() - NumConstant.TWO);
}
}
final String finalDateId = dateId;
Map<String, BigDecimal> scoreMap = cpcIndexCalculateService.getCpcScore(param.getCustomerId(),dateId);
//剔除垃圾数据
for(Iterator<ScreenPartyUserRankDataEntity> iter = registeredUsers.iterator();
iter.hasNext();){
if(null == gridMap.get(iter.next().getGridId())) iter.remove();
}
//5.整合数据
if(!CollectionUtils.isEmpty(registeredUsers)){
registeredUsers.forEach(user -> {
@ -125,7 +129,19 @@ public class ScreenGrassrootsGovernDataAbsorptionServiceImpl implements ScreenGr
//6.存入数据库
//不按照时间删除,每次插入之前将该客户下的所有历史数据清空
screenPartyUserRankDataService.dataClean(registeredUsers,param.getCustomerId());
//过滤 统计维度中没有的数据
Set<String> gridIdSet = new HashSet<>();
List<ScreenPartyUserRankDataEntity> newInsertList = registeredUsers.stream()
.filter(o -> {
if (StringUtils.isBlank(o.getGridName())) {
gridIdSet.add(o.getGridId());
return false;
} else {
return true;
}
}).collect(Collectors.toList());
log.warn("userScoreDataHub grids:{} not in DimGrid", JSON.toJSONString(gridIdSet));
screenPartyUserRankDataService.dataClean(newInsertList, param.getCustomerId());
}
/**
@ -144,13 +160,26 @@ public class ScreenGrassrootsGovernDataAbsorptionServiceImpl implements ScreenGr
//查询数据
List<ScreenDifficultyDataEntity> difficulties = factOriginProjectMainDailyService.getDifficultyBaseInfo(param.getCustomerId(),projectService.getOvertimeProjectByParameter(param.getCustomerId(),existed));
if(CollectionUtils.isEmpty(difficulties)) return;
//剔除垃圾数据
//2.查询出客户下网格的相关信息
List<GridInfoDTO> gridList = customerGridService.queryGridInfoList(param.getCustomerId());
Map<String,GridInfoDTO> gridMap = gridList.stream().collect(Collectors.toMap(GridInfoDTO :: getGridId,a -> a,(o, n) -> o));
List<String> missing = new LinkedList<>();
for(Iterator<ScreenDifficultyDataEntity> iter = difficulties.iterator(); iter.hasNext();){
ScreenDifficultyDataEntity pointer = iter.next();
if(null == gridMap.get(pointer.getOrgId())){
missing.add(pointer.getEventId());
iter.remove();
}
}
List<String> projectIds = difficulties.stream().map(ScreenDifficultyDataEntity :: getEventId).distinct().collect(Collectors.toList());
//最近一次操作
Map<String,String> latestOperationMap = projectProcessService.getLatestOperation(projectIds,param.getCustomerId());
//标题
Map<String,String> titleMap = projectProcessService.getProjectTitle(projectIds,param.getCustomerId());
Map<String, ProjectLatestOperationResultDTO> latestOperationMap = projectProcessService.getLatestOperation(projectIds,param.getCustomerId());
boolean isOperationNull = CollectionUtils.isEmpty(latestOperationMap) ? true : false;
boolean isTitleNull = CollectionUtils.isEmpty(titleMap) ? true : false;
//图片
List<ProjectSourceMapFormDTO> projectSourceMap = factOriginProjectMainDailyService.getNewProject(param.getCustomerId(),projectIds);
@ -168,16 +197,20 @@ public class ScreenGrassrootsGovernDataAbsorptionServiceImpl implements ScreenGr
diff.setEventContent(contentMap.get(diff.getEventId()));
}
if(!isOperationNull){
diff.setLatestOperateDesc(latestOperationMap.get(diff.getEventId()));
}
if(!isTitleNull){
diff.setEventTitle(titleMap.get(diff.getEventId()));
ProjectLatestOperationResultDTO oper = latestOperationMap.get(diff.getEventId());
if(null != oper){
diff.setLatestOperateDesc(oper.getOperationName());
diff.setEventTitle(oper.getTitle());
diff.setEventCostTime(oper.getCostTime());
}
}
diff.setDataEndTime(DateUtils.getBeforeNDay(NumConstant.ONE));
});
List<ScreenDifficultyImgDataEntity> imgList = new LinkedList<>();
imgMap.values().forEach(list -> {imgList.addAll(list);});
screenDifficultyDataService.dataClean(param.getCustomerId(),difficulties,imgList);
screenDifficultyDataService.dataClean(param.getCustomerId(),difficulties,imgList,missing);
}
}

2
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/ScreenDifficultyDataService.java

@ -49,6 +49,6 @@ public interface ScreenDifficultyDataService extends BaseService<ScreenDifficult
* @author wangc
* @date 2020.09.28 11:04
*/
void dataClean(String customerId,List<ScreenDifficultyDataEntity> difficulties, List<ScreenDifficultyImgDataEntity> imgs);
void dataClean(String customerId,List<ScreenDifficultyDataEntity> difficulties, List<ScreenDifficultyImgDataEntity> imgs,List<String> missing);
}

7
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/impl/ScreenDifficultyDataServiceImpl.java

@ -53,7 +53,11 @@ public class ScreenDifficultyDataServiceImpl extends BaseServiceImpl<ScreenDiffi
@Override
@Transactional(rollbackFor = Exception.class)
public void dataClean(String customerId, List<ScreenDifficultyDataEntity> difficulties, List<ScreenDifficultyImgDataEntity> imgs) {
public void dataClean(String customerId, List<ScreenDifficultyDataEntity> difficulties, List<ScreenDifficultyImgDataEntity> imgs,List<String> missing) {
if(!CollectionUtils.isEmpty(missing)){
baseDao.deleteBatchDifficulty(customerId, missing);
baseDao.deleteBatchDifficultyImg(missing);
}
if (!CollectionUtils.isEmpty(difficulties)) {
baseDao.deleteBatchDifficulty(customerId, difficulties.stream().map(ScreenDifficultyDataEntity::getEventId).distinct().collect(Collectors.toList()));
baseDao.insertBatch(difficulties);
@ -62,7 +66,6 @@ public class ScreenDifficultyDataServiceImpl extends BaseServiceImpl<ScreenDiffi
baseDao.deleteBatchDifficultyImg(imgs.stream().map(ScreenDifficultyImgDataEntity::getEventId).distinct().collect(Collectors.toList()));
baseDao.insertBatchImg(imgs);
}
baseDao.updateTime(customerId, DateUtils.getBeforeNDay(NumConstant.ONE));
}
}

15
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/project/ProjectProcessService.java

@ -120,20 +120,9 @@ public interface ProjectProcessService extends BaseService<ProjectProcessEntity>
* @Description 获得项目最新操作
* @param list
* @param customerId
* @return java.util.Map<java.lang.String,java.lang.String>
* @return
* @author wangc
* @date 2020.09.28 14:44
*/
Map<String,String> getLatestOperation(List<String> list, String customerId);
/**
* @Description 获取项目标题
* @param list
* @param customerId
* @return java.util.Map<java.lang.String,java.lang.String>
* @author wangc
* @date 2020.10.27 14:34
*/
Map<String,String> getProjectTitle(List<String>list ,String customerId);
Map<String,ProjectLatestOperationResultDTO> getLatestOperation(List<String> list, String customerId);
}

25
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/project/impl/ProjectProcessServiceImpl.java

@ -117,36 +117,17 @@ public class ProjectProcessServiceImpl extends BaseServiceImpl<ProjectProcessDao
* @Description 获得项目最新操作
* @param list
* @param customerId
* @return java.util.Map<java.lang.String,java.lang.String>
* @return
* @author wangc
* @date 2020.09.28 14:44
*/
@Override
public Map<String, String> getLatestOperation(List<String> list, String customerId) {
public Map<String, ProjectLatestOperationResultDTO> getLatestOperation(List<String> list, String customerId) {
List<ProjectLatestOperationResultDTO> operations = baseDao.selectLatestOperation(list,customerId);
if(CollectionUtils.isEmpty(operations)){
return Collections.EMPTY_MAP;
}else{
return operations.stream().collect(Collectors.toMap(ProjectLatestOperationResultDTO :: getProjectId,ProjectLatestOperationResultDTO :: getOperationName));
return operations.stream().collect(Collectors.toMap(ProjectLatestOperationResultDTO :: getProjectId,o->o,(a,n)-> a));
}
}
/**
* @Description 获取项目标题
* @param list
* @param customerId
* @return java.util.Map<java.lang.String,java.lang.String>
* @author wangc
* @date 2020.10.27 14:34
*/
@Override
public Map<String, String> getProjectTitle(List<String> list, String customerId) {
List<ProjectLatestOperationResultDTO> titles = baseDao.selectProjectTitle(list,customerId);
if(CollectionUtils.isEmpty(titles)){
return Collections.EMPTY_MAP;
}else{
return titles.stream().collect(Collectors.toMap(ProjectLatestOperationResultDTO :: getProjectId,ProjectLatestOperationResultDTO :: getOperationName));
}
}
}

21
epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/extract/FactOriginGroupMainDailyDao.xml

@ -64,6 +64,17 @@
</if>
</delete>
<!-- 删除指定组Id的成员 -->
<delete id="deleteMemberByGroupList">
DELETE FROM
fact_origin_group_member_daily
WHERE
CUSTOMER_ID = #{customerId}
<foreach collection="groups" item="groupId" open="AND (" separator=" OR " close=" )" >
GROUP_ID = #{groupId}
</foreach>
</delete>
<delete id="deleteBatchByGroupId" parameterType="java.util.List">
DELETE FROM
fact_origin_group_main_daily
@ -74,6 +85,16 @@
</foreach>
</where>
</delete>
<delete id="deleteSpecifiedDateData">
DELETE FROM
fact_origin_group_main_daily
<where>
CUSTOMER_ID = #{customerId}
AND
DATE_ID =
</where>
</delete>
<update id="updatePartyFlag" parameterType="java.util.List">
UPDATE fact_origin_group_main_daily

22
epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/extract/FactOriginProjectMainDailyDao.xml

@ -331,7 +331,7 @@
( project.PROJECT_STATUS = 'pending', '处理中', '已结案' ) AS eventStatusDesc,
IFNULL(relation.reOrg,0) AS eventReOrg,
IFNULL(handleCount.HandledCount,0) AS eventHandledCount,
IFNULL(costTime.costTime,0) AS eventCostTime ,
gridInfo.allParentIds
FROM
fact_origin_project_main_daily project
@ -382,26 +382,6 @@
GROUP BY
PROJECT_ID
) handleCount ON project.ID = handleCount.PROJECT_ID
LEFT JOIN (
SELECT
main.ID AS PROJECT_ID,
TIMESTAMPDIFF(
MINUTE,
str_to_date( main.DATE_ID, '%Y%m%d' ),
IF
( main.IS_RESOLVED = 'resolved', time.HANDLED_DATE, NOW( ) )
) AS costTime
FROM
fact_origin_project_main_daily main
LEFT JOIN fact_origin_project_org_period_daily time ON main.ID = time.PROJECT_ID
AND time.DEL_FLAG = '0'
AND time.OPERATION = 'close'
WHERE
main.DEL_FLAG = '0'
AND main.CUSTOMER_ID = #{customerId}
GROUP BY
main.ID
) costTime ON project.ID = costTime.PROJECT_ID
WHERE
project.DEL_FLAG = '0'
AND project.CUSTOMER_ID = #{customerId}

22
epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/project/ProjectProcessDao.xml

@ -268,9 +268,11 @@
<select id="selectLatestOperation" resultType="com.epmet.dto.project.result.ProjectLatestOperationResultDTO">
SELECT
process.PROJECT_ID,
process.OPERATION_NAME
process.OPERATION_NAME,
project.TITLE,
CASE WHEN project.status = 'pending' THEN TIMESTAMPDIFF(MINUTE,project.created_time,NOW()) ELSE TIMESTAMPDIFF(MINUTE,project.created_time,project.UPDATED_TIME) END AS costTime
FROM
project_process process
project_process process LEFT JOIN project ON process.PROJECT_ID = project.ID AND project.DEL_FLAG = '0'
WHERE
process.DEL_FLAG = '0'
AND process.CUSTOMER_ID = #{customerId}
@ -307,20 +309,4 @@
</if>
</select>
<!-- 查找项目标题 -->
<select id="selectProjectTitle" resultType="com.epmet.dto.project.result.ProjectLatestOperationResultDTO">
SELECT
ID AS projectId,
TITLE AS operationName
FROM
project
WHERE
DEL_FLAG = '0'
AND CUSTOMER_ID = #{customerId}
<if test="null != list and list.size() > 0">
<foreach collection="list" item="projectId" open="AND (" separator=" OR " close=" )">
ID = #{projectId}
</foreach>
</if>
</select>
</mapper>

5
epmet-module/epmet-oss/epmet-oss-client/src/main/java/com/epmet/feign/OssFeignClient.java

@ -30,6 +30,8 @@ import org.springframework.web.multipart.MultipartFile;
*/
@FeignClient(name = ServiceConstant.EPMET_OSS_SERVER, configuration = OssFeignClient.MultipartSupportConfig.class, fallback =
OssFeignClientFallback.class)
//@FeignClient(name = ServiceConstant.EPMET_OSS_SERVER, configuration = OssFeignClient.MultipartSupportConfig.class, fallback =
// OssFeignClientFallback.class)
public interface OssFeignClient {
/**
* 文件上传
@ -43,7 +45,8 @@ public interface OssFeignClient {
@PostMapping(value ="oss/file/uploadqrcode", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
Result<UploadImgResultDTO> uploadQrCode(@RequestPart(value = "file") MultipartFile file);
@Configuration
//@Configuration
class MultipartSupportConfig {
@Bean
public Encoder feignFormEncoder() {

19
epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/dto/AccessTokenDTO.java

@ -0,0 +1,19 @@
package com.epmet.dto;
import lombok.Data;
import java.io.Serializable;
/**
* @description:
* @author: liushaowen
* @date: 2020/11/17 10:07
*/
@Data
public class AccessTokenDTO implements Serializable {
private String resiToken;
private String workToken;
private String errMsg;
}

53
epmet-module/epmet-third/epmet-third-client/src/main/java/com/epmet/utils/ThirdUtils.java

@ -0,0 +1,53 @@
package com.epmet.utils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.epmet.commons.tools.enums.EnvEnum;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.utils.HttpClientManager;
import com.epmet.commons.tools.utils.Result;
import com.epmet.dto.AccessTokenDTO;
import com.epmet.dto.result.CustomerTokensResultDTO;
import org.apache.commons.lang3.StringUtils;
import java.util.HashMap;
import java.util.Map;
/**
* @description:
* @author: liushaowen
* @date: 2020/11/17 10:04
*/
public class ThirdUtils {
/**
* @Description 获取AccessToken公共方法
* @param customerId
* @return com.epmet.dto.AccessTokenDTO
* @Author liushaowen
* @Date 2020/11/17 10:09
*/
public static AccessTokenDTO getAccessToken(String customerId) {
EnvEnum envEnum = EnvEnum.getCurrentEnv();
AccessTokenDTO accessToken = new AccessTokenDTO();
String url = "https://epmet-cloud.elinkservice.cn/api/third/pacustomer/tokenlist";
JSONObject postData = new JSONObject();
postData.put("customerId", customerId);
String data = HttpClientManager.getInstance().sendPostByJSON(url, JSON.toJSONString(postData)).getData();
JSONObject toResult = JSON.parseObject(data);
Result mapToResult = ConvertUtils.mapToEntity(toResult, Result.class);
if (null != toResult.get("code")) {
mapToResult.setCode(((Integer) toResult.get("code")).intValue());
}
if (!mapToResult.success()) {
accessToken.setErrMsg( StringUtils.isBlank(mapToResult.getMsg()) ? mapToResult.getInternalMsg() : mapToResult.getMsg());
}
Object CustomerTokensResultDTO = mapToResult.getData();
JSONObject json = JSON.parseObject(CustomerTokensResultDTO.toString());
CustomerTokensResultDTO customerTokensResultDTO = ConvertUtils.mapToEntity(json, com.epmet.dto.result.CustomerTokensResultDTO.class);
accessToken.setResiToken(customerTokensResultDTO.getResiAuthorizerToken());
accessToken.setWorkToken(customerTokensResultDTO.getWorkAuthorizerToken());
return accessToken;
}
}

2
epmet-module/gov-issue/gov-issue-client/src/main/java/com/epmet/dto/form/IssueShiftedFromTopicFormDTO.java

@ -1,5 +1,6 @@
package com.epmet.dto.form;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import javax.validation.constraints.NotBlank;
@ -73,6 +74,7 @@ public class IssueShiftedFromTopicFormDTO implements Serializable {
/**
* 议题创建时间
* */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createdTime;
/**

2
epmet-module/oper-crm/oper-crm-server/src/main/java/com/epmet/feign/OperCustomizeFeignClient.java

@ -9,7 +9,7 @@ import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
//@FeignClient(name = ServiceConstant.OPER_CUSTOMIZE_SERVER, fallback = OperCustomizeFeignClientFallBack.class, url = "localhost:8089")
@FeignClient(name = ServiceConstant.OPER_CUSTOMIZE_SERVER, fallback = OperCustomizeFeignClientFallBack.class,url="localhost:8089")
@FeignClient(name = ServiceConstant.OPER_CUSTOMIZE_SERVER, fallback = OperCustomizeFeignClientFallBack.class)
public interface OperCustomizeFeignClient {
/**

16
epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/constant/GroupStateConstant.java

@ -41,4 +41,20 @@ public interface GroupStateConstant {
* 群已关闭 - closed
*/
String GROUP_CLOSED = "closed";
/**
* 邀请链接invited
*/
String GROUP_INVITED = "invited";
/**
* 扫码scancode
*/
String GROUP_SCANCODE = "scancode";
/**
* 进组审核open开启close关闭
*/
String AUDIT_SWITCH_OPEN = "open";
/**
* 进组审核open开启close关闭
*/
String AUDIT_SWITCH_CLOSED = "close";
}

5
epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/group/ResiGroupDTO.java

@ -74,6 +74,11 @@ Ps: 如果一个小组被拒绝,当前小组的状态将永久停留在“审
*/
private Date latestTopicPublishDate;
/**
* 进组审核open开启close关闭
*/
private String auditSwitch;
/**
* 删除标记 0未删除1已删除
*/

5
epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/group/result/GroupSummarizeResultDTO.java

@ -65,6 +65,10 @@ public class GroupSummarizeResultDTO implements Serializable {
*/
private String leaderFlag;
/**
* 进组审核open开启close关闭
*/
private String auditSwitch;
public GroupSummarizeResultDTO(){
this.setGroupId("");
this.setGroupHeadPhoto("");
@ -76,5 +80,6 @@ public class GroupSummarizeResultDTO implements Serializable {
this.setTotalApplyingMember(NumConstant.ZERO);
this.setTotalTopics(NumConstant.ZERO);
this.setLeaderFlag("");
this.setAuditSwitch("open");
}
}

5
epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/invitation/GroupInvitationDTO.java

@ -68,6 +68,11 @@ public class GroupInvitationDTO implements Serializable {
*/
private Date validEndTime;
/**
* 邀请链接invited;扫码scancode
*/
private String invitationType;
/**
* 删除标记 0未删除1已删除
*/

2
epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/member/GroupMemeberOperationDTO.java

@ -62,7 +62,7 @@ public class GroupMemeberOperationDTO implements Serializable {
private String operateStatus;
/**
* 入群方式受邀请入群 - invited 主动加入 - joincreated群主创建群自动进入群
* 入群方式受邀请入群 - invited 主动加入 - joincreated群主创建群自动进入群扫码入群 - scancode
*/
private String enterGroupType;

2
epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/member/ResiGroupMemberDTO.java

@ -54,7 +54,7 @@ public class ResiGroupMemberDTO implements Serializable {
private String groupLeaderFlag;
/**
* 入群方式受邀请入群 - invited 主动加入 - joincreated群主创建群自动进入群
* 入群方式受邀请入群 - invited 主动加入 - joincreated群主创建群自动进入群扫码入群 - scancode
*/
private String enterGroupType;

27
epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/member/form/EditAuditSwitchFormDTO.java

@ -0,0 +1,27 @@
package com.epmet.resi.group.dto.member.form;
import com.epmet.commons.tools.validator.group.CustomerClientShowGroup;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* 组长开启/关闭入群审核
*
* @author yinzuomei@elink-cn.com
* @date 2020/11/17 14:02
*/
@Data
public class EditAuditSwitchFormDTO implements Serializable {
private static final long serialVersionUID = -8185514609968752625L;
public interface AddUserShowGroup extends CustomerClientShowGroup {
}
@NotBlank(message = "小组id不能为空")
private String groupId;
/**
* 进组审核open开启close关闭
*/
@NotBlank(message = "请选择是否开启", groups = {EditAuditSwitchFormDTO.AddUserShowGroup.class})
private String auditSwitch;
}

20
epmet-module/resi-group/resi-group-server/pom.xml

@ -160,6 +160,11 @@
<spring.flyway.enabled>false</spring.flyway.enabled>
<openapi.scan.server.url>https://epmet-dev.elinkservice.cn/api/epmetscan/api</openapi.scan.server.url>
<!--线程池配置-->
<thread.pool.core-pool-size>5</thread.pool.core-pool-size>
<thread.pool.max-pool-size>8</thread.pool.max-pool-size>
<thread.pool.queue-capacity>10</thread.pool.queue-capacity>
<thread.pool.keep-alive>30</thread.pool.keep-alive>
</properties>
</profile>
<profile>
@ -193,6 +198,11 @@
<spring.flyway.enabled>false</spring.flyway.enabled>
<openapi.scan.server.url>https://epmet-dev.elinkservice.cn/api/epmetscan/api</openapi.scan.server.url>
<!--线程池配置-->
<thread.pool.core-pool-size>5</thread.pool.core-pool-size>
<thread.pool.max-pool-size>8</thread.pool.max-pool-size>
<thread.pool.queue-capacity>10</thread.pool.queue-capacity>
<thread.pool.keep-alive>30</thread.pool.keep-alive>
</properties>
</profile>
<profile>
@ -225,6 +235,11 @@
<nacos.ip/>
<spring.flyway.enabled>true</spring.flyway.enabled>
<openapi.scan.server.url>https://epmet-dev.elinkservice.cn/api/epmetscan/api</openapi.scan.server.url>
<!--线程池配置-->
<thread.pool.core-pool-size>5</thread.pool.core-pool-size>
<thread.pool.max-pool-size>8</thread.pool.max-pool-size>
<thread.pool.queue-capacity>10</thread.pool.queue-capacity>
<thread.pool.keep-alive>30</thread.pool.keep-alive>
</properties>
</profile>
<profile>
@ -254,6 +269,11 @@
<nacos.ip/>
<spring.flyway.enabled>true</spring.flyway.enabled>
<openapi.scan.server.url>https://epmet-open.elinkservice.cn/api/epmetscan/api</openapi.scan.server.url>
<!--线程池配置-->
<thread.pool.core-pool-size>5</thread.pool.core-pool-size>
<thread.pool.max-pool-size>8</thread.pool.max-pool-size>
<thread.pool.queue-capacity>10</thread.pool.queue-capacity>
<thread.pool.keep-alive>30</thread.pool.keep-alive>
</properties>
</profile>
</profiles>

49
epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/config/AsyncConfig.java

@ -0,0 +1,49 @@
package com.epmet.config;
import com.epmet.properties.ThreadProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.ThreadPoolExecutor;
/**
* 线程池配置类
*/
@Configuration
@EnableConfigurationProperties(ThreadProperties.class)
@EnableAsync
public class AsyncConfig {
@Autowired
private ThreadProperties threadProperties;
@Bean
public Executor executor() {
ThreadProperties.ThreadPoolProperties threadPoolProps = threadProperties.getThreadPool();
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(threadPoolProps.getCorePoolSize());
executor.setMaxPoolSize(threadPoolProps.getMaxPoolSize());
executor.setQueueCapacity(threadPoolProps.getQueueCapacity());
executor.setThreadNamePrefix("epmet-resi-group-");
// rejection-policy:当pool已经达到max size的时候,如何处理新任务
// CALLER_RUNS:不在新线程中执行任务,而是由调用者所在的线程来执行
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); //对拒绝task的处理策略
executor.setKeepAliveSeconds(threadPoolProps.getKeepAlive());
executor.initialize();
return executor;
}
@Bean
public ExecutorService executorService() {
ThreadPoolTaskExecutor executor = (ThreadPoolTaskExecutor) executor();
return executor.getThreadPoolExecutor();
}
}

2
epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/controller/ResiGroupCodeController.java

@ -89,7 +89,7 @@ public class ResiGroupCodeController {
@RequestMapping("creategroupcode")
public Result<String> createGroupCode(@RequestBody CreateGroupCodeFormDTO dto){
ValidatorUtils.validateEntity(dto);
return new Result<String>().ok(resiGroupCodeService.createGroupCode(dto));
return new Result<String>().ok(resiGroupCodeService.createGroupCode(dto, true));
}
@RequestMapping("getgroupcode")

21
epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/controller/ResiGroupController.java

@ -27,9 +27,13 @@ import com.epmet.modules.group.service.ResiGroupStatisticalService;
import com.epmet.resi.group.dto.group.GroupProcessingCountResultDTO;
import com.epmet.resi.group.dto.group.form.*;
import com.epmet.resi.group.dto.group.result.*;
import com.epmet.resi.group.dto.member.form.EditAuditSwitchFormDTO;
import com.epmet.resi.group.dto.member.form.ResiIdentityFormDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
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;
import java.util.List;
@ -103,7 +107,7 @@ public class ResiGroupController {
* @param modifyGroupFormDTO
* @return com.epmet.commons.tools.utils.Result
* @Author yinzuomei
* @Description 修改组信息
* @Description 修改组信息 此接口废弃
* @Date 2020/3/28 22:20
**/
@PostMapping("modifygroup")
@ -359,4 +363,17 @@ public class ResiGroupController {
resiGroupStatisticalService.updateWhenAuditedResiRole(resiIdentityFormDTO);
return new Result();
}
/**
* @param formDTO
* @author yinzuomei
* @description 组长开启/关闭入群审核
* @Date 2020/11/17 14:18
**/
@PostMapping("editauditswitch")
public Result editAuditSwitch(@RequestBody EditAuditSwitchFormDTO formDTO){
ValidatorUtils.validateEntity(formDTO,EditAuditSwitchFormDTO.AddUserShowGroup.class);
resiGroupService.editAuditSwitch(formDTO);
return new Result();
}
}

5
epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/entity/ResiGroupEntity.java

@ -74,4 +74,9 @@ Ps: 如果一个小组被拒绝,当前小组的状态将永久停留在“审
*/
private Date latestTopicPublishDate;
/**
* 进组审核open开启close关闭
*/
private String auditSwitch;
}

4
epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/service/ResiGroupCodeService.java

@ -101,12 +101,12 @@ public interface ResiGroupCodeService extends BaseService<ResiGroupCodeEntity> {
/**
* @Description 创建群组二维码
* @param dto
* @param dto,syncFlag(是否同步执行,true同步,false异步)
* @return String
* @Author liushaowen
* @Date 2020/11/13 16:32
*/
String createGroupCode(CreateGroupCodeFormDTO dto);
String createGroupCode(CreateGroupCodeFormDTO dto, boolean syncFlag);
/**
* @Description 获取群组二维码

11
epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/service/ResiGroupService.java

@ -27,6 +27,7 @@ import com.epmet.resi.group.dto.group.GroupProcessingCountResultDTO;
import com.epmet.resi.group.dto.group.ResiGroupDTO;
import com.epmet.resi.group.dto.group.form.*;
import com.epmet.resi.group.dto.group.result.*;
import com.epmet.resi.group.dto.member.form.EditAuditSwitchFormDTO;
import java.util.List;
import java.util.Map;
@ -134,6 +135,7 @@ public interface ResiGroupService extends BaseService<ResiGroupEntity> {
* @Description 修改组信息
* @Date 2020/3/28 22:27
**/
@Deprecated
void modifyGroup(ModifyGroupFormDTO modifyGroupFormDTO);
/**
@ -293,4 +295,13 @@ public interface ResiGroupService extends BaseService<ResiGroupEntity> {
* @return java.util.List<com.epmet.resi.group.dto.group.result.RecommendedListResultDTO>
*/
List<RecommendedListResultDTO> recommendedList(RecommendedListFormDTO formDTO);
/**
* @return void
* @param formDTO
* @author yinzuomei
* @description 组长开启/关闭入群审核
* @Date 2020/11/17 14:18
**/
void editAuditSwitch(EditAuditSwitchFormDTO formDTO);
}

153
epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/service/impl/ResiGroupCodeServiceImpl.java

@ -25,6 +25,7 @@ import com.epmet.commons.mybatis.service.impl.BaseServiceImpl;
import com.epmet.commons.tools.constant.FieldConstant;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.enums.EnvEnum;
import com.epmet.commons.tools.exception.ExceptionUtils;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.utils.ConvertUtils;
@ -40,6 +41,8 @@ import com.epmet.modules.group.dao.ResiGroupCodeDao;
import com.epmet.modules.group.entity.ResiGroupCodeEntity;
import com.epmet.modules.group.redis.ResiGroupCodeRedis;
import com.epmet.modules.group.service.ResiGroupCodeService;
import com.epmet.modules.group.service.ResiGroupService;
import com.epmet.modules.invitation.service.GroupInvitationService;
import com.epmet.modules.utils.ModuleConstant;
import com.epmet.resi.group.constant.GroupCodeConstant;
import com.epmet.resi.group.dto.QRCodeMultipartFileDTO;
@ -48,6 +51,9 @@ import com.epmet.resi.group.dto.group.form.CreateGroupCodeFormDTO;
import com.epmet.resi.group.dto.group.form.GetGroupCodeFormDTO;
import com.epmet.resi.group.dto.group.form.GroupCodeBasicInfoFormDTO;
import com.epmet.resi.group.dto.group.result.GroupCodeBasicInfoResultDTO;
import com.epmet.resi.group.dto.invitation.form.CreateGroupInvitationFormDTO;
import com.epmet.resi.group.dto.invitation.result.CreateGroupInvitationResultDTO;
import com.epmet.utils.ThirdUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -58,6 +64,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.io.UnsupportedEncodingException;
import java.util.*;
import java.util.concurrent.ExecutorService;
/**
* 小组二维码 小组唯一二维码海报码和小组码是同一个二维码长期有效的
@ -76,6 +83,15 @@ public class ResiGroupCodeServiceImpl extends BaseServiceImpl<ResiGroupCodeDao,
@Autowired
private OssFeignClient ossFeignClient;
@Autowired
private ExecutorService executorService;
@Autowired
private GroupInvitationService groupInvitationService;
@Autowired
private ResiGroupService resiGroupService;
@Override
public PageData<ResiGroupCodeDTO> page(Map<String, Object> params) {
IPage<ResiGroupCodeEntity> page = baseDao.selectPage(
@ -129,14 +145,68 @@ public class ResiGroupCodeServiceImpl extends BaseServiceImpl<ResiGroupCodeDao,
}
/**
* @param dto
* @return void
* @param dto, syncFlag(是否同步执行,true同步,false异步)
* @return String
* @Description 创建群组二维码
* @Author liushaowen
* @Date 2020/11/13 16:32
*/
@Override
public String createGroupCode(CreateGroupCodeFormDTO dto) {
public String createGroupCode(CreateGroupCodeFormDTO dto, boolean syncFlag) {
if (syncFlag){
return createCodeFunction(dto);
}else {
executorService.execute(()->{
try {
long startTs = System.currentTimeMillis();
createCodeFunction(dto);
long endTs = System.currentTimeMillis();
logger.info("异步创建群二维码成功,执行时长:{}", endTs - startTs);
} catch (Exception e) {
logger.error("异步创建群二维码失败,错误信息:{}", ExceptionUtils.getErrorStackTrace(e));
}
});
return "";
}
}
/**
* @param dto
* @return com.epmet.commons.tools.utils.Result<java.lang.String>
* @Description 获取群组二维码
* @Author liushaowen
* @Date 2020/11/16 9:37
*/
@Override
public Result<String> getGroupCode(GetGroupCodeFormDTO dto) {
ResiGroupCodeEntity codeByGroupId = getCode(dto.getGroupId(), dto.getType());
if (codeByGroupId != null) {
//数据库有数据
return new Result<String>().ok(codeByGroupId.getUrl());
} else {
//从微信获取二维码并存储
CreateGroupCodeFormDTO createDto = new CreateGroupCodeFormDTO();
BeanUtils.copyProperties(dto, createDto);
String url = createGroupCode(createDto, true);
if (StringUtils.isBlank(url)){
throw new RenException("获取二维码失败");
}
return new Result<String>().ok(url);
}
}
private ResiGroupCodeEntity getCode(String groupId, String type) {
if (StringUtils.isBlank(groupId) || StringUtils.isBlank(type)) {
throw new RenException("获取二维码失败,groupId或type为空");
}
QueryWrapper<ResiGroupCodeEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("DEL_FLAG", "0");
queryWrapper.eq("GROUP_ID", groupId);
queryWrapper.eq("TYPE", type);
return baseDao.selectOne(queryWrapper);
}
private String createCodeFunction(CreateGroupCodeFormDTO dto){
String result = "";
ResiGroupCodeEntity codeByGroupId = getCode(dto.getGroupId(), dto.getType());
if (codeByGroupId != null) {
@ -146,14 +216,21 @@ public class ResiGroupCodeServiceImpl extends BaseServiceImpl<ResiGroupCodeDao,
//向微信获取二维码
// 获取AccessToken
String accessToken = getAccessToken(dto.getCustomerId());
String accessToken = ThirdUtils.getAccessToken(dto.getCustomerId()).getResiToken();
if (StringUtils.isBlank(accessToken)) {
logger.error("获取accessToken失败,customerId:{}", dto.getCustomerId());
throw new RenException("获取accessToken失败");
}
//跳转的页面
StringBuilder path = new StringBuilder(ModuleConstant.CODE_INVITE_PAGE);
path.append("?groupId=").append(dto.getGroupId());
//获取invitationId
CreateGroupInvitationFormDTO invitationFormDTO = new CreateGroupInvitationFormDTO();
//获取群主userId
invitationFormDTO.setUserId(resiGroupService.get(dto.getGroupId()).getCreatedBy());
invitationFormDTO.setGroupId(dto.getGroupId());
CreateGroupInvitationResultDTO groupScanCodeInvitation = groupInvitationService.createGroupScanCodeInvitation(invitationFormDTO);
path.append("?invitationId=").append(groupScanCodeInvitation.getInvitationId());
//需要发送的Json
JSONObject data = new JSONObject();
data.put("path", path.toString());
@ -192,70 +269,6 @@ public class ResiGroupCodeServiceImpl extends BaseServiceImpl<ResiGroupCodeDao,
return result;
}
/**
* @param dto
* @return com.epmet.commons.tools.utils.Result<java.lang.String>
* @Description 获取群组二维码
* @Author liushaowen
* @Date 2020/11/16 9:37
*/
@Override
public Result<String> getGroupCode(GetGroupCodeFormDTO dto) {
ResiGroupCodeEntity codeByGroupId = getCode(dto.getGroupId(), dto.getType());
if (codeByGroupId != null) {
//数据库有数据
return new Result<String>().ok(codeByGroupId.getUrl());
} else {
//从微信获取二维码并存储
CreateGroupCodeFormDTO createDto = new CreateGroupCodeFormDTO();
BeanUtils.copyProperties(dto, createDto);
String url = createGroupCode(createDto);
if (StringUtils.isBlank(url)){
throw new RenException("获取二维码失败");
}
return new Result<String>().ok(url);
}
}
private ResiGroupCodeEntity getCode(String groupId, String type) {
if (StringUtils.isBlank(groupId) || StringUtils.isBlank(type)) {
throw new RenException("获取二维码失败,groupId或type为空");
}
QueryWrapper<ResiGroupCodeEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("DEL_FLAG", "0");
queryWrapper.eq("GROUP_ID", groupId);
queryWrapper.eq("TYPE", type);
return baseDao.selectOne(queryWrapper);
}
//获取AccessToken
private String getAccessToken(String customerId) {
EnvEnum envEnum = EnvEnum.getCurrentEnv();
String resiAccessToken = null;
if (EnvEnum.PROD.getCode().equals(envEnum.getCode())) {
//居民端
StringBuilder resiKey = new StringBuilder(customerId).append(":resi");
Map<String, Object> authorizerRefreshToken = new HashMap<>();
authorizerRefreshToken = resiGroupCodeRedis.getAuthorizerRefreshToken(resiKey.toString());
resiAccessToken = (String) authorizerRefreshToken.get("authorizerAccessToken");
} else {
String url = "https://epmet-cloud.elinkservice.cn/api/third/pacustomer/tokenlist";
JSONObject postData = new JSONObject();
postData.put("customerId", customerId);
String data = HttpClientManager.getInstance().sendPostByJSON(url, JSON.toJSONString(postData)).getData();
JSONObject toResult = JSON.parseObject(data);
Result mapToResult = ConvertUtils.mapToEntity(toResult, Result.class);
if (null != toResult.get("code")) {
mapToResult.setCode(((Integer) toResult.get("code")).intValue());
}
Object CustomerTokensResultDTO = mapToResult.getData();
JSONObject json = JSON.parseObject(CustomerTokensResultDTO.toString());
CustomerTokensResultDTO customerTokensResultDTO = ConvertUtils.mapToEntity(json, com.epmet.dto.result.CustomerTokensResultDTO.class);
resiAccessToken = customerTokensResultDTO.getResiAuthorizerToken();
}
return resiAccessToken;
}
/**
* @param formDTO
* @Description 获取生成海报(小组码)信息
@ -272,7 +285,7 @@ public class ResiGroupCodeServiceImpl extends BaseServiceImpl<ResiGroupCodeDao,
if (null == resultDTO.getGroupCodeUrl() || "".equals(resultDTO.getGroupCodeUrl())) {
CreateGroupCodeFormDTO dto = ConvertUtils.sourceToTarget(formDTO, CreateGroupCodeFormDTO.class);
dto.setType(GroupCodeConstant.CODE_TYPE_INVITE);
String url = createGroupCode(dto);
String url = createGroupCode(dto, true);
if (StringUtils.isBlank(url)) {
logger.error(String.format("生成小组二维码失败,小组Id:%s", formDTO.getGroupId()));
throw new RenException("获取小组码基本信息失败");

24
epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/service/impl/ResiGroupServiceImpl.java

@ -28,6 +28,7 @@ import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.security.user.LoginUserUtil;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.utils.DateUtils;
import com.epmet.commons.tools.utils.Result;
@ -65,6 +66,7 @@ import com.epmet.resi.group.dto.group.result.*;
import com.epmet.resi.group.dto.member.GroupMemeberOperationDTO;
import com.epmet.resi.group.dto.member.ResiGroupMemberDTO;
import com.epmet.resi.group.dto.member.ResiGroupMemberInfoRedisDTO;
import com.epmet.resi.group.dto.member.form.EditAuditSwitchFormDTO;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -127,6 +129,8 @@ public class ResiGroupServiceImpl extends BaseServiceImpl<ResiGroupDao, ResiGrou
@Autowired
private ResiGroupCodeService resiGroupCodeService;
@Autowired
private LoginUserUtil loginUserUtil;
@Override
public PageData<ResiGroupDTO> page(Map<String, Object> params) {
@ -529,7 +533,7 @@ public class ResiGroupServiceImpl extends BaseServiceImpl<ResiGroupDao, ResiGrou
dto.setGridId(resiGroupDTO.getGridId());
dto.setGroupId(resiGroupDTO.getId());
dto.setType(GroupCodeConstant.CODE_TYPE_INVITE);
resiGroupCodeService.createGroupCode(dto);
resiGroupCodeService.createGroupCode(dto ,false);
} catch (Exception e) {
logger.error(String.format("小组审核通过,生成小组二维码失败", e.getMessage()));
}
@ -967,6 +971,24 @@ public class ResiGroupServiceImpl extends BaseServiceImpl<ResiGroupDao, ResiGrou
return recommendGroupList;
}
/**
* @param formDTO
* @return void
* @author yinzuomei
* @description 组长开启/关闭入群审核
* @Date 2020/11/17 14:18
**/
@Override
public void editAuditSwitch(EditAuditSwitchFormDTO formDTO) {
ResiGroupEntity resiGroupEntity=baseDao.selectById(formDTO.getGroupId());
String currentUserId=loginUserUtil.getLoginUserId();
if(!currentUserId.equals(resiGroupEntity.getCreatedBy())){
throw new RenException(EpmetErrorCode.GROUP_LEADER_CAN_EDIT_GROUP_INFO.getCode());
}
resiGroupEntity.setAuditSwitch(formDTO.getAuditSwitch());
baseDao.updateById(resiGroupEntity);
}
/**
* @Description 给加入此网格的网格长发送消息
* @param msg

5
epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/invitation/entity/GroupInvitationEntity.java

@ -68,4 +68,9 @@ public class GroupInvitationEntity extends BaseEpmetEntity {
*/
private Date validEndTime;
/**
* 邀请链接invited;扫码scancode
*/
private String invitationType;
}

11
epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/invitation/service/GroupInvitationService.java

@ -103,11 +103,20 @@ public interface GroupInvitationService extends BaseService<GroupInvitationEntit
* @return com.epmet.commons.tools.utils.Result<com.epmet.resi.group.dto.invitation.result.CreateGroupInvitationResultDTO>
* @param formDTO
* @Author yinzuomei
* @Description 生成邀请连接
* @Description 生成邀请连接-链接
* @Date 2020/3/31 22:50
**/
CreateGroupInvitationResultDTO createGroupInvitation(CreateGroupInvitationFormDTO formDTO);
/**
* @return com.epmet.commons.tools.utils.Result<com.epmet.resi.group.dto.invitation.result.CreateGroupInvitationResultDTO>
* @param formDTO
* @Author liushaowen
* @Description 生成邀请连接-扫码
* @Date 2020-11-17 13:58
**/
CreateGroupInvitationResultDTO createGroupScanCodeInvitation(CreateGroupInvitationFormDTO formDTO);
/**
* @return com.epmet.commons.tools.utils.Result<com.epmet.resi.group.dto.invitation.result.LinkGroupInfoResultDTO>
* @param formDTO

63
epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/invitation/service/impl/GroupInvitationServiceImpl.java

@ -45,6 +45,7 @@ import com.epmet.modules.invitation.service.GroupInvitationService;
import com.epmet.modules.member.dao.ResiGroupMemberDao;
import com.epmet.modules.member.service.GroupMemeberOperationService;
import com.epmet.modules.member.service.ResiGroupMemberService;
import com.epmet.modules.member.service.impl.ResiGroupMemberServiceImpl;
import com.epmet.resi.group.constant.EnterGroupTypeConstant;
import com.epmet.resi.group.constant.GroupStateConstant;
import com.epmet.resi.group.constant.LeaderFlagConstant;
@ -102,6 +103,8 @@ public class GroupInvitationServiceImpl extends BaseServiceImpl<GroupInvitationD
private ResiGuideFeignClient resiGuideFeignClient;
@Autowired
private ResiGroupRedis resiGroupRedis;
@Autowired
private ResiGroupMemberServiceImpl resiGroupMemberServiceImpl;
@Override
public PageData<GroupInvitationDTO> page(Map<String, Object> params) {
@ -181,6 +184,41 @@ public class GroupInvitationServiceImpl extends BaseServiceImpl<GroupInvitationD
calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + NumConstant.FOURTEEN);
groupInvitationEntity.setValidEndTime(calendar.getTime());
groupInvitationEntity.setResiGroupId(formDTO.getGroupId());
groupInvitationEntity.setInvitationType(GroupStateConstant.GROUP_INVITED);
insert(groupInvitationEntity);
CreateGroupInvitationResultDTO resultDTO = new CreateGroupInvitationResultDTO();
resultDTO.setInvitationId(groupInvitationEntity.getId());
return resultDTO;
}
/**
* @param formDTO
* @return com.epmet.commons.tools.utils.Result<com.epmet.resi.group.dto.invitation.result.CreateGroupInvitationResultDTO>
* @Author liushaowen
* @Description 生成邀请连接-扫码
* @Date 2020-11-17 13:58
**/
@Override
public CreateGroupInvitationResultDTO createGroupScanCodeInvitation(CreateGroupInvitationFormDTO formDTO) {
//1、只有群主可以邀请新成员(这块界面限制死了,只有群主才能看到邀请新成员按钮)
//2、审核通过(讨论中)的群才可以分享邀请连接
ResiGroupDTO resiGroupDTO = resiGroupService.get(formDTO.getGroupId());
if (!GroupStateConstant.GROUP_APPROVED.equals(resiGroupDTO.getState())) {
logger.error(String.format("生成群成员链接失败,原因:%s",EpmetErrorCode.INVITE_NEW_MEMBER.getMsg()));
throw new RenException(EpmetErrorCode.INVITE_NEW_MEMBER.getCode());
}
//3、插入一条邀请记录
GroupInvitationEntity groupInvitationEntity = new GroupInvitationEntity();
groupInvitationEntity.setInviterUserId(formDTO.getUserId());
groupInvitationEntity.setInviterCustomerId(resiGroupDTO.getCustomerId());
groupInvitationEntity.setInviterGridId(resiGroupDTO.getGridId());
//添加类型字段 scancode
groupInvitationEntity.setInvitationType(GroupStateConstant.GROUP_SCANCODE);
//暂定50年有效期
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, calendar.get(Calendar.YEAR) + NumConstant.FIFTY);
groupInvitationEntity.setValidEndTime(calendar.getTime());
groupInvitationEntity.setResiGroupId(formDTO.getGroupId());
insert(groupInvitationEntity);
CreateGroupInvitationResultDTO resultDTO = new CreateGroupInvitationResultDTO();
resultDTO.setInvitationId(groupInvitationEntity.getId());
@ -343,14 +381,29 @@ public class GroupInvitationServiceImpl extends BaseServiceImpl<GroupInvitationD
logger.error(String.format("用户同意邀请进组失败,返回角色列表为空错误编码%s,错误提示%s",EpmetErrorCode.CANNOT_JOIN_GROUP.getCode(),EpmetErrorCode.CANNOT_JOIN_GROUP.getMsg()));
throw new RenException(EpmetErrorCode.CANNOT_JOIN_GROUP.getCode());
}
//2020.11.17 sun 新增扫描或邀请进组是否需要审核的逻辑 start
GroupMemeberOperationDTO operation = new GroupMemeberOperationDTO();
operation.setGroupId(resiGroupDTO.getId());
operation.setCustomerUserId(formDTO.getUserId());
operation.setEnterGroupType(groupInvitationDTO.getInvitationType());
operation.setGroupInvitationId(formDTO.getInvitationId());
operation.setOperateUserId(formDTO.getUserId());
operation.setOperateStatus(MemberStateConstant.UNDER_AUDITTING);
operation.setOperateDes("通过扫码加入小组。");
//入组审核开关是开启状态则需要组长审核
if(GroupStateConstant.AUDIT_SWITCH_OPEN.equals(resiGroupDTO.getAuditSwitch())){
//新增一条入组申请
groupMemeberOperationService.accetInvitation(operation);
//给小组长推送站内信
resiGroupMemberServiceImpl.sendMessageToGroupLeader(resiGroupDTO, formDTO.getUserId());
return;
}
UserRoleDTO userRoleDTO=this.getUserRoleDTO(result.getData().getUserRoleList());
//5、新增一条邀请入群、直接审核通过的入群记录
GroupMemeberOperationDTO groupMemeberOperation = new GroupMemeberOperationDTO();
groupMemeberOperation.setGroupId(resiGroupDTO.getId());
groupMemeberOperation.setCustomerUserId(formDTO.getUserId());
GroupMemeberOperationDTO groupMemeberOperation = operation;
groupMemeberOperation.setOperateStatus(MemberStateConstant.APPROVED);
groupMemeberOperation.setEnterGroupType(EnterGroupTypeConstant.INVITED);
groupMemeberOperation.setOperateUserId(formDTO.getUserId());
groupMemeberOperation.setOperateDes("通过邀请链接加入小组。");
//2020.11.17 end
groupMemeberOperationService.accetInvitation(groupMemeberOperation);
//6、直接加入群成员关系表
//如果是之前被移除的,则修改resi_group_member记录

2
epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/member/entity/GroupMemeberOperationEntity.java

@ -62,7 +62,7 @@ Ps: 1) 入群被拒绝之后,如果再申请是插入一条新的审核中的
private String operateStatus;
/**
* 入群方式受邀请入群 - invited 主动加入 - join
* 入群方式受邀请入群 - invited 主动加入 - join扫码入群 - scancode
*/
private String enterGroupType;

2
epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/member/entity/ResiGroupMemberEntity.java

@ -54,7 +54,7 @@ public class ResiGroupMemberEntity extends BaseEpmetEntity {
private String groupLeaderFlag;
/**
* 入群方式受邀请入群 - invited 主动加入 - join
* 入群方式受邀请入群 - invited 主动加入 - join扫码入群 - scancode
*/
private String enterGroupType;

2
epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/member/service/impl/ResiGroupMemberServiceImpl.java

@ -242,7 +242,7 @@ public class ResiGroupMemberServiceImpl extends BaseServiceImpl<ResiGroupMemberD
}
//给组长发送消息,有人申请入群
private void sendMessageToGroupLeader(ResiGroupDTO resiGroupDTO, String currentUserId) {
public void sendMessageToGroupLeader(ResiGroupDTO resiGroupDTO, String currentUserId) {
try {
ResiGroupMemberDTO groupLeader = resiGroupDao.selectGroupLeader(resiGroupDTO.getId());
if (null == groupLeader) {

25
epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/properties/ThreadProperties.java

@ -0,0 +1,25 @@
package com.epmet.properties;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
/**
* 线程池属性类
*/
@ConfigurationProperties(prefix = "thread")
@Data
public class ThreadProperties {
private ThreadPoolProperties threadPool;
@Data
public static class ThreadPoolProperties {
private int corePoolSize;
private int maxPoolSize;
private int queueCapacity;
private int keepAlive;
public ThreadPoolProperties() {
}
}
}

10
epmet-module/resi-group/resi-group-server/src/main/resources/bootstrap.yml

@ -125,4 +125,12 @@ openapi:
url: @openapi.scan.server.url@
method:
imgSyncScan: /imgSyncScan
textSyncScan: /textSyncScan
textSyncScan: /textSyncScan
thread:
# 线程池配置
threadPool:
corePoolSize: @thread.pool.core-pool-size@
maxPoolSize: @thread.pool.max-pool-size@
queueCapacity: @thread.pool.queue-capacity@
keepAlive: @thread.pool.keep-alive@

9
epmet-module/resi-group/resi-group-server/src/main/resources/db/migration/V0.0.5__group_audit_switch.sql

@ -0,0 +1,9 @@
alter table resi_group add column AUDIT_SWITCH varchar(32) not null DEFAULT'open' COMMENT '进组审核open开启;close关闭';
alter table group_invitation add column INVITATION_TYPE VARCHAR(32) NOT NULL DEFAULT 'invited' comment '邀请链接:invited;扫码:scancode';
alter table group_memeber_operation MODIFY ENTER_GROUP_TYPE varchar(32) not null comment '入群方式:(受邀请入群 - invited;主动加入 - join;created创建群自动进入;scancode扫码入群)';
alter table resi_group_member modify ENTER_GROUP_TYPE varchar(32) not null comment '入群方式:(受邀请入群 - invited 、 主动加入 - join、created创建群自动进入、扫码入群-scancode)';

3
epmet-module/resi-group/resi-group-server/src/main/resources/mapper/group/ResiGroupDao.xml

@ -150,7 +150,8 @@
AND gmo.GROUP_ID = rg.id
AND gmo.OPERATE_STATUS = 'under_auditting'
) AS totalApplyingMember,
rgs.TOTAL_TOPICS
rgs.TOTAL_TOPICS,
rg.AUDIT_SWITCH
FROM
resi_group rg
LEFT JOIN resi_group_statistical rgs ON ( rg.id = rgs.RESI_GROUP_ID )

3
epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/CustomerStaffServiceImpl.java

@ -594,14 +594,15 @@ public class CustomerStaffServiceImpl extends BaseServiceImpl<CustomerStaffDao,
//查找工作人员信息
//最近一次登陆的而网格、人员信息、权限
ExtStaffInfoResultDTO result = baseDao.selectStaffInfoExt(staffParam.getStaffId());
result.setUserId(staffParam.getStaffId());
if(null != result) {
result.setUserId(staffParam.getStaffId());
Result<ExtStaffInfoResultDTO> govOrgResult =
govOrgOpenFeignClient.staffInfoExt(result);
if(govOrgResult.success() && null != govOrgResult.getData()){
return govOrgResult.getData();
}
}
log.warn("com.epmet.service.impl.CustomerStaffServiceImpl.extStaffInfo,根据传入的用户Id未找到对应的工作人员,传参:{}",JSON.toJSONString(staffParam));
return null;
}

Loading…
Cancel
Save